@flatjs/evolve 1.7.3 → 1.8.1-next.100

Sign up to get free protection for your applications and to get access to all the features.
Files changed (216) hide show
  1. package/CHANGELOG.md +774 -0
  2. package/LICENSE +21 -0
  3. package/README.md +10 -46
  4. package/dist/constants.d.ts +15 -0
  5. package/dist/constants.js +1 -0
  6. package/dist/create-webpack/create-externals.d.ts +4 -0
  7. package/dist/create-webpack/create-externals.js +1 -0
  8. package/dist/create-webpack/create-optimization.d.ts +3 -0
  9. package/dist/create-webpack/create-optimization.js +1 -0
  10. package/dist/create-webpack/create-output.d.ts +3 -0
  11. package/dist/create-webpack/create-output.js +1 -0
  12. package/dist/create-webpack/create-performance.d.ts +2 -0
  13. package/dist/create-webpack/create-performance.js +1 -0
  14. package/dist/create-webpack/create-plugins.d.ts +4 -0
  15. package/dist/create-webpack/create-plugins.js +1 -0
  16. package/dist/create-webpack/create-resolve.d.ts +2 -0
  17. package/dist/create-webpack/create-resolve.js +1 -0
  18. package/dist/create-webpack/create-rule-sets.d.ts +4 -0
  19. package/dist/create-webpack/create-rule-sets.js +1 -0
  20. package/dist/create-webpack/load-webpack-config.d.ts +10 -0
  21. package/dist/create-webpack/load-webpack-config.js +1 -0
  22. package/dist/create-webpack/rule-sets/constants.d.ts +3 -0
  23. package/dist/create-webpack/rule-sets/constants.js +1 -0
  24. package/dist/create-webpack/rule-sets/rule-assets.d.ts +10 -0
  25. package/dist/create-webpack/rule-sets/rule-assets.js +1 -0
  26. package/dist/create-webpack/rule-sets/rule-css.d.ts +11 -0
  27. package/dist/create-webpack/rule-sets/rule-css.js +1 -0
  28. package/dist/create-webpack/rule-sets/rule-less.d.ts +26 -0
  29. package/dist/create-webpack/rule-sets/rule-less.js +1 -0
  30. package/dist/create-webpack/rule-sets/rule-scripts.d.ts +3 -0
  31. package/dist/create-webpack/rule-sets/rule-scripts.js +1 -0
  32. package/dist/create-webpack/rule-sets/rule-svg-icon.d.ts +6 -0
  33. package/dist/create-webpack/rule-sets/rule-svg-icon.js +1 -0
  34. package/dist/create-webpack/rule-sets/rule-utils.d.ts +7 -0
  35. package/dist/create-webpack/rule-sets/rule-utils.js +1 -0
  36. package/dist/create-webpack/types.d.ts +2 -0
  37. package/dist/create-webpack/types.js +1 -0
  38. package/dist/default-options.d.ts +2 -0
  39. package/dist/default-options.js +1 -0
  40. package/dist/define-config/define-config.d.ts +24 -0
  41. package/dist/define-config/define-config.js +1 -0
  42. package/dist/define-config/index.d.ts +1 -0
  43. package/dist/define-config/index.js +1 -0
  44. package/dist/dev-server/add-compiler-to-dev-server.d.ts +10 -0
  45. package/dist/dev-server/add-compiler-to-dev-server.js +1 -0
  46. package/dist/dev-server/create-app-page-route.d.ts +7 -0
  47. package/dist/dev-server/create-app-page-route.js +1 -0
  48. package/dist/dev-server/create-dev-server-compiler-tasks.d.ts +3 -0
  49. package/dist/dev-server/create-dev-server-compiler-tasks.js +1 -0
  50. package/dist/dev-server/create-dev-server-entries.d.ts +4 -0
  51. package/dist/dev-server/create-dev-server-entries.js +1 -0
  52. package/dist/dev-server/create-dev-server.d.ts +6 -0
  53. package/dist/dev-server/create-dev-server.js +1 -0
  54. package/dist/dev-server/index.d.ts +6 -0
  55. package/dist/dev-server/index.js +1 -0
  56. package/dist/dev-server/middlewares/create-page-middleware.d.ts +37 -0
  57. package/dist/dev-server/middlewares/create-page-middleware.js +1 -0
  58. package/dist/dev-server/middlewares/create-public-assets-middleware.d.ts +2 -0
  59. package/dist/dev-server/middlewares/create-public-assets-middleware.js +1 -0
  60. package/dist/dev-server/middlewares/index.d.ts +2 -0
  61. package/dist/dev-server/middlewares/index.js +1 -0
  62. package/dist/errors/evolve-build-error.d.ts +4 -0
  63. package/dist/errors/evolve-build-error.js +1 -0
  64. package/dist/helpers/allow-px2rem-for-module.d.ts +3 -0
  65. package/dist/helpers/allow-px2rem-for-module.js +1 -0
  66. package/dist/helpers/assert-only-single-entry-item.d.ts +7 -0
  67. package/dist/helpers/assert-only-single-entry-item.js +1 -0
  68. package/dist/helpers/chunk-entry-map.d.ts +7 -0
  69. package/dist/helpers/chunk-entry-map.js +1 -0
  70. package/dist/helpers/enable-bundle-hashname-for-module.d.ts +3 -0
  71. package/dist/helpers/enable-bundle-hashname-for-module.js +1 -0
  72. package/dist/helpers/filter-actived-entries.d.ts +16 -0
  73. package/dist/helpers/filter-actived-entries.js +1 -0
  74. package/dist/helpers/get-bundle-file-name.d.ts +14 -0
  75. package/dist/helpers/get-bundle-file-name.js +1 -0
  76. package/dist/helpers/get-git-root.d.ts +1 -0
  77. package/dist/helpers/get-git-root.js +1 -0
  78. package/dist/helpers/get-html-plugin-config.d.ts +20 -0
  79. package/dist/helpers/get-html-plugin-config.js +1 -0
  80. package/dist/helpers/get-max-process-tasks.d.ts +1 -0
  81. package/dist/helpers/get-max-process-tasks.js +1 -0
  82. package/dist/helpers/get-pacakge-dir.d.ts +1 -0
  83. package/dist/helpers/get-pacakge-dir.js +1 -0
  84. package/dist/helpers/index.d.ts +17 -0
  85. package/dist/helpers/index.js +1 -0
  86. package/dist/helpers/json-serializer.d.ts +7 -0
  87. package/dist/helpers/json-serializer.js +1 -0
  88. package/dist/helpers/merge-babel-options.d.ts +4 -0
  89. package/dist/helpers/merge-babel-options.js +1 -0
  90. package/dist/helpers/normalize-entry-map.d.ts +15 -0
  91. package/dist/helpers/normalize-entry-map.js +1 -0
  92. package/dist/helpers/normalize-resolve-alias.d.ts +1 -0
  93. package/dist/helpers/normalize-resolve-alias.js +1 -0
  94. package/dist/helpers/open-page.d.ts +7 -0
  95. package/dist/helpers/open-page.js +1 -0
  96. package/dist/helpers/print-log.d.ts +8 -0
  97. package/dist/helpers/print-log.js +1 -0
  98. package/dist/helpers/refresh-evolve-mock-options.d.ts +3 -0
  99. package/dist/helpers/refresh-evolve-mock-options.js +1 -0
  100. package/dist/helpers/resolve-entry-map-input-files.d.ts +8 -0
  101. package/dist/helpers/resolve-entry-map-input-files.js +1 -0
  102. package/dist/helpers/script-injects.d.ts +11 -0
  103. package/dist/helpers/script-injects.js +1 -0
  104. package/dist/helpers/should-enable-react-fast-refresh.d.ts +3 -0
  105. package/dist/helpers/should-enable-react-fast-refresh.js +1 -0
  106. package/dist/helpers/split-to-multi-compiler.d.ts +8 -0
  107. package/dist/helpers/split-to-multi-compiler.js +1 -0
  108. package/dist/index.d.ts +5 -0
  109. package/dist/index.js +1 -0
  110. package/dist/load-config/index.d.ts +1 -0
  111. package/dist/load-config/index.js +1 -0
  112. package/dist/load-config/load-evolve-config.d.ts +11 -0
  113. package/dist/load-config/load-evolve-config.js +1 -0
  114. package/dist/loaders/loader-icon.cjs +33 -0
  115. package/dist/loaders/loader-icon.d.cts +1 -0
  116. package/dist/main/env-verify.d.ts +2 -0
  117. package/dist/main/env-verify.js +1 -0
  118. package/dist/main/get-worker-path.d.ts +1 -0
  119. package/dist/main/get-worker-path.js +1 -0
  120. package/dist/main/index.d.ts +4 -0
  121. package/dist/main/index.js +1 -0
  122. package/dist/main/prepare-build.d.ts +9 -0
  123. package/dist/main/prepare-build.js +1 -0
  124. package/dist/main/prepare-serve.d.ts +9 -0
  125. package/dist/main/prepare-serve.js +1 -0
  126. package/dist/main/prepare-static.d.ts +7 -0
  127. package/dist/main/prepare-static.js +1 -0
  128. package/dist/main/start-build-dynamic.d.ts +20 -0
  129. package/dist/main/start-build-dynamic.js +1 -0
  130. package/dist/main/start-build-worker.d.ts +12 -0
  131. package/dist/main/start-build-worker.js +1 -0
  132. package/dist/main/start-build.d.ts +5 -0
  133. package/dist/main/start-build.js +1 -0
  134. package/dist/main/start-one-entry-build.d.ts +13 -0
  135. package/dist/main/start-one-entry-build.js +1 -0
  136. package/dist/main/start-serve.d.ts +11 -0
  137. package/dist/main/start-serve.js +1 -0
  138. package/dist/main/start-static.d.ts +10 -0
  139. package/dist/main/start-static.js +1 -0
  140. package/dist/minimizer/create-minimizers.d.ts +3 -0
  141. package/dist/minimizer/create-minimizers.js +1 -0
  142. package/dist/minimizer/default-options.d.ts +2 -0
  143. package/dist/minimizer/default-options.js +1 -0
  144. package/dist/minimizer/image-minimizer.d.ts +16 -0
  145. package/dist/minimizer/image-minimizer.js +1 -0
  146. package/dist/minimizer/index.d.ts +1 -0
  147. package/dist/minimizer/index.js +1 -0
  148. package/dist/minimizer/terser-minimizer.d.ts +6 -0
  149. package/dist/minimizer/terser-minimizer.js +3 -0
  150. package/dist/minimizer/types.d.ts +2 -0
  151. package/dist/minimizer/types.js +1 -0
  152. package/dist/plugins/circular-dependency/circular-dependency-plugin.d.ts +54 -0
  153. package/dist/plugins/circular-dependency/circular-dependency-plugin.js +1 -0
  154. package/dist/plugins/circular-dependency/index.d.ts +7 -0
  155. package/dist/plugins/circular-dependency/index.js +1 -0
  156. package/dist/plugins/clean-webpack/clean-webpack-plugin.d.ts +67 -0
  157. package/dist/plugins/clean-webpack/clean-webpack-plugin.js +1 -0
  158. package/dist/plugins/clean-webpack/index.d.ts +9 -0
  159. package/dist/plugins/clean-webpack/index.js +1 -0
  160. package/dist/plugins/define-variable/define-variable-plugin.d.ts +14 -0
  161. package/dist/plugins/define-variable/define-variable-plugin.js +1 -0
  162. package/dist/plugins/define-variable/index.d.ts +1 -0
  163. package/dist/plugins/define-variable/index.js +1 -0
  164. package/dist/plugins/html-inject-scripts/plugin-html-inject-script.d.ts +8 -0
  165. package/dist/plugins/html-inject-scripts/plugin-html-inject-script.js +1 -0
  166. package/dist/plugins/module-federation/external-template-remotes.d.ts +4 -0
  167. package/dist/plugins/module-federation/external-template-remotes.js +1 -0
  168. package/dist/plugins/module-federation/index.d.ts +1 -0
  169. package/dist/plugins/module-federation/index.js +1 -0
  170. package/dist/plugins/module-federation/module-federation.d.ts +4 -0
  171. package/dist/plugins/module-federation/module-federation.js +1 -0
  172. package/dist/plugins/multi-html/index.d.ts +4 -0
  173. package/dist/plugins/multi-html/index.js +1 -0
  174. package/dist/plugins/multi-html/multi-html-cdn-plugin.d.ts +17 -0
  175. package/dist/plugins/multi-html/multi-html-cdn-plugin.js +1 -0
  176. package/dist/plugins/multi-html/multi-html-plugin.d.ts +11 -0
  177. package/dist/plugins/multi-html/multi-html-plugin.js +1 -0
  178. package/dist/types/index.d.ts +8 -0
  179. package/dist/types/index.js +1 -0
  180. package/dist/types/types-ci.d.ts +23 -0
  181. package/dist/types/types-ci.js +1 -0
  182. package/dist/types/types-dev-server.d.ts +65 -0
  183. package/dist/types/types-dev-server.js +1 -0
  184. package/dist/types/types-entry-map.d.ts +71 -0
  185. package/dist/types/types-entry-map.js +1 -0
  186. package/dist/types/types-federation.d.ts +120 -0
  187. package/dist/types/types-federation.js +1 -0
  188. package/dist/types/types-loader-options.d.ts +76 -0
  189. package/dist/types/types-loader-options.js +1 -0
  190. package/dist/types/types-modular-import.d.ts +38 -0
  191. package/dist/types/types-modular-import.js +1 -0
  192. package/dist/types/types-multi-html.d.ts +75 -0
  193. package/dist/types/types-multi-html.js +1 -0
  194. package/dist/types/types-options.d.ts +117 -0
  195. package/dist/types/types-options.js +1 -0
  196. package/dist/types/types-plugin-options.d.ts +7 -0
  197. package/dist/types/types-plugin-options.js +1 -0
  198. package/dist/types/types-webpack.d.ts +96 -0
  199. package/dist/types/types-webpack.js +1 -0
  200. package/index.js +1 -4
  201. package/package.json +118 -61
  202. package/templates/html-plugin/index-dev.html +23 -46
  203. package/templates/html-plugin/index-inte.html +23 -46
  204. package/templates/html-plugin/index-inte2.html +23 -46
  205. package/templates/html-plugin/index-inte3.html +23 -46
  206. package/templates/html-plugin/index-inte4.html +23 -46
  207. package/templates/html-plugin/index-me.html +23 -46
  208. package/templates/html-plugin/index-prod.html +23 -46
  209. package/templates/html-plugin/index-rc.html +22 -46
  210. package/templates/html-plugin/index-uat.html +23 -46
  211. package/templates/main.html +2 -2
  212. package/templates/module-404.html +4 -2
  213. package/templates/module.html +31 -61
  214. package/cjs/index.js +0 -4
  215. package/cjs/loader-icon.js +0 -2
  216. package/index.d.ts +0 -713
