@flatjs/evolve 2.3.2-next.5 → 3.0.0-next.7

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.
Files changed (93) hide show
  1. package/dist/build-server/base-compiler-watching.js +1 -1
  2. package/dist/build-server/compiler-server-manager.js +1 -1
  3. package/dist/build-server/compiler-server.js +1 -1
  4. package/dist/build-server/create-global-compiler-watching.js +1 -1
  5. package/dist/compiler/create-build-server-global-compiler.js +1 -1
  6. package/dist/constants.d.ts +2 -1
  7. package/dist/constants.js +1 -1
  8. package/dist/core/rspack/create-plugins.js +1 -1
  9. package/dist/core/rspack/dev-serve/add-rspack-compiler-to-dev-server.js +1 -1
  10. package/dist/core/rspack/dev-serve/create-rspack-compiler-task.js +1 -1
  11. package/dist/core/rspack/load-rspack-watch-options.js +1 -1
  12. package/dist/core/rspack/start-rspack-build.js +1 -1
  13. package/dist/core/webpack/dev-serve/add-webpack-compiler-to-dev-server.js +1 -1
  14. package/dist/core/webpack/dev-serve/create-webpack-compiler-task.js +1 -1
  15. package/dist/core/webpack/load-watch-options.js +1 -1
  16. package/dist/core/webpack/start-webpack-build.js +1 -1
  17. package/dist/default-options.js +1 -1
  18. package/dist/dev-server/create-dev-server.js +1 -1
  19. package/dist/dev-server/middlewares/create-page-middleware.js +1 -1
  20. package/dist/dev-server/middlewares/create-public-assets-middleware.js +1 -1
  21. package/dist/dev-server/middlewares/error-module-parser.d.ts +12 -0
  22. package/dist/dev-server/middlewares/error-module-parser.js +1 -0
  23. package/dist/dev-server/middlewares/get-page-main-html.js +1 -1
  24. package/dist/dev-server/middlewares/get-page-module-html.js +1 -1
  25. package/dist/dev-server/middlewares/main-module-parser.d.ts +15 -0
  26. package/dist/dev-server/middlewares/main-module-parser.js +1 -0
  27. package/dist/helpers/assert-group-entry-item.js +1 -1
  28. package/dist/helpers/chunk-entry-map.js +1 -1
  29. package/dist/helpers/custom-listr-renderer.js +1 -1
  30. package/dist/helpers/custom-message-channel.js +1 -1
  31. package/dist/helpers/delete-object-keys.js +1 -1
  32. package/dist/helpers/filter-actived-entries.js +1 -1
  33. package/dist/helpers/flat-entry-map.js +1 -1
  34. package/dist/helpers/format-spinner-text.js +1 -1
  35. package/dist/helpers/get-html-plugin-config.js +1 -1
  36. package/dist/helpers/is-deep-equal.js +1 -1
  37. package/dist/helpers/is-vue-entry-item.js +1 -1
  38. package/dist/helpers/json-serializer.js +1 -1
  39. package/dist/helpers/merge-babel-options.js +1 -1
  40. package/dist/helpers/merge-inspector-evolve-config.js +1 -1
  41. package/dist/helpers/normalize-group-name.js +1 -1
  42. package/dist/helpers/normalize-template-inject-tokens.d.ts +8 -5
  43. package/dist/helpers/normalize-template-inject-tokens.js +1 -1
  44. package/dist/helpers/resolve-entry-map-input-files.js +1 -1
  45. package/dist/helpers/split-to-entry-group.js +1 -1
  46. package/dist/helpers/verify-group-entry-options.js +1 -1
  47. package/dist/main/prepare-analyzer.js +1 -1
  48. package/dist/main/prepare-serve.js +1 -1
  49. package/dist/main/start-build-dynamic.js +1 -1
  50. package/dist/main/start-build-worker.js +1 -1
  51. package/dist/minimizer/rspack/image-minimizer.js +1 -1
  52. package/dist/minimizer/webpack/image-minimizer.js +1 -1
  53. package/dist/plugins/rspack/module-federation/external-template-remotes-rspack-plugin.js +1 -1
  54. package/dist/plugins/rspack/module-federation/index.js +1 -1
  55. package/dist/plugins/rspack/multi-html/multi-html-cdn-rspack-plugin.js +1 -1
  56. package/dist/plugins/rspack/multi-html/multi-html-modify-rspack-plugin.js +1 -0
  57. package/dist/plugins/rspack/multi-html/multi-html-rspack-plugin.js +1 -1
  58. package/dist/plugins/rspack/progress-plugin/index.d.ts +1 -1
  59. package/dist/plugins/rspack/progress-plugin/index.js +1 -1
  60. package/dist/plugins/rspack/progress-plugin/progress-handler.js +1 -1
  61. package/dist/plugins/rspack/progress-plugin/progress-worker.js +1 -1
  62. package/dist/plugins/webpack/circular-dependency/circular-dependency-webpack-plugin.js +1 -1
  63. package/dist/plugins/webpack/clean-webpack/clean-webpack-plugin.js +1 -1
  64. package/dist/plugins/webpack/clean-webpack/index.js +1 -1
  65. package/dist/plugins/webpack/html-inject-scripts/html-inject-script-webpack-plugin.js +1 -1
  66. package/dist/plugins/webpack/html-inject-scripts/html-inline-script-webpack-plugin.js +1 -1
  67. package/dist/plugins/webpack/module-federation/external-template-remotes-webpack-plugin.js +1 -1
  68. package/dist/plugins/webpack/module-federation/index.js +1 -1
  69. package/dist/plugins/webpack/multi-html/multi-html-cdn-webpack-plugin.js +1 -1
  70. package/dist/plugins/webpack/multi-html/multi-html-modify-webpack-plugin.js +1 -1
  71. package/dist/plugins/webpack/multi-html/multi-html-webpack-plugins.js +1 -1
  72. package/dist/plugins/webpack/stats-webpack/helper-write-stats.js +1 -1
  73. package/dist/plugins/webpack/stats-webpack/stats-webpack-plugin.js +1 -1
  74. package/dist/rules/rule-utils.js +1 -1
  75. package/dist/types/types-entry-map.d.ts +0 -7
  76. package/dist/types/types-multi-html.d.ts +30 -28
  77. package/dist/types/types-webpack.d.ts +4 -8
  78. package/package.json +31 -33
  79. package/templates/html-plugin/index-dev.html +11 -48
  80. package/templates/html-plugin/index-inte.html +11 -48
  81. package/templates/html-plugin/index-inte2.html +11 -48
  82. package/templates/html-plugin/index-inte3.html +11 -48
  83. package/templates/html-plugin/index-inte4.html +11 -48
  84. package/templates/html-plugin/index-me.html +11 -48
  85. package/templates/html-plugin/index-ntv.html +11 -48
  86. package/templates/html-plugin/index-prod.html +11 -48
  87. package/templates/html-plugin/index-rc.html +11 -48
  88. package/templates/html-plugin/index-uat.html +11 -48
  89. package/templates/main.html +11 -28
  90. package/templates/module-404.html +11 -22
  91. package/templates/module.html +11 -69
  92. package/dist/plugins/rspack/multi-html/multi-html-modify--rspack-plugin.js +0 -1
  93. /package/dist/plugins/rspack/multi-html/{multi-html-modify--rspack-plugin.d.ts → multi-html-modify-rspack-plugin.d.ts} +0 -0
