@@ -7,17 +7,17 @@ import { Project } from 'ts-morph';
77const snakeToCamel = ( text : string ) =>
88 text . replace ( / - ( \w ) / g, ( _ , letter : string ) => letter . toUpperCase ( ) ) ;
99
10+ const __dirname = dirname ( fileURLToPath ( import . meta. url ) ) ;
11+ const globalProject = new Project ( {
12+ tsConfigFilePath : resolve ( __dirname , '..' , 'tsconfig.json' ) ,
13+ skipAddingFilesFromTsConfig : true ,
14+ skipLoadingLibFiles : true ,
15+ skipFileDependencyResolution : true ,
16+ } ) ;
17+
1018export const pluginVirtualModuleGenerator = (
1119 mode : 'main' | 'preload' | 'renderer' ,
1220) => {
13- const __dirname = dirname ( fileURLToPath ( import . meta. url ) ) ;
14- const project = new Project ( {
15- tsConfigFilePath : resolve ( __dirname , '..' , 'tsconfig.json' ) ,
16- skipAddingFilesFromTsConfig : true ,
17- skipLoadingLibFiles : true ,
18- skipFileDependencyResolution : true ,
19- } ) ;
20-
2121 const srcPath = resolve ( __dirname , '..' , 'src' ) ;
2222 const plugins = globSync ( [
2323 'src/plugins/*/index.{js,ts}' ,
@@ -35,35 +35,39 @@ export const pluginVirtualModuleGenerator = (
3535 return { name, path } ;
3636 } ) ;
3737
38- const src = project . createSourceFile ( 'vm:pluginIndexes' , ( writer ) => {
39- // prettier-ignore
40- for ( const { name, path } of plugins ) {
38+ const src = globalProject . createSourceFile (
39+ 'vm:pluginIndexes' ,
40+ ( writer ) => {
41+ // prettier-ignore
42+ for ( const { name, path } of plugins ) {
4143 const relativePath = relative ( resolve ( srcPath , '..' ) , path ) . replace ( / \\ / g, '/' ) ;
4244 writer . writeLine ( `import ${ snakeToCamel ( name ) } Plugin, { pluginStub as ${ snakeToCamel ( name ) } PluginStub } from "./${ relativePath } ";` ) ;
4345 }
4446
45- writer . blankLine ( ) ;
47+ writer . blankLine ( ) ;
4648
47- // Context-specific exports
48- writer . writeLine ( `export const ${ mode } Plugins = {` ) ;
49- for ( const { name } of plugins ) {
50- const checkMode = mode === 'main' ? 'backend' : mode ;
51- // HACK: To avoid situation like importing renderer plugins in main
52- writer . writeLine (
53- ` ...(${ snakeToCamel ( name ) } Plugin['${ checkMode } '] ? { "${ name } ": ${ snakeToCamel ( name ) } Plugin } : {}),` ,
54- ) ;
55- }
56- writer . writeLine ( '};' ) ;
57- writer . blankLine ( ) ;
49+ // Context-specific exports
50+ writer . writeLine ( `export const ${ mode } Plugins = {` ) ;
51+ for ( const { name } of plugins ) {
52+ const checkMode = mode === 'main' ? 'backend' : mode ;
53+ // HACK: To avoid situation like importing renderer plugins in main
54+ writer . writeLine (
55+ ` ...(${ snakeToCamel ( name ) } Plugin['${ checkMode } '] ? { "${ name } ": ${ snakeToCamel ( name ) } Plugin } : {}),` ,
56+ ) ;
57+ }
58+ writer . writeLine ( '};' ) ;
59+ writer . blankLine ( ) ;
5860
59- // All plugins export (stub only) // Omit<Plugin, 'backend' | 'preload' | 'renderer'>
60- writer . writeLine ( 'export const allPlugins = {' ) ;
61- for ( const { name } of plugins ) {
62- writer . writeLine ( ` "${ name } ": ${ snakeToCamel ( name ) } PluginStub,` ) ;
63- }
64- writer . writeLine ( '};' ) ;
65- writer . blankLine ( ) ;
66- } ) ;
61+ // All plugins export (stub only) // Omit<Plugin, 'backend' | 'preload' | 'renderer'>
62+ writer . writeLine ( 'export const allPlugins = {' ) ;
63+ for ( const { name } of plugins ) {
64+ writer . writeLine ( ` "${ name } ": ${ snakeToCamel ( name ) } PluginStub,` ) ;
65+ }
66+ writer . writeLine ( '};' ) ;
67+ writer . blankLine ( ) ;
68+ } ,
69+ { overwrite : true } ,
70+ ) ;
6771
6872 return src . getText ( ) ;
6973} ;
0 commit comments