@@ -0,0 +1 @@
1
+ export const currNow=()=>Date.now().toString();export const getBundleFileName=(t,n,e=!0)=>{const o="js"===t?".js":".css";return n?`bundle${o}`:e?`bundle[contenthash]${o}`:`bundle${o}?${Date.now().toString()}`};
@@ -0,0 +1 @@
1
+ export declare const getGitRoot: (searchFrom: string) => string | null;
@@ -0,0 +1 @@
1
+ import{searchParentDir}from"@armit/package";export const getGitRoot=r=>searchParentDir(r,".git");
@@ -0,0 +1,20 @@
1
+ import { type MultiHtmlCDNEntryItem } from '../types/types-multi-html.js';
2
+ export declare const defaultHtmlPluginConfig: Required<MultiHtmlCDNEntryItem>;
3
+ type Json = undefined | null | boolean | number | string | Json[] | {
4
+ [prop: string]: Json;
5
+ };
6
+ export type HtmlPluginConfigConfigData = {
7
+ mode: 'development' | 'production';
8
+ /**
9
+ * The random `cdn` for config via `env` template
10
+ */
11
+ envCdn: string;
12
+ };
13
+ export type HtmlPluginConfigTokenType<T extends Json> = T | ((configData: HtmlPluginConfigConfigData) => T);
14
+ /**
15
+ * 获取html plugin 模版相关定义字段.
16
+ * @param preferredValue 用户首选的值, 如果返回为undefined, 将使用默认值
17
+ * @returns
18
+ */
19
+ export declare const getHtmlPluginConfig: <T extends Json>(key: keyof typeof defaultHtmlPluginConfig, configData: HtmlPluginConfigConfigData, preferredValue?: HtmlPluginConfigTokenType<T> | undefined) => T;
20
+ export {};
@@ -0,0 +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};
@@ -0,0 +1 @@
1
+ export declare const getMaxProcessTasks: (totalTasks: number, maxProcesses?: string | number) => number;
@@ -0,0 +1 @@
1
+ import{cpus}from"node:os";export const getMaxProcessTasks=(t,s)=>{const e=Math.max(1,"string"==typeof s&&s.endsWith("%")?Math.round(cpus().length*Number(s.slice(0,-1))/100):Number(s));return t>e?e:Math.max(1,t)};
@@ -0,0 +1 @@
1
+ export declare const getPackageDir: (...paths: string[]) => string;
@@ -0,0 +1 @@
1
+ import{join}from"node:path";import{getDirname}from"@armit/file-utility";import{searchPackageDir}from"@armit/package";export const getPackageDir=(...r)=>{const e=getDirname(import.meta.url),o=searchPackageDir({cwd:e});if(!o)throw new Error("Could not resolve package root for `flatjs/evolve`");return join(o,...r)};
@@ -0,0 +1,17 @@
1
+ export * from './allow-px2rem-for-module.js';
2
+ export * from './assert-only-single-entry-item.js';
3
+ export * from './chunk-entry-map.js';
4
+ export * from './enable-bundle-hashname-for-module.js';
5
+ export * from './get-bundle-file-name.js';
6
+ export * from './get-html-plugin-config.js';
7
+ export * from './get-pacakge-dir.js';
8
+ export * from './merge-babel-options.js';
9
+ export * from './normalize-entry-map.js';
10
+ export * from './open-page.js';
11
+ export * from './print-log.js';
12
+ export * from './refresh-evolve-mock-options.js';
13
+ export * from './script-injects.js';
14
+ export * from './should-enable-react-fast-refresh.js';
15
+ export * from './split-to-multi-compiler.js';
16
+ export * from './json-serializer.js';
17
+ export * from './normalize-resolve-alias.js';
@@ -0,0 +1 @@
1
+ export*from"./allow-px2rem-for-module.js";export*from"./assert-only-single-entry-item.js";export*from"./chunk-entry-map.js";export*from"./enable-bundle-hashname-for-module.js";export*from"./get-bundle-file-name.js";export*from"./get-html-plugin-config.js";export*from"./get-pacakge-dir.js";export*from"./merge-babel-options.js";export*from"./normalize-entry-map.js";export*from"./open-page.js";export*from"./print-log.js";export*from"./refresh-evolve-mock-options.js";export*from"./script-injects.js";export*from"./should-enable-react-fast-refresh.js";export*from"./split-to-multi-compiler.js";export*from"./json-serializer.js";export*from"./normalize-resolve-alias.js";
@@ -0,0 +1,7 @@
1
+ declare function stringifyWithFns(obj: any): string;
2
+ declare function parseWithFns(json: string): any;
3
+ export declare const jsonSerializer: {
4
+ stringify: typeof stringifyWithFns;
5
+ parse: typeof parseWithFns;
6
+ };
7
+ export {};
@@ -0,0 +1 @@
1
+ function stringifyWithFns(n){return JSON.stringify(n,(function(n,t){return"function"==typeof t?t.toString():t}))}function looksLikeAFunctionString(n){return!![/^function[^(]*\(\s*\)\s*\{[\s\S]*\}$/,/^(\s*async\s*)?(\w*\s*)\(([^)]*)\)\s*=>\s*(.*)$/,/^\s*\w+\s*=>/].find((t=>t.test(n)))}function makeFunctionFromString(funcString){return eval("("+funcString+")")}function parseWithFns(n){try{return JSON.parse(n,(function(n,t){return looksLikeAFunctionString(t)?makeFunctionFromString(t):t}))}catch(n){return{}}}export const jsonSerializer={stringify:stringifyWithFns,parse:parseWithFns};
@@ -0,0 +1,4 @@
1
+ import { type TransformOptions } from '@babel/core';
2
+ import { type BuiltinBabelOptions } from '../types/types-loader-options.js';
3
+ import { type ModularImportOption } from '../types/types-modular-import.js';
4
+ export declare const mergeBabelOption: (modularImports?: ModularImportOption[], options?: BuiltinBabelOptions) => TransformOptions;
@@ -0,0 +1 @@
1
+ import{logger,requireResolve}from"@flatjs/common";import{reactBabelPreset,vueBabelPreset}from"@flatjs/evolve-preset-babel";import babelMerge from"babel-merge";import{moduleName}from"../constants.js";export const mergeBabelOption=(e=[],r={usePreset:"react"})=>{const t=e.map((e=>[requireResolve(import.meta.url,"babel-plugin-import"),{transformToDefaultImport:!1,libraryDirectory:"dist",...e},e.libraryName])),{usePreset:a="react",...l}=r,o="react"===a?reactBabelPreset():"vue"===a?vueBabelPreset():reactBabelPreset();let s={};try{s=babelMerge(o,l),s.plugins?s.plugins.unshift(...t):s.plugins=t}catch(e){logger.error(e,moduleName)}return{...s,babelrc:!1,compact:!1}};
@@ -0,0 +1,15 @@
1
+ import { type EvolveEntryMap } from '../types/types-entry-map.js';
2
+ /**
3
+ * Make sure that we have correct `virtualPath` for each webpack `entry`
4
+ * @param entryName the entryName defined via `flatjs-evolve.config.ts`.
5
+ * @param evolveOptions
6
+ * @returns
7
+ */
8
+ export declare const normalizeEvolveEntryName: (entryName: string, projectVirtualPath: string) => string;
9
+ /**
10
+ * Normalize flatjs.evolve entry map definition data.
11
+ * Merge default entry item configuration values.
12
+ * @param activedEntryMap actived entries
13
+ * @param definedEntryMap defined entries in flatjs.evolve.js
14
+ */
15
+ export declare const normalizeEvolveEntryMap: (activedEntryMap?: EvolveEntryMap, definedEntryMap?: EvolveEntryMap) => EvolveEntryMap;
@@ -0,0 +1 @@
1
+ import{join}from"node:path";import _ from"lodash";export const normalizeEvolveEntryName=(o,e)=>{const r=o.replace(/^\//,""),t=e.replace(/^\//,"");return(r.startsWith(t)?r:join(t,r)).replace(/\/$/,"")};export const normalizeEvolveEntryMap=(o={},e={})=>{const r={};for(const[t,n]of Object.entries(e)){const e={options:{}};o[t]&&(r[t]=_.merge({},e,n,o[t])),_.merge(n,e)}return r};
@@ -0,0 +1 @@
1
+ export declare const normalizeResolveAlias: (projectCwd: string, alias?: Record<string, string>) => Record<string, string>;
@@ -0,0 +1 @@
1
+ import{resolve}from"node:path";export const normalizeResolveAlias=(e,o={})=>{for(const[r,t]of Object.entries(o))o[r]=resolve(e,t);return o};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * A better opn. Reuse the same tab on Chrome for
3
+ * @example
4
+ * `http://xxx.domain.com:3001/pages`
5
+ * @param openUrl the page url try to open.
6
+ */
7
+ export declare const openPage: (openUrl: string) => void;
@@ -0,0 +1 @@
1
+ import opn from"better-opn";export const openPage=n=>{try{opn(n)}catch(n){console.warn("Unable to open browser. If you are running in a headless environment\n")}};
@@ -0,0 +1,8 @@
1
+ export declare const printInfo: (message: string, silent?: boolean) => void;
2
+ export declare const printError: (message: string | Error) => void;
3
+ /**
4
+ * Do not use `logger` to print webpack compiler error, cause of it may have it's message formatting.
5
+ * @param errors
6
+ * @returns
7
+ */
8
+ export declare const printCompilerError: (errors: any) => string[];
@@ -0,0 +1 @@
1
+ import{logger}from"@flatjs/common";import{moduleName}from"../constants.js";export const printInfo=(r,o=!1)=>{o||logger.info(r,moduleName)};export const printError=r=>{logger.error(r,moduleName)};const formatCompilerError=(r,o=[])=>{if(!r)return o;if("string"==typeof r)o.push(r);else if(Array.isArray(r))for(const e of r)formatCompilerError(e,o);else if("object"==typeof r){const e=r.stack||r.message;delete r.stack,delete r.message;const t={...r,_newMsg:e};for(const[,r]of Object.entries(t))formatCompilerError(r,o)}return o};export const printCompilerError=r=>{const o=formatCompilerError(r,[]);for(const r of o)console.log(r);return o};
@@ -0,0 +1,3 @@
1
+ import { type ConfigLoaderOptions } from '../load-config/load-evolve-config.js';
2
+ import { type FlatEvolveOptions } from '../types/types-options.js';
3
+ export declare const refreshEvolveMockOptions: (projectCwd: string, evolveOptions: FlatEvolveOptions, configLoaderOptions?: ConfigLoaderOptions) => Promise<FlatEvolveOptions>;
@@ -0,0 +1 @@
1
+ import{loadMockConfig,getMockCwd}from"@flatjs/mock";import _ from"lodash";export const refreshEvolveMockOptions=async(o,t,s)=>{const e=t.devServer,n=s?.esmLoaderOptions,r=n?.externals||[],i=await loadMockConfig(o,e?.mockOptions||{},_.merge({},s,{configFile:"flatjs-mock",esmLoaderOptions:{externals:[...r,"@flatjs/mock"]}}));if(e){e.mockOptions=i||{},e.mockOptions&&!e.mockOptions.https&&(e.mockOptions.https=e?.https);const o=getMockCwd(i);Array.isArray(e?.watchOptions?.ignored)&&e?.watchOptions?.ignored.push(o)}return t};
@@ -0,0 +1,8 @@
1
+ import { type EvolveEntryMap } from '../types/types-entry-map.js';
2
+ /**
3
+ * Transform all entry files via `entryMap`
4
+ * @param projectCwd The project root directory
5
+ * @param entryMap The evolve entryMap definition
6
+ * @returns The absolute entry input files.
7
+ */
8
+ export declare const resolveEntryMapInputFiles: (projectCwd: string, entryMap: EvolveEntryMap) => Promise<string[]>;
@@ -0,0 +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})};
@@ -0,0 +1,11 @@
1
+ import { type EvolveMultiCdnEnvType, type EvolveMultiCDNConfig, type EvolveMultiCDNEnvResolver } from '../types/types-multi-html.js';
2
+ export declare function httpUrlJoin(first?: string, second?: string): string;
3
+ /**
4
+ * To extract the best matched CDN configuration url address, either use URL `query.env` or customize the `envRresolver`
5
+ * @param cdnConfig List of pre-configured cdn urls for each environment
6
+ * @param envResolver Get the specific environment variable by the currently requested host url address.
7
+ * @returns Returns the best matching address with a suffix (`/`)
8
+ */
9
+ export declare function cdnFinder(cdnConfig: EvolveMultiCDNConfig, envResolver?: EvolveMultiCDNEnvResolver): string;
10
+ export declare function findEnvCdn(cdnConfig?: EvolveMultiCDNConfig, env?: EvolveMultiCdnEnvType): string;
11
+ export declare function injectFederationScripts(cdnConfig: EvolveMultiCDNConfig, cdnResolver?: EvolveMultiCDNEnvResolver): string;
@@ -0,0 +1 @@
1
+ export function httpUrlJoin(n="",e=""){return n.replace(/\/$/,"")+"/"+e.replace(/^\//,"")}export function cdnFinder(n,e){const r=window.location.href,o=/[?&]env(=([^&#]*)|&|#|$)/.exec(r);let t=o&&o[2]?decodeURIComponent(o[2].replace(/\+/g," ")):"prod";t=e&&e(r)||t;const c=n[t]||n.prod||[];return c[Math.floor(Math.random()*c.length)].replace(/\/$/,"")+"/"}export function findEnvCdn(n={},e="prod"){const r=n[e]||n.prod||[];return r[Math.floor(Math.random()*r.length)]}export function injectFederationScripts(n,e=function cdnResolver(){}){return`window.evolveFetchMicroWidgets = function () {\n var cdnConfig = ${JSON.stringify(n)};\n var cdnResolver = ${e.toString()};\n var cdnFinder = ${cdnFinder.toString()};\n return (cdnFinder(cdnConfig, cdnResolver) || '').replace(/\\/$/, '');\n }\n `}
@@ -0,0 +1,3 @@
1
+ import { type EntryMapItem } from '../types/types-entry-map.js';
2
+ import { type FlatEvolveOptions } from '../types/types-options.js';
3
+ export declare const shouldEnableReactFastRefresh: (serveMode: boolean, entryMapItem: EntryMapItem, evolveOptions: FlatEvolveOptions) => boolean;
@@ -0,0 +1 @@
1
+ export const shouldEnableReactFastRefresh=(e,o,t)=>{const r=o[1],s=!!r.options?.moduleFederation;return e&&"react"===t.loaderOptions.babelOptions?.usePreset&&!s&&!0!==t.devServer?.liveReload};
@@ -0,0 +1,8 @@
1
+ import { type Configuration } from 'webpack';
2
+ import { type EvolveEntryMap } from '../types/types-entry-map.js';
3
+ import { type FlatEvolveOptions } from '../types/types-options.js';
4
+ /**
5
+ * Split the `webpack` to make sure that we have separated compiler process for each module
6
+ * @param webpackConfig `Omit<Configuration, 'entry'>` webpack final configuration
7
+ */
8
+ export declare function splitToMultiCompilerConfigs(servedEntries: EvolveEntryMap, webpackConfig: Omit<Configuration, 'entry'>, evolveOptions: FlatEvolveOptions): Configuration[];
@@ -0,0 +1 @@
1
+ import{mergeOptions}from"@flatjs/common";import{normalizeEvolveEntryName}from"./normalize-entry-map.js";export function splitToMultiCompilerConfigs(e,o,t){const r=[];for(const[o,n]of Object.entries(e)){const e=normalizeEvolveEntryName(o,t.projectVirtualPath);r.push({[e]:n.entry})}return r.map((e=>mergeOptions(o,{name:Object.keys(e)[0],entry:e})))}
@@ -0,0 +1,5 @@
1
+ export * from './define-config/index.js';
2
+ export * from './load-config/index.js';
3
+ export * from './main/index.js';
4
+ export * from './types/types-options.js';
5
+ export * from './types/types-entry-map.js';
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export*from"./define-config/index.js";export*from"./load-config/index.js";export*from"./main/index.js";export*from"./types/types-options.js";export*from"./types/types-entry-map.js";
@@ -0,0 +1 @@
1
+ export * from './load-evolve-config.js';
@@ -0,0 +1 @@
1
+ export*from"./load-evolve-config.js";
@@ -0,0 +1,11 @@
1
+ import { type PartialDeep } from 'type-fest';
2
+ import { type EvolveConfigBase } from '../define-config/define-config.js';
3
+ import { type FlatEvolveOptions } from '../types/types-options.js';
4
+ export type ConfigLoaderOptions = {
5
+ configFile: string;
6
+ esmLoaderOptions: {
7
+ externals: string[];
8
+ projectCwd?: string;
9
+ };
10
+ };
11
+ export declare const loadEvolveConfig: (configEnv: EvolveConfigBase, projectCwd: string, overrideOptions?: PartialDeep<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions) => Promise<FlatEvolveOptions>;
@@ -0,0 +1 @@
1
+ import{searchConfig}from"@armit/config-loader";import{mergeOptions,logger}from"@flatjs/common";import{configFileName,moduleName}from"../constants.js";import{defaultEvolveOptions}from"../default-options.js";import{normalizeResolveAlias}from"../helpers/normalize-resolve-alias.js";import{refreshEvolveMockOptions}from"../helpers/refresh-evolve-mock-options.js";export const loadEvolveConfig=async(o,e,i={},s={configFile:configFileName,esmLoaderOptions:{externals:["@flatjs/evolve","@flatjs/mock"]}})=>{const{configFile:l,esmLoaderOptions:r}=s,a=await searchConfig(l,e,{esm:{...r,projectCwd:e}});let n={};n="function"==typeof a?.config?a?.config(o):a?.config||{};const t=mergeOptions(defaultEvolveOptions,n),m=mergeOptions(t,i),f=mergeOptions(m,{projectCwd:e}),c="build"===o.command?f:await refreshEvolveMockOptions(e,f,s);return logger.debug(`Load evolve config:\n${JSON.stringify(c,null,2)}`,moduleName),c.webpack?.resolve?.alias&&(c.webpack.resolve.alias=normalizeResolveAlias(e,c.webpack?.resolve?.alias)),c};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const svgo_1 = require("svgo");
4
+ const VIEWBOX_REGEX = /viewBox="([^"]*)"/;
5
+ const SVG_REGEX = /<svg[^>]*>|<\/svg>/g;
6
+ const FILL_REGEX = /fill="[^"]*"/g;
7
+ const svgOptimize = (buffer, svgoOption) => {
8
+ const { data } = (0, svgo_1.optimize)(buffer, svgoOption);
9
+ return data;
10
+ };
11
+ const iconLoader = function iconLoader(source) {
12
+ this.cacheable && this.cacheable(true);
13
+ const options = this.getOptions();
14
+ const callback = this.async();
15
+ try {
16
+ const optimizedSource = svgOptimize(source, options.svgo);
17
+ const finalSource = optimizedSource.replace(FILL_REGEX, (fill) => {
18
+ return fill.includes('#FFF') ? 'fill="currentColor"' : '';
19
+ });
20
+ // Issue with ESLint recognizing this as needing an object destructure
21
+ const viewBoxMatch = VIEWBOX_REGEX.exec(finalSource);
22
+ const viewBox = viewBoxMatch ? viewBoxMatch[1] : '';
23
+ const svgExport = JSON.stringify({
24
+ viewBox,
25
+ body: finalSource.replace(SVG_REGEX, ''),
26
+ });
27
+ callback(null, `module.exports.default = module.exports = ${svgExport}`);
28
+ }
29
+ catch (err) {
30
+ callback(err);
31
+ }
32
+ };
33
+ module.exports = iconLoader;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { type FlatEvolveOptions } from '../types/types-options.js';
2
+ export declare const envVerify: (projectCwd: string, evolveOptions: FlatEvolveOptions) => Promise<void>;
@@ -0,0 +1 @@
1
+ import{illegalPackageChecker,keepPackageDepsUpToDateForNonMonoRepo}from"@armit/package";export const envVerify=async(e,a)=>{const{packageInstallChecker:o,needVerifyPackages:r}=a;!1!==o&&o?.enabled&&await illegalPackageChecker({cwd:e,modules:o?.detectModules,throwError:o?.throwError,showAllInstalledGraph:o?.showAllInstalledGraph}),!1!==r&&await keepPackageDepsUpToDateForNonMonoRepo({cwd:e,autoUpgrade:!0,needVerifyPackages:r||{}})};
@@ -0,0 +1 @@
1
+ export declare const getWorkerPath: () => string;
@@ -0,0 +1 @@
1
+ import{pathToFileURL}from"node:url";import{getDirname}from"@armit/file-utility";export const getWorkerPath=()=>pathToFileURL(getDirname(import.meta.url,"./start-build-worker.js")).toString();
@@ -0,0 +1,4 @@
1
+ export * from './start-build.js';
2
+ export * from './start-serve.js';
3
+ export * from './start-static.js';
4
+ export * from './start-build-dynamic.js';
@@ -0,0 +1 @@
1
+ export*from"./start-build.js";export*from"./start-serve.js";export*from"./start-static.js";export*from"./start-build-dynamic.js";
@@ -0,0 +1,9 @@
1
+ import { type EntryMapItem } from '../types/types-entry-map.js';
2
+ import { type FlatEvolveOptions } from '../types/types-options.js';
3
+ import { type EvolveBuildResult } from './start-one-entry-build.js';
4
+ /**
5
+ * The main entry to start an evolve `build`
6
+ * @param entryMapItem The `entryMapItem` for one entry build task
7
+ * @param evolveOptions FlatEvolveOptions
8
+ */
9
+ export declare const prepareBuild: (entryMapItem: EntryMapItem, evolveOptions: FlatEvolveOptions) => Promise<EvolveBuildResult>;
@@ -0,0 +1 @@
1
+ import{ensureSlash,mergeOptions}from"@flatjs/common";import{EvolveBuildError}from"../errors/evolve-build-error.js";import{printCompilerError}from"../helpers/print-log.js";import{startOneEntryBuild}from"./start-one-entry-build.js";export const prepareBuild=async(r,o)=>{const[t,e]=r,n=o.multiHtmlCdn?.prod||[];if(!n.length)throw new Error(`No CDN config for env:"prod", moduleName: ${t}`);const i=ensureSlash(n[Math.floor(Math.random()*n.length)],!0),l={[t]:e};try{const r=e.options?.useRelativeAssetPath,t=mergeOptions(o,{webpack:{publicPath:r?"auto":i}});return await startOneEntryBuild(l,t)}catch(r){const o=printCompilerError(r);throw new EvolveBuildError("BUILD_ERROR",o)}};
@@ -0,0 +1,9 @@
1
+ import { type EvolveEntryMap } from '../types/types-entry-map.js';
2
+ import { type FlatEvolveOptions } from '../types/types-options.js';
3
+ /**
4
+ * The main entry to start evolve serve
5
+ * @param projectCwd The Root directory (workspace) of this project.
6
+ * @param servedEntries All normalized webpack entries we have served.
7
+ * @param evolveOptions FlatEvolveOptions
8
+ */
9
+ export declare const prepareServe: (projectCwd: string, servedEntries: EvolveEntryMap, evolveOptions: FlatEvolveOptions) => Promise<import("express-serve-static-core").Express>;
@@ -0,0 +1 @@
1
+ import{arrayUnique,urlJoin}from"@flatjs/common";import{attachMockMiddlewares}from"@flatjs/mock";import{createAppPageRoute,createDevServer,createDevServerCompilerTasks,createDevServerEntries}from"../dev-server/index.js";import{openPage}from"../helpers/index.js";import{envVerify}from"./env-verify.js";export const prepareServe=async(e,r,t)=>{await envVerify(e,t);const{app:o,devPort:a,devHostUri:i}=await createDevServer(t),s=t.devServer?.mockOptions?.mockFilters||[];for(const[,e]of Object.entries(r))s.push(...e.options?.mockFilters||[]);await attachMockMiddlewares(o,{...t.devServer?.mockOptions,mockFilters:arrayUnique(s),projectCwd:e});const c=await createDevServerEntries(a,r,t);createAppPageRoute(e,o,i,c,t);const n=urlJoin(i,["/pages"]);t.devServer?.autoOpen&&openPage(n);const v=await createDevServerCompilerTasks(e,n,c,t);return Promise.all(v).then((()=>o))};
@@ -0,0 +1,7 @@
1
+ import { type FlatEvolveOptions } from '../types/index.js';
2
+ /**
3
+ * The main entry to start evolve serve
4
+ * @param projectCwd The Root directory (workspace) of this project.
5
+ * @param evolveOptions FlatEvolveOptions
6
+ */
7
+ export declare const prepareStatic: (projectCwd: string, evolveOptions: FlatEvolveOptions) => Promise<void>;
@@ -0,0 +1 @@
1
+ import{chalk,logger,urlJoin}from"@flatjs/common";import{attachMockMiddlewares}from"@flatjs/mock";import{createAppPageRoute}from"../dev-server/create-app-page-route.js";import{createDevServer}from"../dev-server/create-dev-server.js";import{openPage}from"../helpers/open-page.js";export const prepareStatic=async(e,r)=>{const{app:a,devHostUri:o}=await createDevServer(r);await attachMockMiddlewares(a,{...r.devServer?.mockOptions,projectCwd:e}),createAppPageRoute(e,a,o,{},r);const t=urlJoin(o,["/pages"]);r.devServer?.autoOpen&&openPage(t),logger.info(`${"static page".padEnd(12," ")} ➩ ${chalk(["cyan"])(t)}`)};
@@ -0,0 +1,20 @@
1
+ import { type PartialDeep } from 'type-fest';
2
+ import { type ConfigLoaderOptions } from '../load-config/load-evolve-config.js';
3
+ import { type FlatEvolveOptions } from '../types/types-options.js';
4
+ import { type EvolveBuildResult } from './start-one-entry-build.js';
5
+ export declare function getBuildEntryFiles(projectCwd: string, diffFiles: string[], allEntryInputs: string[], resolveAlias?: Record<string, string>): Promise<string[]>;
6
+ /**
7
+ * Dynamic check which entry modules need to build.
8
+ * @returns
9
+ */
10
+ export declare function dynamicCheckBuildEntryMap(projectCwd: string, earlyCommit?: string | null, lastCommit?: string, overrideEvolveOptions?: PartialDeep<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions): Promise<{
11
+ buildEntries: import("../index.js").EvolveEntryMap;
12
+ newEvolveOptions: FlatEvolveOptions;
13
+ }>;
14
+ /**
15
+ * The main entry to start an evolve `build` with automatically detect modules which have been changed between two commits.
16
+ * @param projectCwd The Root directory (workspace) of this project.
17
+ * @param earlyCommit The diff based earlier commit hash
18
+ * @param lastCommit If is omitted, it will have the same effect as using HEAD instead.
19
+ */
20
+ export declare const startDynamicBuild: (projectCwd: string, earlyCommit?: string, lastCommit?: string, overrideEvolveOptions?: PartialDeep<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions) => Promise<EvolveBuildResult[]>;
@@ -0,0 +1 @@
1
+ import{isAbsolute,join}from"node:path";import{getDiffFiles,getCommitIdOfBranch}from"@armit/git";import{createThreadPool}from"@armit/worker-threads";import{arraysIntersect,chalk,logger,requireResolve}from"@flatjs/common";import{traverseGraph}from"@flatjs/graph";import Listr from"listr";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{resolveEntryMapInputFiles}from"../helpers/resolve-entry-map-input-files.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{envVerify}from"./env-verify.js";import{getWorkerPath}from"./get-worker-path.js";export async function getBuildEntryFiles(e,t,r,i){const o=[],n=[];for(const e of r)t.includes(e)?o.push(e):n.push(e);if(n.length){const r=await traverseGraph({input:n,projectCwd:e,treeNodeFilter:()=>!0,lessImportOptions:{projectCwd:e,aliases:i}});if(!r)return o;logger.debug(`DependencyGraph:\n${JSON.stringify(r,null,2)}`);for(const e of n){const i=r[e]||[];arraysIntersect(i,t)&&o.push(e)}}return o}export async function dynamicCheckBuildEntryMap(e,t,r,i,o){const n={command:"build",resolve:requireResolve},s=await loadEvolveConfig(n,e,i,o);if(s.ci?.fixedBuildModules&&s.ci?.fixedBuildModules.length){logger.info("Use `fixedBuildModules` configuration to build...");return{buildEntries:filterActivedEntriesByModule(s.entryMap,s.ci?.fixedBuildModules),newEvolveOptions:s}}if(logger.info("Dynamicly checking code changed modules ..."),!t){const e=s.ci?.basedBranch||"origin/master";t=await getCommitIdOfBranch(e),logger.info(`Resolving base branch "${e}" commit hash "${t}" ...`)}let a=t?await getDiffFiles(t,r):[];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:s};const c=await resolveEntryMapInputFiles(e,s.entryMap),d=await getBuildEntryFiles(e,a,c,s.webpack?.resolve?.alias);logger.debug(`To build entry files: \n${JSON.stringify(d,null,2)}`);return{buildEntries:await filterActivedEntriesByEntryInputs(e,s.entryMap,d),newEvolveOptions:s}}export const startDynamicBuild=async(e,t,r,i={},o)=>{const{buildEntries:n,newEvolveOptions:s}=await dynamicCheckBuildEntryMap(e,t,r,i,o);await envVerify(e,s);const a=Object.keys(n);if(!a.length)return logger.warn("No build entries providered!"),[];const l=getMaxProcessTasks(a.length,s.maxProcesses);logger.info(`Start dynamic build with (${chalk(["magenta"])(String(l))}) workers:\n${JSON.stringify({buildEntries:a},null,2)}`);const c=getWorkerPath(),d=await createThreadPool(c,{size:l}),f=new Listr([],{concurrent:l,exitOnError:!0}),g=[];for(const[t]of Object.entries(n))f.add({title:`Build module ${chalk(["magenta"])(t)} ...`,task:async()=>{const r=await d.startBuildWorker(e,t,jsonSerializer.stringify(i),o);g.push(r)}});return f.tasks.length&&await f.run(),d.pool.terminate(),g};
@@ -0,0 +1,12 @@
1
+ import { type ConfigLoaderOptions } from '../load-config/load-evolve-config.js';
2
+ import { type EvolveBuildResult } from './start-one-entry-build.js';
3
+ /**
4
+ * FIXME: The main entry to start an evolve `build`, NOTE: avoid pass configuration with `function` here.
5
+ * If you need to call build api avoid `worker` you can directly call `prepareBuild`
6
+ * @internal
7
+ * @param projectCwd The Root directory (workspace) of this project.
8
+ * @param entryKey The `entryKey` for one entry build task
9
+ * @param serializedEvolveOptions The overrided evolve options, NOTE: we will serialize `function` property here first
10
+ * @param configLoaderOptions Evolve config loader options, NOTE: avoid pass configuration with `function` here.
11
+ */
12
+ export declare const startBuildWorker: (projectCwd: string, entryKey: string, serializedEvolveOptions: string, configLoaderOptions?: ConfigLoaderOptions) => Promise<EvolveBuildResult>;
@@ -0,0 +1 @@
1
+ import{requireResolve}from"@flatjs/common";import{filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{jsonSerializer}from"../helpers/json-serializer.js";import{normalizeEvolveEntryMap}from"../helpers/normalize-entry-map.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{prepareBuild}from"./prepare-build.js";export const startBuildWorker=async(e,r,o,i)=>{const l={command:"build",resolve:requireResolve},t=jsonSerializer.parse(o)||{},n=await loadEvolveConfig(l,e,t,i),a=filterActivedEntriesByModule(n.entryMap,[new RegExp(`^${r}$`)]);if(!Object.keys(a).length)throw new Error(`No build entry resolved via "${r}" on "startBuildWorker"!`);const s=normalizeEvolveEntryMap(a,n.entryMap)[r];return prepareBuild([r,s],n)};
@@ -0,0 +1,5 @@
1
+ import { type PartialDeep } from 'type-fest';
2
+ import { type ConfigLoaderOptions } from '../load-config/load-evolve-config.js';
3
+ import { type FlatEvolveOptions } from '../types/types-options.js';
4
+ import { type EvolveBuildResult } from './start-one-entry-build.js';
5
+ export declare const startBuild: (projectCwd: string, buildModules: string[], overrideEvolveOptions?: PartialDeep<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions) => Promise<EvolveBuildResult[]>;
@@ -0,0 +1 @@
1
+ import{createThreadPool}from"@armit/worker-threads";import{chalk,logger,requireResolve}from"@flatjs/common";import Listr from"listr";import{filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{getMaxProcessTasks}from"../helpers/get-max-process-tasks.js";import{jsonSerializer}from"../helpers/json-serializer.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{envVerify}from"./env-verify.js";import{getWorkerPath}from"./get-worker-path.js";export const startBuild=async(e,r,t={},o)=>{const i={command:"build",resolve:requireResolve},s=await loadEvolveConfig(i,e,t,o);await envVerify(e,s);const a=filterActivedEntriesByModule(s.entryMap,r),n=Object.keys(a);if(!n.length)return logger.warn("No build entries providered!"),[];const l=getMaxProcessTasks(n.length,s.maxProcesses);logger.info(`Start standard build with (${chalk(["magenta"])(String(l))}) workers:\n${JSON.stringify({buildEntries:n},null,2)}`);const c=getWorkerPath(),m=await createThreadPool(c,{size:l}),d=new Listr([],{concurrent:l,exitOnError:!0}),f=[];for(const[r]of Object.entries(a))d.add({title:`Build module ${chalk(["magenta"])(r)} ...`,task:async()=>{const i=await m.startBuildWorker(e,r,jsonSerializer.stringify(t),o);f.push(i)}});return d.tasks.length&&await d.run(),m.pool.terminate(),f};
@@ -0,0 +1,13 @@
1
+ import { type EvolveEntryMap } from '../types/types-entry-map.js';
2
+ import { type FlatEvolveOptions } from '../types/types-options.js';
3
+ export type EvolveBuildResult = {
4
+ name?: string;
5
+ warningStats?: unknown;
6
+ };
7
+ /**
8
+ * The helpers to build one entry at a time
9
+ * @param singleBuildEntry The single entry
10
+ * @param buildPublicPath
11
+ * @param evolveOptions
12
+ */
13
+ export declare const startOneEntryBuild: (singleBuildEntry: EvolveEntryMap, evolveOptions: FlatEvolveOptions) => Promise<EvolveBuildResult>;
@@ -0,0 +1 @@
1
+ import webpack from"webpack";import{loadWebpackConfig}from"../create-webpack/load-webpack-config.js";import{splitToMultiCompilerConfigs}from"../helpers/split-to-multi-compiler.js";export const startOneEntryBuild=async(r,o)=>{const t=await loadWebpackConfig("production",r,o),n=splitToMultiCompilerConfigs(r,t,o);if(n.length>1)throw new Error("startOneEntryBuild() only support `compiler` at a time");const e=n[0];return new Promise(((r,t)=>{webpack(e,((n,i)=>{if(n)return t(n);const a=i?.toJson();return a?.errors?.length?t(a.errors):o.rejectWarnings&&a?.warnings?.length?t(a.warnings):void r({name:e.name,warningStats:a?.warnings})}))}))};
@@ -0,0 +1,11 @@
1
+ import { type PartialDeep } from 'type-fest';
2
+ import { type ConfigLoaderOptions } from '../load-config/load-evolve-config.js';
3
+ import { type FlatEvolveOptions } from '../types/types-options.js';
4
+ /**
5
+ * The main entry to start evolve serve
6
+ * @param projectCwd The Root directory (workspace) of this project.
7
+ * @param serveModules The filter pattern to detect modules we want to serve.
8
+ * @param overrideEvolveOptions The overrided evolve options
9
+ * @param configLoaderOptions Evolve config loader options
10
+ */
11
+ export declare const startServe: (projectCwd: string, serveModules: string[], overrideEvolveOptions?: PartialDeep<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions) => Promise<never[] | import("express-serve-static-core").Express>;
@@ -0,0 +1 @@
1
+ import{logger,requireResolve}from"@flatjs/common";import{filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{normalizeEvolveEntryMap}from"../helpers/normalize-entry-map.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{prepareServe}from"./prepare-serve.js";export const startServe=async(e,r,o={},t)=>{const i={command:"serve",resolve:requireResolve},n=await loadEvolveConfig(i,e,o,t),l=filterActivedEntriesByModule(n.entryMap,r),s=Object.keys(l);if(!s.length)return logger.warn("No served entries providered!"),[];logger.info({servedEntries:s});const v=normalizeEvolveEntryMap(l,n.entryMap);return prepareServe(e,v,n)};
@@ -0,0 +1,10 @@
1
+ import { type PartialDeep } from 'type-fest';
2
+ import { type ConfigLoaderOptions } from '../load-config/load-evolve-config.js';
3
+ import { type FlatEvolveOptions } from '../types/types-options.js';
4
+ /**
5
+ * The main entry to start evolve static server to proxy all modules of `production` build
6
+ * @param projectCwd The Root directory (workspace) of this project.
7
+ * @param overrideEvolveOptions The overrided evolve options
8
+ * @param configLoaderOptions Evolve config loader options
9
+ */
10
+ export declare const startStatic: (projectCwd: string, overrideEvolveOptions?: PartialDeep<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions) => Promise<void>;
@@ -0,0 +1 @@
1
+ import{requireResolve}from"@flatjs/common";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{prepareStatic}from"./prepare-static.js";export const startStatic=async(o,e={},r)=>{const t={command:"static",resolve:requireResolve},a=await loadEvolveConfig(t,o,e,r);return prepareStatic(o,a)};
@@ -0,0 +1,3 @@
1
+ import { type WebpackPlugin } from '../create-webpack/types.js';
2
+ import { type FlatEvolveWebpackOptions } from '../types/types-webpack.js';
3
+ export declare const createMinimizers: (serveMode: boolean, webpackOptions?: FlatEvolveWebpackOptions) => WebpackPlugin[];
@@ -0,0 +1 @@
1
+ import{logger}from"@flatjs/common";import{moduleName}from"../constants.js";import{printInfo}from"../helpers/print-log.js";import{imageMinimizer}from"./image-minimizer.js";import{terserMinimizer}from"./terser-minimizer.js";export const createMinimizers=(i,r)=>{const e=[];if(i)return logger.debug("Ignore minimizer plugin for `serve` mode",moduleName),e;if(!1===r?.minimizer)return printInfo("Note `minimizer` has been disabled for now"),e;if(r?.minimizer?.imageMin){const i=imageMinimizer();i&&e.push(i)}const m=terserMinimizer(r?.minimizer?.terserOptions||{});return e.push(m),e};
@@ -0,0 +1,2 @@
1
+ import { type TerserMinimizerOptions } from './types.js';
2
+ export declare const defaultTerserOptions: TerserMinimizerOptions;
@@ -0,0 +1 @@
1
+ export const defaultTerserOptions={ecma:void 0,parse:{},compress:{},mangle:!0,module:!1,output:void 0,toplevel:!1,ie8:!1,keep_classnames:void 0,keep_fnames:!1,safari10:!1};
@@ -0,0 +1,16 @@
1
+ import ImageMinimizerPlugin from 'image-minimizer-webpack-plugin';
2
+ /**
3
+ * Install libpng library & gifsicle tool
4
+ * macos
5
+ * =====================
6
+ * brew install libpng
7
+ * brew install gifsicle
8
+ *
9
+ * centos
10
+ * =====================
11
+ * sudo yum install libpng
12
+ * sudo yum install epel-release
13
+ * sudo yum install gifsicle
14
+ * @returns
15
+ */
16
+ export declare const imageMinimizer: () => ImageMinimizerPlugin<unknown, unknown> | null;
@@ -0,0 +1 @@
1
+ import{projectHasYarn}from"@armit/package";import{chalk,logger,requireResolve}from"@flatjs/common";import ImageMinimizerPlugin from"image-minimizer-webpack-plugin";import{moduleName}from"../constants.js";const logs=new Map;export const imageMinimizer=()=>{const e=[],i=[["svgo",{}],["gifsicle",{}],["jpegtran",{}],["pngquant",{}]].map((i=>{const n=i[0];try{return requireResolve(import.meta.url,`imagemin-${n}`),i}catch(i){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};
@@ -0,0 +1 @@
1
+ export * from './create-minimizers.js';
@@ -0,0 +1 @@
1
+ export*from"./create-minimizers.js";
@@ -0,0 +1,6 @@
1
+ import { type WebpackPlugin } from '../create-webpack/types.js';
2
+ import { type TerserMinimizerOptions } from './types.js';
3
+ /**
4
+ * https://github.com/webpack-contrib/terser-webpack-plugin#terseroptions
5
+ */
6
+ export declare const terserMinimizer: (terserOptions: TerserMinimizerOptions) => WebpackPlugin;
@@ -0,0 +1,3 @@
1
+ import{mergeOptions}from"@flatjs/common";import TerserPlugin from"terser-webpack-plugin";import{defaultTerserOptions}from"./default-options.js";export const terserMinimizer=e=>new TerserPlugin({parallel:!0,
2
+ // Disable Extract all or some (use /^\**!|@preserve|@license|@cc_on/i RegExp) comments.
3
+ extractComments:!1,terserOptions:mergeOptions(defaultTerserOptions,e)});
@@ -0,0 +1,2 @@
1
+ import { type TerserOptions } from 'terser-webpack-plugin';
2
+ export type TerserMinimizerOptions = Omit<TerserOptions, 'nameCache' | 'sourceMap'>;
@@ -0,0 +1 @@
1
+ export{};
@@ -0,0 +1,54 @@
1
+ import { type Compilation, type Compiler } from 'webpack';
2
+ export interface Options {
3
+ /**
4
+ * The project root.
5
+ */
6
+ projectCwd?: string;
7
+ /**
8
+ * exclude detection of files based on a RegExp
9
+ * @default /node_modules/
10
+ */
11
+ exclude?: RegExp;
12
+ /**
13
+ * include specific files based on a RegExp
14
+ * @default `new RegExp('.*')`
15
+ */
16
+ include?: RegExp;
17
+ /**
18
+ * add errors to webpack instead of warnings
19
+ * @default true
20
+ */
21
+ failOnError?: boolean;
22
+ /**
23
+ * allow import cycles that include an asynchronous import,
24
+ * e.g. via via import(/* webpackMode: "weak" *\/ './file.js')
25
+ * @default false
26
+ */
27
+ allowAsyncCycles?: boolean;
28
+ /**
29
+ * `onStart` is called before the cycle detection starts
30
+ */
31
+ onStart?: (options: {
32
+ compilation: Compilation;
33
+ }) => void;
34
+ /**
35
+ * `onDetected` is called for each module that is cyclical
36
+ * `paths` will be an Array of the relative module paths that make up the cycle
37
+ */
38
+ onDetected?: (options: {
39
+ paths: string[];
40
+ compilation: Compilation;
41
+ }) => void;
42
+ /**
43
+ * `onEnd` is called before the cycle detection ends
44
+ */
45
+ onEnd?: (options: {
46
+ compilation: Compilation;
47
+ }) => void;
48
+ }
49
+ export declare class CircularDependencyPlugin {
50
+ private options;
51
+ constructor(options?: Options);
52
+ apply(compiler: Compiler): void;
53
+ private isCyclic;
54
+ }