@@ -1 +1 @@
1
- import{logger}from"@flatjs/common";export const normalizeStatsOptions=t=>(void 0===t?t={preset:"normal"}:"boolean"==typeof t?t=t?{preset:"normal"}:{preset:"none"}:"string"==typeof t&&(t={preset:t}),t);const setupHooks=t=>{const e=t.compiler;e.hooks.watchRun.tap("flatjs-build-server",(function watchRun(){const e=t.callbacks.watchRun;for(const t of e)t?.();t.state="idle",t.stats=void 0,t.callbacks.watchRun=[]})),e.hooks.invalid.tap("flatjs-build-server",(function invalid(){"ready"===t.state&&logger.info("Compilation starting..."),t.state="idle",t.stats=void 0})),e.hooks.done.tap("flatjs-build-server",(function done(s){t.state="ready",t.stats=s,process.nextTick((()=>{const{callbacks:o}=t;if("ready"!==t.state)return;logger.debug(`Compilation finished: ${t.compiler.name}`);const n=normalizeStatsOptions(e.options.stats),i=s.toString(n);i&&logger.info(i);for(const t of o.done)t?.(s);t.callbacks.done=[]}))}))};export class BaseCompilerWatching{constructor(t){this.context={compiler:t,watching:void 0,state:"idle",callbacks:{done:[],watchRun:[],invalid:[]},stats:void 0},setupHooks(this.context),this.setupWatching()}setupWatching(){if(this.context.compiler.watching)this.context.watching=this.context.compiler.watching;else{const t=this.context.compiler.options.watchOptions||{};this.context.watching=this.context.compiler.watch({...t,aggregateTimeout:1e4,poll:!1},(t=>{this.context.state="ready",t&&logger.error(t)}))}}isReady(){return"ready"===this.context.state}setCallback(t,e){this.context.callbacks[t]||(this.context.callbacks[t]=[]),this.context.callbacks[t]?.push(e)}invalidate(){return new Promise(((t,e)=>{this.setCallback("done",((s,o)=>{o?e(o):t()})),this.context.watching?.invalidate()}))}resume(){return new Promise((t=>{this.context.watching?.suspended?(this.setCallback("watchRun",(()=>{t()})),this.context.watching?.resume()):t()}))}suspend(){return this.context.watching?.suspended||this.context.watching?.suspend(),Promise.resolve()}close(){return new Promise(((t,e)=>{this.context.compiler.close((s=>{s?e(s):t()}))}))}}
1
+ import{logger}from"@flatjs/common";export const normalizeStatsOptions=t=>(void 0===t?t={preset:"normal"}:"boolean"==typeof t?t=t?{preset:"normal"}:{preset:"none"}:"string"==typeof t&&(t={preset:t}),t);const setupHooks=t=>{const e=t.compiler;e.hooks.watchRun.tap("flatjs-build-server",function watchRun(){const e=t.callbacks.watchRun;for(const t of e)t?.();t.state="idle",t.stats=void 0,t.callbacks.watchRun=[]}),e.hooks.invalid.tap("flatjs-build-server",function invalid(){"ready"===t.state&&logger.info("Compilation starting..."),t.state="idle",t.stats=void 0}),e.hooks.done.tap("flatjs-build-server",function done(s){t.state="ready",t.stats=s,process.nextTick(()=>{const{callbacks:o}=t;if("ready"!==t.state)return;logger.debug(`Compilation finished: ${t.compiler.name}`);const n=normalizeStatsOptions(e.options.stats),i=s.toString(n);i&&logger.info(i);for(const t of o.done)t?.(s);t.callbacks.done=[]})})};export class BaseCompilerWatching{constructor(t){this.context={compiler:t,watching:void 0,state:"idle",callbacks:{done:[],watchRun:[],invalid:[]},stats:void 0},setupHooks(this.context),this.setupWatching()}setupWatching(){if(this.context.compiler.watching)this.context.watching=this.context.compiler.watching;else{const t=this.context.compiler.options.watchOptions||{};this.context.watching=this.context.compiler.watch({...t,aggregateTimeout:1e4,poll:!1},t=>{this.context.state="ready",t&&logger.error(t)})}}isReady(){return"ready"===this.context.state}setCallback(t,e){this.context.callbacks[t]||(this.context.callbacks[t]=[]),this.context.callbacks[t]?.push(e)}invalidate(){return new Promise((t,e)=>{this.setCallback("done",(s,o)=>{o?e(o):t()}),this.context.watching?.invalidate()})}resume(){return new Promise(t=>{this.context.watching?.suspended?(this.setCallback("watchRun",()=>{t()}),this.context.watching?.resume()):t()})}suspend(){return this.context.watching?.suspended||this.context.watching?.suspend(),Promise.resolve()}close(){return new Promise((t,e)=>{this.context.compiler.close(s=>{s?e(s):t()})})}}
@@ -1 +1 @@
1
- import{requireResolve}from"@armit/package";import{logger}from"@flatjs/common";import{createBuildServerCompiler}from"../compiler/create-build-server-compiler.js";import{createBuildServerGlobalCompiler}from"../compiler/create-build-server-global-compiler.js";import{ignoreEntryOptionKeys}from"../constants.js";import{filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{normalizeEvolveEntryMap}from"../helpers/normalize-entry-map.js";import{splitToEntryGroup}from"../helpers/split-to-entry-group.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{envVerify}from"../main/env-verify.js";import{CompilerServer}from"./compiler-server.js";import{GlobalCompilerServer}from"./global-compiler-server.js";export const diffBuildModules=async(r,e)=>{const o=[];for(const t of e){r.find((r=>r===t))||o.push(t)}return o};export const splitGroupEntryMap=async(r,e,o=0)=>{const t=filterActivedEntriesByModule(e.entryMap,r),i=normalizeEvolveEntryMap(t,e.entryMap);return splitToEntryGroup(i,e,ignoreEntryOptionKeys,!1,o)};class CompilerServerManager{constructor(){this.factoryList=[]}async createNormalCompilerServerFactory(r,e){const o=[];for(const t of r){const r=await createBuildServerCompiler(t,e),i=new CompilerServer(r,{watchFiles:[],setupExitSignals:!1});await i.start(),this.factoryList.push({compilerName:r.name,compilerServer:i,entryMap:t}),o.push(r.name)}return o}async prepareNormalCompiler(r,e,o,t){const i=this.factoryList.map((r=>Object.keys(r.entryMap))).flat(),l=await diffBuildModules(i,e);if(!l.length)return logger.debug("Build modules is empty!"),[];const a={projectCwd:r,command:"build",resolve:requireResolve},s=await loadEvolveConfig(a,r,o,t);await envVerify(r,s);const p=this.factoryList.length,n=await splitGroupEntryMap(l,s,p);return n.length?this.createNormalCompilerServerFactory(n,s):(logger.debug("Build entries is empty!"),[])}async prepareGlobalCompiler(r){if(this.globalCompilerServer)return;const e=await createBuildServerGlobalCompiler(r);e&&(this.globalCompilerServer=new GlobalCompilerServer(e),await this.globalCompilerServer.start())}async checkGlobalCompiler(){await this.globalCompilerServer.recompile()}async recompile(){if(!this.factoryList.length)return[];for(const r of this.factoryList){const{compilerServer:e}=r;await e.recompile()}return this.factoryList.map((r=>({name:Object.keys(r.entryMap)})))}}export const compilerServerManager=new CompilerServerManager;
1
+ import{requireResolve}from"@armit/package";import{logger}from"@flatjs/common";import{createBuildServerCompiler}from"../compiler/create-build-server-compiler.js";import{createBuildServerGlobalCompiler}from"../compiler/create-build-server-global-compiler.js";import{ignoreEntryOptionKeys}from"../constants.js";import{filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{normalizeEvolveEntryMap}from"../helpers/normalize-entry-map.js";import{splitToEntryGroup}from"../helpers/split-to-entry-group.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{envVerify}from"../main/env-verify.js";import{CompilerServer}from"./compiler-server.js";import{GlobalCompilerServer}from"./global-compiler-server.js";export const diffBuildModules=async(r,e)=>{const o=[];for(const t of e){r.find(r=>r===t)||o.push(t)}return o};export const splitGroupEntryMap=async(r,e,o=0)=>{const t=filterActivedEntriesByModule(e.entryMap,r),i=normalizeEvolveEntryMap(t,e.entryMap);return splitToEntryGroup(i,e,ignoreEntryOptionKeys,!1,o)};class CompilerServerManager{constructor(){this.factoryList=[]}async createNormalCompilerServerFactory(r,e){const o=[];for(const t of r){const r=await createBuildServerCompiler(t,e),i=new CompilerServer(r,{watchFiles:[],setupExitSignals:!1});await i.start(),this.factoryList.push({compilerName:r.name,compilerServer:i,entryMap:t}),o.push(r.name)}return o}async prepareNormalCompiler(r,e,o,t){const i=this.factoryList.map(r=>Object.keys(r.entryMap)).flat(),l=await diffBuildModules(i,e);if(!l.length)return logger.debug("Build modules is empty!"),[];const a={projectCwd:r,command:"build",resolve:requireResolve},s=await loadEvolveConfig(a,r,o,t);await envVerify(r,s);const p=this.factoryList.length,n=await splitGroupEntryMap(l,s,p);return n.length?this.createNormalCompilerServerFactory(n,s):(logger.debug("Build entries is empty!"),[])}async prepareGlobalCompiler(r){if(this.globalCompilerServer)return;const e=await createBuildServerGlobalCompiler(r);e&&(this.globalCompilerServer=new GlobalCompilerServer(e),await this.globalCompilerServer.start())}async checkGlobalCompiler(){await this.globalCompilerServer.recompile()}async recompile(){if(!this.factoryList.length)return[];for(const r of this.factoryList){const{compilerServer:e}=r;await e.recompile()}return this.factoryList.map(r=>({name:Object.keys(r.entryMap)}))}}export const compilerServerManager=new CompilerServerManager;
@@ -1 +1 @@
1
- import chokidar from"chokidar";import{logger}from"@flatjs/common";import{createCompilerWatching}from"./create-compiler-watching.js";export class CompilerServer{constructor(t,s){this.compiler=t,this.options=s,this.staticWatchers=[],this.listeners=[],this.watching=createCompilerWatching(t)}async start(){await this.initialize(),await this.setupWatchFiles(),logger.debug("Compiler server started")}async recompile(){try{await this.watching.resume(),await this.watching.invalidate()}finally{await this.watching.suspend()}}startCallback(t=()=>{}){this.start().then((()=>t()),t).catch(t)}async stop(){await Promise.all(this.staticWatchers.map((t=>t.close()))),this.staticWatchers=[];for(const t of this.listeners)process.removeListener(t.name,t.listener);this.listeners=[]}stopCallback(t=()=>{}){this.stop().then((()=>t()),t).catch(t)}initialize(){if(this.options.setupExitSignals){const t=["SIGINT","SIGTERM"];let s=!1;for(const i of t){const listener=()=>{s&&process.exit(),logger.info("Gracefully shutting down. To force exit, press ^C again. Please wait..."),s=!0,this.stopCallback((()=>{"function"==typeof this.compiler.close?this.compiler.close((()=>{process.exit()})):process.exit()}))};this.listeners.push({name:i,listener:listener}),process.on(i,listener),process.on(i,(()=>this.stop()))}}}setupWatchFiles(){const t=this.options.watchFiles;if(t.length>0)for(const s of t)this.watchFiles(s.paths,s.options)}watchFiles(t,s){const i=chokidar.watch(t,s);i.on("change",(t=>{this.options.onStaticChanged&&this.options.onStaticChanged(t)})),this.staticWatchers.push(i)}}
1
+ import chokidar from"chokidar";import{logger}from"@flatjs/common";import{createCompilerWatching}from"./create-compiler-watching.js";export class CompilerServer{constructor(t,s){this.compiler=t,this.options=s,this.staticWatchers=[],this.listeners=[],this.watching=createCompilerWatching(t)}async start(){await this.initialize(),await this.setupWatchFiles(),logger.debug("Compiler server started")}async recompile(){try{await this.watching.resume(),await this.watching.invalidate()}finally{await this.watching.suspend()}}startCallback(t=()=>{}){this.start().then(()=>t(),t).catch(t)}async stop(){await Promise.all(this.staticWatchers.map(t=>t.close())),this.staticWatchers=[];for(const t of this.listeners)process.removeListener(t.name,t.listener);this.listeners=[]}stopCallback(t=()=>{}){this.stop().then(()=>t(),t).catch(t)}initialize(){if(this.options.setupExitSignals){const t=["SIGINT","SIGTERM"];let s=!1;for(const i of t){const listener=()=>{s&&process.exit(),logger.info("Gracefully shutting down. To force exit, press ^C again. Please wait..."),s=!0,this.stopCallback(()=>{"function"==typeof this.compiler.close?this.compiler.close(()=>{process.exit()}):process.exit()})};this.listeners.push({name:i,listener:listener}),process.on(i,listener),process.on(i,()=>this.stop())}}}setupWatchFiles(){const t=this.options.watchFiles;if(t.length>0)for(const s of t)this.watchFiles(s.paths,s.options)}watchFiles(t,s){const i=chokidar.watch(t,s);i.on("change",t=>{this.options.onStaticChanged&&this.options.onStaticChanged(t)}),this.staticWatchers.push(i)}}
@@ -1 +1 @@
1
- import ForkTsCheckerWebpackPlugin from"fork-ts-checker-webpack-plugin";import{BaseCompilerWatching}from"./base-compiler-watching.js";const setupTsCheckerHooks=e=>{const{compiler:r}=e;ForkTsCheckerWebpackPlugin.getCompilerHooks(r).issues.tap("flatjs-build-server",(function issues(r){const o=r.filter((e=>"error"===e.severity)),s=o.length?new Error(`TS_CHECKER_ERROR: \n ${JSON.stringify(o,null,2)}`):null;return e.tsCheckerCallback?.(s),e.tsCheckerCallback=void 0,r}))};export class GlobalCompilerWatching extends BaseCompilerWatching{constructor(e){super(e),this.compiler=e,this.globalContext={compiler:e,tsCheckerCallback:void 0},setupTsCheckerHooks(this.globalContext)}async checkTsErrors(){return new Promise(((e,r)=>{this.globalContext.tsCheckerCallback=o=>{o?r(o.message):e()}}))}}export const createGlobalCompilerWatching=e=>new GlobalCompilerWatching(e);
1
+ import ForkTsCheckerWebpackPlugin from"fork-ts-checker-webpack-plugin";import{BaseCompilerWatching}from"./base-compiler-watching.js";const setupTsCheckerHooks=e=>{const{compiler:r}=e;ForkTsCheckerWebpackPlugin.getCompilerHooks(r).issues.tap("flatjs-build-server",function issues(r){const o=r.filter(e=>"error"===e.severity),s=o.length?new Error(`TS_CHECKER_ERROR: \n ${JSON.stringify(o,null,2)}`):null;return e.tsCheckerCallback?.(s),e.tsCheckerCallback=void 0,r})};export class GlobalCompilerWatching extends BaseCompilerWatching{constructor(e){super(e),this.compiler=e,this.globalContext={compiler:e,tsCheckerCallback:void 0},setupTsCheckerHooks(this.globalContext)}async checkTsErrors(){return new Promise((e,r)=>{this.globalContext.tsCheckerCallback=o=>{o?r(o.message):e()}})}}export const createGlobalCompilerWatching=e=>new GlobalCompilerWatching(e);
@@ -1 +1 @@
1
- import webpack from"webpack";import{logger}from"@flatjs/common";import{createTsCheckerCompilerConfig}from"@flatjs/forge-ts-checker";import{isVueEntryItem}from"../helpers/is-vue-entry-item.js";export const createBuildServerGlobalCompiler=async e=>{const{entryMap:r,globalCompilerOptions:o,projectCwd:t,devServer:c}=e;if(isVueEntryItem(r))return;const i=createTsCheckerCompilerConfig({serveMode:!0,projectCwd:t,runTsChecker:o?.runTsChecker,watchOptions:c?.watchOptions||{}});return i?webpack(i,(e=>{e&&logger.error(e)})):void 0};
1
+ import webpack from"webpack";import{logger}from"@flatjs/common";import{createTsCheckerCompilerConfig}from"@flatjs/forge-ts-checker";import{isVueEntryItem}from"../helpers/is-vue-entry-item.js";export const createBuildServerGlobalCompiler=async e=>{const{entryMap:r,globalCompilerOptions:o,projectCwd:t,devServer:c}=e;if(isVueEntryItem(r))return;const i=createTsCheckerCompilerConfig({serveMode:!0,projectCwd:t,runTsChecker:o?.runTsChecker,watchOptions:c?.watchOptions||{}});return i?webpack(i,e=>{e&&logger.error(e)}):void 0};
@@ -1,3 +1,4 @@
1
+ import type { TemplateOptions } from '@hyperse/html-webpack-plugin-loader';
1
2
  import { type EvolveEntryItemOption } from './types/types-entry-map.js';
2
3
  export declare const moduleName = "@flatjs/evolve";
3
4
  /**
@@ -13,7 +14,7 @@ export declare const viewportScripts = "(function(d){var j;var b=1;var i=1;var h
13
14
  /**
14
15
  * https://polyfill.io
15
16
  */
16
- export declare const polyfill: string[];
17
+ export declare const polyfill: TemplateOptions['headScripts'];
17
18
  /**
18
19
  * Applies the react-refresh Babel plugin on non-production modes only
19
20
  * Ensure `react-refresh/runtime` is hoisted and shared
package/dist/constants.js CHANGED
@@ -1 +1 @@
1
- import process from"node:process";export const moduleName="@flatjs/evolve";export const configFileName="flatjs-evolve";export const viewportScripts='(function(d){var j;var b=1;var i=1;var h=750;var c=100;function e(s,o){var q=d.document;var l=q.documentElement;var k=navigator.userAgent;var m=k.toLowerCase().indexOf("android")>-1;i=d.devicePixelRatio||1;if(i>3){i=3}if(m){i=1}console.log("current devicePixelRatio:",i);l.setAttribute("data-dpr",i.toString());var p=q.querySelector(\'meta[name="viewport"]\');if(!p){b=1/i;p=q.createElement("meta");p.setAttribute("name","viewport");q.head.appendChild(p);p.setAttribute(["content","width=device-width,user-scalable=no,initial-scale=",b,",maximum-scale=",b,",minimum-scale=",b].join(""))}function n(){var t=document.documentElement.clientWidth;j=t/o*(s/i)*i;q.documentElement.style.fontSize=String(j)+"px"}var r;d.addEventListener("resize",function(){clearTimeout(r);r=setTimeout(n,300)},false);d.addEventListener("onload",n,false);n()}e(c,h);window.fabricViewport={currRem:j,currDpr:i,currScale:b,dpiPX2px:function f(k){return parseFloat(k.toString())/j*100+"px"},px2DPIpx:function a(k){return parseFloat(k.toString())/100*j+"px"},px2rem:function g(k){return parseFloat(k.toString())/100+"rem"}}})(window);';export const polyfill=["https://polyfill.io/v3/polyfill.min.js?features=Array.from%2CArray.isArray%2CArray.of%2CArray.prototype.entries%2CArray.prototype.every%2CArray.prototype.fill%2CArray.prototype.filter%2CArray.prototype.find%2CArray.prototype.findIndex%2CArray.prototype.flat%2CArray.prototype.forEach%2CArray.prototype.flatMap%2CArray.prototype.keys%2CArray.prototype.indexOf%2CArray.prototype.includes%2CArray.prototype.lastIndexOf%2CArray.prototype.map%2CArray.prototype.reduce%2CArray.prototype.reduceRight%2CArray.prototype.some%2CArray.prototype.sort%2CArray.prototype.values%2CArrayBuffer%2CBlob%2CDataView%2CDate.now%2CObject.assign%2CObject.create%2CObject.defineProperties%2CObject.defineProperty%2CObject.entries%2CObject.freeze%2CObject.fromEntries%2CObject.getOwnPropertySymbols%2CObject.getOwnPropertyNames%2CObject.getOwnPropertyDescriptors%2CObject.getOwnPropertyDescriptor%2CObject.getPrototypeOf%2CObject.is%2CObject.isExtensible%2CObject.isFrozen%2CObject.isSealed%2CObject.keys%2CObject.values%2CObject.setPrototypeOf%2CPromise%2CPromise.prototype.finally%2CReflect%2CReflect.apply%2CReflect.construct%2CReflect.defineProperty%2CReflect.deleteProperty%2CReflect.getPrototypeOf%2CReflect.getOwnPropertyDescriptor%2CReflect.get%2CReflect.ownKeys%2CReflect.isExtensible%2CReflect.has%2CReflect.preventExtensions%2CReflect.set%2CReflect.setPrototypeOf%2CSet%2CString.prototype.trimStart%2CString.prototype.trimEnd%2CString.prototype.trim%2CString.prototype.startsWith%2CString.prototype.repeat%2CString.prototype.replaceAll%2CString.prototype.padStart%2CString.prototype.padEnd%2CMap%2CObject.seal%2Cconsole.groupEnd%2Cconsole.group"];export const devReactFastRefresh={runtime:"reactRefreshRuntime",reactRefreshSetup:"reactRefreshSetup"};export const ignoreEntryOptionKeys=["title"];export const webpackStatsDir=".cache/stats";export const buildProgressSpinnerFrames="win32"===process.platform?["-","\\","|","/"]:["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];
1
+ import process from"node:process";export const moduleName="@flatjs/evolve";export const configFileName="flatjs-evolve";export const viewportScripts='(function(d){var j;var b=1;var i=1;var h=750;var c=100;function e(s,o){var q=d.document;var l=q.documentElement;var k=navigator.userAgent;var m=k.toLowerCase().indexOf("android")>-1;i=d.devicePixelRatio||1;if(i>3){i=3}if(m){i=1}console.log("current devicePixelRatio:",i);l.setAttribute("data-dpr",i.toString());var p=q.querySelector(\'meta[name="viewport"]\');if(!p){b=1/i;p=q.createElement("meta");p.setAttribute("name","viewport");q.head.appendChild(p);p.setAttribute(["content","width=device-width,user-scalable=no,initial-scale=",b,",maximum-scale=",b,",minimum-scale=",b].join(""))}function n(){var t=document.documentElement.clientWidth;j=t/o*(s/i)*i;q.documentElement.style.fontSize=String(j)+"px"}var r;d.addEventListener("resize",function(){clearTimeout(r);r=setTimeout(n,300)},false);d.addEventListener("onload",n,false);n()}e(c,h);window.fabricViewport={currRem:j,currDpr:i,currScale:b,dpiPX2px:function f(k){return parseFloat(k.toString())/j*100+"px"},px2DPIpx:function a(k){return parseFloat(k.toString())/100*j+"px"},px2rem:function g(k){return parseFloat(k.toString())/100+"rem"}}})(window);';export const polyfill=[{id:"polyfill.io/v3/polyfill.min.js",src:"https://polyfill.io/v3/polyfill.min.js?features=Array.from%2CArray.isArray%2CArray.of%2CArray.prototype.entries%2CArray.prototype.every%2CArray.prototype.fill%2CArray.prototype.filter%2CArray.prototype.find%2CArray.prototype.findIndex%2CArray.prototype.flat%2CArray.prototype.forEach%2CArray.prototype.flatMap%2CArray.prototype.keys%2CArray.prototype.indexOf%2CArray.prototype.includes%2CArray.prototype.lastIndexOf%2CArray.prototype.map%2CArray.prototype.reduce%2CArray.prototype.reduceRight%2CArray.prototype.some%2CArray.prototype.sort%2CArray.prototype.values%2CArrayBuffer%2CBlob%2CDataView%2CDate.now%2CObject.assign%2CObject.create%2CObject.defineProperties%2CObject.defineProperty%2CObject.entries%2CObject.freeze%2CObject.fromEntries%2CObject.getOwnPropertySymbols%2CObject.getOwnPropertyNames%2CObject.getOwnPropertyDescriptors%2CObject.getOwnPropertyDescriptor%2CObject.getPrototypeOf%2CObject.is%2CObject.isExtensible%2CObject.isFrozen%2CObject.isSealed%2CObject.keys%2CObject.values%2CObject.setPrototypeOf%2CPromise%2CPromise.prototype.finally%2CReflect%2CReflect.apply%2CReflect.construct%2CReflect.defineProperty%2CReflect.deleteProperty%2CReflect.getPrototypeOf%2CReflect.getOwnPropertyDescriptor%2CReflect.get%2CReflect.ownKeys%2CReflect.isExtensible%2CReflect.has%2CReflect.preventExtensions%2CReflect.set%2CReflect.setPrototypeOf%2CSet%2CString.prototype.trimStart%2CString.prototype.trimEnd%2CString.prototype.trim%2CString.prototype.startsWith%2CString.prototype.repeat%2CString.prototype.replaceAll%2CString.prototype.padStart%2CString.prototype.padEnd%2CMap%2CObject.seal%2Cconsole.groupEnd%2Cconsole.group",position:"end",order:0}];export const devReactFastRefresh={runtime:"reactRefreshRuntime",reactRefreshSetup:"reactRefreshSetup"};export const ignoreEntryOptionKeys=["title"];export const webpackStatsDir=".cache/stats";export const buildProgressSpinnerFrames="win32"===process.platform?["-","\\","|","/"]:["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"];
@@ -1 +1 @@
1
- import CaseSensitivePathsPlugin from"case-sensitive-paths-webpack-plugin";import{logger}from"@flatjs/common";import{RsdoctorRspackPlugin}from"@rsdoctor/rspack-plugin";import rspack,{CssExtractRspackPlugin}from"@rspack/core";import ReactRefreshPlugin from"@rspack/plugin-react-refresh";import{enableBundleHashNameForModule}from"../../helpers/enable-bundle-hashname-for-module.js";import{getBundleFileName}from"../../helpers/get-bundle-file-name.js";import{shouldEnableReactFastRefresh}from"../../helpers/should-enable-react-fast-refresh.js";import{createBuiltinDefineVariablesRspackPlugins}from"../../plugins/rspack/define-variable/index.js";import{createModuleFederationRspackPlugins}from"../../plugins/rspack/module-federation/index.js";import{createHtmlRspackPlugins}from"../../plugins/rspack/multi-html/index.js";import{createProgressRspackPlugins}from"../../plugins/rspack/progress-plugin/index.js";import{createCircularDependencyWebpackPlugins}from"../../plugins/webpack/circular-dependency/index.js";import{createCleanWebpackPlugins}from"../../plugins/webpack/clean-webpack/index.js";import{createStatsWebpackPlugins}from"../../plugins/webpack/stats-webpack/index.js";export const createRspackPlugins=async(e,s,a,r)=>{const n=s[0],[i,l]=n,c=enableBundleHashNameForModule(a,l?.options),t=[...createProgressRspackPlugins(s),new rspack.IgnorePlugin({resourceRegExp:/\.d\.[cm]ts$/}),new CaseSensitivePathsPlugin,...createCircularDependencyWebpackPlugins(e,a),new CssExtractRspackPlugin({filename:`[name]/${getBundleFileName("css",e,c)}`,chunkFilename:c?"[id].[contenthash].css":"[id].css"}),...await createBuiltinDefineVariablesRspackPlugins(e,a),...createCleanWebpackPlugins(e,s,a),...createModuleFederationRspackPlugins(e,s,a),...createHtmlRspackPlugins(e,s,a),...createStatsWebpackPlugins(e,a,r)],o=shouldEnableReactFastRefresh(e,n,a);o&&t.push(new ReactRefreshPlugin({overlay:!1,exclude:[/node_modules/]})),!o&&e&&(a.devServer?.liveReload?logger.warn('The HMR disabled cause of "liveReload" specificed'):logger.warn(`The HMR disabled cause of \`"moduleFederation":"${i}"\``)),a.openRsdoctor&&t.push(new RsdoctorRspackPlugin);const p=a.webpack?.plugins||[];return t.concat(p)};
1
+ import CaseSensitivePathsPlugin from"case-sensitive-paths-webpack-plugin";import{logger}from"@flatjs/common";import{RsdoctorRspackPlugin}from"@rsdoctor/rspack-plugin";import rspack,{CssExtractRspackPlugin}from"@rspack/core";import ReactRefreshPlugin from"@rspack/plugin-react-refresh";import{enableBundleHashNameForModule}from"../../helpers/enable-bundle-hashname-for-module.js";import{getBundleFileName}from"../../helpers/get-bundle-file-name.js";import{shouldEnableReactFastRefresh}from"../../helpers/should-enable-react-fast-refresh.js";import{createBuiltinDefineVariablesRspackPlugins}from"../../plugins/rspack/define-variable/index.js";import{createModuleFederationRspackPlugins}from"../../plugins/rspack/module-federation/index.js";import{createHtmlRspackPlugins}from"../../plugins/rspack/multi-html/index.js";import{createProgressRspackPlugins}from"../../plugins/rspack/progress-plugin/index.js";import{createCircularDependencyWebpackPlugins}from"../../plugins/webpack/circular-dependency/index.js";import{createCleanWebpackPlugins}from"../../plugins/webpack/clean-webpack/index.js";import{createStatsWebpackPlugins}from"../../plugins/webpack/stats-webpack/index.js";export const createRspackPlugins=async(e,s,a,r)=>{const n=s[0],[i,l]=n,c=enableBundleHashNameForModule(a,l?.options),t=[...createProgressRspackPlugins(e,s),new rspack.IgnorePlugin({resourceRegExp:/\.d\.[cm]ts$/}),new CaseSensitivePathsPlugin,...createCircularDependencyWebpackPlugins(e,a),new CssExtractRspackPlugin({filename:`[name]/${getBundleFileName("css",e,c)}`,chunkFilename:c?"[id].[contenthash].css":"[id].css"}),...await createBuiltinDefineVariablesRspackPlugins(e,a),...createCleanWebpackPlugins(e,s,a),...createModuleFederationRspackPlugins(e,s,a),...createHtmlRspackPlugins(e,s,a),...createStatsWebpackPlugins(e,a,r)],o=shouldEnableReactFastRefresh(e,n,a);o&&t.push(new ReactRefreshPlugin({overlay:!1,exclude:[/node_modules/]})),!o&&e&&(a.devServer?.liveReload?logger.warn('The HMR disabled cause of "liveReload" specificed'):logger.warn(`The HMR disabled cause of \`"moduleFederation":"${i}"\``)),a.openRsdoctor&&t.push(new RsdoctorRspackPlugin);const p=a.webpack?.plugins||[];return t.concat(p)};
@@ -1 +1 @@
1
- import{join}from"node:path";import{RspackDevServer}from"@rspack/dev-server";export const addRspackCompilerToDevServer=(e,r,t,o,s)=>{const{projectCwd:d,devServer:a}=s,l=new RspackDevServer({server:{type:a?.https?"https":"http",options:{...a?.https}},open:!1,compress:!0,port:t,hot:r,liveReload:!r,allowedHosts:"all",static:{directory:`${join(d,"/public")}`},headers:{"Access-Control-Allow-Origin":"*"},setupMiddlewares:e=>(a?.devBeforeMiddlewares&&e.unshift(...a.devBeforeMiddlewares),a?.devAfterMiddlewares&&e.push(...a.devAfterMiddlewares),e),client:{progress:!0,overlay:a?.clientOverlay,webSocketURL:"localIp"===a?.webSocketURL?{hostname:o||void 0}:{hostname:"0.0.0.0",...a?.webSocketURL}}},e);return new Promise(((e,r)=>{l.startCallback((t=>{if(t)return r(t);e(!0)}))}))};
1
+ import{join}from"node:path";import{RspackDevServer}from"@rspack/dev-server";export const addRspackCompilerToDevServer=(e,r,t,o,s)=>{const{projectCwd:d,devServer:a}=s,l=new RspackDevServer({server:{type:a?.https?"https":"http",options:{...a?.https}},open:!1,compress:!0,port:t,hot:r,liveReload:!r,allowedHosts:"all",static:{directory:`${join(d,"/public")}`},headers:{"Access-Control-Allow-Origin":"*"},setupMiddlewares:e=>(a?.devBeforeMiddlewares&&e.unshift(...a.devBeforeMiddlewares),a?.devAfterMiddlewares&&e.push(...a.devAfterMiddlewares),e),client:{progress:!0,overlay:a?.clientOverlay,webSocketURL:"localIp"===a?.webSocketURL?{hostname:o||void 0}:{hostname:"0.0.0.0",...a?.webSocketURL}}},e);return new Promise((e,r)=>{l.startCallback(t=>{if(t)return r(t);e(!0)})})};
@@ -1 +1 @@
1
- import{relative}from"node:path";import{chalk,logger,mergeOptions,urlJoin}from"@flatjs/common";import{rspack}from"@rspack/core";import{assertSingleRspackCompiler}from"../../../helpers/assert-single-compiler.js";import{flatEntryMap}from"../../../helpers/flat-entry-map.js";import{shouldEnableReactFastRefresh}from"../../../helpers/should-enable-react-fast-refresh.js";import{loadRspackConfig}from"../load-rspack-config.js";import{addRspackCompilerToDevServer}from"./add-rspack-compiler-to-dev-server.js";export const createRspackCompilerTask=async(e,r,o,t)=>{const{projectCwd:a}=t,[s,n]=Object.entries(r)[0],{devServerPort:i,devServerHostUri:p}=n;for(const[,e]of Object.entries(r)){const r=e.entryConfig,t=r.options?.moduleFederation,a=t?.remotes||[],s=flatEntryMap(o);a.forEach((e=>{e.endpoint=e=>{const r=s[e];if(!r)throw new Error(`No servedDevServerEntry found via "${e}"`);return urlJoin(r?.devServerHostUri,["/public"])}}))}const c=Object.keys(r).reduce(((e,o)=>(e[o]=r[o].entryConfig,e)),{}),l=urlJoin(p,["public"]),m=await loadRspackConfig("development",c,mergeOptions(t,{webpack:{publicPath:l}})),f=shouldEnableReactFastRefresh(!0,[s,n.entryConfig],t),d=assertSingleRspackCompiler(c,m,t,f),v=rspack(d),h=addRspackCompilerToDevServer(v,f,i,e,t),k=v.name||"";return v.hooks.invalid.tap("fileChange",(e=>{const r=relative(a,e||"");logger.info(`file change ➩ ${chalk(["cyan"])(r||"")}`,k)})),h};
1
+ import{relative}from"node:path";import{chalk,logger,mergeOptions,urlJoin}from"@flatjs/common";import{rspack}from"@rspack/core";import{assertSingleRspackCompiler}from"../../../helpers/assert-single-compiler.js";import{flatEntryMap}from"../../../helpers/flat-entry-map.js";import{shouldEnableReactFastRefresh}from"../../../helpers/should-enable-react-fast-refresh.js";import{loadRspackConfig}from"../load-rspack-config.js";import{addRspackCompilerToDevServer}from"./add-rspack-compiler-to-dev-server.js";export const createRspackCompilerTask=async(e,r,o,t)=>{const{projectCwd:a}=t,[s,n]=Object.entries(r)[0],{devServerPort:i,devServerHostUri:p}=n;for(const[,e]of Object.entries(r)){const r=e.entryConfig,t=r.options?.moduleFederation,a=t?.remotes||[],s=flatEntryMap(o);a.forEach(e=>{e.endpoint=e=>{const r=s[e];if(!r)throw new Error(`No servedDevServerEntry found via "${e}"`);return urlJoin(r?.devServerHostUri,["/public"])}})}const c=Object.keys(r).reduce((e,o)=>(e[o]=r[o].entryConfig,e),{}),l=urlJoin(p,["public"]),m=await loadRspackConfig("development",c,mergeOptions(t,{webpack:{publicPath:l}})),f=shouldEnableReactFastRefresh(!0,[s,n.entryConfig],t),d=assertSingleRspackCompiler(c,m,t,f),v=rspack(d),h=addRspackCompilerToDevServer(v,f,i,e,t),k=v.name||"";return v.hooks.invalid.tap("fileChange",e=>{const r=relative(a,e||"");logger.info(`file change ➩ ${chalk(["cyan"])(r||"")}`,k)}),h};
@@ -1 +1 @@
1
- import fg from"fast-glob";import{existsSync}from"node:fs";import{posix}from"node:path";import{logger}from"@flatjs/common";import{normalizeEntryModuleAbsolutePath}from"../../helpers/normalize-entry-module-absolute-path.js";export const loadRspackWatchOptions=(o,t,e={})=>{const{ignored:r=[]}=e,{entryMap:n}=t,s=normalizeEntryModuleAbsolutePath(t,o),a=normalizeEntryModuleAbsolutePath(t,n);for(const o of a){existsSync(o)||logger.warn(`The module path does not exist. Check ${o}`);s.findIndex((t=>t===o))<0&&r.push(posix.join("**",fg.convertPathToPattern(o),"**/*"))}return{...e,ignored:r}};
1
+ import fg from"fast-glob";import{existsSync}from"node:fs";import{posix}from"node:path";import{logger}from"@flatjs/common";import{normalizeEntryModuleAbsolutePath}from"../../helpers/normalize-entry-module-absolute-path.js";export const loadRspackWatchOptions=(o,t,e={})=>{const{ignored:r=[]}=e,{entryMap:n}=t,s=normalizeEntryModuleAbsolutePath(t,o),a=normalizeEntryModuleAbsolutePath(t,n);for(const o of a){existsSync(o)||logger.warn(`The module path does not exist. Check ${o}`);s.findIndex(t=>t===o)<0&&r.push(posix.join("**",fg.convertPathToPattern(o),"**/*"))}return{...e,ignored:r}};
@@ -1 +1 @@
1
- import{rspack}from"@rspack/core";import{assertSingleRspackCompiler}from"../../helpers/assert-single-compiler.js";import{normalizeEvolveEntryName}from"../../helpers/normalize-entry-map.js";import{loadRspackConfig}from"./load-rspack-config.js";export const startRspackBuild=async(r,e,n)=>{const s=await loadRspackConfig("production",r,e,n),o=assertSingleRspackCompiler(r,s,e,!1);return new Promise(((n,s)=>{rspack(o,((o,a)=>{if(o)return s(o);const t=a?.toJson();if(t?.errors?.length)return s(t.errors);if(e.rejectWarnings&&t?.warnings?.length)return s(t.warnings);const{projectVirtualPath:i}=e,p=Object.keys(r).map((r=>normalizeEvolveEntryName(r,i)));n({name:p,warningStats:t?.warnings})}))}))};
1
+ import{rspack}from"@rspack/core";import{assertSingleRspackCompiler}from"../../helpers/assert-single-compiler.js";import{normalizeEvolveEntryName}from"../../helpers/normalize-entry-map.js";import{loadRspackConfig}from"./load-rspack-config.js";export const startRspackBuild=async(r,e,n)=>{const s=await loadRspackConfig("production",r,e,n),o=assertSingleRspackCompiler(r,s,e,!1);return new Promise((n,s)=>{rspack(o,(o,a)=>{if(o)return s(o);const t=a?.toJson();if(t?.errors?.length)return s(t.errors);if(e.rejectWarnings&&t?.warnings?.length)return s(t.warnings);const{projectVirtualPath:i}=e,p=Object.keys(r).map(r=>normalizeEvolveEntryName(r,i));n({name:p,warningStats:t?.warnings})})})};
@@ -1 +1 @@
1
- import{join}from"node:path";import WebpackDevServer from"webpack-dev-server";export const addWebpackCompilerToDevServer=(e,r,t,o,s)=>{const{projectCwd:d,devServer:a}=s,l=new WebpackDevServer({server:{type:a?.https?"https":"http",options:{...a?.https}},open:!1,compress:!0,port:t,hot:r,liveReload:!r,allowedHosts:"all",static:{directory:`${join(d,"/public")}`},headers:{"Access-Control-Allow-Origin":"*"},setupMiddlewares:e=>(a?.devBeforeMiddlewares&&e.unshift(...a.devBeforeMiddlewares),a?.devAfterMiddlewares&&e.push(...a.devAfterMiddlewares),e),client:{progress:!0,overlay:a?.clientOverlay,webSocketURL:"localIp"===a?.webSocketURL?{hostname:o||void 0}:{hostname:"0.0.0.0",...a?.webSocketURL}}},e);return new Promise(((e,r)=>{l.startCallback((t=>{if(t)return r(t);e(!0)}))}))};
1
+ import{join}from"node:path";import WebpackDevServer from"webpack-dev-server";export const addWebpackCompilerToDevServer=(e,r,t,o,s)=>{const{projectCwd:d,devServer:a}=s,l=new WebpackDevServer({server:{type:a?.https?"https":"http",options:{...a?.https}},open:!1,compress:!0,port:t,hot:r,liveReload:!r,allowedHosts:"all",static:{directory:`${join(d,"/public")}`},headers:{"Access-Control-Allow-Origin":"*"},setupMiddlewares:e=>(a?.devBeforeMiddlewares&&e.unshift(...a.devBeforeMiddlewares),a?.devAfterMiddlewares&&e.push(...a.devAfterMiddlewares),e),client:{progress:!0,overlay:a?.clientOverlay,webSocketURL:"localIp"===a?.webSocketURL?{hostname:o||void 0}:{hostname:"0.0.0.0",...a?.webSocketURL}}},e);return new Promise((e,r)=>{l.startCallback(t=>{if(t)return r(t);e(!0)})})};
@@ -1 +1 @@
1
- import{relative}from"node:path";import webpack from"webpack";import{chalk,logger,mergeOptions,urlJoin}from"@flatjs/common";import{assertSingleWebpackCompiler}from"../../../helpers/assert-single-compiler.js";import{flatEntryMap}from"../../../helpers/flat-entry-map.js";import{shouldEnableReactFastRefresh}from"../../../helpers/should-enable-react-fast-refresh.js";import{loadWebpackConfig}from"../load-webpack-config.js";import{addWebpackCompilerToDevServer}from"./add-webpack-compiler-to-dev-server.js";export const createWebpackCompilerTask=async(e,r,o,t)=>{const{projectCwd:a}=t,[n,i]=Object.entries(r)[0],{devServerPort:p,devServerHostUri:s}=i;for(const[,e]of Object.entries(r)){const r=e.entryConfig,t=r.options?.moduleFederation,a=t?.remotes||[],n=flatEntryMap(o);a.forEach((e=>{e.endpoint=e=>{const r=n[e];if(!r)throw new Error(`No servedDevServerEntry found via "${e}"`);return urlJoin(r?.devServerHostUri,["/public"])}}))}const l=Object.keys(r).reduce(((e,o)=>(e[o]=r[o].entryConfig,e)),{}),c=urlJoin(s,["public"]),m=await loadWebpackConfig("development",l,mergeOptions(t,{webpack:{publicPath:c}})),f=shouldEnableReactFastRefresh(!0,[n,i.entryConfig],t),d=assertSingleWebpackCompiler(l,m,t,f),b=webpack(d),v=addWebpackCompilerToDevServer(b,f,p,e,t),h=b.name||"";return b.hooks.invalid.tap("fileChange",(e=>{const r=relative(a,e||"");logger.info(`file change ➩ ${chalk(["cyan"])(r||"")}`,h)})),v};
1
+ import{relative}from"node:path";import webpack from"webpack";import{chalk,logger,mergeOptions,urlJoin}from"@flatjs/common";import{assertSingleWebpackCompiler}from"../../../helpers/assert-single-compiler.js";import{flatEntryMap}from"../../../helpers/flat-entry-map.js";import{shouldEnableReactFastRefresh}from"../../../helpers/should-enable-react-fast-refresh.js";import{loadWebpackConfig}from"../load-webpack-config.js";import{addWebpackCompilerToDevServer}from"./add-webpack-compiler-to-dev-server.js";export const createWebpackCompilerTask=async(e,r,o,t)=>{const{projectCwd:a}=t,[n,i]=Object.entries(r)[0],{devServerPort:p,devServerHostUri:s}=i;for(const[,e]of Object.entries(r)){const r=e.entryConfig,t=r.options?.moduleFederation,a=t?.remotes||[],n=flatEntryMap(o);a.forEach(e=>{e.endpoint=e=>{const r=n[e];if(!r)throw new Error(`No servedDevServerEntry found via "${e}"`);return urlJoin(r?.devServerHostUri,["/public"])}})}const l=Object.keys(r).reduce((e,o)=>(e[o]=r[o].entryConfig,e),{}),c=urlJoin(s,["public"]),m=await loadWebpackConfig("development",l,mergeOptions(t,{webpack:{publicPath:c}})),f=shouldEnableReactFastRefresh(!0,[n,i.entryConfig],t),d=assertSingleWebpackCompiler(l,m,t,f),b=webpack(d),v=addWebpackCompilerToDevServer(b,f,p,e,t),h=b.name||"";return b.hooks.invalid.tap("fileChange",e=>{const r=relative(a,e||"");logger.info(`file change ➩ ${chalk(["cyan"])(r||"")}`,h)}),v};
@@ -1 +1 @@
1
- import fg from"fast-glob";import{existsSync}from"node:fs";import{posix}from"node:path";import{logger}from"@flatjs/common";import{normalizeEntryModuleAbsolutePath}from"../../helpers/normalize-entry-module-absolute-path.js";export const loadWatchOptions=(o,t,e={})=>{const{ignored:r=[]}=e,{entryMap:n}=t,s=normalizeEntryModuleAbsolutePath(t,o),a=normalizeEntryModuleAbsolutePath(t,n);for(const o of a){existsSync(o)||logger.warn(`The module path does not exist. Check ${o}`);s.findIndex((t=>t===o))<0&&r.push(posix.join("**",fg.convertPathToPattern(o),"**/*"))}return{...e,ignored:r}};
1
+ import fg from"fast-glob";import{existsSync}from"node:fs";import{posix}from"node:path";import{logger}from"@flatjs/common";import{normalizeEntryModuleAbsolutePath}from"../../helpers/normalize-entry-module-absolute-path.js";export const loadWatchOptions=(o,t,e={})=>{const{ignored:r=[]}=e,{entryMap:n}=t,s=normalizeEntryModuleAbsolutePath(t,o),a=normalizeEntryModuleAbsolutePath(t,n);for(const o of a){existsSync(o)||logger.warn(`The module path does not exist. Check ${o}`);s.findIndex(t=>t===o)<0&&r.push(posix.join("**",fg.convertPathToPattern(o),"**/*"))}return{...e,ignored:r}};
@@ -1 +1 @@
1
- import webpack from"webpack";import{assertSingleWebpackCompiler}from"../../helpers/assert-single-compiler.js";import{normalizeEvolveEntryName}from"../../helpers/normalize-entry-map.js";import{loadWebpackConfig}from"./load-webpack-config.js";export const startWebpackBuild=async(r,e,n)=>{const a=await loadWebpackConfig("production",r,e,n),o=assertSingleWebpackCompiler(r,a,e,!1);return new Promise(((n,a)=>{webpack(o,((o,t)=>{if(o)return a(o);const i=t?.toJson();if(i?.errors?.length)return a(i.errors);if(e.rejectWarnings&&i?.warnings?.length)return a(i.warnings);const{projectVirtualPath:s}=e,p=Object.keys(r).map((r=>normalizeEvolveEntryName(r,s)));n({name:p,warningStats:i?.warnings})}))}))};
1
+ import webpack from"webpack";import{assertSingleWebpackCompiler}from"../../helpers/assert-single-compiler.js";import{normalizeEvolveEntryName}from"../../helpers/normalize-entry-map.js";import{loadWebpackConfig}from"./load-webpack-config.js";export const startWebpackBuild=async(r,e,n)=>{const a=await loadWebpackConfig("production",r,e,n),o=assertSingleWebpackCompiler(r,a,e,!1);return new Promise((n,a)=>{webpack(o,(o,t)=>{if(o)return a(o);const i=t?.toJson();if(i?.errors?.length)return a(i.errors);if(e.rejectWarnings&&i?.warnings?.length)return a(i.warnings);const{projectVirtualPath:s}=e,p=Object.keys(r).map(r=>normalizeEvolveEntryName(r,s));n({name:p,warningStats:i?.warnings})})})};
@@ -1 +1 @@
1
- export const defaultEvolveOptions={projectCwd:process.cwd(),projectVirtualPath:"flatjs/evolve",rejectWarnings:!1,devServer:{autoOpen:!0,pageProxy:"/pages",mockOptions:{mockBaseDir:"mocks"},clientOverlay:{errors:!0,warnings:!1},webSocketURL:"localIp",middlewares:[],watchOptions:{poll:1e3,ignored:["**/node_modules","**/mocks"],aggregateTimeout:500},defaultServeGlobalData:()=>Promise.resolve({}),bundleDirResolver:e=>e},webpack:{target:["web","es5"],plugins:[],ruleSets:[],publicPath:"auto",resolve:{},externals:{vue:"Vue",react:"React","react-dom":"ReactDOM"},outputDir:"public",enableBundleHashName:!0},pluginOptions:{},loaderOptions:{assetDataUrlMaxSize:4096,babelOptions:{usePreset:"react",plugins:[],presets:[]},lessOptions:{},postcssOptions:{cssnanoOptions:{}},pixelOptions:{rootValue:{px:100,rpx:1},outputUnit:"rem"},modularImports:[]},globalCompilerOptions:{runTsChecker:!0},entryMap:{},multiHtmlCdn:{},multiHtmlCdnEnvResolver:function cdnResolver(){},needVerifyPackages:{},packageInstallChecker:{enabled:!1,detectModules:["@dimjs/*"],throwError:!1,showAllInstalledGraph:!0},ci:{basedBranch:"origin/master"},isolation:!1,maxEntryGroupSize:10,compiler:"webpack",openRsdoctor:!1,inspector:{keys:["$mod","i"],customLaunchEditorEndpoint:"/__hps_inspector",trustedEditor:"code",injectClient:!0}};
1
+ export const defaultEvolveOptions={projectCwd:process.cwd(),projectVirtualPath:"flatjs/evolve",rejectWarnings:!1,devServer:{autoOpen:!0,pageProxy:"/pages",mockOptions:{mockBaseDir:"mocks"},clientOverlay:{errors:!0,warnings:!1},webSocketURL:"localIp",middlewares:[],watchOptions:{poll:1e3,ignored:["**/node_modules","**/mocks"],aggregateTimeout:500},defaultServeGlobalData:()=>Promise.resolve({}),bundleDirResolver:e=>e},webpack:{target:["web","es5"],plugins:[],ruleSets:[],publicPath:"auto",resolve:{},externals:{},outputDir:"public",enableBundleHashName:!0},pluginOptions:{},loaderOptions:{assetDataUrlMaxSize:4096,babelOptions:{usePreset:"react",plugins:[],presets:[]},lessOptions:{},postcssOptions:{cssnanoOptions:{}},pixelOptions:{rootValue:{px:100,rpx:1},outputUnit:"rem"},modularImports:[]},globalCompilerOptions:{runTsChecker:!0},entryMap:{},multiHtmlCdn:{},multiHtmlCdnEnvResolver:function cdnResolver(){},needVerifyPackages:{},packageInstallChecker:{enabled:!1,detectModules:["@dimjs/*"],throwError:!1,showAllInstalledGraph:!0},ci:{basedBranch:"origin/master"},isolation:!1,maxEntryGroupSize:10,compiler:"webpack",openRsdoctor:!1,inspector:{keys:["$mod","i"],customLaunchEditorEndpoint:"/__hps_inspector",trustedEditor:"code",injectClient:!0}};
@@ -1 +1 @@
1
- import express from"express";import https from"node:https";import{prepareMockDomain}from"@flatjs/mock";export const createDevServer=async e=>{const r=express(),t=e.devServer?.mockOptions,{mockPort:o,hostUri:p,publicIp:s}=await prepareMockDomain(t||{});return new Promise((t=>{const i=e.devServer?.https?https.createServer(e.devServer?.https,r):r;r.set("hostUri",p),i.listen(o,(()=>{t({app:r,publicIp:s,devHostUri:p,devPort:o})}))}))};
1
+ import express from"express";import https from"node:https";import{prepareMockDomain}from"@flatjs/mock";export const createDevServer=async e=>{const r=express(),t=e.devServer?.mockOptions,{mockPort:o,hostUri:p,publicIp:s}=await prepareMockDomain(t||{});return new Promise(t=>{const i=e.devServer?.https?https.createServer(e.devServer?.https,r):r;r.set("hostUri",p),i.listen(o,()=>{t({app:r,publicIp:s,devHostUri:p,devPort:o})})})};
@@ -1 +1 @@
1
- import{getPageMainHtml}from"./get-page-main-html.js";import{getPageModuleHtml}from"./get-page-module-html.js";import{getRuntimeManifest}from"./get-runtime-manifest.js";export const createPageMiddleware=(e,t,a,m)=>(m.devServer?.middlewares||[]).concat((async(i,n)=>{let g;if("/runtime/manifest.json"!==i.path)g="/"===i.path?await getPageMainHtml(a,e,m):await getPageModuleHtml(a,i,e,t,m),n.send(g);else{const t=await getRuntimeManifest(a,e,m);n.json(t)}}));
1
+ import{getPageMainHtml}from"./get-page-main-html.js";import{getPageModuleHtml}from"./get-page-module-html.js";import{getRuntimeManifest}from"./get-runtime-manifest.js";export const createPageMiddleware=(e,t,a,m)=>(m.devServer?.middlewares||[]).concat(async(i,n)=>{let g;if("/runtime/manifest.json"!==i.path)g="/"===i.path?await getPageMainHtml(a,e,m):await getPageModuleHtml(a,i,e,t,m),n.send(g);else{const t=await getRuntimeManifest(a,e,m);n.json(t)}});
@@ -1 +1 @@
1
- import{extname,posix}from"node:path";import{fileWalk}from"@armit/file-utility";export const createPublicAssetsMiddleware=(e,i)=>async(s,t)=>{const a=s.baseUrl;if(a.startsWith("/public")){const i=await fileWalk(posix.join("public/","**/*.{js,css}"),{cwd:e}),s=extname(a),l=i.find((e=>extname(e)===s&&-1!==e.indexOf(a.replace(/\.(?:js|css)$/,""))));l?t.sendFile(l):t.sendFile(posix.join(e,a))}else t.redirect(i)};
1
+ import{extname,posix}from"node:path";import{fileWalk}from"@armit/file-utility";export const createPublicAssetsMiddleware=(e,i)=>async(s,t)=>{const a=s.baseUrl;if(a.startsWith("/public")){const i=await fileWalk(posix.join("public/","**/*.{js,css}"),{cwd:e}),s=extname(a),l=i.find(e=>extname(e)===s&&-1!==e.indexOf(a.replace(/\.(?:js|css)$/,"")));l?t.sendFile(l):t.sendFile(posix.join(e,a))}else t.redirect(i)};
@@ -0,0 +1,12 @@
1
+ import { TemplateParser } from '@hyperse/html-webpack-plugin-loader';
2
+ export interface ErrorTemplateData {
3
+ title: string;
4
+ errorMeta: {
5
+ name: string;
6
+ value: string;
7
+ }[];
8
+ }
9
+ export declare class ErrorModuleParser extends TemplateParser {
10
+ constructor(htmlSource: string, templateData: ErrorTemplateData);
11
+ private upsertBodyDocument;
12
+ }
@@ -0,0 +1 @@
1
+ import{TemplateParser}from"@hyperse/html-webpack-plugin-loader";export class ErrorModuleParser extends TemplateParser{constructor(e,s){super(e),this.upsertTitleTag(s.title),this.upsertBodyDocument(s)}upsertBodyDocument(e){const s=e.errorMeta.map(e=>`<li><span class="name"> ${e.name}: </span><span class="value"> ${e.value} </span></li>`),r=[...this.parseFragment(`<div class="container"><ul>${s.join("")}</ul></div>`).childNodes];this.body.childNodes.push(...r)}}
@@ -1 +1 @@
1
- import _ from"lodash";import{readFileSync}from"node:fs";import{join}from"node:path";import{urlJoin}from"@flatjs/common";import{getPackageDir}from"../../helpers/get-pacakge-dir.js";import{normalizePageProxy}from"../../helpers/normalize-page-proxy.js";import{getSortedModules}from"./get-all-sorted-modules.js";export const getPageMainHtml=async(e,r,t)=>{const o=getPackageDir(),a=readFileSync(join(o,"./templates/main.html"),"utf-8"),n=getSortedModules(t,e,r),i=normalizePageProxy(t.devServer?.pageProxy||"/pages"),m=n.map((e=>{const{entryName:t,entryContent:o,isServedEntry:a,projectVirtualPath:n,normalizedEntryName:m}=e,s=urlJoin(r,[i,m],{env:"me"}),l=o.options?.servePageMainLinkFn||(e=>e);return{link:l(s,{hostUri:r,entryName:t,virtualPath:n}),name:t.replace(n,"").replace(/^\//,""),flagText:a?"serve":"static",isServed:a?1:0}}));m.push({flagText:"serve",isServed:1,link:urlJoin(r,[i,"/runtime/manifest.json"]),name:"Runtime Manifest"});const s={title:"@flatjs/evolve",modules:m.sort(((e,r)=>r.isServed-e.isServed))};return _.template(a)(s)};
1
+ import{readFileSync}from"node:fs";import{join}from"node:path";import{urlJoin}from"@flatjs/common";import{getPackageDir}from"../../helpers/get-pacakge-dir.js";import{normalizePageProxy}from"../../helpers/normalize-page-proxy.js";import{getSortedModules}from"./get-all-sorted-modules.js";import{MainModuleParser}from"./main-module-parser.js";export const getPageMainHtml=async(e,r,t)=>{const o=getPackageDir(),a=readFileSync(join(o,"./templates/main.html"),"utf-8"),n=getSortedModules(t,e,r),i=normalizePageProxy(t.devServer?.pageProxy||"/pages"),s=n.map(e=>{const{entryName:t,entryContent:o,isServedEntry:a,projectVirtualPath:n,normalizedEntryName:s}=e,m=urlJoin(r,[i,s],{env:"me"}),l=o.options?.servePageMainLinkFn||(e=>e);return{link:l(m,{hostUri:r,entryName:t,virtualPath:n}),name:t.replace(n,"").replace(/^\//,""),flagText:a?"serve":"static",isServed:a?1:0}});s.push({flagText:"serve",isServed:1,link:urlJoin(r,[i,"/runtime/manifest.json"]),name:"Runtime Manifest"});const m={title:"@flatjs/evolve",modules:s.sort((e,r)=>r.isServed-e.isServed)};return new MainModuleParser(a,m).serialize()};
@@ -1 +1 @@
1
- import _ from"lodash";import{existsSync,readFileSync}from"node:fs";import{isAbsolute,join}from"node:path";import{ensureSlash,urlJoin}from"@flatjs/common";import{allowPx2remForModule}from"../../helpers/allow-px2rem-for-module.js";import{getHtmlPluginConfig}from"../../helpers/get-html-plugin-config.js";import{getPackageDir}from"../../helpers/get-pacakge-dir.js";import{getRuntimeCDNBase}from"../../helpers/get-runtime-cdn-base.js";import{normalizeEvolveEntryName}from"../../helpers/normalize-entry-map.js";import{normalizePageProxy}from"../../helpers/normalize-page-proxy.js";import{normalizeTemplateInjectTokens}from"../../helpers/normalize-template-inject-tokens.js";import{injectFederationScripts}from"../../helpers/script-injects.js";import{getBundleAsset}from"./get-bundle-asset.js";import{getDevServerHostUri}from"./get-dev-server-host-uri.js";import{getHmrRuntimeChunks}from"./get-hmr-runtime-chunks.js";import{getNormalizedEntryName}from"./get-normalized-entry-name.js";export const getPageModuleHtml=async(e,t,r,o,l)=>{const{entryMap:a,projectVirtualPath:i}=l,n=Object.keys(a).sort(((e,t)=>t.length-e.length)),m=getPackageDir(),s=n.find((e=>{const r=normalizeEvolveEntryName(e,i);return ensureSlash(t.path.replace(/^\//,""),!0).startsWith(ensureSlash(r,!0))}));if(!s){const e=readFileSync(join(m,"./templates/module-404.html"),"utf-8");return _.template(e)({title:"404 Not Found",errorMeta:[{name:"@flatjs/evolve workspace",value:m},{name:"served entry names",value:JSON.stringify(n)},{name:"module path",value:`${t.path}`}]})}const p=a[s],u=p.options,c=getDevServerHostUri(e,s,r),g=u?.serveModuleTemplate||"./templates/module.html",d=join(l.projectCwd,"./templates/module.html"),f=readFileSync(isAbsolute(g)?g:existsSync(d)?d:join(m,"./templates/module.html"),"utf-8"),h=l.devServer,v=h?.defaultServeGlobalData?await h.defaultServeGlobalData(p,r):{},j={mode:"development",envCdn:urlJoin(r,["public"])},y=getNormalizedEntryName(s,i,e,h),S=normalizePageProxy(h?.pageProxy||"/pages"),H=[getRuntimeCDNBase(l.multiHtmlCdn,l.multiHtmlCdnEnvResolver||function cdnResolver(){})],P=normalizeTemplateInjectTokens(j,u),C={title:getHtmlPluginConfig("title",j,u?.title),favicon:getHtmlPluginConfig("favicon",j,u?.favicon),viewport:allowPx2remForModule([s,p],l)?getHtmlPluginConfig("viewport",j,u?.viewport):"",...P,inlineScripts:P.inlineScripts?.concat(H),moduleFederationScripts:injectFederationScripts({me:[urlJoin(r,["public"])]},l.multiHtmlCdnEnvResolver),global:{hostUrl:r,apiBase:urlJoin(r,[o]),virtualPath:join(S,i),moduleName:s.replace(i,"").replace(/^\//,""),...v,...u?.serveGlobalData||{}},styles:[getBundleAsset(c,y,".css")],scripts:[getBundleAsset(c,y,".js")]};C.headBeforeHtmlTags?C.headBeforeHtmlTags=C.headBeforeHtmlTags.slice(0):C.headBeforeHtmlTags=[];return getHmrRuntimeChunks(e,s,y,p,l,c).forEach((e=>{C.headBeforeHtmlTags?.push(`<script src="${e}"><\/script>`)})),_.template(f)(C)};
1
+ import{existsSync,readFileSync}from"node:fs";import{isAbsolute,join}from"node:path";import{ensureSlash,urlJoin}from"@flatjs/common";import{parseTemplate}from"@hyperse/html-webpack-plugin-loader";import{allowPx2remForModule}from"../../helpers/allow-px2rem-for-module.js";import{getHtmlPluginConfig}from"../../helpers/get-html-plugin-config.js";import{getPackageDir}from"../../helpers/get-pacakge-dir.js";import{getRuntimeCDNBase}from"../../helpers/get-runtime-cdn-base.js";import{normalizeEvolveEntryName}from"../../helpers/normalize-entry-map.js";import{normalizePageProxy}from"../../helpers/normalize-page-proxy.js";import{normalizeTemplateInjectTokens}from"../../helpers/normalize-template-inject-tokens.js";import{injectFederationScripts}from"../../helpers/script-injects.js";import{ErrorModuleParser}from"./error-module-parser.js";import{getBundleAsset}from"./get-bundle-asset.js";import{getDevServerHostUri}from"./get-dev-server-host-uri.js";import{getHmrRuntimeChunks}from"./get-hmr-runtime-chunks.js";import{getNormalizedEntryName}from"./get-normalized-entry-name.js";export const getPageModuleHtml=async(e,t,r,o,s)=>{const{entryMap:n,projectVirtualPath:i}=s,l=Object.keys(n).sort((e,t)=>t.length-e.length),a=getPackageDir(),m=l.find(e=>{const r=normalizeEvolveEntryName(e,i);return ensureSlash(t.path.replace(/^\//,""),!0).startsWith(ensureSlash(r,!0))});if(!m){const e=readFileSync(join(a,"./templates/module-404.html"),"utf-8");return new ErrorModuleParser(e,{title:"404 Not Found",errorMeta:[{name:"@flatjs/evolve workspace",value:a},{name:"served entry names",value:JSON.stringify(l)},{name:"module path",value:`${t.path}`}]}).serialize()}const p=n[m],u=p.options,d=getDevServerHostUri(e,m,r),c=u?.templatePath||"./templates/module.html",g=join(s.projectCwd,"./templates/module.html"),h=readFileSync(isAbsolute(c)?c:existsSync(g)?g:join(a,"./templates/module.html"),"utf-8"),f=s.devServer,v=f?.defaultServeGlobalData?await f.defaultServeGlobalData(p,r):{},j={mode:"development",envCdn:urlJoin(r,["public"])},y=getNormalizedEntryName(m,i,e,f),S=normalizePageProxy(f?.pageProxy||"/pages"),P=normalizeTemplateInjectTokens(j,u),H=parseTemplate(h);H.upsertTitleTag(getHtmlPluginConfig("title",j,u?.title));const b=P.favicon;b&&H.upsertFaviconTag(b.href,b.rel,b.attributes);const z=P.headMetaTags||[];H.upsertHeadMetaTags(z);const w=P.headStyles||[],C=getBundleAsset(d,y,".css");w.push({id:C,href:C,position:"end"}),H.upsertHeadStyles(w);const k=P.headScripts||[];getHmrRuntimeChunks(e,m,y,p,s,d).forEach(e=>{k.push({id:e,src:e,position:"end"})}),H.upsertHeadScripts(k);const N=P.headInlineScripts||[];allowPx2remForModule([m,p],s)&&N.push({id:"viewport",content:getHtmlPluginConfig("viewport",j,u?.viewport),position:"end"});const E=getRuntimeCDNBase(s.multiHtmlCdn,s.multiHtmlCdnEnvResolver||function cdnResolver(){});N.push({id:"flatjsMultiCdn",content:E,position:"end"});const M=injectFederationScripts({me:[urlJoin(r,["public"])]},s.multiHtmlCdnEnvResolver);N.push({id:"evolveFetchMicroWidgets",content:M,position:"end"});const T={hostUrl:r,apiBase:urlJoin(r,[o]),virtualPath:join(S,i),moduleName:m.replace(i,"").replace(/^\//,""),...v,...u?.serveGlobalData||{}};N.push({id:"globalData",content:`window.GLOBAL=${JSON.stringify(T)}`,position:"end"}),H.upsertHeadInlineScripts(N);const x=P.headInlineStyles||[];H.upsertHeadInlineStyles(x);const D=P.bodyScripts||[],F=getBundleAsset(d,y,".js");return D.push({id:F,src:F,position:"end"}),H.upsertBodyScripts(D),H.serialize()};
@@ -0,0 +1,15 @@
1
+ import { TemplateParser } from '@hyperse/html-webpack-plugin-loader';
2
+ export interface MainTemplateModuleItemData {
3
+ name: string;
4
+ link: string;
5
+ flagText: string;
6
+ isServed: 1 | 0;
7
+ }
8
+ export interface MainTemplateData {
9
+ title: string;
10
+ modules: MainTemplateModuleItemData[];
11
+ }
12
+ export declare class MainModuleParser extends TemplateParser {
13
+ constructor(htmlSource: string, templateData: MainTemplateData);
14
+ private upsertBodyDocument;
15
+ }
@@ -0,0 +1 @@
1
+ import{TemplateParser}from"@hyperse/html-webpack-plugin-loader";export class MainModuleParser extends TemplateParser{constructor(e,s){super(e),this.upsertTitleTag(s.title),this.upsertBodyDocument(s)}upsertBodyDocument(e){const s=this.parseFragment(`<div class="header"><div class="logo"></div><span>${e.title}</span></div>`),a=e.modules.map((e,s)=>`<li><a href="${e.link}">${s+1}. ${e.name}</a><span class="${e.flagText}">${e.flagText}</span></li>`),t=this.parseFragment(`<ul>${a.join("")}</ul>`),l=[...s.childNodes,...t.childNodes];this.body.childNodes.push(...l)}}
@@ -1 +1 @@
1
- import{normalizeEvolveEntryName}from"./normalize-entry-map.js";export const assertGroupEntryItem=(r,e)=>{const o=[];for(const[e,t]of Object.entries(r))o.push([e,t]);if(!o.length)throw new Error('No entry map found while "serve", "build" process!');return o.map((([r,o])=>[normalizeEvolveEntryName(r,e.projectVirtualPath),o]))};
1
+ import{normalizeEvolveEntryName}from"./normalize-entry-map.js";export const assertGroupEntryItem=(r,e)=>{const o=[];for(const[e,t]of Object.entries(r))o.push([e,t]);if(!o.length)throw new Error('No entry map found while "serve", "build" process!');return o.map(([r,o])=>[normalizeEvolveEntryName(r,e.projectVirtualPath),o])};
@@ -1 +1 @@
1
- import{arrayChunk}from"@flatjs/common";export const chunkEntryMap=(r,o=2)=>{const n=Object.keys(r),t=arrayChunk(n,o),c=[];for(const o of t){const n=o.reduce(((o,n)=>({...o,[n]:r[n]})),{});c.push(n)}return c};
1
+ import{arrayChunk}from"@flatjs/common";export const chunkEntryMap=(r,o=2)=>{const n=Object.keys(r),t=arrayChunk(n,o),c=[];for(const o of t){const n=o.reduce((o,n)=>({...o,[n]:r[n]}),{});c.push(n)}return c};
@@ -1 +1 @@
1
- import logUpdate from"log-update";import{chalk,loggerSimpleStdWriteSteam}from"@flatjs/common";import{buildProgressSpinnerFrames}from"../constants.js";import{formatSpinnerText}from"./format-spinner-text.js";let startIndex=0;export class CustomListrRenderer{constructor(e){this._tasks=[],this.renderTask=()=>{const e=[];startIndex=++startIndex%buildProgressSpinnerFrames.length;const t=buildProgressSpinnerFrames[startIndex];for(const r of this._tasks){const s=r.title.split("$ENTRY_KEYS")||[],i=s[1]||"",o=i?i.split(","):[];r.isCompleted()?e.push(`${chalk(["green"])("✔")} ${this.formatTextByTemp(s[0],"successfully")} \n${formatSpinnerText(o,"✔","green")}`):r.hasFailed()?e.push(`${chalk(["red"])("✘")} ${this.formatTextByTemp(s[0],"failed")} \n${formatSpinnerText(o,"✘","red")}`):r.isSkipped()?e.push(`${chalk(["gray"])("ℹ")} ${this.formatTextByTemp(s[0],"skipped")} \n${formatSpinnerText(o,"ℹ","gray")}`):e.push(`${chalk(["cyan"])(t)} ${this.formatTextByTemp(s[0],"building")} \n${formatSpinnerText(o)}`)}logUpdate(e.join("\n"))},this._tasks=e}static get nonTTY(){return!0}render(){this._id||(this._id=setInterval((()=>{this.renderTask()}),100))}end(){this._id&&(clearInterval(this._id),this._id=void 0),this.renderTask(),logUpdate.done(),this.printMemoryLogs()}formatTextByTemp(e,t,r="$STATUS"){const s={successfully:`${chalk(["green"])("done")}`,failed:`builded ${chalk(["red"])("failed")}`,skipped:`builded ${chalk(["gray"])("skipped")}`,building:chalk(["white"])("compiling...")};return e.replace(r,s[t])}printMemoryLogs(){const{stderr:e=[],stdout:t=[]}=loggerSimpleStdWriteSteam.getStdData();for(const t of e)console.error(t);for(const e of t)console.log(e)}}
1
+ import logUpdate from"log-update";import{chalk,loggerSimpleStdWriteSteam}from"@flatjs/common";import{buildProgressSpinnerFrames}from"../constants.js";import{formatSpinnerText}from"./format-spinner-text.js";let startIndex=0;export class CustomListrRenderer{constructor(e){this._tasks=[],this.renderTask=()=>{const e=[];startIndex=++startIndex%buildProgressSpinnerFrames.length;const t=buildProgressSpinnerFrames[startIndex];for(const r of this._tasks){const s=r.title.split("$ENTRY_KEYS")||[],i=s[1]||"",o=i?i.split(","):[];r.isCompleted()?e.push(`${chalk(["green"])("✔")} ${this.formatTextByTemp(s[0],"successfully")} \n${formatSpinnerText(o,"✔","green")}`):r.hasFailed()?e.push(`${chalk(["red"])("✘")} ${this.formatTextByTemp(s[0],"failed")} \n${formatSpinnerText(o,"✘","red")}`):r.isSkipped()?e.push(`${chalk(["gray"])("ℹ")} ${this.formatTextByTemp(s[0],"skipped")} \n${formatSpinnerText(o,"ℹ","gray")}`):e.push(`${chalk(["cyan"])(t)} ${this.formatTextByTemp(s[0],"building")} \n${formatSpinnerText(o)}`)}logUpdate(e.join("\n"))},this._tasks=e}static get nonTTY(){return!0}render(){this._id||(this._id=setInterval(()=>{this.renderTask()},100))}end(){this._id&&(clearInterval(this._id),this._id=void 0),this.renderTask(),logUpdate.done(),this.printMemoryLogs()}formatTextByTemp(e,t,r="$STATUS"){const s={successfully:`${chalk(["green"])("done")}`,failed:`builded ${chalk(["red"])("failed")}`,skipped:`builded ${chalk(["gray"])("skipped")}`,building:chalk(["white"])("compiling...")};return e.replace(r,s[t])}printMemoryLogs(){const{stderr:e=[],stdout:t=[]}=loggerSimpleStdWriteSteam.getStdData();for(const t of e)console.error(t);for(const e of t)console.log(e)}}
@@ -1 +1 @@
1
- import{MessageChannel}from"node:worker_threads";class CustomMessageChannel{constructor(){this.stdoutData=[],this.stderrData=[],this.channelList=[],this.clean()}createMessageChannel(){const s=new MessageChannel;return this.channelList.push(s),this.addListener(s),s}addListener(s){const{port2:t}=s;t.on("message",(s=>{this.stdoutData.push(...s.stdout),this.stderrData.push(...s.stderr)}))}getStdData(){return{stdout:this.stdoutData,stderr:this.stderrData}}dispose(){for(const s of this.channelList){const{port1:t,port2:e}=s;t.close(),e.close(),e.removeAllListeners("message")}this.channelList=[]}clean(){this.stdoutData=[],this.stderrData=[]}}export const customMessageChannel=new CustomMessageChannel;
1
+ import{MessageChannel}from"node:worker_threads";class CustomMessageChannel{constructor(){this.stdoutData=[],this.stderrData=[],this.channelList=[],this.clean()}createMessageChannel(){const s=new MessageChannel;return this.channelList.push(s),this.addListener(s),s}addListener(s){const{port2:t}=s;t.on("message",s=>{this.stdoutData.push(...s.stdout),this.stderrData.push(...s.stderr)})}getStdData(){return{stdout:this.stdoutData,stderr:this.stderrData}}dispose(){for(const s of this.channelList){const{port1:t,port2:e}=s;t.close(),e.close(),e.removeAllListeners("message")}this.channelList=[]}clean(){this.stdoutData=[],this.stderrData=[]}}export const customMessageChannel=new CustomMessageChannel;
@@ -1 +1 @@
1
- export const deleteObjectKeys=(e,t=[])=>{if(!e)return;const r={...e};return t.forEach((e=>{delete r[e]})),r};
1
+ export const deleteObjectKeys=(e,t=[])=>{if(!e)return;const r={...e};return t.forEach(e=>{delete r[e]}),r};
@@ -1 +1 @@
1
- import{arraysIntersect,normalizeSemicolonFilterParts}from"@flatjs/common";import{resolveEntryMapInputFiles}from"./resolve-entry-map-input-files.js";export const filterActivedEntriesByModule=(t,e)=>{const r=normalizeSemicolonFilterParts(e),n={};for(const[e,o]of Object.entries(t)){r.find((t=>("string"==typeof t||"number"==typeof t?new RegExp(`${t}`):t).test(e)))&&(n[e]=o)}return n};export const filterActivedEntriesByEntryInputs=async(t,e,r)=>{const n={};for(const[o,s]of Object.entries(e)){const e=await resolveEntryMapInputFiles(t,{[o]:s});arraysIntersect(e,r)&&(n[o]=s)}return n};
1
+ import{arraysIntersect,normalizeSemicolonFilterParts}from"@flatjs/common";import{resolveEntryMapInputFiles}from"./resolve-entry-map-input-files.js";export const filterActivedEntriesByModule=(t,e)=>{const r=normalizeSemicolonFilterParts(e),n={};for(const[e,o]of Object.entries(t)){r.find(t=>("string"==typeof t||"number"==typeof t?new RegExp(`${t}`):t).test(e))&&(n[e]=o)}return n};export const filterActivedEntriesByEntryInputs=async(t,e,r)=>{const n={};for(const[o,s]of Object.entries(e)){const e=await resolveEntryMapInputFiles(t,{[o]:s});arraysIntersect(e,r)&&(n[o]=s)}return n};
@@ -1 +1 @@
1
- export const flatEntryMap=t=>t.reduce(((t,e)=>Object.assign(t,e)),{});
1
+ export const flatEntryMap=t=>t.reduce((t,e)=>Object.assign(t,e),{});
@@ -1 +1 @@
1
- import{chalk}from"@flatjs/common";export const formatSpinnerText=(n=[],t,e)=>{if(1===n.length)return` ${chalk([e||"blue"])(t||"●")} ${n[0]} \n`;return n.map(((r,l)=>{let o="├";return 0===l?o="┌":l===n.length-1&&(o="└"),` ${chalk([e||"blue"])(t||o)} ${r} \n`})).join("")};
1
+ import{chalk}from"@flatjs/common";export const formatSpinnerText=(n=[],t,e)=>{if(1===n.length)return` ${chalk([e||"blue"])(t||"●")} ${n[0]} \n`;return n.map((r,l)=>{let o="├";return 0===l?o="┌":l===n.length-1&&(o="└"),` ${chalk([e||"blue"])(t||o)} ${r} \n`}).join("")};
@@ -1 +1 @@
1
- import{polyfill,viewportScripts}from"../constants.js";import{getPackageDir}from"./get-pacakge-dir.js";export const defaultHtmlPluginConfig={title:"",favicon:"",headBeforeHtmlTags:[],inlineScripts:[],headBeforeStyles:[],headBeforeScripts:[...polyfill],bodyAfterScripts:[],viewport:viewportScripts,excludeCdnEnvs:["me","dev","ntv"],htmlMinify:!0,templatePath:getPackageDir("templates/html-plugin/index-{0}.html")};export const getHtmlPluginConfig=(t,e,i)=>{let o;if(void 0!==i&&(o="function"==typeof i?i(e):i),void 0===o){const i=defaultHtmlPluginConfig[t];return"function"==typeof i?i(e):i}return o};
1
+ import{polyfill,viewportScripts}from"../constants.js";import{getPackageDir}from"./get-pacakge-dir.js";export const defaultHtmlPluginConfig={title:"",favicon:{href:"",rel:"icon",attributes:{type:"image/x-icon"}},headMetaTags:[],headInlineScripts:[],headInlineStyles:[],headStyles:[],headScripts:[...polyfill||[]],bodyScripts:[],viewport:viewportScripts,excludeCdnEnvs:["me","dev","ntv"],htmlMinify:!0,templatePath:getPackageDir("templates/html-plugin/index-{0}.html")};export const getHtmlPluginConfig=(t,e,i)=>{let n;if(void 0!==i&&(n="function"==typeof i?i(e):i),void 0===n){const i=defaultHtmlPluginConfig[t];return"function"==typeof i?i(e):i}return n};
@@ -1 +1 @@
1
- export function isDeepEqual(t,e){if(t===e)return!0;if("function"==typeof t&&"function"==typeof e)return t.toString()===e.toString();if(t&&e&&"object"==typeof t&&"object"==typeof e){const r=Array.isArray(t),n=Array.isArray(e);let i,f,o;if(r&&n){if(f=t.length,f!==e.length)return!1;for(i=f;0!=i--;)if(!isDeepEqual(t[i],e[i]))return!1;return!0}if(r!==n)return!1;const u=t instanceof Date,c=e instanceof Date;if(u!==c)return!1;if(u&&c)return t.getTime()===e.getTime();const s=t instanceof RegExp,a=e instanceof RegExp;if(s!==a)return!1;if(s&&a)return t.toString()===e.toString();const p=Object.keys(t);if(f=p.length,f!==Object.keys(e).length)return!1;for(i=f;0!=i--;)if(!Object.prototype.hasOwnProperty.call(e,p[i]))return!1;for(i=f;0!=i--;)if(o=p[i],!isDeepEqual(t[o],e[o]))return!1;return!0}return t!=t&&e!=e}
1
+ export function isDeepEqual(t,e){if(t===e)return!0;if("function"==typeof t&&"function"==typeof e)return t.toString()===e.toString();if(t&&e&&"object"==typeof t&&"object"==typeof e){const r=Array.isArray(t),n=Array.isArray(e);let i,f,o;if(r&&n){if(f=t.length,f!==e.length)return!1;for(i=f;0!==i--;)if(!isDeepEqual(t[i],e[i]))return!1;return!0}if(r!==n)return!1;const u=t instanceof Date,c=e instanceof Date;if(u!==c)return!1;if(u&&c)return t.getTime()===e.getTime();const s=t instanceof RegExp,a=e instanceof RegExp;if(s!==a)return!1;if(s&&a)return t.toString()===e.toString();const p=Object.keys(t);if(f=p.length,f!==Object.keys(e).length)return!1;for(i=f;0!==i--;)if(!Object.prototype.hasOwnProperty.call(e,p[i]))return!1;for(i=f;0!==i--;)if(o=p[i],!isDeepEqual(t[o],e[o]))return!1;return!0}return t!=t&&e!=e}
@@ -1 +1 @@
1
- export const isVueEntryItem=e=>{let t=!1;for(const[,r]of Object.entries(e)){if((r.entry||[]).find((e=>/.vue$/.test(e)))){t=!0;break}}return t};
1
+ export const isVueEntryItem=e=>{let t=!1;for(const[,r]of Object.entries(e)){if((r.entry||[]).find(e=>/.vue$/.test(e))){t=!0;break}}return t};
@@ -1 +1 @@
1
- import vm from"node:vm";function stringifyWithFns(n){return JSON.stringify(n,(function(n,t){if("function"==typeof t)try{return makeFunctionFromString(t),t.toString()}catch{return`function ${t.toString()}`}return t}))}function looksLikeAFunctionString(n){return!![/^function[^(]*\(([^()]*)\)\s*\{[\s\S]*\}$/m,/^(\s*async\s*)?(\w*\s*)\(([^)]*)\)\s*=>\s*(.*)$/m,/^\s*\w+\s*=>/m].find((t=>t.test(n)))}function makeFunctionFromString(n){return vm.runInNewContext("("+n+")")}function parseWithFns(n){try{return JSON.parse(n,(function(n,t){return looksLikeAFunctionString(t)?makeFunctionFromString(t):t}))}catch{return{}}}export const jsonSerializer={stringify:stringifyWithFns,parse:parseWithFns};
1
+ import vm from"node:vm";function stringifyWithFns(n){return JSON.stringify(n,function(n,t){if("function"==typeof t)try{return makeFunctionFromString(t),t.toString()}catch{return`function ${t.toString()}`}return t})}function looksLikeAFunctionString(n){return!![/^function[^(]*\(([^()]*)\)\s*\{[\s\S]*\}$/m,/^(\s*async\s*)?(\w*\s*)\(([^)]*)\)\s*=>\s*(.*)$/m,/^\s*\w+\s*=>/m].find(t=>t.test(n))}function makeFunctionFromString(n){return vm.runInNewContext("("+n+")")}function parseWithFns(n){try{return JSON.parse(n,function(n,t){return looksLikeAFunctionString(t)?makeFunctionFromString(t):t})}catch{return{}}}export const jsonSerializer={stringify:stringifyWithFns,parse:parseWithFns};
@@ -1 +1 @@
1
- import{babelMerge}from"@armit/babel-merge";import babelPluginImport from"@flatjs/babel-plugin-import";import{logger}from"@flatjs/common";import{reactBabelPreset,vueBabelPreset}from"@flatjs/evolve-preset-babel";import{moduleName}from"../constants.js";export const mergeBabelOption=(e,r=[],t={usePreset:"react"},a)=>{const l=r.map((e=>[babelPluginImport,{projectCwd:a,transformToDefaultImport:!1,libraryDirectory:"dist",...e},e.libraryName])),{usePreset:o="react",...m}=t,b="react"===o?reactBabelPreset(e):"vue"===o?vueBabelPreset():reactBabelPreset();let s={};try{s=babelMerge(b,m),s.plugins?s.plugins.unshift(...l):s.plugins=l}catch(e){logger.error(e,moduleName)}return{...s,babelrc:!1,compact:!1}};
1
+ import{babelMerge}from"@armit/babel-merge";import babelPluginImport from"@flatjs/babel-plugin-import";import{logger}from"@flatjs/common";import{reactBabelPreset,vueBabelPreset}from"@flatjs/evolve-preset-babel";import{moduleName}from"../constants.js";export const mergeBabelOption=(e,r=[],t={usePreset:"react"},a)=>{const l=r.map(e=>[babelPluginImport,{projectCwd:a,transformToDefaultImport:!1,libraryDirectory:"dist",...e},e.libraryName]),{usePreset:o="react",...m}=t,b="react"===o?reactBabelPreset(e):"vue"===o?vueBabelPreset():reactBabelPreset();let s={};try{s=babelMerge(b,m),s.plugins?s.plugins.unshift(...l):s.plugins=l}catch(e){logger.error(e,moduleName)}return{...s,babelrc:!1,compact:!1}};
@@ -1 +1 @@
1
- import{dirname,join}from"path";import{fileURLToPath}from"url";import{searchPackageDir}from"@armit/package";import{logger,mergeOptions,requireResolve}from"@flatjs/common";export const mergeInspectorEvolveConfig=e=>{const{inspector:r}=e;if(!r)return e;const{externals:t}=e.webpack||{};if(t){let r=t;if("function"==typeof t&&(r=t()),r.react||r["react-dom"])return logger.warn("React and ReactDOM are external dependencies, you need to manually integrate Inspector"),e}const{keys:n,customLaunchEditorEndpoint:o="/__hps_inspector"}=r,i={"process.env.INSPECTOR_ENDPOINT":JSON.stringify(`/pages/${o}`.replace(/\/\//g,"/"))};n&&(i["process.env.INSPECTOR_KEYS"]=JSON.stringify(n.join(",")));const s=mergeOptions(e,{pluginOptions:{definePlugin:i}}),a=requireResolve(import.meta.url,"@hyperse/inspector"),c=searchPackageDir({cwd:fileURLToPath(dirname(a))});if(!c)return logger.debug("@hyperse/inspector package not found"),s;const p=join(c,"dist","client","index.js"),g=s.entryMap;for(const[e,r]of Object.entries(g)){r.entry.push(p)}return s};
1
+ import{dirname,join}from"path";import{fileURLToPath}from"url";import{searchPackageDir}from"@armit/package";import{logger,mergeOptions,requireResolve}from"@flatjs/common";import{normalizePageProxy}from"./normalize-page-proxy.js";export const mergeInspectorEvolveConfig=e=>{const{inspector:r,devServer:o}=e;if(!r)return e;const{externals:n}=e.webpack||{};if(n){let r=n;if("function"==typeof n&&(r=n()),r.react||r["react-dom"])return logger.warn("React and ReactDOM are external dependencies, you need to manually integrate Inspector"),e}const t=normalizePageProxy(o?.pageProxy||"/pages"),{keys:i=["$mod","i"],customLaunchEditorEndpoint:s="/__hps_inspector"}=r,a={"process.env.INSPECTOR_ENDPOINT":JSON.stringify(join(t,s)),"process.env.INSPECTOR_KEYS":JSON.stringify(i.join(",")),"process.env.INSPECTOR_HIDE_CONSOLE":JSON.stringify("FALSE"),"process.env.INSPECTOR_HIDE_CONTEXT":JSON.stringify("TRUE"),"process.env.INSPECTOR_HIDE_DOM_PATH_ATTR":JSON.stringify("TRUE"),"process.env.INSPECTOR_DISABLE":JSON.stringify("FALSE")},p=mergeOptions(e,{pluginOptions:{definePlugin:a}}),c=requireResolve(import.meta.url,"@hyperse/inspector"),g=searchPackageDir({cwd:fileURLToPath(dirname(c))});if(!g)return logger.debug("@hyperse/inspector package not found"),p;const m=join(g,"dist","client","index.js"),f=p.entryMap;for(const[e,r]of Object.entries(f)){r.entry.push(m)}return p};
@@ -1 +1 @@
1
- import{normalizeEvolveEntryName}from"./normalize-entry-map.js";export const normalizeGroupName=(r,o)=>{const e=Array.from({length:26},((r,o)=>String.fromCharCode(65+o))),m=[...Array.from({length:26},((r,o)=>String.fromCharCode(97+o))),...e],n=Math.floor(o/52);return normalizeEvolveEntryName(`${m[o%52]}${n||""}`,r)};
1
+ import{normalizeEvolveEntryName}from"./normalize-entry-map.js";export const normalizeGroupName=(r,o)=>{const e=Array.from({length:26},(r,o)=>String.fromCharCode(65+o)),m=[...Array.from({length:26},(r,o)=>String.fromCharCode(97+o)),...e],n=Math.floor(o/52);return normalizeEvolveEntryName(`${m[o%52]}${n||""}`,r)};
@@ -1,3 +1,4 @@
1
+ import type { TemplateOptions } from '@hyperse/html-webpack-plugin-loader';
1
2
  import { type EvolveEntryItemOption } from '../types/types-entry-map.js';
2
3
  import { type HtmlPluginConfigConfigData } from './get-html-plugin-config.js';
3
4
  /**
@@ -8,9 +9,11 @@ import { type HtmlPluginConfigConfigData } from './get-html-plugin-config.js';
8
9
  * @returns An object containing the normalized template inject tokens.
9
10
  */
10
11
  export declare const normalizeTemplateInjectTokens: (configData: HtmlPluginConfigConfigData, currEntryOption?: EvolveEntryItemOption) => {
11
- headBeforeHtmlTags?: string[];
12
- inlineScripts?: string[];
13
- headBeforeStyles?: string[];
14
- headBeforeScripts: string[];
15
- bodyAfterScripts: string[];
12
+ favicon?: TemplateOptions["favicon"];
13
+ headMetaTags?: TemplateOptions["headMetaTags"];
14
+ headStyles?: TemplateOptions["headStyles"];
15
+ headScripts: TemplateOptions["headScripts"];
16
+ bodyScripts: TemplateOptions["bodyScripts"];
17
+ headInlineScripts?: TemplateOptions["headInlineScripts"];
18
+ headInlineStyles?: TemplateOptions["headInlineStyles"];
16
19
  };
@@ -1 +1 @@
1
- import{getHtmlPluginConfig}from"./get-html-plugin-config.js";export const normalizeTemplateInjectTokens=(e,t)=>({headBeforeHtmlTags:getHtmlPluginConfig("headBeforeHtmlTags",e,t?.headBeforeHtmlTags),inlineScripts:getHtmlPluginConfig("inlineScripts",e,t?.inlineScripts),headBeforeStyles:getHtmlPluginConfig("headBeforeStyles",e,t?.headBeforeStyles),headBeforeScripts:getHtmlPluginConfig("headBeforeScripts",e,t?.headBeforeScripts),bodyAfterScripts:getHtmlPluginConfig("bodyAfterScripts",e,t?.bodyAfterScripts)});
1
+ import _ from"lodash";import{getHtmlPluginConfig}from"./get-html-plugin-config.js";export const normalizeTemplateInjectTokens=(e,t)=>{const n={favicon:getHtmlPluginConfig("favicon",e,t?.favicon),headMetaTags:getHtmlPluginConfig("headMetaTags",e,t?.headMetaTags),headInlineScripts:getHtmlPluginConfig("headInlineScripts",e,t?.headInlineScripts),headStyles:getHtmlPluginConfig("headStyles",e,t?.headStyles),headScripts:getHtmlPluginConfig("headScripts",e,t?.headScripts),bodyScripts:getHtmlPluginConfig("bodyScripts",e,t?.bodyScripts),headInlineStyles:getHtmlPluginConfig("headInlineStyles",e,t?.headInlineStyles)};return _.cloneDeep(n)};
@@ -1 +1 @@
1
- import{fileWalk}from"@armit/file-utility";import{arrayUnique}from"@flatjs/common";export const resolveEntryMapInputFiles=async(t,r)=>{const e=[];for(const[,t]of Object.entries(r)){const r=t.entry.map((t=>t.replace(/.(?:js|jsx|tsx|ts)$/,"")+".*"));e.push(...r)}const o=arrayUnique(e);return await fileWalk(o,{cwd:t,absolute:!0})};
1
+ import{fileWalk}from"@armit/file-utility";import{arrayUnique}from"@flatjs/common";export const resolveEntryMapInputFiles=async(t,r)=>{const e=[];for(const[,t]of Object.entries(r)){const r=t.entry.map(t=>t.replace(/.(?:js|jsx|tsx|ts)$/,"")+".*");e.push(...r)}const o=arrayUnique(e);return await fileWalk(o,{cwd:t,absolute:!0})};
@@ -1 +1 @@
1
- import _ from"lodash";import{ignoreEntryOptionKeys}from"../constants.js";import{isDeepEqual}from"./is-deep-equal.js";import{normalizeCheckEntryOptions}from"./normalize-check-entry-options.js";import{normalizeGroupName}from"./normalize-group-name.js";export const manualGrouping=o=>{const e=_.groupBy(o,(o=>o.groupName)),t=[];for(const[,o]of Object.entries(e)){const e=o.reduce(((o,e)=>(o[e.entryName]=_.omitBy(e,"entryName"),o)),{});t.push(e)}return t};export const autoGroupingReduce=(o,e=[],t)=>_.reduce(o,((o,r,n)=>{let s=`auto_grouping_reduce-${n}`;const u=normalizeCheckEntryOptions(t,r.options,e);for(const[r,n]of Object.entries(o)){const o=Object.values(n)[0],i=normalizeCheckEntryOptions(t,o.options,e);if(isDeepEqual(u,i)){s=r;break}}return o[s]=_.merge(o[s],{[r.entryName]:_.omitBy(r,"entryName")}),o}),{});export const autoAssignGroupName=(o,e,t=0)=>{const{projectVirtualPath:r}=o,n=[];let s=t;for(const o of e){const e={},t=normalizeGroupName(r,s++);for(const[r,n]of Object.entries(o))n.groupName=t,e[r]=n;n.push(e)}return n};export const autoGrouping=(o,e,t=[],r,n=0)=>{const{maxEntryGroupSize:s=10}=o,u=autoGroupingReduce(e,t,r),i=[];for(const[,o]of Object.entries(u)){const e=Object.keys(o);if(e.length>s)for(let t=0;t<e.length;t+=s){const r=e.slice(t,t+s).reduce(((e,t)=>(e[t]=o[t],e)),{});i.push(r)}else i.push(o)}return autoAssignGroupName(o,i,n)};export const splitToEntryGroup=(o,e,t=ignoreEntryOptionKeys,r,n=0)=>{const{isolation:s=!1}=e;if(s){const e=[];for(const[t,r]of Object.entries(o))r.groupName=t,e.push({[t]:r});return e}const u=_.flatMap(o,((o,e)=>({...o,entryName:e}))),i=_.groupBy(u,(o=>o.groupingSource));return[...manualGrouping(i.manual),...autoGrouping(e,i.auto,t,r,n)]};
1
+ import _ from"lodash";import{ignoreEntryOptionKeys}from"../constants.js";import{isDeepEqual}from"./is-deep-equal.js";import{normalizeCheckEntryOptions}from"./normalize-check-entry-options.js";import{normalizeGroupName}from"./normalize-group-name.js";export const manualGrouping=o=>{const e=_.groupBy(o,o=>o.groupName),t=[];for(const[,o]of Object.entries(e)){const e=o.reduce((o,e)=>(o[e.entryName]=_.omitBy(e,"entryName"),o),{});t.push(e)}return t};export const autoGroupingReduce=(o,e=[],t)=>_.reduce(o,(o,r,n)=>{let s=`auto_grouping_reduce-${n}`;const u=normalizeCheckEntryOptions(t,r.options,e);for(const[r,n]of Object.entries(o)){const o=Object.values(n)[0],i=normalizeCheckEntryOptions(t,o.options,e);if(isDeepEqual(u,i)){s=r;break}}return o[s]=_.merge(o[s],{[r.entryName]:_.omitBy(r,"entryName")}),o},{});export const autoAssignGroupName=(o,e,t=0)=>{const{projectVirtualPath:r}=o,n=[];let s=t;for(const o of e){const e={},t=normalizeGroupName(r,s++);for(const[r,n]of Object.entries(o))n.groupName=t,e[r]=n;n.push(e)}return n};export const autoGrouping=(o,e,t=[],r,n=0)=>{const{maxEntryGroupSize:s=10}=o,u=autoGroupingReduce(e,t,r),i=[];for(const[,o]of Object.entries(u)){const e=Object.keys(o);if(e.length>s)for(let t=0;t<e.length;t+=s){const r=e.slice(t,t+s).reduce((e,t)=>(e[t]=o[t],e),{});i.push(r)}else i.push(o)}return autoAssignGroupName(o,i,n)};export const splitToEntryGroup=(o,e,t=ignoreEntryOptionKeys,r,n=0)=>{const{isolation:s=!1}=e;if(s){const e=[];for(const[t,r]of Object.entries(o))r.groupName=t,e.push({[t]:r});return e}const u=_.flatMap(o,(o,e)=>({...o,entryName:e})),i=_.groupBy(u,o=>o.groupingSource);return[...manualGrouping(i.manual),...autoGrouping(e,i.auto,t,r,n)]};
@@ -1 +1 @@
1
- import{ignoreEntryOptionKeys}from"../constants.js";import{isDeepEqual}from"./is-deep-equal.js";import{normalizeCheckEntryOptions}from"./normalize-check-entry-options.js";export const verifyGroupEntryOptions=(n,o=ignoreEntryOptionKeys,t)=>{const e=Object.values(n);if(1===e.length)return!0;const r=e.shift(),i=normalizeCheckEntryOptions(t,r?.options,o);return e.every((n=>isDeepEqual(i,normalizeCheckEntryOptions(t,n.options,o))))};
1
+ import{ignoreEntryOptionKeys}from"../constants.js";import{isDeepEqual}from"./is-deep-equal.js";import{normalizeCheckEntryOptions}from"./normalize-check-entry-options.js";export const verifyGroupEntryOptions=(n,o=ignoreEntryOptionKeys,t)=>{const e=Object.values(n);if(1===e.length)return!0;const r=e.shift(),i=normalizeCheckEntryOptions(t,r?.options,o);return e.every(n=>isDeepEqual(i,normalizeCheckEntryOptions(t,n.options,o)))};
@@ -1 +1 @@
1
- import _ from"lodash";import{createReadStream}from"node:fs";import{start}from"webpack-bundle-analyzer";import{cancel,confirm,intro,isCancel,multiselect,outro}from"@clack/prompts";import{parseChunked}from"@discoveryjs/json-ext";import{chalk,logger}from"@flatjs/common";import{moduleName}from"../constants.js";import{formatSpinnerText}from"../helpers/format-spinner-text.js";import{getStatsFileName}from"../helpers/get-stats-file-name.js";const readStatsFromFile=async e=>parseChunked(createReadStream(e,{encoding:"utf8"})),getStatsFilenames=async e=>{const t=[];for(const[r,a]of Object.entries(e)){const e=_.flattenDeep(Object.values(a.assetsByChunkName||{})).filter((e=>e.endsWith(".js"))),s=`Group ${chalk(["magenta"])(a.name||"")} \n${formatSpinnerText(e,`${chalk(["cyan"])("◆ ")}`)}`;t.push({value:r,label:s})}intro("Webpack bundle analyzer");const r=await multiselect({message:"Select entry groups to analyze",required:!0,options:t});if(isCancel(r))return cancel("The process has exited"),process.exit(0);const a=await confirm({message:"Are you sure to perform the analysis?"});return isCancel(a)?(cancel("The process has exited"),process.exit(0)):a?(outro("You're all set!"),r):getStatsFilenames(e)},startServer=async(e,t)=>{try{return await start(e,t),!0}catch(e){return logger.error(`Failed to start the analyzer serve ${e}`,moduleName),!1}};export const prepareAnalyzer=async(e,t)=>{const r={};for(const t of e){const e=await readStatsFromFile(t);r[getStatsFileName(e)]=e}const a=[],s=await getStatsFilenames(r);for(const e of s)a.push(startServer(r[e],t));return Promise.all(a).then((()=>!0))};
1
+ import _ from"lodash";import{createReadStream}from"node:fs";import{start}from"webpack-bundle-analyzer";import{cancel,confirm,intro,isCancel,multiselect,outro}from"@clack/prompts";import{parseChunked}from"@discoveryjs/json-ext";import{chalk,logger}from"@flatjs/common";import{moduleName}from"../constants.js";import{formatSpinnerText}from"../helpers/format-spinner-text.js";import{getStatsFileName}from"../helpers/get-stats-file-name.js";const readStatsFromFile=async e=>parseChunked(createReadStream(e,{encoding:"utf8"})),getStatsFilenames=async e=>{const t=[];for(const[r,a]of Object.entries(e)){const e=_.flattenDeep(Object.values(a.assetsByChunkName||{})).filter(e=>e.endsWith(".js")),s=`Group ${chalk(["magenta"])(a.name||"")} \n${formatSpinnerText(e,`${chalk(["cyan"])("◆ ")}`)}`;t.push({value:r,label:s})}intro("Webpack bundle analyzer");const r=await multiselect({message:"Select entry groups to analyze",required:!0,options:t});if(isCancel(r))return cancel("The process has exited"),process.exit(0);const a=await confirm({message:"Are you sure to perform the analysis?"});return isCancel(a)?(cancel("The process has exited"),process.exit(0)):a?(outro("You're all set!"),r):getStatsFilenames(e)},startServer=async(e,t)=>{try{return await start(e,t),!0}catch(e){return logger.error(`Failed to start the analyzer serve ${e}`,moduleName),!1}};export const prepareAnalyzer=async(e,t)=>{const r={};for(const t of e){const e=await readStatsFromFile(t);r[getStatsFileName(e)]=e}const a=[],s=await getStatsFilenames(r);for(const e of s)a.push(startServer(r[e],t));return Promise.all(a).then(()=>!0)};
@@ -1 +1 @@
1
- import{arrayUnique,chalk,logger,urlJoin}from"@flatjs/common";import{attachMockMiddlewares}from"@flatjs/mock";import{ignoreEntryOptionKeys,moduleName}from"../constants.js";import{createRspackCompilerTask}from"../core/rspack/dev-serve/create-rspack-compiler-task.js";import{createWebpackCompilerTask}from"../core/webpack/dev-serve/create-webpack-compiler-task.js";import{createAppPageRoute,createDevServer,createDevServerEntries}from"../dev-server/index.js";import{flatEntryMap,openPage}from"../helpers/index.js";import{normalizePageProxy}from"../helpers/normalize-page-proxy.js";import{printPromotions}from"../helpers/print-promotion.js";import{splitToEntryGroup}from"../helpers/split-to-entry-group.js";import{verifyGroupEntryOptions}from"../helpers/verify-group-entry-options.js";import{envVerify}from"./env-verify.js";export const prepareServe=async(e,r,o)=>{await envVerify(e,o);const t=splitToEntryGroup(r,o,ignoreEntryOptionKeys,!0);if(!t.length)return void logger.warn("No served entries provided!");const s=[],{app:a,devPort:n,devHostUri:p,publicIp:i}=await createDevServer(o),c=o.devServer?.mockOptions?.mockFilters||[];for(const[,e]of Object.entries(r))c.push(...e.options?.mockFilters||[]);await attachMockMiddlewares(a,{...o.devServer?.mockOptions,mockFilters:arrayUnique(c),projectCwd:e});let m=n;const l=[];for(const e of t){if(!verifyGroupEntryOptions(e,ignoreEntryOptionKeys,!0))throw new Error("The entry options in a group must be the same.");m++;const r=await createDevServerEntries(m,e,o);l.push(r)}const v=flatEntryMap(l);createAppPageRoute(e,a,p,v,o);const d=normalizePageProxy(o.devServer?.pageProxy||"/pages"),f=urlJoin(p,[d]);o.devServer?.autoOpen&&openPage(f);const{compiler:g}=o;printPromotions(o);for(const e of l){const r="webpack"===g?createWebpackCompilerTask(i,e,l,o):createRspackCompilerTask(i,e,l,o);s.push(r)}return Promise.all(s).then((()=>(logger.info(`debug page ➩ ${chalk(["cyan"])(f)}`,moduleName),process.stdin.resume(),process.stdin.setEncoding("utf8"),process.stdin.on("data",(e=>{const r=e.toString();12===r.charCodeAt(0)?console.clear():[102,70].includes(r.charCodeAt(0))&&logger.info(`debug page ➩ ${chalk(["cyan"])(f)}`,moduleName)})),a)))};
1
+ import{arrayUnique,chalk,logger,urlJoin}from"@flatjs/common";import{attachMockMiddlewares}from"@flatjs/mock";import{ignoreEntryOptionKeys,moduleName}from"../constants.js";import{createRspackCompilerTask}from"../core/rspack/dev-serve/create-rspack-compiler-task.js";import{createWebpackCompilerTask}from"../core/webpack/dev-serve/create-webpack-compiler-task.js";import{createAppPageRoute,createDevServer,createDevServerEntries}from"../dev-server/index.js";import{flatEntryMap,openPage}from"../helpers/index.js";import{normalizePageProxy}from"../helpers/normalize-page-proxy.js";import{printPromotions}from"../helpers/print-promotion.js";import{splitToEntryGroup}from"../helpers/split-to-entry-group.js";import{verifyGroupEntryOptions}from"../helpers/verify-group-entry-options.js";import{envVerify}from"./env-verify.js";export const prepareServe=async(e,r,o)=>{await envVerify(e,o);const t=splitToEntryGroup(r,o,ignoreEntryOptionKeys,!0);if(!t.length)return void logger.warn("No served entries provided!");const s=[],{app:a,devPort:n,devHostUri:p,publicIp:i}=await createDevServer(o),c=o.devServer?.mockOptions?.mockFilters||[];for(const[,e]of Object.entries(r))c.push(...e.options?.mockFilters||[]);await attachMockMiddlewares(a,{...o.devServer?.mockOptions,mockFilters:arrayUnique(c),projectCwd:e});let m=n;const l=[];for(const e of t){if(!verifyGroupEntryOptions(e,ignoreEntryOptionKeys,!0))throw new Error("The entry options in a group must be the same.");m++;const r=await createDevServerEntries(m,e,o);l.push(r)}const v=flatEntryMap(l);createAppPageRoute(e,a,p,v,o);const d=normalizePageProxy(o.devServer?.pageProxy||"/pages"),f=urlJoin(p,[d]);o.devServer?.autoOpen&&openPage(f);const{compiler:g}=o;printPromotions(o);for(const e of l){const r="webpack"===g?createWebpackCompilerTask(i,e,l,o):createRspackCompilerTask(i,e,l,o);s.push(r)}return Promise.all(s).then(()=>(logger.info(`debug page ➩ ${chalk(["cyan"])(f)}`,moduleName),process.stdin.resume(),process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{const r=e.toString();12===r.charCodeAt(0)?console.clear():[102,70].includes(r.charCodeAt(0))&&logger.info(`debug page ➩ ${chalk(["cyan"])(f)}`,moduleName)}),a))};
@@ -1 +1 @@
1
- import Listr from"listr";import{isAbsolute,join}from"node:path";import{getCommitIdOfBranch,getDiffFiles}from"@armit/git";import{arraysIntersect,chalk,logger,requireResolve}from"@flatjs/common";import{traverseGraph}from"@flatjs/graph";import{createGlobalCompiler}from"../compiler/create-global-compiler.js";import{ignoreEntryOptionKeys,moduleName}from"../constants.js";import{isCI}from"../helpers/check-runtime-env.js";import{CustomListrRenderer}from"../helpers/custom-listr-renderer.js";import{filterActivedEntriesByEntryInputs,filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{getGitRoot}from"../helpers/get-git-root.js";import{getMaxProcessTasks}from"../helpers/get-max-process-tasks.js";import{jsonSerializer}from"../helpers/json-serializer.js";import{normalizeEvolveEntryMap}from"../helpers/normalize-entry-map.js";import{printPromotions}from"../helpers/print-promotion.js";import{resolveEntryMapInputFiles}from"../helpers/resolve-entry-map-input-files.js";import{splitToEntryGroup}from"../helpers/split-to-entry-group.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{createThreadWorker}from"./create-thread-worker.js";import{envVerify}from"./env-verify.js";import startBuildWorker from"./start-build-worker.js";const runWebpackTask=async(e,r,t,o,i,s={})=>{const{threads:n={}}=t,a=getMaxProcessTasks(r.length,n?.maxThreads);logger.info(`Start dynamic build with (${chalk(["magenta"])(String(a))}) workers`);const l=createThreadWorker({...n,maxThreads:a}),p=new Listr([],{concurrent:a,exitOnError:!0,renderer:isCI()?void 0:CustomListrRenderer}),c=[];for(const t of r){const r=Object.values(t)?.[0]?.groupName||"",n=Object.keys(t);let a=`Group ${chalk(["magenta"])(r)} $STATUS $ENTRY_KEYS${n.join(",")}`;isCI()&&(a=`Group ${chalk(["magenta"])(r)} compiling... $ENTRY_KEYS${n.join(",")}`),p.add({title:a,task:async()=>{const t=await l.startBuildWorker({projectCwd:e,entryKeys:n,serializedEvolveOptions:jsonSerializer.stringify(o),configLoaderOptions:i,groupName:r,cliOptions:s});c.push(t)}})}if(p.tasks.length)try{await p.run()}catch(e){throw l.terminate(),e}return l.terminate(),c},runRspackTask=async(e,r,t,o,i={})=>{const s=[];for(const n of r){const r=Object.values(n)?.[0]?.groupName||"",a=Object.keys(n),l=await startBuildWorker({projectCwd:e,entryKeys:a,serializedEvolveOptions:jsonSerializer.stringify(t),configLoaderOptions:o,groupName:r,cliOptions:i});s.push(l)}return s};export async function getBuildEntryFiles(e,r,t,o,i){const s=[],n=[];for(const e of t)r.includes(e)?s.push(e):n.push(e);if(i&&logger.info("Use custom graph traverse filter",moduleName),n.length){const t=await traverseGraph({input:n,projectCwd:e,treeNodeFilter:i||(()=>!0),lessImportOptions:{projectCwd:e,aliases:o}});if(!t)return s;logger.debug(`DependencyGraph:\n${JSON.stringify(t,null,2)}`);for(const e of n){const o=t[e]||[];arraysIntersect(o,r)&&s.push(e)}}return s}export async function dynamicCheckBuildEntryMap(e,r,t,o,i){const s={projectCwd:e,command:"build",resolve:requireResolve},n=await loadEvolveConfig(s,e,o,i);if(n.ci?.fixedBuildModules&&n.ci?.fixedBuildModules.length){logger.info("Use `fixedBuildModules` configuration to build...");return{buildEntries:filterActivedEntriesByModule(n.entryMap,n.ci?.fixedBuildModules),newEvolveOptions:n}}if(logger.info("Dynamicly checking code changed modules ..."),!r){const e=n.ci?.basedBranch||"origin/master";r=await getCommitIdOfBranch(e),logger.info(`Resolving base branch "${e}" commit hash "${r}" ...`)}logger.info(`diffCommits: \n${JSON.stringify({earlyCommit:r,lastCommit:t},null,2)}`,moduleName);let a=r?await getDiffFiles(r,t):[];const l=getGitRoot(e);if(!l)throw new Error(`No .git root (${e}) found`);if(a=a.map((e=>isAbsolute(e)?e:join(l,e))),logger.debug(`Diff files: \n${JSON.stringify(a,null,2)}`),!a.length)return logger.warn("It seems that there are no code files changed."),{buildEntries:{},newEvolveOptions:n};const p=await resolveEntryMapInputFiles(e,n.entryMap),c=await getBuildEntryFiles(e,a,p,n.webpack?.resolve?.alias,n.ci?.graphTreeNodeFilter);logger.debug(`To build entry files: \n${JSON.stringify(c,null,2)}`);return{buildEntries:await filterActivedEntriesByEntryInputs(e,n.entryMap,c),newEvolveOptions:n}}export const startDynamicBuild=async(e,r,t,o={},i,s={})=>{const{buildEntries:n,newEvolveOptions:a}=await dynamicCheckBuildEntryMap(e,r,t,o,i);await envVerify(e,a);const l=normalizeEvolveEntryMap(n,a.entryMap),p=splitToEntryGroup(l,a,ignoreEntryOptionKeys,!1);if(!p.length)return logger.warn("No build entries provided!"),[];await createGlobalCompiler(!1,a);const{compiler:c}=a;printPromotions(a);let m=[];return"webpack"===c?m=await runWebpackTask(e,p,a,o,i,s):"rspack"===c&&(m=await runRspackTask(e,p,o,i,s)),m};
1
+ import Listr from"listr";import{isAbsolute,join}from"node:path";import{getCommitIdOfBranch,getDiffFiles}from"@armit/git";import{arraysIntersect,chalk,logger,requireResolve}from"@flatjs/common";import{traverseGraph}from"@flatjs/graph";import{createGlobalCompiler}from"../compiler/create-global-compiler.js";import{ignoreEntryOptionKeys,moduleName}from"../constants.js";import{isCI}from"../helpers/check-runtime-env.js";import{CustomListrRenderer}from"../helpers/custom-listr-renderer.js";import{filterActivedEntriesByEntryInputs,filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{getGitRoot}from"../helpers/get-git-root.js";import{getMaxProcessTasks}from"../helpers/get-max-process-tasks.js";import{jsonSerializer}from"../helpers/json-serializer.js";import{normalizeEvolveEntryMap}from"../helpers/normalize-entry-map.js";import{printPromotions}from"../helpers/print-promotion.js";import{resolveEntryMapInputFiles}from"../helpers/resolve-entry-map-input-files.js";import{splitToEntryGroup}from"../helpers/split-to-entry-group.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{createThreadWorker}from"./create-thread-worker.js";import{envVerify}from"./env-verify.js";import startBuildWorker from"./start-build-worker.js";const runWebpackTask=async(e,r,t,o,i,s={})=>{const{threads:n={}}=t,a=getMaxProcessTasks(r.length,n?.maxThreads);logger.info(`Start dynamic build with (${chalk(["magenta"])(String(a))}) workers`);const l=createThreadWorker({...n,maxThreads:a}),p=new Listr([],{concurrent:a,exitOnError:!0,renderer:isCI()?void 0:CustomListrRenderer}),c=[];for(const t of r){const r=Object.values(t)?.[0]?.groupName||"",n=Object.keys(t);let a=`Group ${chalk(["magenta"])(r)} $STATUS $ENTRY_KEYS${n.join(",")}`;isCI()&&(a=`Group ${chalk(["magenta"])(r)} compiling... $ENTRY_KEYS${n.join(",")}`),p.add({title:a,task:async()=>{const t=await l.startBuildWorker({projectCwd:e,entryKeys:n,serializedEvolveOptions:jsonSerializer.stringify(o),configLoaderOptions:i,groupName:r,cliOptions:s});c.push(t)}})}if(p.tasks.length)try{await p.run()}catch(e){throw l.terminate(),e}return l.terminate(),c},runRspackTask=async(e,r,t,o,i={})=>{const s=[];for(const n of r){const r=Object.values(n)?.[0]?.groupName||"",a=Object.keys(n),l=await startBuildWorker({projectCwd:e,entryKeys:a,serializedEvolveOptions:jsonSerializer.stringify(t),configLoaderOptions:o,groupName:r,cliOptions:i});s.push(l)}return s};export async function getBuildEntryFiles(e,r,t,o,i){const s=[],n=[];for(const e of t)r.includes(e)?s.push(e):n.push(e);if(i&&logger.info("Use custom graph traverse filter",moduleName),n.length){const t=await traverseGraph({input:n,projectCwd:e,treeNodeFilter:i||(()=>!0),lessImportOptions:{projectCwd:e,aliases:o}});if(!t)return s;logger.debug(`DependencyGraph:\n${JSON.stringify(t,null,2)}`);for(const e of n){const o=t[e]||[];arraysIntersect(o,r)&&s.push(e)}}return s}export async function dynamicCheckBuildEntryMap(e,r,t,o,i){const s={projectCwd:e,command:"build",resolve:requireResolve},n=await loadEvolveConfig(s,e,o,i);if(n.ci?.fixedBuildModules&&n.ci?.fixedBuildModules.length){logger.info("Use `fixedBuildModules` configuration to build...");return{buildEntries:filterActivedEntriesByModule(n.entryMap,n.ci?.fixedBuildModules),newEvolveOptions:n}}if(logger.info("Dynamicly checking code changed modules ..."),!r){const e=n.ci?.basedBranch||"origin/master";r=await getCommitIdOfBranch(e),logger.info(`Resolving base branch "${e}" commit hash "${r}" ...`)}logger.info(`diffCommits: \n${JSON.stringify({earlyCommit:r,lastCommit:t},null,2)}`,moduleName);let a=r?await getDiffFiles(r,t):[];const l=getGitRoot(e);if(!l)throw new Error(`No .git root (${e}) found`);if(a=a.map(e=>isAbsolute(e)?e:join(l,e)),logger.debug(`Diff files: \n${JSON.stringify(a,null,2)}`),!a.length)return logger.warn("It seems that there are no code files changed."),{buildEntries:{},newEvolveOptions:n};const p=await resolveEntryMapInputFiles(e,n.entryMap),c=await getBuildEntryFiles(e,a,p,n.webpack?.resolve?.alias,n.ci?.graphTreeNodeFilter);logger.debug(`To build entry files: \n${JSON.stringify(c,null,2)}`);return{buildEntries:await filterActivedEntriesByEntryInputs(e,n.entryMap,c),newEvolveOptions:n}}export const startDynamicBuild=async(e,r,t,o={},i,s={})=>{const{buildEntries:n,newEvolveOptions:a}=await dynamicCheckBuildEntryMap(e,r,t,o,i);await envVerify(e,a);const l=normalizeEvolveEntryMap(n,a.entryMap),p=splitToEntryGroup(l,a,ignoreEntryOptionKeys,!1);if(!p.length)return logger.warn("No build entries provided!"),[];await createGlobalCompiler(!1,a);const{compiler:c}=a;printPromotions(a);let m=[];return"webpack"===c?m=await runWebpackTask(e,p,a,o,i,s):"rspack"===c&&(m=await runRspackTask(e,p,o,i,s)),m};
@@ -1 +1 @@
1
- import{configLoggerStdWriteSteam,requireResolve}from"@flatjs/common";import{ignoreEntryOptionKeys}from"../constants.js";import{isCI}from"../helpers/check-runtime-env.js";import{filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{jsonSerializer}from"../helpers/json-serializer.js";import{normalizeEvolveEntryMap}from"../helpers/normalize-entry-map.js";import{splitToEntryGroup}from"../helpers/split-to-entry-group.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{prepareBuild}from"./prepare-build.js";export default async e=>{const{projectCwd:r,entryKeys:o,serializedEvolveOptions:i,configLoaderOptions:t,groupName:n="flatjs_evolve_group",cliOptions:p}=e,s={projectCwd:r,command:"build",resolve:requireResolve},l=jsonSerializer.parse(i)||{},{compiler:a}=l;isCI()||"webpack"!==a||configLoggerStdWriteSteam();const m=await loadEvolveConfig(s,r,l,t),f=o.map((e=>new RegExp(`^${e}$`))),c=filterActivedEntriesByModule(m.entryMap,f),d=normalizeEvolveEntryMap(c,m.entryMap),v=splitToEntryGroup(d,m,ignoreEntryOptionKeys,!1)[0];for(const[,e]of Object.entries(v))e.groupName=n;return prepareBuild(v,m,p).then((e=>e))};
1
+ import{configLoggerStdWriteSteam,requireResolve}from"@flatjs/common";import{ignoreEntryOptionKeys}from"../constants.js";import{isCI}from"../helpers/check-runtime-env.js";import{filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{jsonSerializer}from"../helpers/json-serializer.js";import{normalizeEvolveEntryMap}from"../helpers/normalize-entry-map.js";import{splitToEntryGroup}from"../helpers/split-to-entry-group.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{prepareBuild}from"./prepare-build.js";export default async e=>{const{projectCwd:r,entryKeys:o,serializedEvolveOptions:i,configLoaderOptions:t,groupName:n="flatjs_evolve_group",cliOptions:p}=e,s={projectCwd:r,command:"build",resolve:requireResolve},l=jsonSerializer.parse(i)||{},{compiler:a}=l;isCI()||"webpack"!==a||configLoggerStdWriteSteam();const m=await loadEvolveConfig(s,r,l,t),f=o.map(e=>new RegExp(`^${e}$`)),c=filterActivedEntriesByModule(m.entryMap,f),d=normalizeEvolveEntryMap(c,m.entryMap),v=splitToEntryGroup(d,m,ignoreEntryOptionKeys,!1)[0];for(const[,e]of Object.entries(v))e.groupName=n;return prepareBuild(v,m,p).then(e=>e)};
@@ -1 +1 @@
1
- import ImageMinimizerPlugin from"image-minimizer-webpack-plugin";import{projectHasYarn}from"@armit/package";import{chalk,logger,requireResolve}from"@flatjs/common";import{moduleName}from"../../constants.js";const logs=new Map;export const imageRspackMinimizer=()=>{const e=[],i=[["svgo",{}],["gifsicle",{}],["jpegtran",{}],["pngquant",{}]].map((i=>{const n=i[0];try{return requireResolve(import.meta.url,`imagemin-${n}`),i}catch{if(!logs.get(n)){logs.set(n,!0);const i=chalk(["magenta"])(`"${projectHasYarn()?"yarn add":"npm install"} imagemin-${n} -D"`);e.push(`Execute ${i} for assets optimization`)}return null}})).filter(Boolean);if(e.length)for(const i of e)logger.warn(i,moduleName);return i.length?new ImageMinimizerPlugin({minimizer:{implementation:ImageMinimizerPlugin.imageminMinify,options:{plugins:i}}}):null};
1
+ import ImageMinimizerPlugin from"image-minimizer-webpack-plugin";import{projectHasYarn}from"@armit/package";import{chalk,logger,requireResolve}from"@flatjs/common";import{moduleName}from"../../constants.js";const logs=new Map;export const imageRspackMinimizer=()=>{const e=[],i=[["svgo",{}],["gifsicle",{}],["jpegtran",{}],["pngquant",{}]].map(i=>{const n=i[0];try{return requireResolve(import.meta.url,`imagemin-${n}`),i}catch{if(!logs.get(n)){logs.set(n,!0);const i=chalk(["magenta"])(`"${projectHasYarn()?"yarn add":"npm install"} imagemin-${n} -D"`);e.push(`Execute ${i} for assets optimization`)}return null}}).filter(Boolean);if(e.length)for(const i of e)logger.warn(i,moduleName);return i.length?new ImageMinimizerPlugin({minimizer:{implementation:ImageMinimizerPlugin.imageminMinify,options:{plugins:i}}}):null};
@@ -1 +1 @@
1
- import ImageMinimizerPlugin from"image-minimizer-webpack-plugin";import{projectHasYarn}from"@armit/package";import{chalk,logger,requireResolve}from"@flatjs/common";import{moduleName}from"../../constants.js";const logs=new Map;export const imageWebpackMinimizer=()=>{const e=[],i=[["svgo",{}],["gifsicle",{}],["jpegtran",{}],["pngquant",{}]].map((i=>{const n=i[0];try{return requireResolve(import.meta.url,`imagemin-${n}`),i}catch{if(!logs.get(n)){logs.set(n,!0);const i=chalk(["magenta"])(`"${projectHasYarn()?"yarn add":"npm install"} imagemin-${n} -D"`);e.push(`Execute ${i} for assets optimization`)}return null}})).filter(Boolean);if(e.length)for(const i of e)logger.warn(i,moduleName);return i.length?new ImageMinimizerPlugin({minimizer:{implementation:ImageMinimizerPlugin.imageminMinify,options:{plugins:i}}}):null};
1
+ import ImageMinimizerPlugin from"image-minimizer-webpack-plugin";import{projectHasYarn}from"@armit/package";import{chalk,logger,requireResolve}from"@flatjs/common";import{moduleName}from"../../constants.js";const logs=new Map;export const imageWebpackMinimizer=()=>{const e=[],i=[["svgo",{}],["gifsicle",{}],["jpegtran",{}],["pngquant",{}]].map(i=>{const n=i[0];try{return requireResolve(import.meta.url,`imagemin-${n}`),i}catch{if(!logs.get(n)){logs.set(n,!0);const i=chalk(["magenta"])(`"${projectHasYarn()?"yarn add":"npm install"} imagemin-${n} -D"`);e.push(`Execute ${i} for assets optimization`)}return null}}).filter(Boolean);if(e.length)for(const i of e)logger.warn(i,moduleName);return i.length?new ImageMinimizerPlugin({minimizer:{implementation:ImageMinimizerPlugin.imageminMinify,options:{plugins:i}}}):null};
@@ -1 +1 @@
1
- import{Compilation,sources}from"@rspack/core";const{RawSource:RawSource}=sources,PLUGIN_NAME="ExternalTemplateRemotesRspackPlugin",isExternalModule=e=>"ExternalModule"===e.constructor.name;function extractUrlAndGlobal(e){const t=e.indexOf("@");if(t<=0||t===e.length-1)throw new Error(`Invalid request "${e}"`);return[e.substring(t+1),e.substring(0,t)]}export class ExternalTemplateRemotesRspackPlugin{apply(e){e.hooks.make.tap(PLUGIN_NAME,(e=>{const t=[];e.hooks.buildModule.tap(PLUGIN_NAME,(e=>{const o=e.identifier().startsWith("external script");isExternalModule(e)&&o&&t.push(e)})),e.hooks.processAssets.tap({name:PLUGIN_NAME,stage:Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},(o=>{t.forEach((t=>{const s=t.identifier().match(/"([^"]+)"/),n=s?s[1]:"",[r]=extractUrlAndGlobal(n),i=toExpression(r);for(const t of Object.keys(o)){const o=e.getAsset(t),s=o?.source.source()?.toString();if(s&&s.includes(r)){const o=s.replace(`"${r}"`,i);e.updateAsset(t,new RawSource(o))}}}))}))}))}}function toExpression(e){const t=[],o=[];let s=!1,n=!1;for(const r of e)if("["===r){if(s){n=!0;break}s=!0,o.length&&(t.push(`"${o.join("")}"`),o.length=0)}else if("]"===r){if(!s){n=!0;break}s=!1,o.length&&(t.push(`${o.join("")}`),o.length=0),o.length=0}else o.push(r);if(s||n)throw new Error(`Invalid template URL "${e}"`);return o.length&&t.push(`"${o.join("")}"`),t.join(" + ")}
1
+ import{Compilation,sources}from"@rspack/core";const{RawSource:RawSource}=sources,PLUGIN_NAME="ExternalTemplateRemotesRspackPlugin",isExternalModule=e=>"ExternalModule"===e.constructor.name;function extractUrlAndGlobal(e){const t=e.indexOf("@");if(t<=0||t===e.length-1)throw new Error(`Invalid request "${e}"`);return[e.substring(t+1),e.substring(0,t)]}export class ExternalTemplateRemotesRspackPlugin{apply(e){e.hooks.make.tap(PLUGIN_NAME,e=>{const t=[];e.hooks.buildModule.tap(PLUGIN_NAME,e=>{const o=e.identifier().startsWith("external script");isExternalModule(e)&&o&&t.push(e)}),e.hooks.processAssets.tap({name:PLUGIN_NAME,stage:Compilation.PROCESS_ASSETS_STAGE_SUMMARIZE},o=>{t.forEach(t=>{const s=t.identifier().match(/"([^"]+)"/),n=s?s[1]:"",[r]=extractUrlAndGlobal(n),i=toExpression(r);for(const t of Object.keys(o)){const o=e.getAsset(t),s=o?.source.source()?.toString();if(s&&s.includes(r)){const o=s.replace(`"${r}"`,i);e.updateAsset(t,new RawSource(o))}}})})})}}function toExpression(e){const t=[],o=[];let s=!1,n=!1;for(const r of e)if("["===r){if(s){n=!0;break}s=!0,o.length&&(t.push(`"${o.join("")}"`),o.length=0)}else if("]"===r){if(!s){n=!0;break}s=!1,o.length&&(t.push(`${o.join("")}`),o.length=0),o.length=0}else o.push(r);if(s||n)throw new Error(`Invalid template URL "${e}"`);return o.length&&t.push(`"${o.join("")}"`),t.join(" + ")}
@@ -1 +1 @@
1
- import{join}from"node:path";import{ensureSlash}from"@flatjs/common";import rspack from"@rspack/core";import{normalizeEvolveEntryName}from"../../../helpers/normalize-entry-map.js";import{injectFederationScripts}from"../../../helpers/script-injects.js";import{HtmlInjectScriptWebpackPlugin}from"../../webpack/html-inject-scripts/index.js";import{ExternalTemplateRemotesRspackPlugin}from"./external-template-remotes-rspack-plugin.js";const normalizeWidgetName=(e="")=>e.replace(/[/-]/g,"_").toLowerCase(),remoteFileName=e=>join(e,"micro-remote-module.js");export const createModuleFederationRspackPlugins=(e,t,r)=>{const o=r.projectVirtualPath,n=r.multiHtmlCdn,i=r.multiHtmlCdnEnvResolver,m=[];for(const r of t){const[t,a]=r,s=a.options?.moduleFederation;if(s){const{remotes:r,exposes:a,...l}=s,c=remoteFileName(t),p=normalizeWidgetName(t),u=(a?Array.isArray(a)?a:[a]:[]).map((e=>{const r={};for(const[o,n]of Object.entries(e))r[o]={...n,name:join(t,n.name.replace(/^\//,""))};return r})),d=(r||[]).map((({name:e,endpoint:t})=>{const r=normalizeEvolveEntryName(e,o),n=normalizeWidgetName(r),i=remoteFileName(r),m=t?ensureSlash(t(e,r),!1):"[window.evolveFetchMicroWidgets()]";return{[n]:`${n}@${m}/${i}`}}));m.push(new rspack.container.ModuleFederationPlugin({...l,name:p,filename:c,remotes:d,exposes:u}),new ExternalTemplateRemotesRspackPlugin),e||m.unshift(new HtmlInjectScriptWebpackPlugin([injectFederationScripts(n,i)]))}}return m};
1
+ import{join}from"node:path";import{ensureSlash}from"@flatjs/common";import rspack from"@rspack/core";import{normalizeEvolveEntryName}from"../../../helpers/normalize-entry-map.js";import{injectFederationScripts}from"../../../helpers/script-injects.js";import{HtmlInjectScriptWebpackPlugin}from"../../webpack/html-inject-scripts/index.js";import{ExternalTemplateRemotesRspackPlugin}from"./external-template-remotes-rspack-plugin.js";const normalizeWidgetName=(e="")=>e.replace(/[/-]/g,"_").toLowerCase(),remoteFileName=e=>join(e,"micro-remote-module.js");export const createModuleFederationRspackPlugins=(e,t,r)=>{const o=r.projectVirtualPath,n=r.multiHtmlCdn,i=r.multiHtmlCdnEnvResolver,m=[];for(const r of t){const[t,a]=r,s=a.options?.moduleFederation;if(s){const{remotes:r,exposes:a,...l}=s,c=remoteFileName(t),p=normalizeWidgetName(t),u=(a?Array.isArray(a)?a:[a]:[]).map(e=>{const r={};for(const[o,n]of Object.entries(e))r[o]={...n,name:join(t,n.name.replace(/^\//,""))};return r}),d=(r||[]).map(({name:e,endpoint:t})=>{const r=normalizeEvolveEntryName(e,o),n=normalizeWidgetName(r),i=remoteFileName(r),m=t?ensureSlash(t(e,r),!1):"[window.evolveFetchMicroWidgets()]";return{[n]:`${n}@${m}/${i}`}});m.push(new rspack.container.ModuleFederationPlugin({...l,name:p,filename:c,remotes:d,exposes:u}),new ExternalTemplateRemotesRspackPlugin),e||m.unshift(new HtmlInjectScriptWebpackPlugin([injectFederationScripts(n,i)]))}}return m};
@@ -1 +1 @@
1
- import HtmlWebpackPlugin from"html-webpack-plugin";import{basename}from"node:path";import{ensureSlash}from"@flatjs/common";import rspack from"@rspack/core";import{getRuntimeCDNBase}from"../../../helpers/get-runtime-cdn-base.js";import{findEnvCdn,httpUrlJoin}from"../../../helpers/script-injects.js";export class FlatEvolveMultiCdnRspackPlugin{constructor(e,t){if(this.pluginName="FlatEvolveMultiCdnRspackPlugin",this.requireFn=rspack.RuntimeGlobals.publicPath,this.config=e.multiHtmlCdn,this.entryMapItemList=t,this.cdnResolver=e.multiHtmlCdnEnvResolver||function cdnResolver(){},!this.config?.prod)throw new Error("We must setup `prod` for each CDN config node!")}apply(e){e.hooks.compilation.tap(this.pluginName,(e=>{e.hooks.runtimeModule.tap(this.pluginName,((e,t)=>{const s=this.entryMapItemList.find((e=>e[0]===t.name));if("public_path"===e.name&&s){const t=[];t.push("\n"),t.push("// Dynamic assets path override(`@flatjs/evolve`) plugin-multi-html-cdn`)"),t.push(getRuntimeCDNBase(this.config,this.cdnResolver,this.requireFn)),e.source.source=Buffer.from(t.join("\n"),"utf-8")}}))})),e.hooks.compilation.tap(this.pluginName,(e=>{HtmlWebpackPlugin.getHooks(e).beforeAssetTagGeneration.tap(this.pluginName,(e=>{const{assets:t,plugin:s,outputName:n}=e,i=s?.options?.chunks||[],r=Array.isArray(i)?i.find((e=>n.includes(ensureSlash(e,!0)))):i,{userOptions:o}=e.plugin;if(!r)throw new Error("We must have current chunk!");const a=t.js.filter((e=>e.includes(ensureSlash(r,!0)))),l=t.css.filter((e=>e.includes(ensureSlash(r,!0)))),u=o.multiCdn,p=t.publicPath,c=a.map((e=>{if(u.disabled)return basename(e);const t=findEnvCdn(this.config,u.env);return httpUrlJoin(t,e.replace(p,""))})),m=l.map((e=>{if(u.disabled)return basename(e);const t=findEnvCdn(this.config,u.env);return httpUrlJoin(t,e.replace(p,""))}));return e.assets.js=c,e.assets.css=m,e}))}))}}
1
+ import HtmlWebpackPlugin from"html-webpack-plugin";import{basename}from"node:path";import{ensureSlash}from"@flatjs/common";import rspack from"@rspack/core";import{getRuntimeCDNBase}from"../../../helpers/get-runtime-cdn-base.js";import{findEnvCdn,httpUrlJoin}from"../../../helpers/script-injects.js";export class FlatEvolveMultiCdnRspackPlugin{constructor(e,t){if(this.pluginName="FlatEvolveMultiCdnRspackPlugin",this.requireFn=rspack.RuntimeGlobals.publicPath,this.config=e.multiHtmlCdn,this.entryMapItemList=t,this.cdnResolver=e.multiHtmlCdnEnvResolver||function cdnResolver(){},!this.config?.prod)throw new Error("We must setup `prod` for each CDN config node!")}apply(e){e.hooks.compilation.tap(this.pluginName,e=>{e.hooks.runtimeModule.tap(this.pluginName,(e,t)=>{const s=this.entryMapItemList.find(e=>e[0]===t.name);if("public_path"===e.name&&s){const t=[];t.push("\n"),t.push("// Dynamic assets path override(`@flatjs/evolve`) plugin-multi-html-cdn`)"),t.push(getRuntimeCDNBase(this.config,this.cdnResolver,this.requireFn)),e.source.source=Buffer.from(t.join("\n"),"utf-8")}})}),e.hooks.compilation.tap(this.pluginName,e=>{HtmlWebpackPlugin.getHooks(e).beforeAssetTagGeneration.tap(this.pluginName,e=>{const{assets:t,plugin:s,outputName:n}=e,i=s?.options?.chunks||[],r=Array.isArray(i)?i.find(e=>n.includes(ensureSlash(e,!0))):i,{userOptions:o}=e.plugin;if(!r)throw new Error("We must have current chunk!");const a=t.js.filter(e=>e.includes(ensureSlash(r,!0))),l=t.css.filter(e=>e.includes(ensureSlash(r,!0))),u=o.multiCdn,p=t.publicPath,c=a.map(e=>{if(u.disabled)return basename(e);const t=findEnvCdn(this.config,u.env);return httpUrlJoin(t,e.replace(p,""))}),m=l.map(e=>{if(u.disabled)return basename(e);const t=findEnvCdn(this.config,u.env);return httpUrlJoin(t,e.replace(p,""))});return e.assets.js=c,e.assets.css=m,e})})}}
@@ -0,0 +1 @@
1
+ import HtmlWebpackPlugin from"html-webpack-plugin";import{ensureSlash}from"@flatjs/common";import{parseTemplate}from"@hyperse/html-webpack-plugin-loader";const getCurrentEntryOptions=(t=[],e)=>{const i=t.find(t=>e.includes(ensureSlash(t[0],!0)));return i?i[1]?.options:void 0};export class MultiHtmlModifyRspackPlugin{constructor(t){this.pluginName="MultiHtmlModifyRspackPlugin",this.entryMapItemList=t}apply(t){t.hooks.compilation.tap(this.pluginName,t=>{HtmlWebpackPlugin.getHooks(t).beforeEmit.tapAsync(this.pluginName,(t,e)=>{const i=getCurrentEntryOptions(this.entryMapItemList,t.outputName),l=parseTemplate(t.html,{title:i?.title||""});e(null,{...t,html:l.serialize()})})})}}