@empjs/cli 3.1.0-rc.7 → 3.1.0-rc.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.1.0_postcss@8.4.38_ts-node@10.9.2_typescript@5.5.4/node_modules/tsup/assets/esm_shims.js","../src/helper/color.ts","../src/helper/logger.ts","../src/helper/utils.ts","../src/helper/index.ts","../src/helper/loadConfig.ts","../src/helper/getPort.ts","../src/helper/ipAddress.ts","../src/helper/openBrowser.ts","../src/store/cycle/autoDevBase.ts","../src/script/base.ts","../src/store/empShare/index.ts","../src/store/empShare/fastMode.ts","../src/store/chain.ts","../src/store/rspack/hook.ts","../src/store/lifeCycle.ts","../src/store/empConfig.ts","../src/store/rspack/common.ts","../src/store/rspack/css.ts","../src/store/rspack/entries.ts","../src/store/rspack/module.ts","../src/store/rspack/plugin.ts","../src/store/rspack/index.ts","../src/store/index.ts","../src/helper/buildPrint.ts","../src/script/dev.ts","../src/script/httpBase.ts","../src/script/serve.ts","../src/script/build.ts","../src/index.ts","../src/script/index.ts","../src/script/dts.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import chalk from 'chalk'\nexport const lightGreen = chalk.hex('#1abc9c')\nexport const green = chalk.hex('#16a085')\nexport const lightCyan = chalk.hex('#2ecc71')\nexport const cyan = chalk.hex('#27ae60')\nexport const lightRed = chalk.hex('#e74c3c')\nexport const red = chalk.hex('#c0392b')\nexport const yellow = chalk.hex('#f1c40f')\nexport const orange = chalk.hex('#f39c12')\nexport const lightBlue = chalk.hex('#3498db')\nexport const blue = chalk.hex('#2980b9')\nexport const white = chalk.hex('#ecf0f1')\nexport const lightMagenta = chalk.hex('#fd79a8')\nexport const magenta = chalk.hex('#e84393')\nexport const gray = chalk.hex('#7f8c8d')\n//\nexport default {\n lightGreen,\n green,\n lightCyan,\n cyan,\n lightRed,\n red,\n yellow,\n orange,\n lightBlue,\n blue,\n white,\n lightMagenta,\n magenta,\n gray,\n}\n","import color from 'src/helper/color'\nexport type LoggerType = 'debug' | 'info' | 'warn' | 'error'\n\n//\nclass Logger {\n public brandName = ''\n public fullName = ''\n public logLevel = 'debug'\n public isLogTime = process.env.ENV === 'dev'\n setup({brandName, logLevel, fullName}: any) {\n //` EMP v${store.empPkg.version} `\n this.brandName = ` [${brandName}] `\n //\n this.fullName = ` ${fullName} `\n this.fullName = color.green.bold(this.fullName)\n //\n if (logLevel) this.logLevel = logLevel\n }\n time = (...args: any[]) => this.isLogTime && console.time(...args)\n timeEnd = (...args: any[]) => this.isLogTime && console.timeEnd(...args)\n debug = (...args: any[]) => ['debug'].includes(this.logLevel) && console.log(...args)\n info = (...args: any[]) => ['debug', 'info'].includes(this.logLevel) && console.log(...args)\n warn = (...args: any[]) => ['debug', 'info', 'warn'].includes(this.logLevel) && console.warn(...args)\n error = (...args: any[]) => ['debug', 'info', 'warn', 'error'].includes(this.logLevel) && console.error(...args)\n blue = (msg: string) => {\n console.log(`${color.lightBlue(this.brandName)}${color.blue(` ${msg} `)}\\n`)\n }\n cyan = (msg: string) => {\n console.log(`${color.lightCyan(this.brandName)}${color.cyan(` ${msg} `)}\\n`)\n }\n\n magenta = (msg: string) => {\n console.log(`${color.lightMagenta(this.brandName)}${color.magenta(` ${msg} `)}\\n`)\n }\n\n green = (msg: string) => {\n console.log(`${color.lightGreen(this.brandName)}${color.green(` ${msg} `)}\\n`)\n }\n\n yellow = (msg: string) => {\n console.log(`${color.yellow(this.brandName)}${color.orange(` ${msg} `)}\\n`)\n }\n red = (msg: string) => {\n console.log(`${color.lightRed(this.brandName)}${color.red(` ${msg} `)}\\n`)\n }\n sysError = (msg: string) => {\n console.log(`${color.lightRed(` System Error Tips `)}${color.red(` ${msg} `)}\\n`)\n }\n //\n link = (msg: string) => {\n return color.blue(msg)\n }\n title = (msg: string) => {\n console.log(`${this.fullName}${color.yellow.underline(`${msg}`)}\\n`)\n }\n}\n\nexport default new Logger()\n","import {ip} from 'address'\nimport chalk from 'chalk'\nimport {gateway4sync} from 'default-gateway'\nimport fs from 'fs-extra'\nexport const getLanIp = () => {\n const {int} = gateway4sync()\n return ip(int || '') || '127.0.0.1'\n}\n//\nexport const getPkgVersion = (pkgPath: string) => {\n try {\n const {version} = fs.readJSONSync(pkgPath)\n return version\n } catch (err) {\n return undefined\n }\n}\nexport function clearConsole() {\n process.stdout.write(process.platform === 'win32' ? '\\x1B[2J\\x1B[0f' : '\\x1B[2J\\x1B[3J\\x1B[H')\n}\n\nexport function deepAssign<T>(target: any, ...sources: any): T {\n for (const source of sources) {\n for (const k in source) {\n const vs = source[k],\n vt = target[k]\n if (Object(vs) == vs && Object(vt) === vt) {\n target[k] = deepAssign(vt, vs)\n continue\n }\n target[k] = source[k]\n }\n }\n return target\n}\n\nexport const ensureArray = <T>(params: T | T[]): T[] => {\n if (Array.isArray(params)) {\n return params\n }\n return [params]\n}\n/**\n * json Filter\n * @param d\n * @param keys\n * @returns\n */\nexport const jsonFilter = (d: any = {}, notIncludeKeys: string[] = []) =>\n Object.keys(d)\n .filter(key => !notIncludeKeys.includes(key))\n .reduce((o: any, key: string) => {\n o[key] = d[key]\n return o\n }, {})\n\nexport const vCompare = (preVersion = '', lastVersion = ''): number => {\n const sources = preVersion.replace('^', '').split('.')\n const dests = lastVersion.replace('^', '').split('.')\n const maxL = Math.max(sources.length, dests.length)\n let result = 0\n for (let i = 0; i < maxL; i++) {\n const preValue: any = sources.length > i ? sources[i] : 0\n const preNum = isNaN(Number(preValue)) ? preValue.charCodeAt() : Number(preValue)\n const lastValue: any = dests.length > i ? dests[i] : 0\n const lastNum = isNaN(Number(lastValue)) ? lastValue.charCodeAt() : Number(lastValue)\n if (preNum < lastNum) {\n result = -1\n break\n } else if (preNum > lastNum) {\n result = 1\n break\n }\n }\n return result\n}\n\nexport const timeFormat = (seconds: number) => {\n seconds = seconds / 1000\n const format = (time: string) => chalk.bold(time)\n if (seconds < 1) {\n return `${seconds * 1000} ms`\n }\n if (seconds < 10) {\n const digits = seconds >= 0.01 ? 2 : 3\n return `${format(seconds.toFixed(digits))} s`\n }\n\n if (seconds < 60) {\n return `${format(seconds.toFixed(1))} s`\n }\n\n const minutes = seconds / 60\n return `${format(minutes.toFixed(2))} m`\n}\n\nexport const importJsVm = (content: string) => `data:text/javascript,${content}`\n","import chalk from 'chalk'\nimport {glob} from 'glob'\nimport color from './color'\n//\nexport * as utils from './utils'\nexport {default as logger} from './logger'\nexport {glob, color, chalk}\n","import fs from 'node:fs'\nimport path from 'path'\nimport jiti from 'jiti'\n// import {glob} from 'src/helper'\nimport store from 'src/store'\nimport logger from './logger'\n//\nexport const DEFAULT_CONFIG_FILES = [\n 'emp-config.ts',\n 'emp-config.js',\n 'emp.config.ts',\n 'emp.config.js',\n //\n 'emp-config.mjs',\n 'emp-config.cjs',\n 'emp-config.mts',\n 'emp-config.cts',\n //\n 'emp.config.mjs',\n 'emp.config.cjs',\n 'emp.config.mts',\n 'emp.config.cts',\n]\n//\nexport const loadConfig = jiti(__filename, {\n esmResolve: true,\n // disable require cache to support restart CLI and read the new config\n requireCache: false,\n interopDefault: true,\n // debug: true,\n})\n\nexport const getEmpConfigPath = async () => {\n return fsFindByConfigFileName()\n}\n/* const globFindConfig = async () => {\n logger.time('getEmpConfigPath')\n const exp = path.join(store.root, `emp{-,.}config.{ts,js,mjs,cjs}`)\n const entries = (await glob([exp], {windowsPathsNoEscape: true})) || []\n logger.timeEnd('getEmpConfigPath')\n return entries[0]\n} */\nconst fsFindByConfigFileName = () => {\n logger.time('[store]GetEmpConfigPath')\n let resolvedPath\n for (const filename of DEFAULT_CONFIG_FILES) {\n const filePath = path.resolve(store.root, filename)\n if (!fs.existsSync(filePath)) continue\n resolvedPath = filePath\n break\n }\n logger.timeEnd('[store]GetEmpConfigPath')\n return resolvedPath\n}\n","import net from 'net'\nimport os from 'os'\n\nconst minPort = 1024\nconst maxPort = 65_535\nconst httpsPort = 443\n\n/**\n * @return {Set<string|undefined>}\n */\nconst getLocalHosts = () => {\n const interfaces = os.networkInterfaces()\n\n // Add undefined value for createServer function to use default host,\n // and default IPv4 host in case createServer defaults to IPv6.\n // eslint-disable-next-line no-undefined\n const results = new Set([undefined, '0.0.0.0'])\n\n for (const _interface of Object.values(interfaces)) {\n if (_interface) {\n for (const config of _interface) {\n results.add(config.address)\n }\n }\n }\n\n return results\n}\n\n/**\n * @param {number} basePort\n * @param {string | undefined} host\n * @return {Promise<number>}\n */\nconst checkAvailablePort = (basePort: number, host?: string) =>\n new Promise((resolve, reject) => {\n const server = net.createServer()\n server.unref()\n server.on('error', reject)\n\n server.listen(basePort, host, () => {\n // Next line should return AdressInfo because we're calling it after listen() and before close()\n const {port}: any = server.address()\n server.close(() => {\n resolve(port)\n })\n })\n })\n\n/**\n * @param {number} port\n * @param {Set<string|undefined>} hosts\n * @return {Promise<number>}\n */\nconst getAvailablePort = async (port: number, hosts: any) => {\n /**\n * Errors that mean that host is not available.\n * @type {Set<string | undefined>}\n */\n const nonExistentInterfaceErrors = new Set(['EADDRNOTAVAIL', 'EINVAL'])\n /* Check if the post is available on every local host name */\n for (const host of hosts) {\n try {\n await checkAvailablePort(port, host) // eslint-disable-line no-await-in-loop\n } catch (error: any) {\n /* We throw an error only if the interface exists */\n if (!nonExistentInterfaceErrors.has(/** @type {NodeJS.ErrnoException} */ error.code)) {\n throw error\n }\n }\n }\n\n return port\n}\n\n/**\n * @param {number} basePort\n * @param {string=} host\n * @return {Promise<number>}\n */\nexport async function getPorts(basePort: number, host = 'localhost') {\n if (basePort !== httpsPort && (basePort < minPort || basePort > maxPort)) {\n throw new Error(`Port number must lie between ${minPort} and ${maxPort}`)\n }\n\n let port = basePort\n const localhosts = getLocalHosts()\n let hosts\n if (host && !localhosts.has(host)) {\n hosts = new Set([host])\n } else {\n /* If the host is equivalent to localhost\n we need to check every equivalent host\n else the port might falsely appear as available\n on some operating systems */\n hosts = localhosts\n }\n /** @type {Set<string | undefined>} */\n const portUnavailableErrors = new Set(['EADDRINUSE', 'EACCES'])\n while (port <= maxPort) {\n try {\n const availablePort = await getAvailablePort(port, hosts) // eslint-disable-line no-await-in-loop\n return availablePort\n } catch (error: any) {\n /* Try next port if port is busy; throw for any other error */\n if (!portUnavailableErrors.has(/** @type {NodeJS.ErrnoException} */ error.code)) {\n throw error\n }\n port += 1\n }\n }\n\n throw new Error('No available ports found')\n}\n","import url from 'url'\nimport chalk from 'chalk'\nimport {gray} from 'src/helper/color'\nimport {getLanIp} from './utils'\ntype IpAdressOpt = {\n protocol?: string\n port?: number\n pathname?: string\n host?: string\n}\nclass IpAdress {\n imf = {\n protocol: '',\n port: 8000,\n pathname: '/',\n }\n host = '0.0.0.0'\n\n urls = {\n lanUrlForConfig: '',\n lanUrlForTerminal: gray('unavailable'),\n localUrlForTerminal: '',\n localUrlForBrowser: '',\n }\n\n setup(o: IpAdressOpt) {\n if (o.host) this.host = o.host\n if (o.protocol) this.imf.protocol = o.protocol\n if (o.pathname) this.imf.pathname = o.pathname\n if (o.port) this.imf.port = o.port\n this.setupUrls()\n }\n private setupUrls() {\n const {host} = this\n const isUnspecifiedHost = host === '0.0.0.0' || host === '::'\n let prettyHost\n if (isUnspecifiedHost) {\n prettyHost = 'localhost'\n try {\n this.urls.lanUrlForConfig = this.getLanIp()\n if (this.urls.lanUrlForConfig) {\n // Check if the address is a private ip\n // https://en.wikipedia.org/wiki/Private_network#Private_IPv4_address_spaces\n if (/^10[.]|^172[.](1[6-9]|2[0-9]|3[0-1])[.]|^192[.]168[.]/.test(this.urls.lanUrlForConfig)) {\n // Address is private, format it for later use\n this.urls.lanUrlForTerminal = this.prettyPrintUrl(this.urls.lanUrlForConfig)\n } else {\n // Address is not private, so we will discard it\n this.urls.lanUrlForConfig = ''\n }\n }\n } catch (_e) {\n // ignored\n }\n } else {\n prettyHost = host\n this.urls.lanUrlForConfig = host\n this.urls.lanUrlForTerminal = this.prettyPrintUrl(this.urls.lanUrlForConfig)\n }\n this.urls.localUrlForTerminal = this.prettyPrintUrl(prettyHost)\n this.urls.localUrlForBrowser = this.formatUrl(prettyHost)\n }\n public getLanIp = getLanIp\n formatUrl(hostname: string) {\n const {protocol, port, pathname} = this.imf\n return url.format({\n protocol,\n hostname,\n port,\n pathname,\n })\n }\n prettyPrintUrl(hostname: string) {\n const {protocol, port, pathname} = this.imf\n return url.format({\n protocol,\n hostname,\n port: chalk.bold(port),\n pathname,\n })\n }\n}\nexport default new IpAdress()\n/* export function prepareUrls(protocol: any, host: string, port: number, pathname = '/') {\n const formatUrl = (hostname: string) =>\n url.format({\n protocol,\n hostname,\n port,\n pathname,\n })\n const prettyPrintUrl = (hostname: string) =>\n url.format({\n protocol,\n hostname,\n port: chalk.bold(port),\n pathname,\n })\n\n const isUnspecifiedHost = host === '0.0.0.0' || host === '::'\n let prettyHost, lanUrlForConfig\n let lanUrlForTerminal = chalk.gray('unavailable')\n if (isUnspecifiedHost) {\n prettyHost = 'localhost'\n try {\n // This can only return an IPv4 address\n const {int} = gateway4sync()\n lanUrlForConfig = ip(int || '')\n if (lanUrlForConfig) {\n // Check if the address is a private ip\n // https://en.wikipedia.org/wiki/Private_network#Private_IPv4_address_spaces\n if (/^10[.]|^172[.](1[6-9]|2[0-9]|3[0-1])[.]|^192[.]168[.]/.test(lanUrlForConfig)) {\n // Address is private, format it for later use\n lanUrlForTerminal = prettyPrintUrl(lanUrlForConfig)\n } else {\n // Address is not private, so we will discard it\n lanUrlForConfig = undefined\n }\n }\n } catch (_e) {\n // ignored\n }\n } else {\n prettyHost = host\n lanUrlForConfig = host\n lanUrlForTerminal = prettyPrintUrl(lanUrlForConfig)\n }\n const localUrlForTerminal = prettyPrintUrl(prettyHost)\n const localUrlForBrowser = formatUrl(prettyHost)\n return {\n lanUrlForConfig,\n lanUrlForTerminal,\n localUrlForTerminal,\n localUrlForBrowser,\n }\n}\n */\n","import {exec} from 'node:child_process'\nimport {promisify} from 'node:util'\nimport store from 'src/store'\nimport logger from './logger'\n\nconst execAsync = promisify(exec)\n\nconst supportedChromiumBrowsers = [\n 'Google Chrome Canary',\n 'Google Chrome Dev',\n 'Google Chrome Beta',\n 'Google Chrome',\n 'Microsoft Edge',\n 'Brave Browser',\n 'Vivaldi',\n 'Chromium',\n]\n\nconst getTargetBrowser = async () => {\n // Use user setting first\n let targetBrowser = process.env.BROWSER\n // If user setting not found or not support, use opening browser first\n if (!targetBrowser || !supportedChromiumBrowsers.includes(targetBrowser)) {\n const {stdout: ps} = await execAsync('ps cax')\n targetBrowser = supportedChromiumBrowsers.find(b => ps.includes(b))\n }\n return targetBrowser\n}\n\nexport const openBrowser = async (url: string) => {\n const shouldTryOpenChromeWithAppleScript = process.platform === 'darwin'\n\n if (shouldTryOpenChromeWithAppleScript) {\n try {\n const targetBrowser = await getTargetBrowser()\n if (targetBrowser) {\n // Try to reuse existing tab with AppleScript\n const c = `osascript openChrome.applescript \"${encodeURI(url)}\" \"${targetBrowser}\"`\n await execAsync(c, {\n cwd: store.resource.dir,\n })\n\n return true\n }\n } catch (err) {\n logger.debug(err)\n }\n }\n //\n // Fallback to open\n // (It will always open new tab)\n try {\n const {default: open} = await import('open')\n await open(url)\n return true\n } catch (err) {\n logger.error('Failed to open start URL.')\n logger.error(err)\n return false\n }\n}\nexport default openBrowser\n","import {getPorts} from 'src/helper/getPort'\nimport ipAddress from 'src/helper/ipAddress'\nimport {deepAssign} from 'src/helper/utils'\nimport store from 'src/store'\nclass AutoDevBase {\n isADB = false\n isHttps = false\n get isHttpBase() {\n const base = store.empOptions.base || ''\n // console.log(\n // 'store.empOptions.base',\n // store.empOptions.base,\n // base.indexOf('http://') > -1 || base.indexOf('https://') > -1,\n // )\n return base.indexOf('http://') > -1 || base.indexOf('https://') > -1\n }\n\n async setup() {\n this.isADB = !!store.empOptions.autoDevBase && store.mode === 'development' && !this.isHttpBase\n\n if (!this.isADB) return\n //\n const {server, https} = store.empOptions.server || {}\n this.isHttps = server === 'https' || (typeof server === 'object' && server.type === 'https') || https === true\n //\n const host = ipAddress.getLanIp()\n const protocol = this.isHttps ? 'https' : 'http'\n let port = store.empOptions.server?.port || 8000\n port = await getPorts(port, host)\n store.empOptions.base = `${protocol}://${host}:${port}/`\n store.empOptions.server = deepAssign(\n {\n // host: host,//允许所有host 访问\n port: port,\n client: {webSocketURL: `${this.isHttps ? 'wss' : 'ws'}://${host}:${port}/ws`},\n },\n store.empOptions.server,\n )\n }\n}\nexport default new AutoDevBase()\n","import fs from 'node:fs/promises'\nimport {green} from 'src/helper/color'\nimport {getPorts} from 'src/helper/getPort'\nimport ipAddress from 'src/helper/ipAddress'\nimport logger from 'src/helper/logger'\nimport openBrowser from 'src/helper/openBrowser'\nimport {clearConsole} from 'src/helper/utils'\nimport store from 'src/store'\nimport autoDevBase from 'src/store/cycle/autoDevBase'\n//\nexport class BaseScript {\n public sf = {\n protocol: 'http',\n host: '0.0.0.0',\n port: 8000,\n publicPath: '',\n publicHasHttp: false,\n isOpenBrower: false,\n url: '',\n urls: {localUrlForBrowser: '', localUrlForTerminal: '', lanUrlForTerminal: '', lanUrlForConfig: ''},\n }\n static httpsType: 'default' | 'h2' | 'h3' = 'default'\n //重置服务信息\n async adaptServer() {\n this.sf.publicPath = store.rsConfig.output?.publicPath === 'auto' ? '/' : store.rsConfig.output?.publicPath || '/'\n this.sf.isOpenBrower = !!store.empConfig.server.open\n this.sf.protocol = this.isHttps ? 'https' : 'http'\n this.sf.host = store.empConfig.server.host ? store.empConfig.server.host : this.sf.host\n this.sf.port = store.empConfig.server.port as number\n // 设置 port\n await this.serverPort()\n ipAddress.setup(this.sf)\n // 匹配 url\n if (\n this.sf.publicPath &&\n (this.sf.publicPath.indexOf('http://') > -1 || this.sf.publicPath.indexOf('https://') > -1)\n ) {\n this.sf.url = this.sf.publicPath\n this.sf.publicHasHttp = true\n this.sf.urls.localUrlForTerminal = ipAddress.prettyPrintUrl('localhost')\n } else {\n this.sf.urls = ipAddress.urls\n this.sf.url = this.sf.urls.localUrlForBrowser\n }\n }\n startOpen() {\n const {urls} = this.sf\n if (this.sf.publicHasHttp) {\n logger.info(`${green('➜')} Local: ${logger.link(urls.localUrlForTerminal)}`)\n logger.info(`${green('➜')} Network: ${logger.link(this.sf.publicPath)}`)\n } else {\n logger.info(`${green('➜')} Local: ${logger.link(urls.localUrlForTerminal)}`)\n logger.info(`${green('➜')} Network: ${logger.link(urls.lanUrlForTerminal)}\\n`)\n }\n // check open brower\n if (this.sf.isOpenBrower) openBrowser(this.sf.url)\n }\n // 实现整体生命周期运转\n async setup(cliName: string, o: any) {\n logger.time(`[${cliName}]Setup`)\n //实例化 store\n await store.setup(cliName, o)\n // 是否清除上一个日志\n if (store.debug.clearLog) {\n clearConsole()\n }\n // 显示指令定位\n // logger.blue(`${this.constructor.name} Running`)\n logger.title(`${cliName}`)\n //\n await this.adaptServer()\n logger.time(`[${cliName}]Run`)\n await this.run()\n logger.timeEnd(`[${cliName}]Run`)\n this.afterRun()\n logger.timeEnd(`[${cliName}]Setup`)\n }\n async run() {}\n afterRun() {\n process.on('SIGINT', function () {\n process.exit()\n })\n }\n get isHttps() {\n const {server, https, http2} = store.empConfig.server || {}\n return (\n server === 'https' || (typeof server === 'object' && server.type === 'https') || https === true || http2 === true\n )\n }\n getcert() {\n return Promise.all([fs.readFile(store.resource.key), fs.readFile(store.resource.cert)])\n }\n async serverPort() {\n if (autoDevBase.isADB) return\n const {port, host} = this.sf\n const serverPort = await getPorts(port, host)\n if (serverPort !== port) {\n this.sf.port = serverPort\n if (store.rsConfig.devServer?.port) store.rsConfig.devServer.port = serverPort\n }\n }\n}\n","import type {ModuleFederationPlugin} from '@module-federation/enhanced/rspack'\nimport type {Configuration} from '@rspack/core'\nimport store from 'src/store'\nimport type {EMPShareType, ExternalsItemType} from 'src/types/config'\nexport type externalAssetsType = {\n js: string[]\n css: string[]\n}\n// export type ModuleFederationPluginOptions = moduleFederationPlugin.ModuleFederationPluginOptions\nexport type ModuleFederationPluginOptions = ConstructorParameters<typeof ModuleFederationPlugin>[0]\nexport type ImportMapType = {\n imports: {[key: string]: any}\n}\n//\nexport class EMPShareLib {\n public externals: Configuration['externals'] | any = {}\n public externalAssets: externalAssetsType = {js: [], css: []}\n private exp = /^([0-9a-zA-Z_\\s]+)@(.*)/ // 匹配库内容如 React@http://\n public config!: EMPShareType\n public importMap: ImportMapType = {imports: {}}\n // public version!: EMPShareType['mfVersion']\n public isEmpshare = false\n async setup() {\n if (store.empConfig.empShare.name || store.empConfig.empShare.fastMode?.runtimeHost) {\n this.isEmpshare = true\n }\n // console.log('this.isEmpshare', this.isEmpshare)\n //\n this.config = store.empConfig.empShare\n this.config.name = this.config.name ? this.config.name : store.uniqueName\n\n if (store.empConfig.empShare.fastMode?.runtimeHost || store.empConfig.empShare.fastMode?.runtimeLib) {\n store.empConfig.empShareFastMode.setup()\n }\n //TODO 会以 fastMode 代替\n if (this.config.shareLib) {\n this.setShareLib()\n }\n this.prepareEsm()\n }\n /**\n * 是否取用 importMap\n */\n public get useImportMap() {\n return this.config.useImportMap && store.empConfig.isESM\n }\n public get pluginConfig(): ModuleFederationPluginOptions {\n const cf = {...{}, ...this.config}\n // delete cf.mfVersion\n delete cf.shareLib\n delete cf.useImportMap\n delete cf.fastMode\n const sc: ModuleFederationPluginOptions = {\n manifest: false,\n dts: false,\n dev: {\n disableDynamicRemoteTypeHints: true,\n },\n ...cf,\n }\n return sc\n }\n prepareEsm() {\n // console.log('store.empConfig.isESM', store.empConfig.isESM)\n if (store.empConfig.isESM) {\n this.config.library = {type: 'module'}\n // 去除@ esm不需要named\n const remotes: any = this.config.remotes || {}\n for (const [k, v] of Object.entries(remotes)) {\n if (typeof v === 'string') {\n const cb: any = v.match(this.exp) || []\n if (cb.length > 0) {\n remotes[k] = cb[2]\n }\n }\n }\n //\n this.config.remotes = remotes\n // console.log('empShare', this.config)\n }\n }\n async setShareLib() {\n const mf = this.config\n const externals: ExternalsItemType[] = []\n if (typeof mf.shareLib === 'object') {\n for (const [k, v] of Object.entries(mf.shareLib)) {\n let externalsItem: ExternalsItemType = {}\n externalsItem.module = k\n //增加下划线 支持lodash 等特殊符号的问题 如 _@http\n\n if (typeof v === 'string') {\n const cb: any = v.match(this.exp) || []\n if (cb.length > 0) {\n externalsItem.global = cb[1]\n externalsItem.entry = cb[2]\n externalsItem.type = 'js'\n externals.push(externalsItem)\n externalsItem = {}\n } else {\n externalsItem.global = ''\n externalsItem.entry = v\n externalsItem.type = 'js'\n externals.push(externalsItem)\n externalsItem = {}\n }\n } else if (Array.isArray(v)) {\n v.map(vo => {\n if (!vo) return\n const isCSS = vo.split('?')[0].endsWith('.css')\n if (isCSS) {\n externalsItem.entry = vo\n externalsItem.type = 'css'\n } else {\n const cb: any = vo.match(this.exp) || []\n if (cb.length > 0) {\n externalsItem.global = cb[1]\n externalsItem.entry = cb[2]\n externalsItem.type = 'js'\n } else {\n externalsItem.global = ''\n externalsItem.entry = vo\n externalsItem.type = 'js'\n }\n }\n externals.push(externalsItem)\n externalsItem = {}\n })\n } else if (typeof v === 'object' && v.entry) {\n externalsItem.entry = v.entry\n externalsItem.global = v.global\n externalsItem.type = v.type\n externals.push(externalsItem)\n externalsItem = {}\n }\n }\n }\n await Promise.all([this.setExternalAssets(externals)])\n }\n private async setExternalAssets(externals: ExternalsItemType[] = []): Promise<void> {\n if (externals.length > 0) {\n let list: ExternalsItemType[] = []\n list = list.concat(externals)\n list.map(v => {\n v.type = v.type || 'js'\n if (v.type === 'js' && v.module) {\n if (v.global) {\n this.externals[v.module] = v.global\n // this.externals[v.module] = `${v.global}${v.entry ? `@${v.entry}` : ''}`//内部引入 取代 script? TODO\n } else if (store.empConfig.isESM) {\n if (!this.useImportMap) {\n this.externals[v.module] = v.entry\n } else {\n this.externals[v.module] = v.module\n this.importMap.imports[v.module] = v.entry\n }\n }\n // 可以不传入 entry 利用传统的 merge request 进行合并请求\n if (v.entry && !store.empConfig.isESM) {\n this.externalAssets.js.push(v.entry)\n }\n } else if (v.type === 'css' && v.entry) {\n this.externalAssets.css.push(v.entry)\n }\n })\n // console.log(this.importMap, this.externals)\n }\n }\n}\n","import store from 'src/store'\nimport type {EMPShareFastModeType} from 'src/types/config'\nexport class EmpShareFastMode {\n public fastMode: Required<EMPShareFastModeType> = {\n runtimeHost: '',\n runtimeLib: '',\n externals: {},\n globalVal: 'EMP_ADAPTER',\n framework: 'react',\n }\n public externalMF = {\n '@module-federation/runtime': `MFRuntime`,\n '@module-federation/sdk': `MFSDK`,\n }\n public externalReact = {\n react: `React`,\n 'react-dom': `ReactDOM`,\n 'react-router-dom': `ReactRouterDOM`,\n }\n externals: any = {}\n getRuntimeLib(runtimeHost: string) {\n return `${runtimeHost}/runtime${store.mode === 'development' ? '.development' : ''}.umd.js`\n }\n setup() {\n this.fastMode = store.deepAssign(this.fastMode, store.empConfig.empShare.fastMode)\n this.injectLib()\n this.setExternals()\n }\n injectLib() {\n const {runtimeHost, runtimeLib} = this.fastMode\n if (runtimeHost || runtimeLib) {\n const lib = runtimeLib ? runtimeLib : this.getRuntimeLib(runtimeHost)\n store.empConfig.empShareLib.externalAssets.js.push(lib)\n }\n }\n setExternals() {\n for (const [key, value] of Object.entries(this.externalMF)) {\n this.externals[key] = `${this.fastMode.globalVal}.${value}`\n }\n if (this.fastMode.framework === 'react') {\n for (const [key, value] of Object.entries(this.externalReact)) {\n this.externals[key] = `${this.fastMode.globalVal}.${value}`\n }\n }\n if (Object.entries(this.fastMode.externals).length > 0) {\n this.externals = store.deepAssign(this.externals, this.fastMode.externals)\n }\n store.empConfig.empShareLib.externals = store.deepAssign(store.empConfig.empShareLib.externals, this.externals)\n }\n}\n","export const chainName = {\n rule: {\n mjs: 'mjs',\n typescript: 'typescript',\n javascript: 'javascript',\n sourceMap: 'sourceMapLoader',\n inline: 'inline',\n svg: 'svg',\n image: 'image',\n font: 'fonts',\n svga: 'svga',\n sass: 'sass',\n less: 'less',\n css: 'css',\n },\n use: {\n swc: 'swc',\n sourceMap: 'sourceMapLoader',\n sass: 'sassLoader',\n less: 'lessLoader',\n },\n plugin: {\n bundleAnalyzer: 'bundleAnalyzerPlugin',\n define: 'definePlugin',\n copy: 'copyRspackPlugin',\n progress: 'progressPlugin',\n empShare: 'empShare',\n html: {\n prefix: 'html-plugin-',\n empSharePrefix: 'html-plugin-empShare-',\n importMapPrefix: 'html-plugin-import-map-',\n hooks: {\n empShareLib: 'HtmlEmpShareLibPluginName',\n importMap: 'HtmlImportMapPlugin',\n },\n },\n rsdoctor: 'rsdoctor',\n },\n minimizer: {\n minJs: 'minJs',\n minCss: 'minCss',\n },\n}\n","import type {Compiler} from '@rspack/core'\nimport HtmlWebpackPlugin from 'html-webpack-plugin'\nimport {deepAssign, importJsVm} from 'src/helper/utils'\nimport store from 'src/store'\nimport {chainName} from 'src/store/chain'\nimport type {EMPShareLib} from 'src/store/empShare'\nimport type {HtmlType} from 'src/types/config'\n//\nexport const HtmlImportMapPluginName = chainName.plugin.html.hooks.importMap\nexport class HtmlImportMapPlugin {\n importMap: EMPShareLib['importMap']\n chunk: string\n constructor(importMap: EMPShareLib['importMap'], chunk: string) {\n this.importMap = importMap\n this.chunk = chunk\n }\n apply(compiler: any) {\n compiler.hooks.compilation.tap(HtmlImportMapPluginName, (compilation: any) => {\n HtmlWebpackPlugin.getHooks(compilation).alterAssetTagGroups.tapAsync(HtmlImportMapPluginName, (data, cb) => {\n //过滤chunk\n if (!data.plugin.userOptions.chunks?.includes(this.chunk)) return cb(null, data)\n data.headTags.push({\n tagName: 'script',\n attributes: {type: 'importmap'},\n innerHTML: `${JSON.stringify(this.importMap, null, 2)}`,\n voidTag: false,\n meta: {\n plugin: undefined,\n },\n })\n cb(null, data)\n })\n })\n }\n}\nexport const HtmlEmpShareLibPluginName = chainName.plugin.html.hooks.empShareLib\nexport class HtmlEmpShareLibPlugin {\n chunk: string\n files: {\n css: string[]\n js: string[]\n }\n constructor(files: HtmlType['files'], chunk: string) {\n this.files = deepAssign({js: [], css: []}, files)\n this.chunk = chunk\n }\n apply(compiler: any) {\n compiler.hooks.compilation.tap(HtmlEmpShareLibPluginName, (compilation: any) => {\n const files = this.files\n HtmlWebpackPlugin.getHooks(compilation).alterAssetTagGroups.tapAsync(HtmlEmpShareLibPluginName, (data, cb) => {\n //过滤chunk\n if (!data.plugin.userOptions.chunks?.includes(this.chunk)) return cb(null, data)\n // js\n files.js.map((js: any) => {\n data.headTags.push({\n tagName: 'script',\n attributes: {src: js},\n voidTag: false,\n meta: {\n plugin: undefined,\n },\n })\n })\n // css\n files.css.map((css: any) => {\n data.headTags.push({\n tagName: 'link',\n attributes: {rel: 'stylesheet', href: css},\n voidTag: false,\n meta: {\n plugin: undefined,\n },\n })\n })\n cb(null, data)\n })\n })\n }\n}\nconst getPolyfillEntry = () => {\n const content = [`import 'core-js/${store.empConfig.build.coreJsFeatures}'`].join('\\n')\n return importJsVm(content)\n}\nexport class EmpPolyfillPlugin {\n constructor() {}\n\n apply(compiler: Compiler) {\n const {webpack} = compiler\n new webpack.EntryPlugin(compiler.context, getPolyfillEntry(), {\n name: undefined,\n }).apply(compiler)\n }\n}\n","import store from 'src/store'\nimport autoDevBase from 'src/store/cycle/autoDevBase'\nimport {EmpPolyfillPlugin} from './rspack/hook'\nexport type LifeCycleOptions = Partial<LifeCycle>\nexport class LifeCycle {\n op: LifeCycleOptions = {}\n constructor(op: LifeCycleOptions = {}) {\n this.op = op\n }\n /**\n * 获取 empOptions 之后、初始化 empConfig 之前\n */\n async afterGetEmpOptions() {\n // 设置 auto Dev Base 适配 Proxy\n await autoDevBase.setup()\n //\n if (this.op.afterGetEmpOptions) await this.op.afterGetEmpOptions()\n }\n /**\n * RspackPlugin 插件执行之前\n */\n async beforePlugin() {\n if (store.empConfig.build.polyfill === 'entry') {\n store.chain.plugin('empPolyfill').use(EmpPolyfillPlugin)\n }\n //\n if (this.op.beforePlugin) await this.op.beforePlugin()\n }\n /**\n * RspackPlugin 插件执行之后\n */\n async afterPlugin() {\n if (this.op.afterPlugin) await this.op.afterPlugin()\n }\n /**\n * RspackModule 插件执行之后\n */\n async beforeModule() {\n if (this.op.beforeModule) await this.op.beforeModule()\n }\n /**\n * RspackModule 插件执行之后\n */\n async afterModule() {\n if (this.op.afterModule) await this.op.afterModule()\n }\n /**\n * empPlugin 插件执行之前\n */\n async beforeEmpPlugin() {\n if (this.op.beforeEmpPlugin) await this.op.beforeEmpPlugin()\n }\n /**\n * empPlugin 插件执行之后\n */\n async afterEmpPlugin() {\n if (this.op.afterEmpPlugin) await this.op.afterEmpPlugin()\n }\n /**\n * 产物构建完成前\n */\n async beforeBuild() {\n if (this.op.beforeBuild) await this.op.beforeBuild()\n }\n /**\n * 产物构建完成后\n */\n async afterBulid() {\n if (this.op.afterBulid) await this.op.afterBulid()\n }\n /**\n * devServer启动前\n */\n async beforeDevServe() {\n if (this.op.beforeDevServe) await this.op.beforeDevServe()\n }\n /**\n * devServer启动后\n */\n async afterDevServe() {\n if (this.op.afterDevServe) await this.op.afterDevServe()\n }\n /**\n * server启动前\n */\n async beforeServe() {\n if (this.op.beforeServe) await this.op.beforeServe()\n }\n /**\n * server启动后\n */\n async afterServe() {\n if (this.op.afterServe) await this.op.afterServe()\n }\n}\n","import fs from 'node:fs'\n// import type {EMPConfigExport} from 'src/index'\nimport type {GlobalStore} from 'src/store'\n// import path from 'path'\n// import {HtmlRspackPluginOptions} from '@rspack/core'\nimport type {\n BuildType,\n DebugType,\n EMPShareType,\n EmpOptions,\n HtmlType,\n ModuleTransform,\n RsTarget,\n RsdoctorRspackPluginOptions,\n ServerType,\n} from 'src/types/config'\n\nimport type {Output, Resolve} from '@rspack/core'\nimport {logger} from 'src/helper'\nimport {getEmpConfigPath, loadConfig} from 'src/helper/loadConfig'\nimport {deepAssign} from 'src/helper/utils'\nimport {BaseScript} from 'src/script/base'\nimport {EMPShareLib} from 'src/store/empShare'\nimport {EmpShareFastMode} from 'src/store/empShare/fastMode'\nimport {LifeCycle} from 'src/store/lifeCycle'\n// import type {RuleSetRule} from '@rspack/core'\nexport class EmpConfig {\n private store!: GlobalStore\n /**\n * 项目代码路径\n * @default 'src'\n */\n public appSrc = 'src'\n /**\n * 项目代码入口文件 如 `src/index.js`\n * (*)entries 设置后 该选项失效\n * @default 'index.js'\n */\n public appEntry = ''\n /**\n * publicPath 根路径 可参考webpack,业务模式默认为 auto\n * html 部分 publicPath 默认为 undefined,可设置全量域名或子目录适配,也可以单独在html设置 Public\n *\n * @default undefined\n */\n public base = ''\n public target: RsTarget = []\n private assign<T>(t: T, s: any): T {\n s = s || {}\n return deepAssign(t, s)\n }\n //\n public empShareFastMode = new EmpShareFastMode()\n public empShareLib = new EMPShareLib()\n /**\n * 是否启动 esm 模块\n * @default true\n */\n public isESM = false\n async autoDevSet() {\n if (this.store.mode === 'development' && this.store.empOptions.autoDevBase) {\n }\n }\n public checkIsESM(target: string) {\n return ['es3', 'es5'].indexOf(target) === -1\n }\n public lifeCycle!: LifeCycle\n async setup(store: GlobalStore) {\n this.store = store\n //=== before sync emp-config.js\n await this.syncEmpOptions()\n //\n this.lifeCycle = new LifeCycle(this.store.empOptions.lifeCycle)\n await this.lifeCycle.afterGetEmpOptions()\n // 是否启动 is ESM\n this.isESM = this.checkIsESM(this.build.target)\n if (this.store.empOptions.target) {\n this.target = this.store.empOptions.target\n if (Array.isArray(this.target) && !this.target.includes(this.build.target)) {\n this.target.push(this.build.target)\n }\n } else {\n this.target = ['web', this.build.target]\n }\n\n // setup common val of empConfig\n const {appSrc, base, appEntry} = this.store.empOptions\n if (appSrc) this.appSrc = appSrc\n if (base) this.base = base\n if (appEntry) this.appEntry = appEntry\n //\n if (this.store.empConfig.empShare) {\n await this.empShareLib.setup()\n }\n }\n async chain() {\n if (this.store.empOptions.chain) {\n await this.store.empOptions.chain(this.store.chain)\n }\n }\n async plugins() {\n const runPromiseFuns: any[] = []\n if (\n this.store.empOptions.plugins &&\n Array.isArray(this.store.empOptions.plugins) &&\n this.store.empOptions.plugins.length > 0\n ) {\n // await Promise.all(this.store.empOptions.plugins)\n this.store.empOptions.plugins.map(fn => {\n runPromiseFuns.push(fn.rsConfig(this.store))\n })\n await Promise.all(runPromiseFuns)\n }\n }\n get debug() {\n let rsdoctor: RsdoctorRspackPluginOptions | boolean = false\n if (this.store.cliOptions.doctor) {\n rsdoctor = {\n supports: {\n generateTileGraph: true,\n },\n }\n }\n //\n return this.assign<DebugType>(\n {\n loggerLevel: 'info',\n clearLog: true,\n progress: true,\n showRsconfig: false,\n showPerformance: false,\n rspackCache: true,\n rsdoctor,\n infrastructureLogging: {\n appendOnly: true,\n level: 'warn',\n },\n newTreeshaking: this.store.empConfig.isESM,\n },\n this.store.empOptions.debug,\n )\n }\n get build() {\n const staticDir = this.store.empOptions.build?.staticDir ? `${this.store.empOptions.build?.staticDir}/` : ''\n return this.assign<Required<BuildType>>(\n {\n outDir: 'dist',\n staticDir,\n assetsDir: 'assets',\n publicDir: 'public',\n chunkIds: this.store.isDev ? 'named' : 'deterministic',\n moduleIds: this.store.isDev ? 'named' : 'deterministic',\n sourcemap: this.store.isDev,\n minify: !this.store.isDev,\n minOptions: {},\n cssminOptions: {},\n target: 'es5',\n polyfill: false,\n // polyfillInclude: ['es.object.values', 'es.object.entries', 'es.array.flat'],\n polyfillInclude: [],\n coreJsFeatures: 'stable',\n externalHelpers: false,\n browserslist: this.store.browserslistOptions.default,\n swcConfig: {},\n devtool: 'source-map',\n },\n {...this.store.empOptions.build, staticDir},\n )\n }\n get html() {\n const meta: any = this.store.empOptions.html?.template\n ? {}\n : {\n charset: {charset: 'utf-8'},\n 'http-equiv': {'http-equiv': 'X-UA-Compatible', content: 'IE=edge'},\n viewport: {\n name: 'viewport',\n content: 'width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0',\n },\n keywords: {keywords: ''},\n description: {description: ''},\n }\n const op = this.assign<HtmlType>(\n {\n lang: 'zh-CN',\n title: 'EMP',\n inject: 'body',\n minify: !this.store.isDev,\n scriptLoading: !this.isESM ? 'defer' : 'module',\n meta,\n files: {\n css: [],\n js: [],\n },\n tags: {\n headTags: [],\n bodyTags: [],\n },\n },\n this.store.empOptions.html,\n )\n // if (this.isESM && op.files && op.files.js) {\n // op.files.js = []\n // }\n return op\n }\n get entries() {\n return this.store.empOptions.entries ? this.store.empOptions.entries : {}\n }\n get server(): ServerType {\n const sf: ServerType = {\n host: `0.0.0.0`,\n port: 8000,\n open: process.platform === 'darwin',\n // open: false,\n // liveReload: false,\n hot: true,\n watchFiles: ['src/**/*.html'],\n static: [\n {\n directory: this.store.publicDir,\n watch: this.store.isDev,\n },\n // 暴露 d.ts 文件\n /* {\n directory: this.store.outDir,\n watch: this.store.isDev,\n publicPath: this.base,\n staticOptions: {\n setHeaders: function (res: any, path: string) {\n if (path.toString().endsWith('.d.ts')) res?.set('Content-Type', 'application/javascript; charset=utf-8')\n },\n },\n }, */\n ],\n allowedHosts: ['all'],\n historyApiFallback: true,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',\n 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization',\n },\n // client: {\n // webSocketURL: 'ws://172.29.104.208:8000/ws',\n // },\n }\n // server http2 已经弃置 需要特殊处理\n if (this.store.empOptions.server?.http2) {\n BaseScript.httpsType = 'h2'\n delete this.store.empOptions.server.http2\n }\n return this.assign(sf, this.store.empOptions.server)\n }\n get empShare(): EMPShareType {\n return this.assign({name: '', filename: 'emp.js', shared: {}}, this.store.empOptions.empShare)\n }\n get css(): Required<EmpOptions['css']> {\n return this.assign({sass: {mode: 'modern', warnRuleAsWarning: false}}, this.store.empOptions.css)\n }\n get output(): Output {\n //TODO 考虑辨识度更好的方案\n const contenthashName = !this.store.isDev ? '.[contenthash:8]' : '.[contenthash:8]'\n //HMR is not working for css when output.cssFilename contains [hash] or [contenthash]\n const cssContentHashName = !this.store.isDev ? '.[contenthash:8]' : ''\n const {assetsDir, staticDir} = this.store.empConfig.build\n const output: Output = {\n publicPath: this.store.empConfig.base ? this.store.empConfig.base : 'auto',\n // publicPath: this.base,\n crossOriginLoading: 'anonymous',\n filename: `${staticDir}js/[name]${contenthashName}.js`,\n cssFilename: `${staticDir}css/[name]${cssContentHashName}.css`,\n cssChunkFilename: `${staticDir}css/[name]${cssContentHashName}.css`,\n assetModuleFilename: `${staticDir}${assetsDir}/[name]${contenthashName}[ext][query]`,\n path: this.store.outDir,\n clean: true,\n uniqueName: this.store.uniqueName,\n }\n // 添加后 ESM 样式失效 待观察\n // if (this.isESM) {\n // output = this.assign(\n // {\n // chunkFormat: 'module',\n // chunkLoading: 'import',\n // library: {\n // type: 'module',\n // },\n // },\n // output,\n // )\n // }\n // console.log('output', output)\n // 防止清除 dist目录 导致 类型文件丢失\n // if (this.store.isDev && this.store.empConfig.empShare.dts !== false) {\n // output.clean = false\n // }\n return this.assign(output, this.store.empOptions.output)\n }\n get define() {\n let dlist: any = {mode: this.store.mode, env: this.store.cliOptions.env}\n if (this.store.empOptions.define) {\n dlist = {...dlist, ...this.store.empOptions.define}\n }\n return this.setDefine(dlist)\n }\n private setDefine(o: {[k: string]: any}): {[k: string]: string} {\n const defineFix = this.store.empOptions.defineFix ? this.store.empOptions.defineFix : this.isESM ? 'esm' : 'cjs'\n const options: any = {}\n Object.keys(o).map(key => {\n if (defineFix === 'all') {\n options[`import.meta.env.${key}`] = JSON.stringify(o[key])\n options[`process.env.${key}`] = JSON.stringify(o[key])\n } else if (defineFix === 'esm') {\n options[`import.meta.env.${key}`] = JSON.stringify(o[key])\n } else if (defineFix === 'cjs') {\n options[`process.env.${key}`] = JSON.stringify(o[key])\n } else if (defineFix === 'none') {\n options[`${key}`] = JSON.stringify(o[key])\n }\n })\n return options\n }\n get externals() {\n const o = this.assign(this.empShareLib.externals, this.store.empOptions.externals)\n return o\n }\n get resolve() {\n const rl = deepAssign<Resolve>(\n {\n alias: {\n src: this.store.resolve('src'),\n '@': this.store.resolve('src'),\n },\n extensions: [\n '...',\n '.js',\n '.jsx',\n '.mjs',\n '.ts',\n '.tsx',\n '.css',\n '.less',\n '.scss',\n '.sass',\n '.json',\n '.wasm',\n '.vue',\n '.svg',\n '.svga',\n ],\n },\n this.store.empOptions.resolve,\n )\n return rl\n }\n async syncEmpOptions() {\n logger.time('[store][empConfig]SyncEmpOptions')\n const empConfigPath = await getEmpConfigPath()\n if (!empConfigPath || !fs.existsSync(empConfigPath)) return\n const empOptionsFn = await loadConfig(empConfigPath)\n if (typeof empOptionsFn === 'function') {\n this.store.empOptions = await empOptionsFn(this.store)\n } else {\n this.store.empOptions = empOptionsFn || {}\n }\n logger.timeEnd('[store][empConfig]SyncEmpOptions')\n }\n get moduleTransformRule() {\n // const moduleTransformExclude: RuleSetRule['exclude'] = {and: [/(node_modules|bower_components)/]}\n const {moduleTransform} = this.store.empOptions\n const tf: ModuleTransform = this.assign({defaultExclude: false}, moduleTransform)\n const moduleTransformExclude: any = {and: [], not: []}\n if (tf.defaultExclude === true) {\n moduleTransformExclude.and.push(/(node_modules|bower_components)/)\n }\n if (tf?.exclude) {\n moduleTransformExclude.and = moduleTransformExclude.and.concat(tf.exclude)\n }\n if (moduleTransform?.include) {\n moduleTransformExclude.not = tf.include\n }\n // console.log('moduleTransformExclude', moduleTransformExclude)\n return moduleTransformExclude\n }\n get cacheDir() {\n return this.store.empOptions.cacheDir ? this.store.empOptions.cacheDir : 'node_modules/.emp-cache'\n }\n get ignoreWarnings() {\n return this.store.empOptions.ignoreWarnings ? this.store.empOptions.ignoreWarnings : [/Conflicting order/]\n }\n get autoPages() {\n let autoPages = undefined\n if (this.store.empOptions.autoPages) {\n autoPages = typeof this.store.empOptions.autoPages === 'boolean' ? {} : this.store.empOptions.autoPages\n autoPages = this.assign({path: 'pages'}, autoPages)\n }\n return autoPages\n }\n}\nexport default new EmpConfig()\n","import fs from 'fs-extra'\nimport type {GlobalStore} from 'src/store'\n\nclass RspackCommon {\n public store!: GlobalStore\n async setup(store: GlobalStore) {\n this.store = store\n const runFuns = [\n this.common(),\n this.stats(),\n this.devServer(),\n // this.assets(),\n this.optimization(),\n this.checkTsconfig(),\n ]\n //\n await Promise.all(runFuns)\n }\n async common() {\n this.store.merge({\n node: {\n global: true,\n },\n experiments: {\n // rspackFuture: {\n // // disableTransformByDefault: false, // 开启默认转换\n // // 移除 experiments.rspackFuture.disableApplyEntryLazily\n // // disableApplyEntryLazily: true,\n // // rspack 0.6 默认开启新版 tree shaking\n // newTreeshaking: this.store.empConfig.debug.newTreeshaking, // 该功能启用了与 webpack 相同的新摇树优化实现,可以生成更高效和更小的代码。\n // },\n outputModule: this.store.empConfig.isESM, //将尽可能输出符合 ECMAScript 语法的代码\n topLevelAwait: true,\n // lazyCompilation: this.store.isDev, // 开启懒编译功能\n // lazyCompilation: {\n // imports: true,\n // entries: true,\n // test(module: any) {\n // console.log(module)\n // const isMyClient = module.nameForCondition().endsWith('reactRefreshEntry.js')\n // console.log(module, isMyClient)\n // return !isMyClient\n // },\n // },\n css: true,\n },\n target: this.store.empConfig.target, // default [web,es5]\n infrastructureLogging: this.store.empConfig.debug.infrastructureLogging,\n context: this.store.root,\n mode: this.store.mode,\n cache: this.store.empConfig.debug.rspackCache,\n // devtool: this.store.empConfig.build.sourcemap ? 'source-map' : false, //Recommended\n devtool: this.store.empConfig.build.sourcemap ? this.store.empConfig.build.devtool : false, //Recommended\n // builtins: {\n // /**\n // 'builtins.devFriendlySplitChunks = true' has been deprecated, please switch to 'builtins.devFriendlySplitChunks = false' to use webpack's behavior.\n // Set env `RSPACK_DEP_WARNINGS` to 'false' to temporarily disable deprecation warnings.\n // */\n // // devFriendlySplitChunks: true,\n // // css: {\n // // modules: {\n // // // exportsOnly: false,\n // // localIdentName: this.store.isDev ? '[path][name]-[local]-[hash:5]' : '[local]-[hash:5]',\n // // },\n // // },\n // },\n output: this.store.empConfig.output,\n resolve: this.store.empConfig.resolve,\n externals: this.store.empConfig.externals,\n ignoreWarnings: this.store.empConfig.ignoreWarnings,\n watchOptions: {\n ignored: ['**/node_modules/**', '**/@mf-types/**'],\n },\n })\n }\n async checkTsconfig() {\n const tsconfigPath = this.store.resolve('tsconfig.json')\n const isExist = await fs.exists(tsconfigPath)\n if (isExist) {\n const resolve: any = {\n // tsconfig: {\n // configFile: tsconfigPath,\n // references: 'auto',\n // },\n // tsConfigPath: tsconfigPath,\n tsConfig: tsconfigPath,\n }\n this.store.merge({resolve})\n }\n }\n async stats() {\n this.store.merge({\n stats: {\n colors: true,\n all: false,\n assets: false,\n chunks: false,\n timings: true,\n version: true,\n },\n })\n }\n async devServer() {\n this.store.merge({\n devServer: this.store.empConfig.server,\n })\n }\n /* async assets() {\n this.store.chain.merge({\n module: {\n rule: {\n assets: {\n test: /\\.(png|jpe?g|gif|webp|ico|otf|ttf|eot|woff|woff2|svga)$/i,\n type: 'asset/resource',\n },\n },\n },\n })\n } */\n async optimization() {\n const optimization = {\n // moduleIds: 'named',\n // chunkIds: 'named',\n moduleIds: this.store.empConfig.build.moduleIds,\n chunkIds: this.store.empConfig.build.chunkIds,\n minimize: this.store.empConfig.build.minify,\n splitChunks: {\n chunks: 'async',\n // chunks: 'all',\n cacheGroups: {\n // defaultVendors: {\n // filename: 'vendors-[name].js',\n // enforce: true,\n // },\n },\n },\n }\n if (this.store.empConfig.build.polyfill) {\n optimization.splitChunks.cacheGroups = {\n // empShare: {\n // test: /[\\\\/]node_modules[\\\\/](@module-federation)[\\\\/]/,\n // name: 'empShare',\n // chunks: 'all',\n // },\n // coreJs: {\n // test: /[\\\\/]node_modules[\\\\/](core-js)[\\\\/]/,\n // name: 'coreJs',\n // chunks: 'all',\n // enforce: true,\n // },\n }\n }\n this.store.chain.merge({\n optimization,\n })\n }\n}\nexport default new RspackCommon()\n","import type {GlobalStore} from 'src/store'\nexport class RspackCss {\n public store!: GlobalStore\n async setup(store: GlobalStore) {\n this.store = store\n const runFuns = [this.sass(), this.less(), this.css()]\n await Promise.all(runFuns)\n }\n async sass() {\n const {rule, use} = this.store.chainName\n const options: any = {}\n const {sass} = this.store.empConfig.css || {sass: {}}\n if (sass.mode === 'modern') {\n options.implementation = sass.implementation ? sass.implementation : require.resolve('sass-embedded')\n options.api = sass.api ? sass.api : 'legacy'\n options.sourceMap = this.store.empConfig.build.sourcemap\n if (sass.sassOptions) options.sassOptions = sass.sassOptions\n }\n /**\n * webpackImporter default true\n * warnRuleAsWarning default false\n */\n if (typeof sass.warnRuleAsWarning !== 'undefined') {\n options.warnRuleAsWarning = sass.warnRuleAsWarning\n }\n if (typeof sass.webpackImporter !== 'undefined') {\n options.webpackImporter = sass.webpackImporter\n }\n //\n this.store.chain.merge({\n module: {\n rule: {\n [rule.sass]: {\n test: /\\.(sass|scss)$/,\n use: {\n [use.sass]: {\n loader: require.resolve('sass-loader'),\n options,\n },\n },\n type: 'css/auto',\n },\n },\n },\n })\n }\n async less() {\n const {rule, use} = this.store.chainName\n const lessLoader = {\n loader: require.resolve('less-loader'),\n options: {\n lessOptions: {\n javascriptEnabled: true,\n },\n },\n }\n this.store.chain.merge({\n module: {\n rule: {\n [rule.less]: {\n test: /\\.less$/,\n use: {\n [use.less]: lessLoader,\n },\n type: 'css/auto',\n },\n },\n },\n })\n }\n async css() {\n const {rule} = this.store.chainName\n this.store.chain.merge({\n module: {\n rule: {\n [rule.css]: {\n test: /\\.css$/,\n use: {},\n type: 'css/auto',\n },\n },\n },\n })\n }\n}\nexport default new RspackCss()\n","import path from 'node:path'\nimport type {RspackOptions} from '@rspack/core'\nimport HtmlWebpackPlugin from 'html-webpack-plugin'\nimport {glob, logger} from 'src/helper'\nimport {deepAssign} from 'src/helper/utils'\nimport type {GlobalStore} from 'src/store'\nimport type {EmpConfig} from '../empConfig'\nimport {HtmlEmpShareLibPlugin, HtmlImportMapPlugin} from './hook'\n\ntype EntriesConfigType = {\n [chunk: string]: {\n html: EmpConfig['html']\n entry: RspackOptions['entry']\n }\n}\n\nclass RspackEntries {\n public store!: GlobalStore\n public entriesConfig: EntriesConfigType = {}\n async setup(store: GlobalStore) {\n this.store = store\n //\n await this.init()\n this.toConfig()\n // console.log('[entriesConfig]', JSON.stringify(this.entriesConfig, null, 2))\n }\n private setHtmlConfig(c: EmpConfig['html'], chunks: string[]) {\n c.template = this.setTemplate(c.template)\n c.favicon = this.setFavicion(c.favicon)\n c.chunks = chunks\n c.filename = `${chunks[0]}.html`\n if (this.store.empConfig.base) c.publicPath = this.store.empConfig.base\n // 增加 shareLib支持\n // if (this.store.empConfig.empShareLib) {\n // c.files = deepAssign(c.files, this.store.empConfig.empShareLib.externalAssets)\n // }\n // c.inject = 'body'\n c.tags = c.tags || {}\n // importMap\n\n return c\n }\n /**\n * chunk name 格式化 去除 后缀\n * @param filename\n * @returns\n */\n private setChunk(filename: string) {\n return filename.replace(path.extname(filename), '').replace(`${this.store.empConfig.appSrc}${path.sep}`, '')\n }\n private setTemplate(template?: string) {\n return template ? this.store.resolve(template) : this.store.empResolve(path.join('template', 'index.html'))\n }\n private setFavicion(favicon?: string) {\n return favicon ? this.store.resolve(favicon) : this.store.empResolve(path.join('template', 'favicon.ico'))\n }\n /**\n *\n * @param filename 文件名\n * @param op html plugin 配置\n * @param absPath 文件 绝对路径\n */\n private setEntryItem(filename: string, op: EmpConfig['html'], absPath?: string) {\n absPath = absPath ? absPath : this.store.resolve(path.join(this.store.empConfig.appSrc, filename))\n const chunkName = this.setChunk(filename)\n const chunks = [absPath]\n this.entriesConfig[chunkName] = {\n entry: {[chunkName]: chunks},\n html: this.setHtmlConfig(op, [chunkName]),\n }\n // 入口注入到store 作为 chain 或者 after config 后使用\n this.store.entries[chunkName] = chunks\n }\n setRspackHtmlPlugin(config: EmpConfig['html'], chunk: string) {\n // const htmlPlugin: any = HtmlRspackPlugin\n //html plugin run\n this.store.chain.plugin(`${this.store.chainName.plugin.html.prefix}${chunk}`).use(HtmlWebpackPlugin, [config])\n if (this.store.empConfig.empShareLib)\n config.files = deepAssign(config.files, this.store.empConfig.empShareLib.externalAssets)\n //html inject js css\n this.store.chain\n .plugin(`${this.store.chainName.plugin.html.empSharePrefix}${chunk}`)\n .use(HtmlEmpShareLibPlugin, [config.files, chunk])\n //html inject importMap\n if (this.store.empConfig.empShareLib.useImportMap) {\n this.store.chain\n .plugin(`${this.store.chainName.plugin.html.importMapPrefix}${chunk}`)\n .use(HtmlImportMapPlugin, [this.store.empConfig.empShareLib.importMap, chunk])\n }\n //\n }\n setRspackEntry(entry: RspackOptions['entry']) {\n this.store.merge({entry})\n }\n async init() {\n if (this.store.empConfig.autoPages) {\n await this.setAutoPage()\n } else {\n await this.setDefaultEntry()\n this.setEntryByConfig()\n }\n }\n async setAutoPage() {\n logger.time('setAutoPage')\n const pathFolder = this.store.empConfig.autoPages?.path || 'pages'\n const autoPath = path.join(this.store.appSrc, pathFolder)\n const exp = path.join(autoPath, '**', `*.{ts,tsx,jsx,js}`)\n let entries = await glob([exp], {windowsPathsNoEscape: true})\n entries = entries.map(d => d.replace(`${autoPath}${path.sep}`, ''))\n entries.map(filename => {\n const op = this.store.empConfig.entries[filename] || {}\n this.setEntryItem(filename, {...this.store.empConfig.html, ...op}, path.join(autoPath, filename))\n })\n logger.timeEnd('setAutoPage')\n }\n async setDefaultEntry() {\n logger.time('[store][empConfig]SetDefaultEntry')\n const appEntry = path.join(\n this.store.appSrc,\n this.store.empConfig.appEntry ? this.store.empConfig.appEntry : `index.{ts,tsx,jsx,js}`,\n )\n const elist = await glob([appEntry], {windowsPathsNoEscape: true})\n if (elist[0]) {\n const filename = path.join(\n this.store.empConfig.appSrc,\n Object.keys(this.store.empConfig.entries).length > 0 && this.store.empConfig.appEntry\n ? this.store.empConfig.appEntry\n : 'index',\n )\n this.setEntryItem(filename, this.store.empConfig.html, elist[0])\n }\n logger.timeEnd('[store][empConfig]SetDefaultEntry')\n }\n setEntryByConfig() {\n if (Object.keys(this.store.empConfig.entries).length > 0) {\n for (const [filename, op] of Object.entries(this.store.empConfig.entries)) {\n this.setEntryItem(filename, {...this.store.empConfig.html, ...op})\n }\n }\n }\n toConfig() {\n for (const [chunk, op] of Object.entries(this.entriesConfig)) {\n this.setRspackHtmlPlugin(op.html, chunk)\n this.setRspackEntry(op.entry)\n }\n }\n}\n\nexport default new RspackEntries()\n","import path from 'node:path'\nimport type {SwcLoaderOptions} from '@rspack/core'\n// import {require} from 'src/helper/nodePolyfill'\nimport {deepAssign, getPkgVersion} from 'src/helper/utils'\nimport type {GlobalStore} from 'src/store'\n//\nclass RspackModule {\n public store!: GlobalStore\n private swcJsOptions: SwcLoaderOptions = {}\n private swcTsOptions: SwcLoaderOptions = {}\n private coreJs = {\n version: '3',\n alias: '',\n path: '',\n }\n async setup(store: GlobalStore) {\n this.store = store\n this.swcInitOptions()\n await this.run()\n }\n async run() {\n const runFuns = [this.jsDataUrl(), this.files(), this.scripts(), this.rspackGenerator(), this.rspackParser()]\n await this.store.empConfig.lifeCycle.beforeModule()\n await Promise.all(runFuns)\n await this.store.empConfig.lifeCycle.afterModule()\n }\n private rspackGenerator() {\n const localIdentName = this.store.isDev ? '[path][name]-[local]-[hash:5]' : '[local]-[hash:5]'\n this.store.chain.merge({\n module: {\n generator: {\n css: {localIdentName},\n 'css/auto': {localIdentName},\n 'css/module': {localIdentName},\n },\n },\n })\n }\n private rspackParser() {\n const namedExports = false\n this.store.chain.merge({\n module: {\n parser: {\n css: {namedExports},\n 'css/auto': {namedExports},\n 'css/module': {namedExports},\n },\n },\n })\n }\n private get isPolyfill() {\n // return this.store.empConfig.build.polyfill && ['es3', 'es5'].includes(this.store.empConfig.build.target)\n return this.store.empConfig.build.polyfill\n }\n private swcParser(lang: string) {\n switch (lang) {\n case 'js':\n return {\n syntax: 'ecmascript',\n jsx: true,\n decorators: true,\n decoratorsBeforeExport: false,\n }\n case 'ts':\n return {\n syntax: 'typescript',\n decorators: true,\n tsx: true,\n dynamicImport: true,\n }\n }\n }\n private swcJsc(lang: string) {\n const {target, externalHelpers} = this.store.empConfig.build\n return {\n parser: this.swcParser(lang),\n transform: {},\n target,\n externalHelpers,\n // Requires v1.2.50 or upper and requires target to be es2016 or upper.\n // keepClassNames: true,\n // https://github.com/swc-project/swc/issues/6403 Avoid the webpack magic comment to be removed\n preserveAllComments: true,\n }\n }\n private get swcCoreVersion() {\n const [major, minor] = this.coreJs.version.split('.')\n return `${major}.${minor}`\n }\n private swcOptions(lang: string): SwcLoaderOptions {\n const op: any = {\n jsc: deepAssign(this.swcJsc(lang), {...this.store.empConfig.build.swcConfig}),\n /**\n * externalHelpers *\n * mode usage *\n */\n // Source Type\n isModule: 'unknown',\n }\n if (this.isPolyfill) {\n delete op.jsc.target\n //\n op.env = {\n coreJs: this.swcCoreVersion,\n // modules: false,\n // loose: true,\n // debug: true,\n targets: this.store.empConfig.build.browserslist,\n }\n /**\n * ESM Mode 没有 entry\n */\n if (!this.store.empConfig.isESM) {\n op.env.mode = this.store.empConfig.build.polyfill\n }\n if (this.store.empConfig.build.polyfill === 'usage') {\n /**\n * enable esnext polyfill\n * https://github.com/swc-project/swc/blob/b43e38d3f92bc889e263b741dbe173a6f2206d88/crates/swc_ecma_preset_env/src/corejs3/usage.rs#L75\n */\n op.env.shippedProposals = true\n /**\n * TODO 临时支持 Module Federation\n */\n op.env.include = this.store.empConfig.build.polyfillInclude\n }\n }\n return op\n }\n swcInitOptions() {\n const {externalHelpers} = this.store.empConfig.build\n if (externalHelpers) {\n this.store.chain.resolve.alias.set('@swc/helpers', path.dirname(require.resolve('@swc/helpers/package.json')))\n }\n //\n this.coreJs.path = require.resolve('core-js/package.json')\n const version = getPkgVersion(this.coreJs.path)\n if (version) this.coreJs.version = version\n this.coreJs.alias = path.dirname(this.coreJs.path)\n if (this.store.empConfig.build.polyfill) {\n this.store.chain.resolve.alias.set('core-js', this.coreJs.alias)\n // if (this.store.empConfig.build.polyfill === 'usage') {\n this.store.chain.module.rule('javascript').exclude.add(/core-js/)\n this.store.chain.module.rule('typescript').exclude.add(/core-js/)\n // }\n }\n //\n this.swcTsOptions = this.swcOptions('ts')\n this.swcJsOptions = this.swcOptions('js')\n //\n }\n jsDataUrl() {\n this.store.chain.module\n .rule('jsDataUrl')\n .merge({mimetype: {or: ['text/javascript', 'application/javascript']}})\n .resolve.set('fullySpecified', false)\n .end()\n .use('swcJsParser')\n .loader('builtin:swc-loader')\n .options(this.swcJsOptions)\n }\n async scripts() {\n /**\n * module.rule.sideEffects\n * 你可以使用 module.rule.sideEffects 覆盖某些模块的 sideEffects 选项。\n */\n // const sideEffects = false\n // const exclude = this.store.empConfig.moduleTransformRule\n // const exclude: any = [{and: [/(node_modules|bower_components)/], not: [/@module-federation/]}]\n const exclude: any = []\n const {rule, use} = this.store.chainName\n this.store.chain.merge({\n module: {\n parser: {\n javascript: {\n exportsPresence: 'error',\n importExportsPresence: 'error',\n },\n },\n rule: {\n [rule.mjs]: {\n test: /\\.m?js/,\n resolve: {\n fullySpecified: false,\n },\n },\n [rule.typescript]: {\n test: /\\.(ts|tsx)$/,\n exclude,\n // sideEffects, // 标记模块是否存在副作用。\n use: {\n [use.swc]: {\n loader: 'builtin:swc-loader',\n options: this.swcTsOptions,\n },\n },\n },\n [rule.javascript]: {\n test: /\\.((m|c)?js|jsx)$/,\n exclude,\n // sideEffects, // 标记模块是否存在副作用。\n use: {\n [use.swc]: {\n loader: 'builtin:swc-loader',\n options: this.swcJsOptions,\n },\n },\n },\n [rule.sourceMap]: {\n test: /\\.[tj]sx?$/,\n enforce: 'pre',\n use: {\n [use.sourceMap]: {\n loader: require.resolve('source-map-loader'),\n },\n },\n },\n },\n },\n })\n }\n\n async files() {\n const {rule} = this.store.chainName\n this.store.chain.merge({\n module: {\n rule: {\n [rule.svg]: {\n test: /\\.svg$/,\n type: 'asset/resource',\n },\n },\n },\n })\n\n // asset/inline\n this.store.chain.merge({\n module: {\n rule: {\n [rule.inline]: {\n resourceQuery: /inline/,\n type: 'asset/inline',\n },\n },\n },\n })\n // asset/resource\n // test: /\\.(png|jpe?g|gif|webp|ico|otf|ttf|eot|woff|woff2|svga)$/i,\n this.store.chain.merge({\n module: {\n rule: {\n [rule.image]: {\n test: /\\.(png|jpe?g|gif|webp|ico)$/i,\n type: 'asset/resource',\n },\n [rule.font]: {\n test: /\\.(|otf|ttf|eot|woff|woff2)$/i,\n type: 'asset/resource',\n },\n [rule.svga]: {\n test: /\\.(svga)$/i,\n type: 'asset/resource',\n },\n },\n },\n })\n }\n}\nexport default new RspackModule()\n","import fs from 'fs'\nimport {ModuleFederationPlugin} from '@module-federation/enhanced/rspack'\nimport rspack from '@rspack/core'\nimport type {GlobalStore} from 'src/store'\nimport type {RsdoctorRspackPluginOptions} from 'src/types/config'\nclass RspackPlugin {\n public store!: GlobalStore\n async setup(store: GlobalStore) {\n this.store = store\n const runFuns = [\n this.define(),\n this.anylayze(),\n this.progress(),\n this.copy(),\n this.empShare(),\n // this.html()\n ///////////////////////\n this.minify(),\n this.redoctor(),\n ]\n //\n await this.store.empConfig.lifeCycle.beforePlugin()\n await Promise.all(runFuns)\n await this.store.empConfig.lifeCycle.afterPlugin()\n }\n async anylayze() {\n // console.log('this.store.cliOptions.analyze', this.store.cliOptions)\n if (!this.store.cliOptions.analyze) return\n const {\n default: {BundleAnalyzerPlugin},\n } = await import('webpack-bundle-analyzer')\n this.store.chain.plugin(this.store.chainName.plugin.bundleAnalyzer).use(BundleAnalyzerPlugin, [\n {\n analyzerPort: this.store.empConfig.server.port,\n defaultSizes: 'gzip',\n analyzerHost: this.store.getLanIp() || '127.0.0.1',\n },\n ])\n }\n // async html() {\n // const htmlPlugin: any = await import('@rspack/plugin-html')\n // //TODO 修正 两个 default\n // const HtmlRspackPlugin = htmlPlugin.default.default\n // const op = this.store.empConfig.html\n // this.store.chain.plugin('htmlPlugin').use(HtmlRspackPlugin, [op])\n // }\n async define() {\n this.store.chain.plugin(this.store.chainName.plugin.define).use(rspack.DefinePlugin, [this.store.empConfig.define])\n }\n async copy() {\n const publicFrom = this.store.resolve('public')\n //空文件夹不执行复制\n if (fs.existsSync(publicFrom) && fs.readdirSync(publicFrom).length > 0)\n this.store.chain.plugin(this.store.chainName.plugin.copy).use(rspack.CopyRspackPlugin, [\n {\n patterns: [\n {\n from: publicFrom,\n to: this.store.resolve(this.store.empConfig.build.outDir),\n noErrorOnMissing: true,\n globOptions: {\n // 禁止 MACOS .DS_Store 复制到代码里\n ignore: ['**/.DS_Store'],\n },\n },\n ],\n },\n ])\n }\n async progress() {\n if (!this.store.empConfig.debug.progress) return\n this.store.chain.plugin(this.store.chainName.plugin.progress).use(rspack.ProgressPlugin, [\n {\n prefix: 'EMP',\n },\n ])\n }\n async empShare() {\n const {isEmpshare} = this.store.empConfig.empShareLib\n if (!isEmpshare) return\n // const {ModuleFederationPluginV1, ModuleFederationPlugin} = rspack.container\n // const mfp = version === 1 ? ModuleFederationPluginV1 : ModuleFederationPlugin\n const mfp = ModuleFederationPlugin\n this.store.chain\n .plugin(this.store.chainName.plugin.empShare)\n .use(mfp, [this.store.empConfig.empShareLib.pluginConfig])\n // empShare Polyfill\n // this.store.chain.plugin('empSharePolyfill').use(EmpSharePolyfillPlugin)\n }\n // production plugin\n minify() {\n this.store.chain.optimization.minimize(this.store.mode === 'production')\n // min js\n this.store.chain.optimization\n .minimizer(this.store.chainName.minimizer.minJs)\n .use(rspack.SwcJsMinimizerRspackPlugin, [this.store.empConfig.build.minOptions])\n // min css\n this.store.chain.optimization\n .minimizer(this.store.chainName.minimizer.minCss)\n // .use(rspack.SwcCssMinimizerRspackPlugin, [{}])\n .use(rspack.LightningCssMinimizerRspackPlugin, [this.store.empConfig.build.cssminOptions])\n }\n redoctor() {\n if (!this.store.empConfig.debug.rsdoctor) return\n const {RsdoctorRspackPlugin} = require('@rsdoctor/rspack-plugin')\n let op: RsdoctorRspackPluginOptions = {}\n if (typeof this.store.empConfig.debug.rsdoctor === 'object') op = this.store.empConfig.debug.rsdoctor\n this.store.chain.plugin(this.store.chainName.plugin.rsdoctor).use(RsdoctorRspackPlugin, [op])\n }\n}\n\nexport default new RspackPlugin()\n","import type {GlobalStore} from 'src/store'\nimport rspackCommon from 'src/store/rspack/common'\nimport rspackCss from 'src/store/rspack/css'\nimport rspackEntries from 'src/store/rspack/entries'\nimport rspackModule from 'src/store/rspack/module'\nimport rspackPlugin from 'src/store/rspack/plugin'\nexport class RspackStore {\n public store!: GlobalStore\n async setup(store: GlobalStore) {\n this.store = store\n // 初始化所有配置\n const runFuns = [\n rspackCommon.setup(this.store),\n rspackModule.setup(this.store),\n rspackPlugin.setup(this.store),\n rspackEntries.setup(this.store),\n rspackCss.setup(this.store),\n ]\n await Promise.all(runFuns)\n // 执行 [emp-config] 里面的 plugins 函数\n await this.store.empConfig.lifeCycle.beforeEmpPlugin()\n await this.store.empConfig.plugins()\n await this.store.empConfig.lifeCycle.afterEmpPlugin()\n // 执行 [emp-config] 里面的 chain 函数\n await this.store.empConfig.chain()\n }\n}\nexport default new RspackStore()\n","import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport util from 'node:util'\nimport type {Configuration as RsConfig, RspackOptions} from '@rspack/core'\nimport logger from 'src/helper/logger'\nimport {deepAssign, getLanIp, vCompare} from 'src/helper/utils'\nimport empConfig, {type EmpConfig} from 'src/store/empConfig'\nimport rspackStore from 'src/store/rspack'\nimport type {EmpOptions} from 'src/types/config'\nimport type {EMPModeType} from 'src/types/env'\nimport WPChain from 'webpack-chain'\nimport {chainName} from './chain'\nexport class GlobalStore {\n /**\n * EMP Version\n * @default package version\n */\n public empPkg: any = {dependencies: {}, devDependencies: {}, version: '2.0.0', name: ''}\n /**\n * 项目pkg信息\n */\n public pkg: any = {dependencies: {}, devDependencies: {}, version: '0.0.0', name: ''}\n /**\n * 项目根目录绝对路径\n * @default process.cwd()\n */\n public root = process.cwd()\n /**\n * emp 内部根路径\n * @default empRoot\n */\n public empRoot = path.resolve(__dirname, __filename).replace(`${path.sep}dist${path.sep}index.js`, '')\n /**\n * emp 执行代码路径\n */\n public empSource = path.resolve(this.empRoot, 'dist')\n /**\n * 获取项目 根目录绝对路径\n * (*) relativePath 可以是绝对路径\n * @param relativePath\n * @returns\n */\n public resolve = (relativePath: string) =>\n path.isAbsolute(relativePath) ? relativePath : path.resolve(this.root, relativePath)\n /**\n * 获取项目 emp内部根目录绝对路径\n * @param relativePath\n * @returns\n */\n public empResolve = (relativePath: string) => path.resolve(this.empRoot, relativePath)\n\n /**\n * 源码地址 绝对路径\n */\n public appSrc = ''\n /**\n * 源码生成目录 绝对路径\n */\n public outDir = ''\n /**\n * 静态文件目录 绝对路径\n */\n public publicDir = ''\n /**\n * 静态资源\n */\n public resource = {\n dir: '',\n key: '',\n cert: '',\n }\n public chainName = chainName\n /**\n * 缓存目录 绝对路径\n */\n public cacheDir = ''\n public mode: EMPModeType = 'development'\n public cliMode: 'dev' | 'prod' = 'dev'\n public isDev = true\n /**\n * 项目配置\n */\n public cliOptions: any\n public chain!: WPChain\n public rsConfig!: RsConfig\n public empOptions: EmpOptions = {}\n public empConfig!: EmpConfig\n // utils\n public vCompare = vCompare\n public deepAssign = deepAssign\n public getLanIp = getLanIp\n // 拓展\n public entries: {[chunkName: string]: RspackOptions['entry']} = {} // 获取所有入口名称\n public debug!: EmpConfig['debug']\n\n //\n async setup(mode: string, cliOptions: any) {\n logger.time('[store]Setup')\n // console.log(`[empRoot]`, this.empRoot)\n // 初始化 store 基础变量\n await this.initVars(mode, cliOptions)\n // 设置 empConfig\n this.empConfig = empConfig\n await this.empConfig.setup(this)\n this.debug = {...{}, ...this.empConfig.debug}\n // 初始化 store 绝对路径\n this.initPaths()\n // chain 实例化\n this.chain = new WPChain()\n // rspack setup\n await rspackStore.setup(this)\n //\n this.setLogger()\n this.toConfig()\n this.logConfig()\n logger.timeEnd('[store]Setup')\n }\n /**\n * 初始化 基础变量\n * @param mode cli名称\n * @param cliOptions cli配置\n */\n async initVars(mode: string, cliOptions: any) {\n this.cliOptions = cliOptions || {}\n this.cliMode = process.env.ENV as 'dev' | 'prod'\n this.mode = mode === 'dev' ? 'development' : 'production'\n this.isDev = this.mode === 'development'\n // 适配所有插件的构建环境\n process.env['NODE_ENV'] = mode === 'dev' ? 'development' : 'production'\n //\n // console.log('process.env', process.env.ENV)\n //\n const empPkg = require(this.empResolve('package.json'))\n const pkg = require(this.resolve('package.json'))\n this.empPkg = {...this.empPkg, ...empPkg}\n this.pkg = {...this.pkg, ...pkg}\n // init resource path\n this.resource.dir = path.join(this.empRoot, 'resource')\n this.resource.cert = path.join(this.resource.dir, 'emp.cert')\n this.resource.key = path.join(this.resource.dir, 'emp.key')\n }\n /**\n * 初始化 基础路径\n */\n initPaths() {\n this.appSrc = this.resolve(this.empConfig.appSrc)\n this.outDir = this.resolve(this.empConfig.build.outDir)\n this.publicDir = this.resolve(this.empConfig.build.publicDir)\n this.cacheDir = this.resolve(this.empConfig.cacheDir)\n }\n /**\n * 设置 日志等级\n */\n setLogger() {\n let logLevel = this.cliMode === 'dev' ? 'debug' : 'info'\n if (this.debug.loggerLevel) logLevel = this.debug.loggerLevel\n logger.setup({\n fullName: `EMP⚡${this.empPkg.version}${this.cliMode === 'dev' ? '.DEV' : ''}`,\n brandName: `EMP`,\n logLevel,\n })\n }\n merge(o: RspackOptions) {\n this.chain.merge(o)\n }\n /**\n * 同步 chain 配置到 rsConfig\n */\n toConfig() {\n this.rsConfig = this.chain.toConfig() as RsConfig\n }\n /**\n * 打印 config\n */\n logConfig() {\n if (this.debug.showRsconfig) {\n if (typeof this.debug.showRsconfig === 'string') {\n const rsconfigPath = path.join(this.root, this.debug.showRsconfig)\n fs.writeFile(rsconfigPath, JSON.stringify(this.rsConfig, null, 2))\n } else {\n this.debug.clearLog = false // 防止清空显示配置\n const defaultOp = {colors: true, depth: null}\n const op: any =\n typeof this.debug.showRsconfig === 'object' ? deepAssign(defaultOp, this.debug.showRsconfig) : defaultOp\n console.log(logger.link(`[Compile Config]`))\n console.log(util.inspect(this.rsConfig, op))\n // console.log(JSON.stringify(this.rsConfig))\n }\n }\n }\n get browserslistOptions() {\n return {\n default: ['chrome >= 87', 'edge >= 88', 'firefox >= 78', 'safari >= 14'],\n h5: ['iOS >= 9', 'Android >= 4.4', 'last 2 versions', '> 0.2%', 'not dead'],\n node: ['node >= 16'],\n }\n }\n get uniqueName(): string {\n return this.pkg.name.replaceAll('/', '_').replaceAll('@', '_').replaceAll('-', '_')\n }\n}\nexport default new GlobalStore()\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport type {Stats, StatsAsset} from '@rspack/core'\nimport {gzipSizeSync} from 'gzip-size'\nimport {blue, gray, green, magenta, red, white, yellow} from 'src/helper/color'\nimport store from 'src/store'\nimport logger from './logger'\nimport {timeFormat} from './utils'\n// RegExp\nexport const HTML_REGEX = /\\.html$/\nexport const JS_REGEX = /\\.(?:js|mjs|cjs|jsx)$/\nexport const TS_REGEX = /\\.(?:ts|mts|cts|tsx)$/\nexport const SCRIPT_REGEX = /\\.(?:js|jsx|mjs|cjs|ts|tsx|mts|cts)$/\nexport const TS_AND_JSX_REGEX = /\\.(?:ts|tsx|jsx|mts|cts)$/\nexport const SVG_REGEX = /\\.svg$/\nexport const CSS_REGEX = /\\.css$/\nexport const LESS_REGEX = /\\.less$/\nexport const SASS_REGEX = /\\.s(?:a|c)ss$/\nexport const CSS_MODULES_REGEX = /\\.module\\.\\w+$/i\nexport const NODE_MODULES_REGEX = /[\\\\/]node_modules[\\\\/]/\n\nexport const filterAsset = (asset: string) => !/\\.map$/.test(asset) && !/\\.LICENSE\\.txt$/.test(asset)\n\nconst getAssetColor = (size: number) => {\n if (size > 300 * 1000) {\n return red\n }\n if (size > 100 * 1000) {\n return yellow\n }\n return white\n}\nconst formatAsset = (asset: StatsAsset) => {\n const fileName = asset.name.split('?')[0]\n const sizeLabel = calcFileSize(asset.size)\n const name = path.basename(fileName)\n const folder = path.join(path.basename(store.empConfig.build.outDir), path.dirname(fileName))\n const contents = fs.readFileSync(path.join(store.empConfig.build.outDir, fileName))\n const size = contents.length\n const gzippedSize = gzipSizeSync(contents)\n const gzipSizeLabel = getAssetColor(gzippedSize)(calcFileSize(gzippedSize))\n return {\n size,\n folder,\n name,\n gzippedSize,\n sizeLabel,\n gzipSizeLabel,\n }\n}\n\nfunction printHeader(longestFileLength: number, longestLabelLength: number) {\n const longestLengths = [longestFileLength, longestLabelLength]\n const headerRow = ['File', 'Size', 'Gzipped'].reduce((prev, cur, index) => {\n const length = longestLengths[index]\n let curLabel = cur\n if (length) {\n curLabel = cur.length < length ? cur + ' '.repeat(length - cur.length) : cur\n }\n return `${prev + curLabel} `\n }, ' ')\n\n console.log(blue.bold(headerRow))\n}\nconst calcFileSize = (len: number) => {\n const val = len / 1000\n return `${val.toFixed(val < 1 ? 2 : 1)} kB`\n}\nconst coloringAssetName = (assetName: string) => {\n if (JS_REGEX.test(assetName)) {\n return yellow(assetName)\n }\n if (CSS_REGEX.test(assetName)) {\n return green(assetName)\n }\n if (HTML_REGEX.test(assetName)) {\n return blue(assetName)\n }\n return magenta(assetName)\n}\n\nexport async function printFileSizes(stats: Stats) {\n //\n const origin = stats.toJson({\n all: false,\n assets: true,\n timings: true,\n })\n //\n // timeDone(origin.time)\n //\n const filteredAssets = origin.assets!.filter(asset => filterAsset(asset.name))\n const assets = filteredAssets.map(formatAsset)\n assets.sort((a, b) => a.size - b.size)\n // console.log('filteredAssets', assets)\n // assets.map(a => {\n // console.log(a.name, calcFileSize(a.size))\n // })\n const longestLabelLength = Math.max(...assets.map(a => a.sizeLabel.length))\n const longestFileLength = Math.max(...assets.map(a => (a.folder + path.sep + a.name).length))\n //\n printHeader(longestFileLength, longestLabelLength)\n //\n let totalSize = 0\n let totalGzipSize = 0\n assets.forEach(asset => {\n let {sizeLabel} = asset\n const {name, folder, gzipSizeLabel} = asset\n const fileNameLength = (folder + path.sep + name).length\n const sizeLength = sizeLabel.length\n\n totalSize += asset.size\n totalGzipSize += asset.gzippedSize\n\n if (sizeLength < longestLabelLength) {\n const rightPadding = ' '.repeat(longestLabelLength - sizeLength)\n sizeLabel += rightPadding\n }\n\n let fileNameLabel = gray(asset.folder + path.sep) + coloringAssetName(asset.name)\n\n if (fileNameLength < longestFileLength) {\n const rightPadding = ' '.repeat(longestFileLength - fileNameLength)\n fileNameLabel += rightPadding\n }\n\n logger.info(` ${fileNameLabel} ${gray(sizeLabel)} ${gzipSizeLabel}`)\n })\n // console.log(longestLabelLength, longestFileLength)\n const totalSizeLabel = `${blue.bold('Total size:')} ${calcFileSize(totalSize)}`\n const gzippedSizeLabel = `${blue.bold('Gzipped size:')} ${calcFileSize(totalGzipSize)}`\n logger.info(`\\n ${totalSizeLabel}\\n ${gzippedSizeLabel}\\n`)\n logger.info(`${green('✓')} Ready in ${timeFormat(Number(origin.time))}\\n`)\n}\nexport function timeDone(mis: number | string = 0) {\n logger.info(`${green('✓')} Ready in ${timeFormat(Number(mis))}`)\n}\n","import {type RspackOptions, rspack} from '@rspack/core'\nimport {RspackDevServer} from '@rspack/dev-server'\nimport {timeDone} from 'src/helper/buildPrint'\nimport logger from 'src/helper/logger'\nimport {deepAssign} from 'src/helper/utils'\nimport {BaseScript} from 'src/script/base'\nimport store from 'src/store'\n// import RspackDevServer from 'webpack-dev-server'\nclass DevScript extends BaseScript {\n get rspackDevConfig(): RspackOptions {\n const cf: RspackOptions = deepAssign(store.rsConfig, {\n stats: {\n all: false,\n colors: true,\n assets: false,\n chunks: false,\n entrypoints: false,\n timings: false,\n version: false,\n errors: true,\n warnings: true,\n },\n devServer: {\n open: false,\n setupExitSignals: true,\n // app: () => app,\n // setupMiddlewares: wdm.setupMiddlewares,\n },\n })\n return cf\n }\n async devServerConfig() {\n const devServer = Object.assign({}, store.rsConfig.devServer)\n if (this.isHttps) {\n /**\n * 弃置options\n */\n if (devServer.https === true) {\n delete devServer.https\n }\n if (!devServer.server) {\n const [key, cert] = await this.getcert()\n devServer.server = {\n type: 'https',\n options: {\n key,\n cert,\n // minVersion: 'TLSv1.1',\n // key: fs.readFileSync(path.join(__dirname, './server.key')),\n // pfx: fs.readFileSync(path.join(__dirname, './server.pfx')),\n // cert: fs.readFileSync(path.join(__dirname, './server.crt')),\n // ca: fs.readFileSync(path.join(__dirname, './ca.pem')),\n // passphrase: 'webpack-dev-server',\n // requestCert: true,\n },\n }\n }\n }\n return devServer\n }\n override async run() {\n const compiler = rspack(this.rspackDevConfig)\n if (!store.rsConfig.devServer) {\n logger.error('devServer is not defined in config')\n return\n }\n const devServer = await this.devServerConfig()\n const serverApp = new RspackDevServer(devServer, compiler as any)\n //\n this.startOpen()\n if (store.empConfig.lifeCycle.beforeDevServe) await store.empConfig.lifeCycle.beforeDevServe()\n await serverApp.start()\n const showTimeDone = (s: any) => {\n const d = s?.toJson({all: false, colors: false, assets: false, chunks: false, timings: true})\n timeDone(d.time)\n }\n if (store.debug.showPerformance) compiler.hooks.afterDone.tap('done', showTimeDone)\n serverApp.middleware?.waitUntilValid(s => {\n if (!store.debug.showPerformance) showTimeDone(s)\n //\n if (store.empConfig.lifeCycle.afterDevServe) store.empConfig.lifeCycle.afterDevServe()\n //\n // compiler.close(e => {\n // console.log('compiler.close', e)\n // compiler.run(s => {\n // console.log('compiler.run', s)\n // })\n // })\n })\n }\n}\nexport default new DevScript()\n","import https from 'https'\nimport compression from 'compression'\nimport cors from 'cors'\nimport express, {type Express} from 'express'\n\nimport {BaseScript} from 'src/script/base'\n\nexport class HttpServer extends BaseScript {\n public app!: Express\n async init() {\n const app = express()\n app.use(compression())\n app.use(cors())\n this.app = app\n }\n async server() {\n if (this.isHttps) {\n const [key, cert] = await this.getcert()\n const httpsServer = https.createServer(\n typeof this.isHttps !== 'boolean'\n ? this.isHttps\n : {\n key,\n cert,\n },\n this.app,\n )\n httpsServer.listen(this.sf.port, async () => {\n this.startOpen()\n await this.onReady()\n })\n } else {\n this.app.listen(this.sf.port, async () => {\n this.startOpen()\n await this.onReady()\n })\n }\n }\n async onReady() {}\n async middleware() {}\n async start() {\n await this.init()\n await this.middleware()\n await this.server()\n }\n}\n","import fs from 'node:fs'\nimport fsp from 'node:fs/promises'\nimport path from 'path'\nimport express from 'express'\nimport {timeDone} from 'src/helper/buildPrint'\nimport logger from 'src/helper/logger'\nimport store from 'src/store'\nimport {HttpServer} from './httpBase'\n// import openBrowser from 'src/helper/openBrowser'\n\nexport class ServeScript extends HttpServer {\n timing = 0\n override async run() {\n this.timing = Date.now()\n if (!fs.existsSync(store.outDir)) {\n return logger.sysError(`emp serve must be executed after emp build,${store.outDir} not exist!`)\n }\n if (store.empConfig.lifeCycle.beforeServe) await store.empConfig.lifeCycle.beforeServe()\n this.start()\n }\n override async middleware() {\n const staticRoot = store.resolve(store.rsConfig.output?.path as any)\n this.app.use(express.static(staticRoot))\n // 默认入口 适配 single spa\n const html = await fsp.readFile(path.join(staticRoot, 'index.html'), 'utf8')\n this.app.get('*', (req, res) => res.send(html))\n }\n override async onReady(): Promise<void> {\n timeDone(Date.now() - this.timing)\n // if (store.empConfig.server.open) openBrowser(this.localUrl)\n //\n if (store.empConfig.lifeCycle.afterServe) await store.empConfig.lifeCycle.afterServe()\n }\n}\nexport default new ServeScript()\n","import {rspack} from '@rspack/core'\nimport {printFileSizes} from 'src/helper/buildPrint'\nimport logger from 'src/helper/logger'\nimport {BaseScript} from 'src/script/base'\nimport store, {type GlobalStore} from 'src/store'\nclass BuildScript extends BaseScript {\n private isWatchMode = false\n private rspackConfig!: GlobalStore['rsConfig']\n private isuseServe = false\n private isStartServe = false\n /**\n * 解决 watch mode 报错问题\n */\n private watchMode() {\n if (this.isWatchMode) {\n if (this.rspackConfig.optimization) {\n this.rspackConfig.optimization.moduleIds = 'named'\n this.rspackConfig.optimization.chunkIds = 'named'\n this.rspackConfig.watch = true\n }\n }\n }\n private async startServe() {\n if (!this.isuseServe || this.isStartServe) return\n this.isStartServe = true\n const {default: serveScript} = await import('src/script/serve')\n await serveScript.setup('serve', store.cliOptions)\n }\n override async run() {\n //\n await store.empConfig.lifeCycle.beforeBuild()\n //\n this.isWatchMode = !!store.cliOptions.watch\n this.isuseServe = !!store.cliOptions.serve\n this.rspackConfig = store.rsConfig\n //\n if (this.isWatchMode) this.watchMode()\n //\n rspack(this.rspackConfig, async (err, stats) => {\n if (err !== null) {\n logger.error(err.stack || err)\n if (err.message) {\n logger.error(err.message)\n }\n return\n }\n if (!stats) {\n logger.red('Stats is Undefined.')\n return\n }\n //\n // const statsMsg = stats.toString({\n // all: false,\n // colors: true,\n // assets: true,\n // chunks: false,\n // // modules: true,\n // // moduleAssets: true,\n // // publicPath: true,\n // // outputPath: true,\n // entrypoints: true,\n // // builtAt: true,\n // timings: true,\n // version: true,\n // })\n // statsMsg = statsMsg.replace('Rspack ', '')\n if (stats.hasErrors()) {\n logger.error(\n stats.toString({\n all: false,\n colors: true,\n // children: true,\n errors: true,\n }),\n )\n logger.red('Failed to compile.')\n process.exit(1)\n }\n\n if (stats.hasWarnings()) {\n logger.yellow(`Compiled with warnings.`)\n logger.warn(\n stats.toString({\n all: false,\n chunks: false,\n assets: false,\n colors: true,\n // children: true,\n errors: true,\n warnings: true,\n }),\n )\n }\n /* logger.info(\n stats.toString({\n all: false,\n colors: true,\n assets: true,\n chunks: false,\n entrypoints: true,\n timings: true,\n version: true,\n }),\n ) */\n await printFileSizes(stats)\n //\n this.startServe()\n // logger.green(`Compiled successfully.`)\n await store.empConfig.lifeCycle.afterBulid()\n })\n }\n}\nexport default new BuildScript()\n","export type {EmpOptions} from 'src/types/config'\nimport type {GlobalStore} from 'src/store'\nimport type {EmpOptions} from 'src/types/config'\nexport type {EMP3PluginType, EMP3PluginFnType} from 'src/types/plugin'\nimport {rspack} from '@rspack/core'\nimport HtmlWebpackPlugin from 'html-webpack-plugin'\nimport runScript from 'src/script'\nimport dts from 'src/script/dts'\nimport store from 'src/store'\n// import rsBundle from 'src/script/bundle'\nexport type EMPConfigFn = (store: GlobalStore) => EmpOptions | Promise<EmpOptions>\nexport type EMPConfigExport = EmpOptions | EMPConfigFn\nexport function defineConfig(config: EMPConfigExport): EMPConfigExport {\n return config\n}\nexport {store, runScript, dts, rspack, HtmlWebpackPlugin}\nexport type {GlobalStore}\nexport * as empHelper from 'src/helper'\n","import process from 'node:process'\nimport {program} from 'commander'\n// import logger from 'src/helper/logger'\n// import {vCompare} from 'src/helper/utils'\nimport store from 'src/store'\nexport default function runScript() {\n program.version(store.empPkg.version, '-v, --version').usage('<command> [options]')\n /**\n * 调试\n */\n program\n .command('dev')\n .description('Dev 模式')\n .option('-e, --env <env>', '部署环境 dev、test、prod')\n .option('-rd, --doctor', '开启rsdoctor,可通过debug.rsdoctor操作')\n .option('-h, --hot', '是否使用热更新 默认启动')\n .option('-o, --open', '是否打开调试页面 默认不打开')\n .option('-t, --ts', '生成类型文件 默认为 false')\n .option('-pr, --profile', '统计模块消耗')\n .option('-cl, --clearLog <clearLog>', '清空日志 默认为 true')\n .option(\n '-ev, --env-vars <key=value>',\n '定义一个环境变量 -ev key=value 多个环境变量重复调用 -ev key=value -ev key=value',\n (ovalue: string, memo: Record<string, string>) => {\n const [key, value] = ovalue.split('=')\n memo[key] = value\n return memo\n },\n {},\n )\n .action(async o => {\n const {default: devScript} = await import('src/script/dev')\n await devScript.setup('dev', o)\n })\n /**\n * 构建编译\n */\n program\n .command('build')\n .description('Build 模式')\n .option('-e, --env <env>', '部署环境 dev、test、prod')\n .option('-rd, --doctor', '开启rsdoctor,可通过debug.rsdoctor操作')\n .option('-a, --analyze', '生成分析报告 默认为 false')\n .option('-t, --ts', '生成类型文件 默认为 false')\n .option('-pr, --profile', '统计模块消耗')\n .option('-cl, --clearLog <clearLog>', '清空日志 默认为 true')\n .option('-w, --watch', 'watch 模式')\n .option('-sv, --serve', 'watch 模式下启动serve')\n .option(\n '-ev, --env-vars <key=value>',\n '定义一个环境变量 -ev key=value 多个环境变量重复调用 -ev key=value -ev key=value',\n (ovalue: string, memo: Record<string, string>) => {\n const [key, value] = ovalue.split('=')\n memo[key] = value\n return memo\n },\n {},\n )\n .action(async o => {\n const {default: buildScript} = await import('src/script/build')\n await buildScript.setup('build', o)\n })\n /**\n * Production 环境调试\n */\n program\n .command('serve')\n .description('Server 模式')\n .option('-cl, --clearLog <clearLog>', '清空日志 默认为 true')\n .action(async o => {\n const {default: serveScript} = await import('src/script/serve')\n await serveScript.setup('serve', o)\n })\n\n /**\n * 拉取 remote d.ts\n */\n program\n .command('dts')\n .description('拉取 remote 项目的 d.ts')\n .option('-p, --typingsPath <typingsPath>', '下载目录')\n .option('-e, --env <env>', '部署环境 dev、test、prod')\n .action(o => {\n // exec('dts', 'none', o, pkg)\n })\n\n /**\n * 初始化项目\n */\n program\n .command('init')\n .description('初始化 emp 项目')\n // .option('-t, --template <template>', '模版文件URL')\n .option('-d, --data [data]', 'JSON数据 http地址 或者 文件路径相对、绝对路径')\n .action(o => {\n // exec('init', 'none', o, pkg)\n })\n // 执行命令\n program.parse(process.argv)\n}\n","import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport {glob} from 'src/helper'\nimport store from 'src/store'\n//\nconst globalImportRE =\n /(?:(?:import|export)\\s?(?:type)?\\s?(?:(?:\\{[^;\\n]+\\})|(?:[^;\\n]+))\\s?from\\s?['\"][^;\\n]+['\"])|(?:import\\(['\"][^;\\n]+?['\"]\\))/g\nconst staticImportRE = /(?:import|export)\\s?(?:type)?\\s?\\{?.+\\}?\\s?from\\s?['\"](.+)['\"]/\nconst dynamicImportRE = /import\\(['\"]([^;\\n]+?)['\"]\\)/\n//\nclass DTSBundle {\n list: string[] = []\n outDir: string = store.resolve('dist')\n aliasName = '@empjs/cli'\n async setup(outDir: string, aliasName: string) {\n if (outDir) this.outDir = outDir\n if (aliasName) this.aliasName = aliasName\n // console.log(`this.outDir`, this.outDir)\n const bs = await this.readDts()\n // console.log('bs', bs)\n await this.writeCode(bs)\n }\n async readDts() {\n this.list = await glob([`${store.empConfig.build.outDir}/**/*.d.ts`], {windowsPathsNoEscape: true})\n const p: any[] = []\n this.list.map(d => {\n d = store.resolve(d)\n // console.log(d)\n p.push(this.readFile(d))\n })\n let bs = await Promise.all(p)\n bs = bs.map(d => this.replaceAliasPath(d))\n // console.log('[Bundle List]', bs)\n // console.log('list', this.list)\n return bs\n }\n async readFile(src: string) {\n const code = await fs.readFile(src, {encoding: 'utf-8'})\n return {src, code}\n }\n replaceAliasPath({src, code}: {src: string; code: string}) {\n code = code.replace(globalImportRE, str => {\n let matchResult = str.match(staticImportRE)\n // console.log('matchResult', matchResult)\n if (!matchResult) {\n matchResult = str.match(dynamicImportRE)\n // console.log('!matchResult', matchResult)\n }\n if (matchResult && matchResult[1]) {\n const rs = matchResult[1]\n if (!rs.startsWith('.')) return str\n\n const filename = path.resolve(path.dirname(src), rs).replace(this.outDir, this.aliasName)\n // console.log('filename', filename, matchResult[1])\n return str.replace(matchResult[1], filename)\n }\n\n return str\n })\n let mod = src.replace(this.outDir, this.aliasName).replace('.d.ts', '')\n if (mod.endsWith('/index')) {\n mod = mod.replace('/index', '')\n }\n // console.log('mod', mod)\n code = this.warpDeclareModule(mod, code)\n // console.log('code', code)\n return {code, src, mod}\n }\n warpDeclareModule(mod: string, code: string) {\n return `declare module '${mod}' {\\r\\n${code}}\\r\\n`\n }\n async writeCode(bs: {src: string; code: string; mod: string}[]) {\n let c = ''\n bs.map(d => {\n c += d.code\n })\n await fs.writeFile(path.join(this.outDir.replace('dist', 'types'), 'type.d.ts'), c)\n }\n}\nexport default new DTSBundle()\n"],"mappings":"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","names":["chalk","chalk","fs","path","chalk","url","https","fs","https","fs","fs","path","HtmlWebpackPlugin","path","fs","fs","path","fs","path","rspack","fs","path","express","rspack","rspack","HtmlWebpackPlugin","process","fs","path"]}