@@ -2,14 +2,15 @@ const fs = require('fs');
22const path = require ( 'path' ) ;
33const webpack = require ( 'webpack' ) ;
44const optimizer = require ( 'vite-plugin-optimizer' ) ;
5+ const libEsm = require ( 'lib-esm' ) ;
56
67const PLUGIN_NAME = 'vite-plugin-esmodule' ;
78const CACHE_DIR = `.${ PLUGIN_NAME } ` ;
89
910/**
1011 * @type {import('.') }
1112 */
12- module . exports = function esmodule ( modules , webpackFn ) {
13+ function esmodule ( modules , webpackFn ) {
1314 /**
1415 * @type {import('vite').ConfigEnv }
1516 */
@@ -43,7 +44,7 @@ module.exports = function esmodule(modules, webpackFn) {
4344 }
4445
4546 if ( ! Array . isArray ( modules ) ) {
46- throw new Error ( `(modules) expects an array, but got: ${ modules } ` ) ;
47+ throw new Error ( `[vite-plugin-esmodule] esmodule (modules) expects an array, but got: ${ modules } ` ) ;
4748 }
4849
4950 /**
@@ -155,27 +156,22 @@ function logError(error, exit = true) {
155156}
156157
157158/**
158- * @type {(args : import('vite-plugin-optimizer').OptimizerArgs, ...args: Parameters<import('.').Esmodule >) => Promise<void> }
159+ * @type {(options : import('vite-plugin-optimizer').OptimizerArgs, ...args: Parameters<import('vite-plugin-esmodule') >) => Promise<void> }
159160 */
160- function writeElectronRendererServeESM ( args , modules ) {
161+ function writeElectronRendererServeESM ( options , modules ) {
161162 for ( const mod of modules ) {
162163 const moduleName = typeof mod === 'object' ? Object . keys ( mod ) [ 0 ] : mod
163- const { cjsId, electronRendererId } = getModuleId ( path . join ( args . dir , moduleName ) ) ;
164-
165- // 🚧 For Electron-Renderer
166- const cjsModule = require ( cjsId ) ;
167- const requireModule = `const _M_ = require("${ CACHE_DIR } /${ moduleName } ");` ;
168- const exportDefault = `const _D_ = _M_.default || _M_;\nexport { _D_ as default };` ;
169- const exportMembers = Object
170- . keys ( cjsModule )
171- . filter ( n => n !== 'default' )
172- . map ( attr => `export const ${ attr } = _M_.${ attr } ;` ) . join ( '\n' )
173- const esmModuleCodeSnippet = `
174- ${ requireModule }
175- ${ exportDefault }
176- ${ exportMembers }
177- ` . trim ( ) ;
178- fs . writeFileSync ( electronRendererId , esmModuleCodeSnippet ) ;
164+ const { cjsId, electronRendererId } = getModuleId ( path . join ( options . dir , moduleName ) ) ;
165+ const result = libEsm ( {
166+ require : `${ CACHE_DIR } /${ moduleName } ` ,
167+ exports : Object . keys ( require ( cjsId ) ) ,
168+ } ) ;
169+
170+ fs . writeFileSync (
171+ ensureDir ( electronRendererId ) ,
172+ // `const _M_ = require("${CACHE_DIR}/${moduleName}");\n${result.exports}`,
173+ `const _M_ = require("./index.js");\n${ result . exports } ` ,
174+ ) ;
179175 }
180176}
181177
@@ -200,3 +196,18 @@ function lookupFile(filename, paths) {
200196 }
201197 }
202198}
199+
200+ function ensureDir ( filename ) {
201+ const dirname = path . dirname ( filename ) ;
202+ ! fs . existsSync ( dirname ) && fs . mkdirSync ( dirname , { recursive : true } ) ;
203+ return filename ;
204+ }
205+
206+ esmodule . __test__ = {
207+ CACHE_DIR ,
208+ ensureDir,
209+ getModuleId,
210+ writeElectronRendererServeESM,
211+ } ;
212+
213+ module . exports = esmodule ;
0 commit comments