@flatjs/evolve 2.3.2-next.2 → 2.3.2-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.d.ts +7 -0
- package/dist/constants.js +1 -1
- package/dist/core/rspack/create-plugins.js +1 -1
- package/dist/default-options.js +1 -1
- package/dist/define-config/define-config.d.ts +3 -3
- package/dist/define-config/define-config.js +1 -1
- package/dist/dev-server/create-app-page-route.js +1 -1
- package/dist/helpers/custom-listr-renderer.js +1 -1
- package/dist/helpers/custom-message-channel.d.ts +17 -0
- package/dist/helpers/custom-message-channel.js +1 -0
- package/dist/helpers/merge-inspector-evolve-config.d.ts +2 -0
- package/dist/helpers/merge-inspector-evolve-config.js +1 -0
- package/dist/helpers/print-promotion.d.ts +3 -2
- package/dist/helpers/print-promotion.js +1 -1
- package/dist/helpers/refresh-evolve-mock-options.js +1 -1
- package/dist/load-config/load-evolve-config.d.ts +2 -2
- package/dist/load-config/load-evolve-config.js +1 -1
- package/dist/load-config/types.d.ts +2 -4
- package/dist/main/create-build-server.d.ts +2 -2
- package/dist/main/create-thread-worker.d.ts +31 -0
- package/dist/main/create-thread-worker.js +1 -0
- package/dist/main/get-worker-path.d.ts +1 -0
- package/dist/main/get-worker-path.js +1 -0
- package/dist/main/prepare-build.js +1 -1
- package/dist/main/prepare-serve.d.ts +1 -2
- package/dist/main/prepare-serve.js +1 -1
- package/dist/main/start-build-dynamic.d.ts +5 -4
- package/dist/main/start-build-dynamic.js +1 -1
- package/dist/main/start-build-worker.js +1 -1
- package/dist/main/start-build.d.ts +2 -2
- package/dist/main/start-build.js +1 -1
- package/dist/main/start-serve.d.ts +2 -3
- package/dist/main/start-serve.js +1 -1
- package/dist/main/start-static.d.ts +2 -2
- package/dist/plugins/rspack/progress-plugin/index.d.ts +4 -0
- package/dist/plugins/rspack/progress-plugin/index.js +1 -0
- package/dist/plugins/rspack/progress-plugin/progress-handler.d.ts +3 -0
- package/dist/plugins/rspack/progress-plugin/progress-handler.js +1 -0
- package/dist/plugins/rspack/progress-plugin/progress-worker.d.ts +7 -0
- package/dist/plugins/rspack/progress-plugin/progress-worker.js +1 -0
- package/dist/plugins/webpack/clean-webpack/clean-webpack-plugin.js +1 -1
- package/dist/rules/rspack/rule-scripts.js +1 -1
- package/dist/rules/wepack/rule-scripts.js +1 -1
- package/dist/types/types-cli-options.d.ts +0 -5
- package/dist/types/types-entry-map.d.ts +1 -1
- package/dist/types/types-options.d.ts +36 -0
- package/dist/types/types-webpack.d.ts +1 -1
- package/package.json +23 -15
package/dist/constants.d.ts
CHANGED
@@ -31,3 +31,10 @@ export declare const ignoreEntryOptionKeys: Array<keyof EvolveEntryItemOption>;
|
|
31
31
|
* The directory where the webpack stats files are stored. relative to projectCwd
|
32
32
|
*/
|
33
33
|
export declare const webpackStatsDir = ".cache/stats";
|
34
|
+
/**
|
35
|
+
* The spinner frames used for build progress indicator
|
36
|
+
* Different frames for Windows and Unix-like systems
|
37
|
+
* Windows: simple ASCII characters
|
38
|
+
* Unix: Braille patterns for smoother animation
|
39
|
+
*/
|
40
|
+
export declare const buildProgressSpinnerFrames: string[];
|
package/dist/constants.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
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";
|
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 +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{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,a,
|
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)};
|
package/dist/default-options.js
CHANGED
@@ -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,openRsdoctor:!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:{customLaunchEditorEndpoint:"/__hps_inspector",trustedEditor:"code",injectClient:!0}};
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { type PartialDeep } from 'type-fest';
|
2
|
-
import { type ConfigEnvBase, type UserConfigExport } from '@armit/config-loader';
|
3
1
|
import { type requireResolve } from '@flatjs/common';
|
2
|
+
import type { DeepPartial } from '@hyperse/config-loader';
|
3
|
+
import { type ConfigEnvBase, type UserConfigExport } from '@hyperse/config-loader';
|
4
4
|
import { type FlatEvolveOptions } from '../types/types-options.js';
|
5
5
|
export interface EvolveConfigBase extends ConfigEnvBase {
|
6
6
|
/**
|
@@ -28,6 +28,6 @@ export interface EvolveConfigBase extends ConfigEnvBase {
|
|
28
28
|
*/
|
29
29
|
resolve: typeof requireResolve;
|
30
30
|
}
|
31
|
-
type DefineConfigFn = (userConfig: UserConfigExport<
|
31
|
+
type DefineConfigFn = (userConfig: UserConfigExport<DeepPartial<FlatEvolveOptions>, EvolveConfigBase>) => UserConfigExport<DeepPartial<FlatEvolveOptions>, EvolveConfigBase>;
|
32
32
|
export declare const defineConfig: DefineConfigFn;
|
33
33
|
export {};
|
@@ -1 +1 @@
|
|
1
|
-
import{defineConfig as myDefineConfig}from"@
|
1
|
+
import{defineConfig as myDefineConfig}from"@hyperse/config-loader";export const defineConfig=e=>myDefineConfig(e);
|
@@ -1 +1 @@
|
|
1
|
-
import{normalizePageProxy}from"../helpers/normalize-page-proxy.js";import{createPageMiddleware,createPublicAssetsMiddleware}from"./middlewares/index.js";export const createAppPageRoute=(e,r,a,o
|
1
|
+
import{createLaunchEditorMiddleware}from"@hyperse/inspector-middleware";import{normalizePageProxy}from"../helpers/normalize-page-proxy.js";import{createPageMiddleware,createPublicAssetsMiddleware}from"./middlewares/index.js";export const createAppPageRoute=(e,r,t,a,o)=>{const{devServer:d,inspector:i}=o,s=normalizePageProxy(d?.pageProxy||"/pages");i&&d?.middlewares?.push(createLaunchEditorMiddleware({customLaunchEditorEndpoint:i.customLaunchEditorEndpoint,trustedEditor:i.trustedEditor,projectCwd:e})),r.use(s,...createPageMiddleware(t,d?.mockOptions?.apiContext||"api",a,o)),r.use("*splat",createPublicAssetsMiddleware(e,s))};
|
@@ -1 +1 @@
|
|
1
|
-
import logUpdate from"log-update";import
|
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)}}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { MessageChannel } from 'node:worker_threads';
|
2
|
+
declare class CustomMessageChannel {
|
3
|
+
private stdoutData;
|
4
|
+
private stderrData;
|
5
|
+
private channelList;
|
6
|
+
constructor();
|
7
|
+
createMessageChannel(): MessageChannel;
|
8
|
+
addListener(channel: MessageChannel): void;
|
9
|
+
getStdData(): {
|
10
|
+
stdout: string[];
|
11
|
+
stderr: string[];
|
12
|
+
};
|
13
|
+
dispose(): void;
|
14
|
+
clean(): void;
|
15
|
+
}
|
16
|
+
export declare const customMessageChannel: CustomMessageChannel;
|
17
|
+
export {};
|
@@ -0,0 +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;
|
@@ -0,0 +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,2 +1,3 @@
|
|
1
|
-
import type {
|
2
|
-
|
1
|
+
import type { DeepPartial } from '@hyperse/config-loader';
|
2
|
+
import type { FlatEvolveOptions } from '../types/types-options.js';
|
3
|
+
export declare const printPromotions: (evolveOptions?: DeepPartial<FlatEvolveOptions>) => void;
|
@@ -1 +1 @@
|
|
1
|
-
import{chalk,logger}from"@flatjs/common";export const printPromotions=(o={})=>{const{
|
1
|
+
import{chalk,logger}from"@flatjs/common";export const printPromotions=(o={})=>{const{compiler:r="webpack"}=o;logger.info(`Compiler is ${chalk(["cyan"])(r)}`)};
|
@@ -1 +1 @@
|
|
1
|
-
import _ from"lodash";import{requireResolve}from"@flatjs/common";import{getMockCwd,loadMockConfig}from"@flatjs/mock";export const refreshEvolveMockOptions=async(o,t,e)=>{const
|
1
|
+
import _ from"lodash";import{requireResolve}from"@flatjs/common";import{getMockCwd,loadMockConfig}from"@flatjs/mock";export const refreshEvolveMockOptions=async(o,t,e)=>{const r=t.devServer,s=e?.loaderOptions,i=s?.externals||[],n={projectCwd:o,resolve:requireResolve},c=await loadMockConfig(n,o,r?.mockOptions||{},_.merge({},e,{configFile:"flatjs-mock",loaderOptions:{externals:[...i,"@flatjs/mock"]}}));if(r){r.mockOptions=c||{},r.mockOptions&&!r.mockOptions.https&&(r.mockOptions.https=r?.https);const o=getMockCwd(c);Array.isArray(r?.watchOptions?.ignored)&&r?.watchOptions?.ignored.push(o)}return t};
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import {
|
1
|
+
import type { DeepPartial } from '@hyperse/config-loader';
|
2
2
|
import { type EvolveConfigBase } from '../define-config/define-config.js';
|
3
3
|
import { type FlatEvolveOptions } from '../types/types-options.js';
|
4
4
|
import { type ConfigLoaderOptions } from './types.js';
|
5
|
-
export declare const loadEvolveConfig: (configEnv: EvolveConfigBase, projectCwd: string, overrideOptions?:
|
5
|
+
export declare const loadEvolveConfig: (configEnv: EvolveConfigBase, projectCwd: string, overrideOptions?: DeepPartial<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions) => Promise<FlatEvolveOptions>;
|
@@ -1 +1 @@
|
|
1
|
-
import{
|
1
|
+
import{logger,mergeOptions}from"@flatjs/common";import{searchConfig}from"@hyperse/config-loader";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={},l={configFile:configFileName,loaderOptions:{externals:[/^@flatjs\/.*/]}})=>{const{configFile:r,loaderOptions:s}=l,a=await searchConfig(r,e,{...s,projectCwd:e});let n={};n="function"==typeof a?.config?await(a?.config(o)):a?.config||{};const t=mergeOptions(defaultEvolveOptions,n),m=mergeOptions(t,i),f=mergeOptions(m,{projectCwd:e}),p="build"===o.command?f:await refreshEvolveMockOptions(e,f,l);return logger.debug(`Load evolve config:\n${JSON.stringify(p,null,2)}`,moduleName),p.webpack?.resolve?.alias&&(p.webpack.resolve.alias=normalizeResolveAlias(e,p.webpack?.resolve?.alias)),p};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import type { DeepPartial } from '@hyperse/config-loader';
|
2
2
|
import { type ConfigLoaderOptions } from '../load-config/types.js';
|
3
3
|
import { type FlatEvolveOptions } from '../types/types-options.js';
|
4
4
|
export declare class BuildServer {
|
@@ -10,6 +10,6 @@ export declare class BuildServer {
|
|
10
10
|
* @param configLoaderOptions - The config loader options
|
11
11
|
* @returns The build results
|
12
12
|
*/
|
13
|
-
build(projectCwd: string, earlyCommit?: string, lastCommit?: string, overrideEvolveOptions?:
|
13
|
+
build(projectCwd: string, earlyCommit?: string, lastCommit?: string, overrideEvolveOptions?: DeepPartial<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions): Promise<import("../index.js").EvolveBuildResult[]>;
|
14
14
|
}
|
15
15
|
export declare const createBuildServer: () => BuildServer;
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import Tinypool from 'tinypool';
|
2
|
+
import { type ThreadsOptions } from '../types/types-threads-options.js';
|
3
|
+
import startBuildWorker from './start-build-worker.js';
|
4
|
+
interface BaseThreadPool {
|
5
|
+
startBuildWorker: (options: Parameters<typeof startBuildWorker>[0]) => ReturnType<typeof startBuildWorker>;
|
6
|
+
terminate(): void;
|
7
|
+
}
|
8
|
+
/**
|
9
|
+
* Represents a thread pool for unit testing.
|
10
|
+
*/
|
11
|
+
declare class ThreadPoolForUnittest implements BaseThreadPool {
|
12
|
+
startBuildWorker(options: Parameters<typeof startBuildWorker>[0]): Promise<import("../index.js").EvolveBuildResult>;
|
13
|
+
terminate(): void;
|
14
|
+
}
|
15
|
+
/**
|
16
|
+
* Represents a thread pool for executing tasks using the TinyPool library.
|
17
|
+
*/
|
18
|
+
declare class ThreadPoolForTinyPool implements BaseThreadPool {
|
19
|
+
pool: Tinypool;
|
20
|
+
/**
|
21
|
+
* Creates a new instance of the `ThreadPoolForTinyPool` class.
|
22
|
+
* @param workerPath The path to the worker file.
|
23
|
+
* @param workerSize The number of worker threads to create.
|
24
|
+
* @param options Optional configuration options for the worker pool.
|
25
|
+
*/
|
26
|
+
constructor(workerPath: string, options?: ThreadsOptions);
|
27
|
+
startBuildWorker(options: Parameters<typeof startBuildWorker>[0]): ReturnType<typeof startBuildWorker>;
|
28
|
+
terminate(): void;
|
29
|
+
}
|
30
|
+
export declare const createThreadWorker: (options?: ThreadsOptions) => ThreadPoolForUnittest | ThreadPoolForTinyPool;
|
31
|
+
export {};
|
@@ -0,0 +1 @@
|
|
1
|
+
import Tinypool from"tinypool";import{mergeOptions}from"@flatjs/common";import{customMessageChannel}from"../helpers/custom-message-channel.js";import{getWorkerPath}from"./get-worker-path.js";import startBuildWorker from"./start-build-worker.js";class ThreadPoolForUnittest{startBuildWorker(e){return startBuildWorker(e)}terminate(){console.warn('[WARNING] Using fake "terminate" for unittest!')}}class ThreadPoolForTinyPool{constructor(e,r){const{idleTimeout:o=6e4,minThreads:t=1,maxThreads:s}=r||{};this.pool=new Tinypool({runtime:"worker_threads",filename:e,minThreads:t,maxThreads:s,idleTimeout:o})}startBuildWorker(e){const{port1:r}=customMessageChannel.createMessageChannel(),o=mergeOptions(e,{messagePort:r});return this.pool.run(o,{transferList:[r]})}terminate(){this.pool.destroy(),customMessageChannel.dispose()}}export const createThreadWorker=e=>{const r=getWorkerPath();return"test"===process.env.NODE_ENV?(console.warn("[WARNING] Using fake thread pool worker for unittest!"),new ThreadPoolForUnittest):new ThreadPoolForTinyPool(r,e)};
|
@@ -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();
|
@@ -1 +1 @@
|
|
1
|
-
import{ensureSlash,mergeOptions}from"@flatjs/common";import{ignoreEntryOptionKeys}from"../constants.js";import{startRspackBuild}from"../core/rspack/start-rspack-build.js";import{startWebpackBuild}from"../core/webpack/index.js";import{EvolveBuildError}from"../errors/evolve-build-error.js";import{printCompilerError}from"../helpers/print-log.js";import{verifyGroupEntryOptions}from"../helpers/verify-group-entry-options.js";export const prepareBuild=async(r,o,t)=>{const{
|
1
|
+
import{ensureSlash,mergeOptions}from"@flatjs/common";import{ignoreEntryOptionKeys}from"../constants.js";import{startRspackBuild}from"../core/rspack/start-rspack-build.js";import{startWebpackBuild}from"../core/webpack/index.js";import{EvolveBuildError}from"../errors/evolve-build-error.js";import{printCompilerError}from"../helpers/print-log.js";import{verifyGroupEntryOptions}from"../helpers/verify-group-entry-options.js";export const prepareBuild=async(r,o,t)=>{const{compiler:e}=o,s=Object.values(r)[0];if(!verifyGroupEntryOptions(r,ignoreEntryOptionKeys,!0))throw new Error("The entry options in a group must be the same.");const i=o.multiHtmlCdn?.prod||[];if(!i.length)throw new Error(`No CDN config for env:"prod", groupName: ${s.groupName}`);const p=ensureSlash(i[Math.floor(Math.random()*i.length)],!0);try{const i=s.options?.useRelativeAssetPath,n=mergeOptions(o,{webpack:{publicPath:i?"auto":p}});return"webpack"===e?await startWebpackBuild(r,n,t):await startRspackBuild(r,n,t)}catch(r){const o=printCompilerError(r);throw new EvolveBuildError("BUILD_ERROR",o)}};
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import type { FlatCliOptions } from '../types/types-cli-options.js';
|
2
1
|
import { type EvolveEntryMap } from '../types/types-entry-map.js';
|
3
2
|
import { type FlatEvolveOptions } from '../types/types-options.js';
|
4
3
|
/**
|
@@ -7,4 +6,4 @@ import { type FlatEvolveOptions } from '../types/types-options.js';
|
|
7
6
|
* @param servedEntries All normalized webpack entries we have served.
|
8
7
|
* @param evolveOptions FlatEvolveOptions
|
9
8
|
*/
|
10
|
-
export declare const prepareServe: (projectCwd: string, servedEntries: EvolveEntryMap, evolveOptions: FlatEvolveOptions
|
9
|
+
export declare const prepareServe: (projectCwd: string, servedEntries: EvolveEntryMap, evolveOptions: FlatEvolveOptions) => Promise<import("express-serve-static-core").Express | undefined>;
|
@@ -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{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
|
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,15 +1,16 @@
|
|
1
|
-
import {
|
1
|
+
import type { DeepPartial } from '@hyperse/config-loader';
|
2
2
|
import { type ConfigLoaderOptions } from '../load-config/types.js';
|
3
3
|
import type { EvolveBuildResult } from '../types/types-build.js';
|
4
4
|
import type { FlatCliOptions } from '../types/types-cli-options.js';
|
5
|
+
import type { EvolveEntryMap } from '../types/types-entry-map.js';
|
5
6
|
import { type FlatEvolveOptions } from '../types/types-options.js';
|
6
7
|
export declare function getBuildEntryFiles(projectCwd: string, diffFiles: string[], allEntryInputs: string[], resolveAlias?: Record<string, string>, graphTreeNodeFilter?: (moduleId: string) => boolean): Promise<string[]>;
|
7
8
|
/**
|
8
9
|
* Dynamic check which entry modules need to build.
|
9
10
|
* @returns
|
10
11
|
*/
|
11
|
-
export declare function dynamicCheckBuildEntryMap(projectCwd: string, earlyCommit?: string | null, lastCommit?: string, overrideEvolveOptions?:
|
12
|
-
buildEntries:
|
12
|
+
export declare function dynamicCheckBuildEntryMap(projectCwd: string, earlyCommit?: string | null, lastCommit?: string, overrideEvolveOptions?: DeepPartial<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions): Promise<{
|
13
|
+
buildEntries: EvolveEntryMap;
|
13
14
|
newEvolveOptions: FlatEvolveOptions;
|
14
15
|
}>;
|
15
16
|
/**
|
@@ -18,4 +19,4 @@ export declare function dynamicCheckBuildEntryMap(projectCwd: string, earlyCommi
|
|
18
19
|
* @param earlyCommit The diff based earlier commit hash
|
19
20
|
* @param lastCommit If is omitted, it will have the same effect as using HEAD instead.
|
20
21
|
*/
|
21
|
-
export declare const startDynamicBuild: (projectCwd: string, earlyCommit?: string, lastCommit?: string, overrideEvolveOptions?:
|
22
|
+
export declare const startDynamicBuild: (projectCwd: string, earlyCommit?: string, lastCommit?: string, overrideEvolveOptions?: DeepPartial<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions, cliOptions?: FlatCliOptions) => Promise<EvolveBuildResult[]>;
|
@@ -1 +1 @@
|
|
1
|
-
import Listr from"listr";import{isAbsolute,join}from"node:path";import{getCommitIdOfBranch,getDiffFiles}from"@armit/git";import{arraysIntersect,chalk,logger,requireResolve
|
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=>{
|
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,6 +1,6 @@
|
|
1
|
-
import {
|
1
|
+
import type { DeepPartial } from '@hyperse/config-loader';
|
2
2
|
import { type ConfigLoaderOptions } from '../load-config/types.js';
|
3
3
|
import type { EvolveBuildResult } from '../types/types-build.js';
|
4
4
|
import type { FlatCliOptions } from '../types/types-cli-options.js';
|
5
5
|
import { type FlatEvolveOptions } from '../types/types-options.js';
|
6
|
-
export declare const startBuild: (projectCwd: string, buildModules: string[], overrideEvolveOptions?:
|
6
|
+
export declare const startBuild: (projectCwd: string, buildModules: string[], overrideEvolveOptions?: DeepPartial<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions, cliOptions?: FlatCliOptions) => Promise<EvolveBuildResult[]>;
|
package/dist/main/start-build.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import Listr from"listr";import{chalk,logger,requireResolve
|
1
|
+
import Listr from"listr";import{chalk,logger,requireResolve}from"@flatjs/common";import{createGlobalCompiler}from"../compiler/create-global-compiler.js";import{ignoreEntryOptionKeys}from"../constants.js";import{isCI}from"../helpers/check-runtime-env.js";import{CustomListrRenderer}from"../helpers/custom-listr-renderer.js";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{normalizeEvolveEntryMap}from"../helpers/normalize-entry-map.js";import{printPromotions}from"../helpers/print-promotion.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{startAnalyzer}from"./start-analyzer.js";import startBuildWorker from"./start-build-worker.js";const runWebpackTask=async(r,e,t,o,s,i={})=>{const{threads:a={}}=t,n=getMaxProcessTasks(e.length,a?.maxThreads);logger.info(`Start standard build with (${chalk(["magenta"])(String(n))}) workers`);const l=createThreadWorker({...a,maxThreads:n}),p=new Listr([],{concurrent:n,exitOnError:!0,renderer:isCI()?void 0:CustomListrRenderer}),m=[];for(const t of e){const e=Object.values(t)?.[0]?.groupName||"",a=Object.keys(t);let n=`Group ${chalk(["magenta"])(e)} $STATUS $ENTRY_KEYS${a.join(",")}`;isCI()&&(n=`Group ${chalk(["magenta"])(e)} compiling... $ENTRY_KEYS${a.join(",")}`),p.add({title:n,task:async()=>{const t=await l.startBuildWorker({projectCwd:r,entryKeys:a,groupName:e,serializedEvolveOptions:jsonSerializer.stringify(o),configLoaderOptions:s,cliOptions:i});m.push(t)}})}if(p.tasks.length)try{await p.run()}catch(r){throw l.terminate(),r}return l.terminate(),m},runRspackTask=async(r,e,t,o,s={})=>{const i=[];for(const a of e){const e=Object.values(a)?.[0]?.groupName||"",n=Object.keys(a),l=await startBuildWorker({projectCwd:r,entryKeys:n,groupName:e,serializedEvolveOptions:jsonSerializer.stringify(t),configLoaderOptions:o,cliOptions:s});i.push(l)}return i};export const startBuild=async(r,e,t={},o,s={})=>{const{analyzer:i=!1}=s,a={projectCwd:r,command:"build",resolve:requireResolve},n=await loadEvolveConfig(a,r,t,o);await envVerify(r,n);const l=filterActivedEntriesByModule(n.entryMap,e),p=normalizeEvolveEntryMap(l,n.entryMap),m=splitToEntryGroup(p,n,ignoreEntryOptionKeys,!1);if(!m.length)return logger.warn("No build entries provided!"),[];await createGlobalCompiler(!1,n);const{compiler:c}=n;printPromotions(n);let d=[];return"webpack"===c?d=await runWebpackTask(r,m,n,t,o,s):"rspack"===c&&(d=await runRspackTask(r,m,t,o,s)),i&&startAnalyzer(n),d};
|
@@ -1,6 +1,5 @@
|
|
1
|
-
import {
|
1
|
+
import type { DeepPartial } from '@hyperse/config-loader';
|
2
2
|
import { type ConfigLoaderOptions } from '../load-config/types.js';
|
3
|
-
import type { FlatCliOptions } from '../types/types-cli-options.js';
|
4
3
|
import { type FlatEvolveOptions } from '../types/types-options.js';
|
5
4
|
/**
|
6
5
|
* The main entry to start evolve serve
|
@@ -9,4 +8,4 @@ import { type FlatEvolveOptions } from '../types/types-options.js';
|
|
9
8
|
* @param overrideEvolveOptions The overrided evolve options
|
10
9
|
* @param configLoaderOptions Evolve config loader options
|
11
10
|
*/
|
12
|
-
export declare const startServe: (projectCwd: string, serveModules: string[], overrideEvolveOptions?:
|
11
|
+
export declare const startServe: (projectCwd: string, serveModules: string[], overrideEvolveOptions?: DeepPartial<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions) => Promise<never[] | import("express-serve-static-core").Express | undefined>;
|
package/dist/main/start-serve.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
import{logger,requireResolve}from"@flatjs/common";import{createGlobalCompiler}from"../compiler/create-global-compiler.js";import{filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{
|
1
|
+
import{logger,requireResolve}from"@flatjs/common";import{createGlobalCompiler}from"../compiler/create-global-compiler.js";import{filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{mergeInspectorEvolveConfig}from"../helpers/merge-inspector-evolve-config.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={projectCwd:e,command:"serve",resolve:requireResolve};let l=await loadEvolveConfig(i,e,o,t);const{inspector:n}=l;n&&n?.injectClient&&(l=mergeInspectorEvolveConfig(l));const s=filterActivedEntriesByModule(l.entryMap,r),p=Object.keys(s);if(!p.length)return logger.warn("No served entries providered!"),[];logger.info({servedEntries:p});const a=normalizeEvolveEntryMap(s,l.entryMap);return await createGlobalCompiler(!0,l),prepareServe(e,a,l)};
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import type { DeepPartial } from '@hyperse/config-loader';
|
2
2
|
import { type ConfigLoaderOptions } from '../load-config/types.js';
|
3
3
|
import { type FlatEvolveOptions } from '../types/types-options.js';
|
4
4
|
/**
|
@@ -7,4 +7,4 @@ import { type FlatEvolveOptions } from '../types/types-options.js';
|
|
7
7
|
* @param overrideEvolveOptions The overrided evolve options
|
8
8
|
* @param configLoaderOptions Evolve config loader options
|
9
9
|
*/
|
10
|
-
export declare const startStatic: (projectCwd: string, overrideEvolveOptions?:
|
10
|
+
export declare const startStatic: (projectCwd: string, overrideEvolveOptions?: DeepPartial<FlatEvolveOptions>, configLoaderOptions?: ConfigLoaderOptions) => Promise<void>;
|
@@ -0,0 +1,4 @@
|
|
1
|
+
import type { Plugin as RspackPlugin } from '@rspack/core';
|
2
|
+
import { type ProgressPluginArgument } from '@rspack/core';
|
3
|
+
import type { EntryMapItem } from '../../../types/types-entry-map.js';
|
4
|
+
export declare const createProgressRspackPlugins: (entryMapItemList: EntryMapItem[], pluginOptions?: ProgressPluginArgument) => RspackPlugin[];
|
@@ -0,0 +1 @@
|
|
1
|
+
import{Worker}from"node:worker_threads";import{resolve}from"path";import{getDirname}from"@armit/file-utility";import{mergeOptions}from"@hyperse/config-loader";import{ProgressPlugin}from"@rspack/core";import{progressHandler}from"./progress-handler.js";export const createProgressRspackPlugins=(r,e={})=>{if("test"===process.env.NODE_ENV)return console.warn("[WARNING] Using fake thread pool worker for unittest!"),[new ProgressPlugin({prefix:"[ evolve vite progress ]"})];const o=resolve(getDirname(import.meta.url),"./progress-worker.js"),s=new Worker(o,{env:{...process.env,FORCE_COLOR:"3"}}),t=mergeOptions(progressHandler(s,r),e);return[new ProgressPlugin(t),{apply(r){r.hooks.done.tap("shutdown",(()=>{s.terminate()}))}}]};
|
@@ -0,0 +1 @@
|
|
1
|
+
export const progressHandler=(s,t)=>{const e=t[0],[r,a]=e,o=a?.groupName||"",n=t.map((([s])=>s));return(t,e)=>{const r={status:t>0&&t<1?"start":"end",data:{groupName:o,entryKeys:n}};s.postMessage(r)}};
|
@@ -0,0 +1 @@
|
|
1
|
+
import logUpdate from"log-update";import{parentPort}from"worker_threads";import{chalk}from"@flatjs/common";import{buildProgressSpinnerFrames}from"../../../constants.js";import{formatSpinnerText}from"../../../helpers/format-spinner-text.js";let startIndex=0;class ProgressWorker{constructor(){this.intervalId=null}start(r,e){this.intervalId||(this.intervalId=setInterval((()=>{startIndex=++startIndex%buildProgressSpinnerFrames.length;const t=buildProgressSpinnerFrames[startIndex],n=`Group ${chalk(["magenta"])(r)} compiling...`;logUpdate(`${chalk(["cyan"])(t)} ${n} \n${formatSpinnerText(e)}`)}),100))}end(r,e){this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null);const t=`Group ${chalk(["magenta"])(r)} ${chalk(["green"])("done")}`;logUpdate(`${chalk(["green"])("✔")} ${t} \n${formatSpinnerText(e,"✔","green")}`),logUpdate.done()}}const progressWorker=new ProgressWorker;parentPort?.on("message",(({status:r,data:e})=>{const{groupName:t,entryKeys:n}=e;"start"===r?progressWorker.start(t,n):"end"===r&&progressWorker.end(t,n)}));
|
@@ -1 +1 @@
|
|
1
|
-
import{rmSync}from"node:fs";import{relative}from"node:path";import{fileWalkSync}from"@armit/file-utility";import{logger}from"@flatjs/common";import{moduleName}from"../../../constants.js";export class CleanWebpackPlugin{constructor(e={}){this.verbose=!0===e.verbose||!1,this.projectCwd=e.projectCwd||process.cwd(),this.cleanStaleWebpackAssets=!0!==e.cleanStaleWebpackAssets&&!1!==e.cleanStaleWebpackAssets||e.cleanStaleWebpackAssets,this.protectWebpackAssets=!0!==e.protectWebpackAssets&&!1!==e.protectWebpackAssets||e.protectWebpackAssets,this.cleanAfterEveryBuildPatterns=Array.isArray(e.cleanAfterEveryBuildPatterns)?e.cleanAfterEveryBuildPatterns:[],this.cleanOnceBeforeBuildPatterns=Array.isArray(e.cleanOnceBeforeBuildPatterns)?e.cleanOnceBeforeBuildPatterns:["**/*"],this.currentAssets=[],this.initialClean=!1,this.outputPath="",this.apply=this.apply.bind(this),this.handleInitial=this.handleInitial.bind(this),this.handleDone=this.handleDone.bind(this),this.removeFiles=this.removeFiles.bind(this)}apply(e){if(!e.options.output||!e.options.output.path)return void logger.warn("clean-webpack-plugin: options.output.path not defined. Plugin disabled...",moduleName);this.outputPath=e.options.output.path;const t=e.hooks;0!==this.cleanOnceBeforeBuildPatterns.length&&t.emit.tap("clean-webpack-plugin",(e=>{this.handleInitial(e)})),t.done.tap("clean-webpack-plugin",(e=>{this.handleDone(e)}))}handleInitial(e){if(this.initialClean)return;e.getStats().hasErrors()||(this.initialClean=!0,this.removeFiles(this.cleanOnceBeforeBuildPatterns))}handleDone(e){if(e.hasErrors())return void(this.verbose&&logger.warn("clean-webpack-plugin: pausing due to webpack errors",moduleName));const t=(e.toJson({assets:!0}).assets||[]).map((e=>e.name)),s=this.currentAssets.filter((e=>!1===t.includes(e)));this.currentAssets=t.sort();const i=[];!0===this.cleanStaleWebpackAssets&&0!==s.length&&i.push(...s),0!==this.cleanAfterEveryBuildPatterns.length&&i.push(...this.cleanAfterEveryBuildPatterns),0!==i.length&&this.removeFiles(i)}removeFiles(e){try{const t=fileWalkSync(e,{absolute:!0,unique:!0,cwd:this.outputPath,dot:!0,ignore:this.protectWebpackAssets?this.currentAssets:[]});for(const e of t)rmSync(e,{force:!0,recursive:!0});this.verbose&&t.forEach((e=>{const t=relative(this.projectCwd,e);logger.debug(`clean-webpack-plugin: removed ${t}`,moduleName)}))}catch(e){if(/Cannot delete files\/folders outside the current working directory\./.test(e.message)){throw new Error("clean-webpack-plugin: Cannot delete files/folders outside the current working directory. Can be overridden with the `dangerouslyAllowCleanPatternsOutsideProject` option.")}throw e}}}
|
1
|
+
import{rmSync}from"node:fs";import{relative}from"node:path";import{fileWalkSync}from"@armit/file-utility";import{logger}from"@flatjs/common";import{moduleName}from"../../../constants.js";export class CleanWebpackPlugin{constructor(e={}){this.verbose=!0===e.verbose||!1,this.projectCwd=e.projectCwd||process.cwd(),this.cleanStaleWebpackAssets=!0!==e.cleanStaleWebpackAssets&&!1!==e.cleanStaleWebpackAssets||e.cleanStaleWebpackAssets,this.protectWebpackAssets=!0!==e.protectWebpackAssets&&!1!==e.protectWebpackAssets||e.protectWebpackAssets,this.cleanAfterEveryBuildPatterns=Array.isArray(e.cleanAfterEveryBuildPatterns)?e.cleanAfterEveryBuildPatterns:[],this.cleanOnceBeforeBuildPatterns=Array.isArray(e.cleanOnceBeforeBuildPatterns)?e.cleanOnceBeforeBuildPatterns:["**/*"],this.currentAssets=[],this.initialClean=!1,this.outputPath="",this.apply=this.apply.bind(this),this.handleInitial=this.handleInitial.bind(this),this.handleDone=this.handleDone.bind(this),this.removeFiles=this.removeFiles.bind(this)}apply(e){if(!e.options.output||!e.options.output.path)return void logger.warn("clean-webpack-plugin: options.output.path not defined. Plugin disabled...",moduleName);this.outputPath=e.options.output.path;const t=e.hooks;0!==this.cleanOnceBeforeBuildPatterns.length&&t.emit.tap("clean-webpack-plugin",(e=>{this.handleInitial(e)})),t.done.tap("clean-webpack-plugin",(e=>{logger.info("start clean cache..."),this.handleDone(e)}))}handleInitial(e){if(this.initialClean)return;e.getStats().hasErrors()||(this.initialClean=!0,this.removeFiles(this.cleanOnceBeforeBuildPatterns))}handleDone(e){if(e.hasErrors())return void(this.verbose&&logger.warn("clean-webpack-plugin: pausing due to webpack errors",moduleName));const t=(e.toJson({assets:!0}).assets||[]).map((e=>e.name)),s=this.currentAssets.filter((e=>!1===t.includes(e)));this.currentAssets=t.sort();const i=[];!0===this.cleanStaleWebpackAssets&&0!==s.length&&i.push(...s),0!==this.cleanAfterEveryBuildPatterns.length&&i.push(...this.cleanAfterEveryBuildPatterns),0!==i.length&&this.removeFiles(i)}removeFiles(e){try{const t=fileWalkSync(e,{absolute:!0,unique:!0,cwd:this.outputPath,dot:!0,ignore:this.protectWebpackAssets?this.currentAssets:[]});for(const e of t)rmSync(e,{force:!0,recursive:!0});this.verbose&&t.forEach((e=>{const t=relative(this.projectCwd,e);logger.debug(`clean-webpack-plugin: removed ${t}`,moduleName)}))}catch(e){if(/Cannot delete files\/folders outside the current working directory\./.test(e.message)){throw new Error("clean-webpack-plugin: Cannot delete files/folders outside the current working directory. Can be overridden with the `dangerouslyAllowCleanPatternsOutsideProject` option.")}throw e}}}
|
@@ -1 +1 @@
|
|
1
|
-
import{assertSwcImportOptions}from"@flatjs/babel-plugin-import/helpers";import{shouldEnableReactFastRefresh}from"../../helpers/should-enable-react-fast-refresh.js";export const rspackRuleScripts=(e,t
|
1
|
+
import{assertSwcImportOptions}from"@flatjs/babel-plugin-import/helpers";import{requireResolve}from"@flatjs/common";import{shouldEnableReactFastRefresh}from"../../helpers/should-enable-react-fast-refresh.js";export const rspackRuleScripts=(e,r,t)=>{const{loaderOptions:s,projectCwd:o,inspector:a}=t,{modularImports:p=[]}=s,l=assertSwcImportOptions(o,p),m=shouldEnableReactFastRefresh(e,r,t),c=[];return c.push([requireResolve(import.meta.url,"@flatjs/swc-plugin-import"),{modularImports:l}]),e&&a&&c.push(["@hyperse/inspector-swc-plugin",{projectCwd:o}]),{test:/\.(jsx|tsx|ts|js|mjs|cjs|mts|cts)$/,exclude:/node_modules/,use:[{loader:"builtin:swc-loader",options:{jsc:{parser:{decorators:!0,syntax:"typescript",tsx:!0},externalHelpers:!0,experimental:{keepImportAttributes:!0,plugins:[...c]},transform:{legacyDecorator:!0,react:{runtime:"automatic",pragma:"React.createElement",pragmaFrag:"React.Fragment",throwIfNamespace:!0,development:m,refresh:m}}},env:{mode:"entry",targets:{browsers:["ie >= 11","safari > 10"]}}}}]}};
|
@@ -1 +1 @@
|
|
1
|
-
import{requireResolve}from"@flatjs/common";import{mergeBabelOption}from"../../helpers/merge-babel-options.js";import{shouldEnableReactFastRefresh}from"../../helpers/should-enable-react-fast-refresh.js";export const ruleBabel=e=>({test:/\.(tsx|ts|js|jsx|mjs|cjs|mts|cts)$/,use:[{loader:requireResolve(import.meta.url,"babel-loader"),options:e}]});export const webpackRuleScripts=(e,r,s)=>{const{projectCwd:t}=s,{babelOptions:o={},modularImports:
|
1
|
+
import{requireResolve}from"@flatjs/common";import{mergeBabelOption}from"../../helpers/merge-babel-options.js";import{shouldEnableReactFastRefresh}from"../../helpers/should-enable-react-fast-refresh.js";export const ruleBabel=e=>({test:/\.(tsx|ts|js|jsx|mjs|cjs|mts|cts)$/,use:[{loader:requireResolve(import.meta.url,"babel-loader"),options:e}]});export const webpackRuleScripts=(e,r,s)=>{const{projectCwd:t,inspector:l}=s,{babelOptions:o={},modularImports:p=[]}=s.loaderOptions,a=mergeBabelOption(e,p,o,t);return shouldEnableReactFastRefresh(e,r,s)&&(a.plugins?a.plugins.push(requireResolve(import.meta.url,"react-refresh/babel")):a.plugins=[requireResolve(import.meta.url,"react-refresh/babel")]),e&&l&&(a.plugins?a.plugins.push([requireResolve(import.meta.url,"@hyperse/inspector-babel-plugin"),{projectCwd:t}]):a.plugins=[[requireResolve(import.meta.url,"@hyperse/inspector-babel-plugin"),{projectCwd:t}]]),ruleBabel(a)};
|
@@ -81,7 +81,7 @@ export interface EvolveEntryItemOption extends MultiHtmlCDNEntryItem {
|
|
81
81
|
output?: Omit<Required<Configuration>['output'], 'chunkFilename' | 'cssChunkFilename'>;
|
82
82
|
}
|
83
83
|
export type EvolveEntryMapContent = {
|
84
|
-
entry:
|
84
|
+
entry: string[];
|
85
85
|
options?: EvolveEntryItemOption;
|
86
86
|
/**
|
87
87
|
* An alias used when grouping builds
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { type VerifyPackagePattern } from '@armit/package';
|
2
|
+
import type { TrustedEditor } from '@hyperse/inspector-common';
|
2
3
|
import { type FlatEvolveCI } from './types-ci.js';
|
3
4
|
import { type FlatEvolveDevServerOptions } from './types-dev-server.js';
|
4
5
|
import { type EvolveEntryMap } from './types-entry-map.js';
|
@@ -134,9 +135,44 @@ export interface FlatEvolveOptions {
|
|
134
135
|
* @default 10
|
135
136
|
*/
|
136
137
|
maxEntryGroupSize?: number;
|
138
|
+
/**
|
139
|
+
* The kernel types used for building currently offer webpack and rspack
|
140
|
+
* @default 'webpack'
|
141
|
+
*/
|
142
|
+
compiler?: 'webpack' | 'rspack';
|
137
143
|
/**
|
138
144
|
* Whether to open the rs-evolve doctor plugin.
|
139
145
|
* @default false
|
140
146
|
*/
|
141
147
|
openRsdoctor?: boolean;
|
148
|
+
/**
|
149
|
+
* The options of code inspector.
|
150
|
+
*
|
151
|
+
* If `serveMode` is `false`, it will be ignored. and close code inspector.
|
152
|
+
*
|
153
|
+
*/
|
154
|
+
inspector?: false | {
|
155
|
+
/**
|
156
|
+
* Inspector Component toggle hotkeys,
|
157
|
+
*
|
158
|
+
* @default - `['$mod', 'i']` on macOS, `['Ctrl', 'i']` on other platforms.
|
159
|
+
*
|
160
|
+
*/
|
161
|
+
keys?: string[];
|
162
|
+
/**
|
163
|
+
* Whether to automatically inject the code inspector client entry.
|
164
|
+
* @default true
|
165
|
+
*/
|
166
|
+
injectClient?: boolean;
|
167
|
+
/**
|
168
|
+
* The base path of the launch editor endpoint.
|
169
|
+
* @default '/__hps_inspector'
|
170
|
+
*/
|
171
|
+
customLaunchEditorEndpoint?: string;
|
172
|
+
/**
|
173
|
+
* The trusted editors that can be launched from browser.
|
174
|
+
* @default 'code'
|
175
|
+
*/
|
176
|
+
trustedEditor?: `${TrustedEditor}`;
|
177
|
+
};
|
142
178
|
}
|
@@ -6,7 +6,7 @@ export type WebpackPlugin = ((this: Compiler, compiler: Compiler) => void) | Web
|
|
6
6
|
* The webpack entry configuration.
|
7
7
|
*/
|
8
8
|
export interface WebpackEntryObject {
|
9
|
-
[index: string]: string
|
9
|
+
[index: string]: string[];
|
10
10
|
}
|
11
11
|
export interface FlatEvolveWebpackOptions extends Pick<Configuration, 'infrastructureLogging'> {
|
12
12
|
/**
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@flatjs/evolve",
|
3
|
-
"version": "2.3.2-next.
|
3
|
+
"version": "2.3.2-next.4",
|
4
4
|
"license": "MIT",
|
5
5
|
"type": "module",
|
6
6
|
"exports": {
|
@@ -18,8 +18,9 @@
|
|
18
18
|
"./templates"
|
19
19
|
],
|
20
20
|
"scripts": {
|
21
|
-
"serve": "yarn node --import=@hyperse/ts-node
|
22
|
-
"
|
21
|
+
"serve:react19": "yarn node --import=@hyperse/ts-node/register ./tests/dev-server-react19/dev-server.ts",
|
22
|
+
"serve": "yarn node --import=@hyperse/ts-node/register ./tests/dev-server/dev-server.ts",
|
23
|
+
"analyzer": "yarn node --import=@hyperse/ts-node/register ./tests/build-analyzer/start-analyzer.ts",
|
23
24
|
"build": "rimraf dist && tsc -p ./tsconfig.build.json && npm run minify",
|
24
25
|
"?build-release": "When https://github.com/atlassian/changesets/issues/432 has a solution we can remove this trick",
|
25
26
|
"build-release": "yarn build && rimraf ./_release && yarn pack && mkdir ./_release && tar zxvf ./package.tgz --directory ./_release && rm ./package.tgz",
|
@@ -42,24 +43,30 @@
|
|
42
43
|
},
|
43
44
|
"dependencies": {
|
44
45
|
"@armit/babel-merge": "^0.2.11",
|
45
|
-
"@armit/config-loader": "^0.3.5",
|
46
46
|
"@armit/file-utility": "^0.2.11",
|
47
47
|
"@armit/git": "^0.2.11",
|
48
48
|
"@armit/package": "^0.2.15",
|
49
49
|
"@babel/core": "^7.26.10",
|
50
50
|
"@clack/prompts": "^0.10.1",
|
51
51
|
"@discoveryjs/json-ext": "0.6.3",
|
52
|
-
"@flatjs/babel-plugin-import": "2.2.9-next.
|
53
|
-
"@flatjs/common": "2.2.4-next.
|
54
|
-
"@flatjs/evolve-preset-babel": "2.2.4-next.
|
55
|
-
"@flatjs/forge-postcss-plugin-pixel": "2.2.4-next.
|
56
|
-
"@flatjs/forge-ts-checker": "1.1.2-next.
|
57
|
-
"@flatjs/graph": "2.2.9-next.
|
58
|
-
"@flatjs/mock": "2.4.1-next.
|
52
|
+
"@flatjs/babel-plugin-import": "2.2.9-next.3",
|
53
|
+
"@flatjs/common": "2.2.4-next.1",
|
54
|
+
"@flatjs/evolve-preset-babel": "2.2.4-next.1",
|
55
|
+
"@flatjs/forge-postcss-plugin-pixel": "2.2.4-next.1",
|
56
|
+
"@flatjs/forge-ts-checker": "1.1.2-next.1",
|
57
|
+
"@flatjs/graph": "2.2.9-next.3",
|
58
|
+
"@flatjs/mock": "2.4.1-next.3",
|
59
|
+
"@flatjs/swc-plugin-import": "1.0.0-next.4",
|
60
|
+
"@hyperse/config-loader": "^1.0.5",
|
61
|
+
"@hyperse/inspector": "^1.1.6",
|
62
|
+
"@hyperse/inspector-babel-plugin": "^1.1.5",
|
63
|
+
"@hyperse/inspector-common": "^1.1.3",
|
64
|
+
"@hyperse/inspector-middleware": "^1.1.5",
|
65
|
+
"@hyperse/inspector-swc-plugin": "^1.1.7",
|
59
66
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.16",
|
60
67
|
"@rsdoctor/rspack-plugin": "^1.1.2",
|
61
|
-
"@rspack/core": "^1.3.
|
62
|
-
"@rspack/dev-server": "^1.1.
|
68
|
+
"@rspack/core": "^1.3.13",
|
69
|
+
"@rspack/dev-server": "^1.1.2",
|
63
70
|
"@rspack/plugin-react-refresh": "^1.4.3",
|
64
71
|
"@swc/helpers": "^0.5.17",
|
65
72
|
"@types/babel__core": "^7.20.5",
|
@@ -87,6 +94,7 @@
|
|
87
94
|
"svgo": "^3.3.2",
|
88
95
|
"tarjan-graph": "^3.0.0",
|
89
96
|
"terser-webpack-plugin": "^5.3.14",
|
97
|
+
"tinypool": "^1.0.2",
|
90
98
|
"tsconfig-paths-webpack-plugin": "^4.2.0",
|
91
99
|
"type-fest": "^4.40.0",
|
92
100
|
"typescript": "^5.8.3",
|
@@ -100,7 +108,7 @@
|
|
100
108
|
"@dimjs/model": "2.1.1",
|
101
109
|
"@dimjs/model-react": "2.1.1",
|
102
110
|
"@dimjs/utils": "2.1.2",
|
103
|
-
"@flatjs/testing": "2.2.4-next.
|
111
|
+
"@flatjs/testing": "2.2.4-next.1",
|
104
112
|
"@hyperse/eslint-config-hyperse": "^1.4.1",
|
105
113
|
"@swc/core": "1.11.21",
|
106
114
|
"@types/express": "5.0.1",
|
@@ -115,7 +123,7 @@
|
|
115
123
|
"react": "19.1.0",
|
116
124
|
"rimraf": "6.0.1",
|
117
125
|
"vite-tsconfig-paths": "5.1.4",
|
118
|
-
"vitest": "3.
|
126
|
+
"vitest": "3.2.2",
|
119
127
|
"vue-loader": "17.4.2"
|
120
128
|
},
|
121
129
|
"peerDependencies": {
|