@@ -2,28 +2,36 @@ import { Plugin } from 'esbuild'
2
2
import * as fs from 'fs'
3
3
import * as pathjs from 'path'
4
4
import * as c from 'svelte/compiler'
5
- import { mkdirSync , readFileSync , writeFileSync } from 'fs'
5
+ import { readFileSync , writeFileSync } from 'fs'
6
6
import * as svelteInternal from 'svelte/internal'
7
7
import * as prettier from 'prettier'
8
8
9
9
const PACKAGE = JSON . parse ( fs . readFileSync ( './package.json' , 'utf-8' ) )
10
10
const PLUGIN_PACKAGE_PATH = './src/pluginPackage/'
11
11
const SVELTE_FILE = './src/pluginPackage/about.svelte'
12
12
const README_DIST_PATH = './dist/pluginPackage/about.md'
13
- const DIST_PATH = './dist/pluginPackage/'
13
+ const DIST_PATH = './dist/'
14
+ const DIST_PACKAGE_PATH = './dist/pluginPackage/'
14
15
const PLUGIN_REPO_PATH = 'D:/github-repos/snavesutit/blockbench-plugins/plugins/animated_java'
15
16
const PLUGIN_MANIFEST_PATH = 'D:/github-repos/snavesutit/blockbench-plugins/plugins.json'
17
+ const CHANGELOG_PATH = './src/pluginPackage/changelog.json'
18
+ const RELEASE_NOTES_TEMPLATES = './tools/plugins/releaseNoteTemplates/'
19
+
20
+ function replaceTemplateVars ( str : string , items : Record < string , string > ) {
21
+ return str . replace ( / \{ ( .+ ?) \} / g, str => items [ str . replace ( / [ \{ \} ] / g, '' ) ] || str )
22
+ }
16
23
17
24
function plugin ( ) : Plugin {
18
25
return {
19
26
name : 'packagerPlugin' ,
20
27
setup ( build ) {
21
28
build . onEnd ( ( ) => {
22
- fs . rmSync ( DIST_PATH , { recursive : true , force : true } )
23
- fs . cpSync ( PLUGIN_PACKAGE_PATH , DIST_PATH , { recursive : true } )
29
+ console . log ( '📦 Packaging...' )
30
+ fs . rmSync ( DIST_PACKAGE_PATH , { recursive : true , force : true } )
31
+ fs . cpSync ( PLUGIN_PACKAGE_PATH , DIST_PACKAGE_PATH , { recursive : true } )
24
32
fs . copyFileSync (
25
33
`./dist/${ PACKAGE . name } .js` ,
26
- pathjs . join ( DIST_PATH , PACKAGE . name + '.js' )
34
+ pathjs . join ( DIST_PACKAGE_PATH , PACKAGE . name + '.js' )
27
35
)
28
36
const svelteResult = c . compile ( readFileSync ( SVELTE_FILE , 'utf-8' ) , {
29
37
generate : 'ssr' ,
@@ -41,31 +49,54 @@ function plugin(): Plugin {
41
49
const result = component ( svelteInternal ) . render ( )
42
50
const html = `${ result . html } \n<style>${ result . css . code } </style>`
43
51
writeFileSync ( README_DIST_PATH , html )
44
- if ( fs . existsSync ( pathjs . join ( DIST_PATH , 'about.svelte' ) ) )
45
- fs . unlinkSync ( pathjs . join ( DIST_PATH , 'about.svelte' ) )
46
-
47
- if ( process . env . NODE_ENV === 'production' && fs . existsSync ( PLUGIN_REPO_PATH ) ) {
48
- fs . rmSync ( PLUGIN_REPO_PATH , { recursive : true , force : true } )
49
- fs . cpSync ( DIST_PATH , PLUGIN_REPO_PATH , { recursive : true } )
50
- const manifest = JSON . parse ( fs . readFileSync ( PLUGIN_MANIFEST_PATH , 'utf-8' ) )
51
- manifest . animated_java . title = PACKAGE . title
52
- manifest . animated_java . author = PACKAGE . author . name
53
- manifest . animated_java . icon = PACKAGE . icon
54
- manifest . animated_java . description = PACKAGE . description
55
- manifest . animated_java . version = PACKAGE . version
56
- manifest . animated_java . min_version = PACKAGE . min_blockbench_version
57
- manifest . animated_java . variant = PACKAGE . variant
58
- manifest . animated_java . tags = PACKAGE . tags
59
- manifest . animated_java . has_changelog = true
52
+ if ( fs . existsSync ( pathjs . join ( DIST_PACKAGE_PATH , 'about.svelte' ) ) )
53
+ fs . unlinkSync ( pathjs . join ( DIST_PACKAGE_PATH , 'about.svelte' ) )
60
54
61
- fs . writeFileSync (
62
- PLUGIN_MANIFEST_PATH ,
63
- prettier . format ( JSON . stringify ( manifest , null , '\t' ) , {
64
- useTabs : true ,
65
- parser : 'json' ,
55
+ if ( process . env . NODE_ENV === 'production' ) {
56
+ console . log ( '📝 Creating changelogs...' )
57
+ const changelog = JSON . parse ( fs . readFileSync ( CHANGELOG_PATH , 'utf-8' ) )
58
+ for ( const file of fs . readdirSync ( RELEASE_NOTES_TEMPLATES ) ) {
59
+ let content = fs . readFileSync (
60
+ pathjs . join ( RELEASE_NOTES_TEMPLATES , file ) ,
61
+ 'utf-8'
62
+ )
63
+ content = replaceTemplateVars ( content , {
64
+ version : PACKAGE . version ,
65
+ changes : changelog [ PACKAGE . version ] . categories
66
+ . find ( c => c . title === 'Changes' )
67
+ ?. list . map ( v => '- ' + v )
68
+ . join ( '\n' ) ,
69
+ fixes : changelog [ PACKAGE . version ] . categories
70
+ . find ( c => c . title === 'Fixes' )
71
+ ?. list . map ( v => '- ' + v )
72
+ . join ( '\n' ) ,
66
73
} )
67
- )
68
- console . log ( '📋 Copied to Plugin Repo!' )
74
+ fs . writeFileSync ( pathjs . join ( DIST_PATH , file ) , content )
75
+ }
76
+
77
+ if ( fs . existsSync ( PLUGIN_REPO_PATH ) ) {
78
+ fs . rmSync ( PLUGIN_REPO_PATH , { recursive : true , force : true } )
79
+ fs . cpSync ( DIST_PACKAGE_PATH , PLUGIN_REPO_PATH , { recursive : true } )
80
+ const manifest = JSON . parse ( fs . readFileSync ( PLUGIN_MANIFEST_PATH , 'utf-8' ) )
81
+ manifest . animated_java . title = PACKAGE . title
82
+ manifest . animated_java . author = PACKAGE . author . name
83
+ manifest . animated_java . icon = PACKAGE . icon
84
+ manifest . animated_java . description = PACKAGE . description
85
+ manifest . animated_java . version = PACKAGE . version
86
+ manifest . animated_java . min_version = PACKAGE . min_blockbench_version
87
+ manifest . animated_java . variant = PACKAGE . variant
88
+ manifest . animated_java . tags = PACKAGE . tags
89
+ manifest . animated_java . has_changelog = true
90
+
91
+ fs . writeFileSync (
92
+ PLUGIN_MANIFEST_PATH ,
93
+ prettier . format ( JSON . stringify ( manifest , null , '\t' ) , {
94
+ useTabs : true ,
95
+ parser : 'json' ,
96
+ } )
97
+ )
98
+ console . log ( '📋 Copied to Plugin Repo!' )
99
+ }
69
100
}
70
101
} )
71
102
} ,
0 commit comments