@flatjs/evolve 2.1.0-next.12 → 2.1.0-next.13
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/compiler/create-global-compiler.d.ts +2 -0
- package/dist/compiler/create-global-compiler.js +1 -0
- package/dist/constants.js +1 -36
- package/dist/create-webpack/create-externals.js +1 -6
- package/dist/create-webpack/create-optimization.js +1 -43
- package/dist/create-webpack/create-output.js +1 -35
- package/dist/create-webpack/create-performance.js +1 -7
- package/dist/create-webpack/create-plugins.js +1 -78
- package/dist/create-webpack/create-resolve.js +1 -37
- package/dist/create-webpack/create-rule-sets.js +1 -20
- package/dist/create-webpack/load-watch-options.d.ts +12 -0
- package/dist/create-webpack/load-watch-options.js +1 -0
- package/dist/create-webpack/load-webpack-config.js +1 -57
- package/dist/create-webpack/resolve-public-path.js +1 -15
- package/dist/create-webpack/rule-sets/constants.js +1 -3
- package/dist/create-webpack/rule-sets/rule-assets.js +1 -52
- package/dist/create-webpack/rule-sets/rule-css.js +1 -111
- package/dist/create-webpack/rule-sets/rule-less.js +1 -44
- package/dist/create-webpack/rule-sets/rule-scripts.d.ts +2 -0
- package/dist/create-webpack/rule-sets/rule-scripts.js +1 -34
- package/dist/create-webpack/rule-sets/rule-svg-icon.js +1 -25
- package/dist/create-webpack/rule-sets/rule-utils.js +1 -10
- package/dist/create-webpack/types.d.ts +1 -1
- package/dist/create-webpack/types.js +1 -1
- package/dist/default-options.js +1 -83
- package/dist/define-config/define-config.d.ts +2 -2
- package/dist/define-config/define-config.js +1 -4
- package/dist/define-config/index.js +1 -1
- package/dist/dev-server/add-compiler-to-dev-server.js +1 -58
- package/dist/dev-server/create-app-page-route.js +1 -13
- package/dist/dev-server/create-dev-server-compiler-task.js +1 -55
- package/dist/dev-server/create-dev-server-entries.js +1 -25
- package/dist/dev-server/create-dev-server.js +1 -24
- package/dist/dev-server/index.d.ts +3 -3
- package/dist/dev-server/index.js +1 -6
- package/dist/dev-server/middlewares/create-page-middleware.js +1 -33
- package/dist/dev-server/middlewares/create-public-assets-middleware.js +1 -25
- package/dist/dev-server/middlewares/get-all-sorted-modules.js +1 -24
- package/dist/dev-server/middlewares/get-bundle-asset.js +1 -7
- package/dist/dev-server/middlewares/get-dev-server-host-uri.js +1 -5
- package/dist/dev-server/middlewares/get-hmr-runtime-chunks.js +1 -14
- package/dist/dev-server/middlewares/get-normalized-entry-name.js +1 -14
- package/dist/dev-server/middlewares/get-page-main-html.js +1 -49
- package/dist/dev-server/middlewares/get-page-module-html.js +1 -123
- package/dist/dev-server/middlewares/get-project-virtual-path.js +1 -3
- package/dist/dev-server/middlewares/get-runtime-manifest.js +1 -25
- package/dist/dev-server/middlewares/index.js +1 -2
- package/dist/dev-server/middlewares/types.js +1 -1
- package/dist/errors/evolve-build-error.js +1 -10
- package/dist/helpers/allow-px2rem-for-module.js +1 -6
- package/dist/helpers/assert-group-entry-item.js +1 -19
- package/dist/helpers/assert-single-compiler.js +1 -45
- package/dist/helpers/chunk-entry-map.js +1 -21
- package/dist/helpers/delete-object-keys.js +1 -20
- package/dist/helpers/enable-bundle-hashname-for-module.js +1 -6
- package/dist/helpers/filter-actived-entries.js +1 -42
- package/dist/helpers/flat-entry-map.js +1 -11
- package/dist/helpers/get-bundle-file-name.js +1 -23
- package/dist/helpers/get-git-root.js +1 -4
- package/dist/helpers/get-html-plugin-config.js +1 -47
- package/dist/helpers/get-max-process-tasks.js +1 -7
- package/dist/helpers/get-pacakge-dir.js +1 -13
- package/dist/helpers/get-runtime-cdn-base.d.ts +1 -1
- package/dist/helpers/get-runtime-cdn-base.js +1 -21
- package/dist/helpers/index.d.ts +11 -11
- package/dist/helpers/index.js +1 -27
- package/dist/helpers/is-deep-equal.js +1 -67
- package/dist/helpers/json-serializer.js +1 -52
- package/dist/helpers/merge-babel-options.js +1 -45
- package/dist/helpers/normalize-check-entry-options.js +1 -28
- package/dist/helpers/normalize-entry-map.js +1 -59
- package/dist/helpers/normalize-group-name.js +1 -16
- package/dist/helpers/normalize-page-proxy.js +1 -9
- package/dist/helpers/normalize-resolve-alias.js +1 -7
- package/dist/helpers/normalize-template-inject-tokens.js +1 -22
- package/dist/helpers/open-page.js +1 -15
- package/dist/helpers/print-log.js +1 -49
- package/dist/helpers/refresh-evolve-mock-options.js +1 -34
- package/dist/helpers/resolve-entry-map-input-files.js +1 -20
- package/dist/helpers/script-injects.d.ts +1 -1
- package/dist/helpers/script-injects.js +1 -39
- package/dist/helpers/should-enable-react-fast-refresh.js +1 -14
- package/dist/helpers/split-to-entry-group.d.ts +1 -1
- package/dist/helpers/split-to-entry-group.js +1 -139
- package/dist/helpers/verify-group-entry-options.js +1 -21
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -5
- package/dist/load-config/index.js +1 -1
- package/dist/load-config/load-evolve-config.js +1 -41
- package/dist/load-config/types.js +1 -1
- package/dist/loaders/loader-icon.cjs +2 -1
- package/dist/main/create-thread-worker.js +1 -51
- package/dist/main/env-verify.js +1 -21
- package/dist/main/get-worker-path.js +1 -5
- package/dist/main/index.d.ts +1 -1
- package/dist/main/index.js +1 -4
- package/dist/main/prepare-build.js +1 -39
- package/dist/main/prepare-serve.js +1 -69
- package/dist/main/prepare-static.js +1 -30
- package/dist/main/start-build-dynamic.js +1 -171
- package/dist/main/start-build-worker.js +1 -44
- package/dist/main/start-build.js +1 -69
- package/dist/main/start-group-entry-build.d.ts +1 -1
- package/dist/main/start-group-entry-build.js +1 -32
- package/dist/main/start-serve.js +1 -34
- package/dist/main/start-static.js +1 -19
- package/dist/minimizer/create-minimizers.js +1 -25
- package/dist/minimizer/default-options.js +1 -14
- package/dist/minimizer/image-minimizer.js +1 -65
- package/dist/minimizer/index.js +1 -1
- package/dist/minimizer/terser-minimizer.js +3 -15
- package/dist/minimizer/types.js +1 -1
- package/dist/plugins/circular-dependency/circular-dependency-plugin.js +1 -119
- package/dist/plugins/circular-dependency/index.js +1 -15
- package/dist/plugins/clean-webpack/clean-webpack-plugin.js +1 -173
- package/dist/plugins/clean-webpack/index.js +1 -22
- package/dist/plugins/define-variable/define-variable-plugin.js +1 -28
- package/dist/plugins/define-variable/index.js +1 -1
- package/dist/plugins/html-inject-scripts/plugin-html-inject-script.js +1 -27
- package/dist/plugins/module-federation/external-template-remotes.js +1 -92
- package/dist/plugins/module-federation/index.js +1 -1
- package/dist/plugins/module-federation/module-federation.js +1 -100
- package/dist/plugins/multi-html/index.js +1 -16
- package/dist/plugins/multi-html/multi-html-cdn-plugin.js +1 -83
- package/dist/plugins/multi-html/multi-html-plugin.js +1 -65
- package/dist/plugins/ts-checker/ts-checker-guard-plugin.d.ts +13 -0
- package/dist/plugins/ts-checker/ts-checker-guard-plugin.js +1 -0
- package/dist/plugins/ts-checker/ts-checker-plugin.d.ts +1 -2
- package/dist/plugins/ts-checker/ts-checker-plugin.js +1 -24
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.js +1 -8
- package/dist/types/types-ci.js +1 -1
- package/dist/types/types-dev-server.d.ts +5 -6
- package/dist/types/types-dev-server.js +1 -1
- package/dist/types/types-entry-map.js +1 -1
- package/dist/types/types-federation.js +1 -1
- package/dist/types/types-global-compiler-options.d.ts +7 -0
- package/dist/types/types-global-compiler-options.js +1 -0
- package/dist/types/types-loader-options.d.ts +2 -7
- package/dist/types/types-loader-options.js +1 -1
- package/dist/types/types-modular-import.js +1 -1
- package/dist/types/types-multi-html.js +1 -1
- package/dist/types/types-options.d.ts +6 -1
- package/dist/types/types-options.js +1 -1
- package/dist/types/types-plugin-options.js +1 -1
- package/dist/types/types-threads-options.js +1 -1
- package/dist/types/types-webpack.d.ts +1 -1
- package/dist/types/types-webpack.js +1 -1
- package/package.json +30 -32
- package/dist/plugins/ts-checker/index.d.ts +0 -1
- package/dist/plugins/ts-checker/index.js +0 -1
|
@@ -1,139 +1 @@
|
|
|
1
|
-
import _ from
|
|
2
|
-
import { ignoreEntryOptionKeys, maxEntryGroupSize } from '../constants.js';
|
|
3
|
-
import { isDeepEqual } from './is-deep-equal.js';
|
|
4
|
-
import { normalizeCheckEntryOptions } from './normalize-check-entry-options.js';
|
|
5
|
-
import { normalizeGroupName } from './normalize-group-name.js';
|
|
6
|
-
/**
|
|
7
|
-
* Groups the manual entries based on their group names.
|
|
8
|
-
* @param manualEntries - The map of manual entries.
|
|
9
|
-
* @returns An array of grouped manual entries.
|
|
10
|
-
*/
|
|
11
|
-
export const manualGrouping = (manualEntries) => {
|
|
12
|
-
const manualGroupEntryMap = _.groupBy(manualEntries, (entry) => {
|
|
13
|
-
return entry['groupName'];
|
|
14
|
-
});
|
|
15
|
-
const evolveEntryMapList = [];
|
|
16
|
-
for (const [, groupItem] of Object.entries(manualGroupEntryMap)) {
|
|
17
|
-
const evolveEntryMapItem = groupItem.reduce((prev, curr) => {
|
|
18
|
-
prev[curr.entryName] = _.omitBy(curr, 'entryName');
|
|
19
|
-
return prev;
|
|
20
|
-
}, {});
|
|
21
|
-
evolveEntryMapList.push(evolveEntryMapItem);
|
|
22
|
-
}
|
|
23
|
-
return evolveEntryMapList;
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Reduces an array of autoEntries into groups based on their options.
|
|
27
|
-
* Each group is represented by a groupKey and contains an EvolveEntryMap.
|
|
28
|
-
*
|
|
29
|
-
* @param evolveOptions - The FlatEvolveOptions object.
|
|
30
|
-
* @param autoEntries - An array of EvolveEntryMapContent objects with an additional entryName property.
|
|
31
|
-
* @param ignoreOptionKeys - An array of keys to ignore when comparing entry options.
|
|
32
|
-
* @param serveMode - A boolean indicating whether the function is running in serve mode.
|
|
33
|
-
* @returns An object where each key represents a groupKey and its value is an EvolveEntryMap.
|
|
34
|
-
*/
|
|
35
|
-
export const autoGroupingReduce = (autoEntries, ignoreOptionKeys = [], serveMode) => {
|
|
36
|
-
return _.reduce(autoEntries, (prev, curr, index) => {
|
|
37
|
-
let lastGroupingKey = `auto_grouping_reduce-${index}`;
|
|
38
|
-
const currEntryOptions = normalizeCheckEntryOptions(serveMode, curr.options, ignoreOptionKeys);
|
|
39
|
-
for (const [groupingKey, groupEntryMap] of Object.entries(prev)) {
|
|
40
|
-
const firsEntryMap = Object.values(groupEntryMap)[0];
|
|
41
|
-
const firstEntryOptions = normalizeCheckEntryOptions(serveMode, firsEntryMap.options, ignoreOptionKeys);
|
|
42
|
-
if (isDeepEqual(currEntryOptions, firstEntryOptions)) {
|
|
43
|
-
lastGroupingKey = groupingKey;
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
prev[lastGroupingKey] = _.merge(prev[lastGroupingKey], {
|
|
48
|
-
[curr.entryName]: _.omitBy(curr, 'entryName'),
|
|
49
|
-
});
|
|
50
|
-
return prev;
|
|
51
|
-
}, {});
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* Assigns a group name to each entry in the evolveEntryMapList based on the projectVirtualPath.
|
|
55
|
-
*
|
|
56
|
-
* @param evolveOptions - The options for the evolve process.
|
|
57
|
-
* @param evolveEntryMapList - The list of evolve entry maps.
|
|
58
|
-
* @returns The updated list of evolve entry maps with group names assigned.
|
|
59
|
-
*/
|
|
60
|
-
export const autoAssignGroupName = (evolveOptions, evolveEntryMapList) => {
|
|
61
|
-
const { projectVirtualPath } = evolveOptions;
|
|
62
|
-
const evolveEntryMapItemList = [];
|
|
63
|
-
let index = 0;
|
|
64
|
-
for (const evolveEntryMap of evolveEntryMapList) {
|
|
65
|
-
const evolveEntryMapItem = {};
|
|
66
|
-
const groupName = normalizeGroupName(projectVirtualPath, index++);
|
|
67
|
-
for (const [entryName, entryContent] of Object.entries(evolveEntryMap)) {
|
|
68
|
-
entryContent.groupName = groupName;
|
|
69
|
-
evolveEntryMapItem[entryName] = entryContent;
|
|
70
|
-
}
|
|
71
|
-
evolveEntryMapItemList.push(evolveEntryMapItem);
|
|
72
|
-
}
|
|
73
|
-
return evolveEntryMapItemList;
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Groups the given autoEntries into multiple EvolveEntryMap based on their options.
|
|
77
|
-
* If the group size exceeds the maximum group size, it will be sliced into smaller groups.
|
|
78
|
-
*
|
|
79
|
-
* @param evolveOptions - The FlatEvolveOptions object.
|
|
80
|
-
* @param autoEntries - An array of EvolveEntryMapContent objects with an additional entryName property.
|
|
81
|
-
* @param ignoreOptionKeys - An array of keys to ignore in the EvolveEntryItemOption object.
|
|
82
|
-
* @param maxGroupSize - The maximum size of each group. Defaults to maxEntryGroupSize.
|
|
83
|
-
* @param serveMode - A boolean indicating whether the serve mode is enabled.
|
|
84
|
-
* @returns An array of EvolveEntryMap representing the grouped entries.
|
|
85
|
-
*/
|
|
86
|
-
export const autoGrouping = (evolveOptions, autoEntries, ignoreOptionKeys = [], maxGroupSize = maxEntryGroupSize, serveMode) => {
|
|
87
|
-
const autoGroupingReduceMap = autoGroupingReduce(autoEntries, ignoreOptionKeys, serveMode);
|
|
88
|
-
const autoGroupEntryMapList = [];
|
|
89
|
-
// slice each group
|
|
90
|
-
for (const [, groupItem] of Object.entries(autoGroupingReduceMap)) {
|
|
91
|
-
const groupKeys = Object.keys(groupItem);
|
|
92
|
-
if (groupKeys.length > maxGroupSize) {
|
|
93
|
-
for (let i = 0; i < groupKeys.length; i += maxGroupSize) {
|
|
94
|
-
const sliceGroupKeys = groupKeys.slice(i, i + maxGroupSize);
|
|
95
|
-
const sliceEvolveEntryMap = sliceGroupKeys.reduce((prev, curr) => {
|
|
96
|
-
prev[curr] = groupItem[curr];
|
|
97
|
-
return prev;
|
|
98
|
-
}, {});
|
|
99
|
-
autoGroupEntryMapList.push(sliceEvolveEntryMap);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
else {
|
|
103
|
-
autoGroupEntryMapList.push(groupItem);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return autoAssignGroupName(evolveOptions, autoGroupEntryMapList);
|
|
107
|
-
};
|
|
108
|
-
/**
|
|
109
|
-
* Splits the served entries into groups based on the given options.
|
|
110
|
-
*
|
|
111
|
-
* @param evolveEntries - The map of served entries.
|
|
112
|
-
* @param ignoreOptionKeys - The list of option keys to ignore.
|
|
113
|
-
* @returns An array of evolve entry maps representing the groups.
|
|
114
|
-
*/
|
|
115
|
-
export const splitToEntryGroup = (evolveEntries, evolveOptions, ignoreOptionKeys = ignoreEntryOptionKeys, serveMode) => {
|
|
116
|
-
const { isolation = false } = evolveOptions;
|
|
117
|
-
if (isolation) {
|
|
118
|
-
const evolveEntryMapList = [];
|
|
119
|
-
for (const [entryName, entryContent] of Object.entries(evolveEntries)) {
|
|
120
|
-
entryContent.groupName = entryName;
|
|
121
|
-
evolveEntryMapList.push({
|
|
122
|
-
[entryName]: entryContent,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
return evolveEntryMapList;
|
|
126
|
-
}
|
|
127
|
-
const evolveEntryFlatList = _.flatMap(evolveEntries, (entryOption, entryName) => {
|
|
128
|
-
return {
|
|
129
|
-
...entryOption,
|
|
130
|
-
entryName,
|
|
131
|
-
};
|
|
132
|
-
});
|
|
133
|
-
const evolveEntryGroupMap = _.groupBy(evolveEntryFlatList, (entry) => {
|
|
134
|
-
return entry.groupingSource;
|
|
135
|
-
});
|
|
136
|
-
const manualEvolveEntryMapList = manualGrouping(evolveEntryGroupMap['manual']);
|
|
137
|
-
const autoEvolveEntryMapList = autoGrouping(evolveOptions, evolveEntryGroupMap['auto'], ignoreOptionKeys, maxEntryGroupSize, serveMode);
|
|
138
|
-
return [...manualEvolveEntryMapList, ...autoEvolveEntryMapList];
|
|
139
|
-
};
|
|
1
|
+
import _ from"lodash";import{ignoreEntryOptionKeys,maxEntryGroupSize}from"../constants.js";import{isDeepEqual}from"./is-deep-equal.js";import{normalizeCheckEntryOptions}from"./normalize-check-entry-options.js";import{normalizeGroupName}from"./normalize-group-name.js";export const manualGrouping=o=>{const e=_.groupBy(o,(o=>o.groupName)),t=[];for(const[,o]of Object.entries(e)){const e=o.reduce(((o,e)=>(o[e.entryName]=_.omitBy(e,"entryName"),o)),{});t.push(e)}return t};export const autoGroupingReduce=(o,e=[],t)=>_.reduce(o,((o,r,n)=>{let s=`auto_grouping_reduce-${n}`;const u=normalizeCheckEntryOptions(t,r.options,e);for(const[r,n]of Object.entries(o)){const o=Object.values(n)[0],i=normalizeCheckEntryOptions(t,o.options,e);if(isDeepEqual(u,i)){s=r;break}}return o[s]=_.merge(o[s],{[r.entryName]:_.omitBy(r,"entryName")}),o}),{});export const autoAssignGroupName=(o,e)=>{const{projectVirtualPath:t}=o,r=[];let n=0;for(const o of e){const e={},s=normalizeGroupName(t,n++);for(const[t,r]of Object.entries(o))r.groupName=s,e[t]=r;r.push(e)}return r};export const autoGrouping=(o,e,t=[],r=maxEntryGroupSize,n)=>{const s=autoGroupingReduce(e,t,n),u=[];for(const[,o]of Object.entries(s)){const e=Object.keys(o);if(e.length>r)for(let t=0;t<e.length;t+=r){const n=e.slice(t,t+r).reduce(((e,t)=>(e[t]=o[t],e)),{});u.push(n)}else u.push(o)}return autoAssignGroupName(o,u)};export const splitToEntryGroup=(o,e,t=ignoreEntryOptionKeys,r)=>{const{isolation:n=!1}=e;if(n){const e=[];for(const[t,r]of Object.entries(o))r.groupName=t,e.push({[t]:r});return e}const s=_.flatMap(o,((o,e)=>({...o,entryName:e}))),u=_.groupBy(s,(o=>o.groupingSource));return[...manualGrouping(u.manual),...autoGrouping(e,u.auto,t,maxEntryGroupSize,r)]};
|
|
@@ -1,21 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { isDeepEqual } from './is-deep-equal.js';
|
|
3
|
-
import { normalizeCheckEntryOptions } from './normalize-check-entry-options.js';
|
|
4
|
-
/**
|
|
5
|
-
* Verifies if the options of all entries in a group are equal, excluding specified keys.
|
|
6
|
-
*
|
|
7
|
-
* @param groupEvolveEntryMap - The map of group entries.
|
|
8
|
-
* @param ignoreOptionKeys - The keys to be ignored when comparing options.
|
|
9
|
-
* @returns A boolean indicating if the options of all entries are equal.
|
|
10
|
-
*/
|
|
11
|
-
export const verifyGroupEntryOptions = (groupEvolveEntryMap, ignoreOptionKeys = ignoreEntryOptionKeys, serveMode) => {
|
|
12
|
-
const groupEvolveEntryMapValues = Object.values(groupEvolveEntryMap);
|
|
13
|
-
if (groupEvolveEntryMapValues.length === 1) {
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
const firstEntryMap = groupEvolveEntryMapValues.shift();
|
|
17
|
-
const firstEntryOptions = normalizeCheckEntryOptions(serveMode, firstEntryMap?.options, ignoreOptionKeys);
|
|
18
|
-
return groupEvolveEntryMapValues.every((entryOption) => {
|
|
19
|
-
return isDeepEqual(firstEntryOptions, normalizeCheckEntryOptions(serveMode, entryOption.options, ignoreOptionKeys));
|
|
20
|
-
});
|
|
21
|
-
};
|
|
1
|
+
import{ignoreEntryOptionKeys}from"../constants.js";import{isDeepEqual}from"./is-deep-equal.js";import{normalizeCheckEntryOptions}from"./normalize-check-entry-options.js";export const verifyGroupEntryOptions=(n,o=ignoreEntryOptionKeys,t)=>{const e=Object.values(n);if(1===e.length)return!0;const r=e.shift(),i=normalizeCheckEntryOptions(t,r?.options,o);return e.every((n=>isDeepEqual(i,normalizeCheckEntryOptions(t,n.options,o))))};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,5 +1 @@
|
|
|
1
|
-
export
|
|
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';
|
|
1
|
+
export*from"./define-config/index.js";export*from"./load-config/index.js";export*from"./main/index.js";export*from"./types/types-entry-map.js";export*from"./types/types-options.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export*from"./load-evolve-config.js";
|
|
@@ -1,41 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { mergeOptions, logger } from '@flatjs/common';
|
|
3
|
-
import { configFileName, moduleName } from '../constants.js';
|
|
4
|
-
import { defaultEvolveOptions } from '../default-options.js';
|
|
5
|
-
import { normalizeResolveAlias } from '../helpers/normalize-resolve-alias.js';
|
|
6
|
-
import { refreshEvolveMockOptions } from '../helpers/refresh-evolve-mock-options.js';
|
|
7
|
-
export const loadEvolveConfig = async (configEnv, projectCwd, overrideOptions = {}, configLoaderOptions = {
|
|
8
|
-
configFile: configFileName,
|
|
9
|
-
esmLoaderOptions: {
|
|
10
|
-
externals: [/^@flatjs\/.*/],
|
|
11
|
-
},
|
|
12
|
-
}) => {
|
|
13
|
-
const { configFile, esmLoaderOptions } = configLoaderOptions;
|
|
14
|
-
const data = await searchConfig(configFile, projectCwd, {
|
|
15
|
-
esm: {
|
|
16
|
-
...esmLoaderOptions,
|
|
17
|
-
projectCwd,
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
let localData = {};
|
|
21
|
-
if (typeof data?.config === 'function') {
|
|
22
|
-
localData = await data?.config(configEnv);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
localData = data?.config || {};
|
|
26
|
-
}
|
|
27
|
-
// Merge user local config with default configure options.
|
|
28
|
-
const localConfigOptions = mergeOptions(defaultEvolveOptions, localData);
|
|
29
|
-
const mergedConfigOptions = mergeOptions(localConfigOptions, overrideOptions);
|
|
30
|
-
const finalData = mergeOptions(mergedConfigOptions, { projectCwd });
|
|
31
|
-
// We don't need to load mocks configuration from `flatjs-mock.config.js` while `build` phase.
|
|
32
|
-
const latestEvolveOptions = configEnv.command === 'build'
|
|
33
|
-
? finalData
|
|
34
|
-
: await refreshEvolveMockOptions(projectCwd, finalData, configLoaderOptions);
|
|
35
|
-
logger.debug(`Load evolve config:\n${JSON.stringify(latestEvolveOptions, null, 2)}`, moduleName);
|
|
36
|
-
// Normalize webpack.resolve.alias to make sure convert `alias` to absolute path.
|
|
37
|
-
if (latestEvolveOptions.webpack?.resolve?.alias) {
|
|
38
|
-
latestEvolveOptions.webpack.resolve.alias = normalizeResolveAlias(projectCwd, latestEvolveOptions.webpack?.resolve?.alias);
|
|
39
|
-
}
|
|
40
|
-
return latestEvolveOptions;
|
|
41
|
-
};
|
|
1
|
+
import{searchConfig}from"@armit/config-loader";import{logger,mergeOptions}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\/.*/]}})=>{const{configFile:r,esmLoaderOptions:l}=s,a=await searchConfig(r,e,{esm:{...l,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}),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};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export{};
|
|
@@ -9,7 +9,8 @@ const svgOptimize = (buffer, svgoOption) => {
|
|
|
9
9
|
return data;
|
|
10
10
|
};
|
|
11
11
|
const iconLoader = function iconLoader(source) {
|
|
12
|
-
|
|
12
|
+
if (this.cacheable)
|
|
13
|
+
this.cacheable(true);
|
|
13
14
|
const options = this.getOptions();
|
|
14
15
|
const callback = this.async();
|
|
15
16
|
try {
|
|
@@ -1,51 +1 @@
|
|
|
1
|
-
import Tinypool from '
|
|
2
|
-
import { getWorkerPath } from './get-worker-path.js';
|
|
3
|
-
import startBuildWorker from './start-build-worker.js';
|
|
4
|
-
/**
|
|
5
|
-
* Represents a thread pool for unit testing.
|
|
6
|
-
*/
|
|
7
|
-
class ThreadPoolForUnittest {
|
|
8
|
-
startBuildWorker(options) {
|
|
9
|
-
return startBuildWorker(options);
|
|
10
|
-
}
|
|
11
|
-
terminate() {
|
|
12
|
-
console.warn(`[WARNING] Using fake "terminate" for unittest!`);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Represents a thread pool for executing tasks using the TinyPool library.
|
|
17
|
-
*/
|
|
18
|
-
class ThreadPoolForTinyPool {
|
|
19
|
-
/**
|
|
20
|
-
* Creates a new instance of the `ThreadPoolForTinyPool` class.
|
|
21
|
-
* @param workerPath The path to the worker file.
|
|
22
|
-
* @param workerSize The number of worker threads to create.
|
|
23
|
-
* @param options Optional configuration options for the worker pool.
|
|
24
|
-
*/
|
|
25
|
-
constructor(workerPath, options) {
|
|
26
|
-
const { runtime = 'worker_threads', idleTimeout = 60000, minThreads = 1, maxThreads, } = options || {};
|
|
27
|
-
this.pool = new Tinypool({
|
|
28
|
-
filename: workerPath,
|
|
29
|
-
minThreads,
|
|
30
|
-
maxThreads,
|
|
31
|
-
runtime,
|
|
32
|
-
idleTimeout,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
startBuildWorker(options) {
|
|
36
|
-
return this.pool.run(options);
|
|
37
|
-
}
|
|
38
|
-
terminate() {
|
|
39
|
-
this.pool.destroy();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export const createThreadWorker = (options) => {
|
|
43
|
-
const workerPath = getWorkerPath();
|
|
44
|
-
// FIXME: Is safe to remove `worker thread` while `test` environment, cause of we need to run UT using `source code`
|
|
45
|
-
const isTestEnv = process.env.NODE_ENV === 'test';
|
|
46
|
-
if (isTestEnv) {
|
|
47
|
-
console.warn(`[WARNING] Using fake thread pool worker for unittest!`);
|
|
48
|
-
return new ThreadPoolForUnittest();
|
|
49
|
-
}
|
|
50
|
-
return new ThreadPoolForTinyPool(workerPath, options);
|
|
51
|
-
};
|
|
1
|
+
import Tinypool from"tinypool";import{getWorkerPath}from"./get-worker-path.js";import startBuildWorker from"./start-build-worker.js";class ThreadPoolForUnittest{startBuildWorker(r){return startBuildWorker(r)}terminate(){console.warn('[WARNING] Using fake "terminate" for unittest!')}}class ThreadPoolForTinyPool{constructor(r,o){const{runtime:e="worker_threads",idleTimeout:t=6e4,minThreads:n=1,maxThreads:s}=o||{};this.pool=new Tinypool({filename:r,minThreads:n,maxThreads:s,runtime:e,idleTimeout:t})}startBuildWorker(r){return this.pool.run(r)}terminate(){this.pool.destroy()}}export const createThreadWorker=r=>{const o=getWorkerPath();return"test"===process.env.NODE_ENV?(console.warn("[WARNING] Using fake thread pool worker for unittest!"),new ThreadPoolForUnittest):new ThreadPoolForTinyPool(o,r)};
|
package/dist/main/env-verify.js
CHANGED
|
@@ -1,21 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export const envVerify = async (projectCwd, evolveOptions) => {
|
|
3
|
-
const { packageInstallChecker, needVerifyPackages } = evolveOptions;
|
|
4
|
-
if (packageInstallChecker !== false && packageInstallChecker?.enabled) {
|
|
5
|
-
// Verify local install node modules
|
|
6
|
-
await illegalPackageChecker({
|
|
7
|
-
cwd: projectCwd,
|
|
8
|
-
modules: packageInstallChecker?.detectModules,
|
|
9
|
-
throwError: packageInstallChecker?.throwError,
|
|
10
|
-
showAllInstalledGraph: packageInstallChecker?.showAllInstalledGraph,
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
if (needVerifyPackages !== false) {
|
|
14
|
-
// Keep package deps up to date for non-monorepo
|
|
15
|
-
await keepPackageDepsUpToDateForNonMonoRepo({
|
|
16
|
-
cwd: projectCwd,
|
|
17
|
-
autoUpgrade: true,
|
|
18
|
-
needVerifyPackages: needVerifyPackages || {},
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
};
|
|
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||{}})};
|
|
@@ -1,5 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { getDirname } from '@armit/file-utility';
|
|
3
|
-
export const getWorkerPath = () => {
|
|
4
|
-
return pathToFileURL(getDirname(import.meta.url, './start-build-worker.js')).toString();
|
|
5
|
-
};
|
|
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();
|
package/dist/main/index.d.ts
CHANGED
package/dist/main/index.js
CHANGED
|
@@ -1,4 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export * from './start-serve.js';
|
|
3
|
-
export * from './start-static.js';
|
|
4
|
-
export * from './start-build-dynamic.js';
|
|
1
|
+
export*from"./start-build.js";export*from"./start-build-dynamic.js";export*from"./start-serve.js";export*from"./start-static.js";
|
|
@@ -1,39 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ignoreEntryOptionKeys } from '../constants.js';
|
|
3
|
-
import { EvolveBuildError } from '../errors/evolve-build-error.js';
|
|
4
|
-
import { printCompilerError } from '../helpers/print-log.js';
|
|
5
|
-
import { verifyGroupEntryOptions } from '../helpers/verify-group-entry-options.js';
|
|
6
|
-
import { startGroupEntryBuild, } from './start-group-entry-build.js';
|
|
7
|
-
/**
|
|
8
|
-
* The main entry to start an evolve `build`
|
|
9
|
-
* @param entryMapItem The `entryMapItem` for one entry build task
|
|
10
|
-
* @param evolveOptions FlatEvolveOptions
|
|
11
|
-
*/
|
|
12
|
-
export const prepareBuild = async (groupEntries, evolveOptions) => {
|
|
13
|
-
const firstGroupEntryItem = Object.values(groupEntries)[0];
|
|
14
|
-
if (!verifyGroupEntryOptions(groupEntries, ignoreEntryOptionKeys, true)) {
|
|
15
|
-
throw new Error('The entry options in a group must be the same.');
|
|
16
|
-
}
|
|
17
|
-
// Fetch all configuration cdn
|
|
18
|
-
const cdnPath = evolveOptions.multiHtmlCdn?.prod || [];
|
|
19
|
-
if (!cdnPath.length) {
|
|
20
|
-
throw new Error(`No CDN config for env:"prod", groupName: ${firstGroupEntryItem.groupName}`);
|
|
21
|
-
}
|
|
22
|
-
// Random choose one to publicPath
|
|
23
|
-
const cdnPublicPath = ensureSlash(cdnPath[Math.floor(Math.random() * cdnPath.length)], true);
|
|
24
|
-
try {
|
|
25
|
-
const useRelativeAssetPath = firstGroupEntryItem.options?.useRelativeAssetPath;
|
|
26
|
-
const buildEvolveOptions = mergeOptions(evolveOptions, {
|
|
27
|
-
webpack: {
|
|
28
|
-
// Only for `assets` used at styling files (e.g.`xxx.less`)
|
|
29
|
-
publicPath: useRelativeAssetPath ? 'auto' : cdnPublicPath,
|
|
30
|
-
},
|
|
31
|
-
});
|
|
32
|
-
return await startGroupEntryBuild(groupEntries, buildEvolveOptions);
|
|
33
|
-
}
|
|
34
|
-
catch (err) {
|
|
35
|
-
const formattedErrors = printCompilerError(err);
|
|
36
|
-
// Need re-throw error, in order to third API can capture this error.
|
|
37
|
-
throw new EvolveBuildError(`BUILD_ERROR`, formattedErrors);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
1
|
+
import{ensureSlash,mergeOptions}from"@flatjs/common";import{ignoreEntryOptionKeys}from"../constants.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";import{startGroupEntryBuild}from"./start-group-entry-build.js";export const prepareBuild=async(r,o)=>{const t=Object.values(r)[0];if(!verifyGroupEntryOptions(r,ignoreEntryOptionKeys,!0))throw new Error("The entry options in a group must be the same.");const e=o.multiHtmlCdn?.prod||[];if(!e.length)throw new Error(`No CDN config for env:"prod", groupName: ${t.groupName}`);const n=ensureSlash(e[Math.floor(Math.random()*e.length)],!0);try{const e=t.options?.useRelativeAssetPath,i=mergeOptions(o,{webpack:{publicPath:e?"auto":n}});return await startGroupEntryBuild(r,i)}catch(r){const o=printCompilerError(r);throw new EvolveBuildError("BUILD_ERROR",o)}};
|
|
@@ -1,69 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { attachMockMiddlewares } from '@flatjs/mock';
|
|
3
|
-
import { ignoreEntryOptionKeys } from '../constants.js';
|
|
4
|
-
import { createAppPageRoute, createDevServer, createDevServerCompilerTask, createDevServerEntries, } from '../dev-server/index.js';
|
|
5
|
-
import { flatEntryMap, openPage } from '../helpers/index.js';
|
|
6
|
-
import { normalizePageProxy } from '../helpers/normalize-page-proxy.js';
|
|
7
|
-
import { splitToEntryGroup } from '../helpers/split-to-entry-group.js';
|
|
8
|
-
import { verifyGroupEntryOptions } from '../helpers/verify-group-entry-options.js';
|
|
9
|
-
import { envVerify } from './env-verify.js';
|
|
10
|
-
/**
|
|
11
|
-
* The main entry to start evolve serve
|
|
12
|
-
* @param projectCwd The Root directory (workspace) of this project.
|
|
13
|
-
* @param servedEntries All normalized webpack entries we have served.
|
|
14
|
-
* @param evolveOptions FlatEvolveOptions
|
|
15
|
-
*/
|
|
16
|
-
export const prepareServe = async (projectCwd, servedEntries, evolveOptions) => {
|
|
17
|
-
// Verify if we have an correct project local environment.
|
|
18
|
-
await envVerify(projectCwd, evolveOptions);
|
|
19
|
-
// Group by entry group name
|
|
20
|
-
const entryMapGroupList = splitToEntryGroup(servedEntries, evolveOptions, ignoreEntryOptionKeys, true);
|
|
21
|
-
if (!entryMapGroupList.length) {
|
|
22
|
-
logger.warn(`No served entries provided!`);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const serveTasks = [];
|
|
26
|
-
// Create pure dev server.
|
|
27
|
-
const { app, devPort, devHostUri, publicIp } = await createDevServer(evolveOptions);
|
|
28
|
-
// Extract all the mock filters of served entries.
|
|
29
|
-
const mockFilters = evolveOptions.devServer?.mockOptions?.mockFilters || [];
|
|
30
|
-
// Loop all entries gather all mock files definition from each entry item.
|
|
31
|
-
for (const [, value] of Object.entries(servedEntries)) {
|
|
32
|
-
mockFilters.push(...(value.options?.mockFilters || []));
|
|
33
|
-
}
|
|
34
|
-
// Attach core handlers for mock
|
|
35
|
-
await attachMockMiddlewares(app, {
|
|
36
|
-
...evolveOptions.devServer?.mockOptions,
|
|
37
|
-
mockFilters: arrayUnique(mockFilters),
|
|
38
|
-
projectCwd,
|
|
39
|
-
});
|
|
40
|
-
let lastPort = devPort;
|
|
41
|
-
const servedDevServerEntryList = [];
|
|
42
|
-
for (const entryMapGroup of entryMapGroupList) {
|
|
43
|
-
// Verify that each entry option is the same in a group
|
|
44
|
-
if (!verifyGroupEntryOptions(entryMapGroup, ignoreEntryOptionKeys, true)) {
|
|
45
|
-
throw new Error('The entry options in a group must be the same.');
|
|
46
|
-
}
|
|
47
|
-
// Create dev-server configuration for all servedEntries.
|
|
48
|
-
lastPort++;
|
|
49
|
-
const servedDevServerEntries = await createDevServerEntries(lastPort, entryMapGroup, evolveOptions);
|
|
50
|
-
servedDevServerEntryList.push(servedDevServerEntries);
|
|
51
|
-
}
|
|
52
|
-
// Create new route `/pages*`,`*` to pure dev server
|
|
53
|
-
const flatServedDevServerEntries = flatEntryMap(servedDevServerEntryList);
|
|
54
|
-
createAppPageRoute(projectCwd, app, devHostUri, flatServedDevServerEntries, evolveOptions);
|
|
55
|
-
const pageProxy = normalizePageProxy(evolveOptions.devServer?.pageProxy || '/pages');
|
|
56
|
-
const mainPage = urlJoin(devHostUri, [pageProxy]);
|
|
57
|
-
// Open page via browser
|
|
58
|
-
if (evolveOptions.devServer?.autoOpen) {
|
|
59
|
-
openPage(mainPage);
|
|
60
|
-
}
|
|
61
|
-
for (const servedDevServerEntryItem of servedDevServerEntryList) {
|
|
62
|
-
// Create dev-server compiler tasks
|
|
63
|
-
const task = createDevServerCompilerTask(projectCwd, mainPage, publicIp, servedDevServerEntryItem, servedDevServerEntryList, evolveOptions);
|
|
64
|
-
serveTasks.push(task);
|
|
65
|
-
}
|
|
66
|
-
return Promise.all(serveTasks).then(() => {
|
|
67
|
-
return app;
|
|
68
|
-
});
|
|
69
|
-
};
|
|
1
|
+
import{arrayUnique,logger,urlJoin}from"@flatjs/common";import{attachMockMiddlewares}from"@flatjs/mock";import{ignoreEntryOptionKeys}from"../constants.js";import{createAppPageRoute,createDevServer,createDevServerCompilerTask,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)=>{await envVerify(e,o);const t=splitToEntryGroup(r,o,ignoreEntryOptionKeys,!0);if(!t.length)return void logger.warn("No served entries provided!");const n=[],{app:i,devPort:s,devHostUri:p,publicIp:a}=await createDevServer(o),c=o.devServer?.mockOptions?.mockFilters||[];for(const[,e]of Object.entries(r))c.push(...e.options?.mockFilters||[]);await attachMockMiddlewares(i,{...o.devServer?.mockOptions,mockFilters:arrayUnique(c),projectCwd:e});let v=s;const m=[];for(const e of t){if(!verifyGroupEntryOptions(e,ignoreEntryOptionKeys,!0))throw new Error("The entry options in a group must be the same.");v++;const r=await createDevServerEntries(v,e,o);m.push(r)}const l=flatEntryMap(m);createAppPageRoute(e,i,p,l,o);const y=normalizePageProxy(o.devServer?.pageProxy||"/pages"),f=urlJoin(p,[y]);o.devServer?.autoOpen&&openPage(f);for(const r of m){const t=createDevServerCompilerTask(e,f,a,r,m,o);n.push(t)}return Promise.all(n).then((()=>i))};
|
|
@@ -1,30 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { attachMockMiddlewares } from '@flatjs/mock';
|
|
3
|
-
import { createAppPageRoute } from '../dev-server/create-app-page-route.js';
|
|
4
|
-
import { createDevServer } from '../dev-server/create-dev-server.js';
|
|
5
|
-
import { normalizePageProxy } from '../helpers/normalize-page-proxy.js';
|
|
6
|
-
import { openPage } from '../helpers/open-page.js';
|
|
7
|
-
/**
|
|
8
|
-
* The main entry to start evolve serve
|
|
9
|
-
* @param projectCwd The Root directory (workspace) of this project.
|
|
10
|
-
* @param evolveOptions FlatEvolveOptions
|
|
11
|
-
*/
|
|
12
|
-
export const prepareStatic = async (projectCwd, evolveOptions) => {
|
|
13
|
-
// Create pure dev server.
|
|
14
|
-
const { app, devHostUri } = await createDevServer(evolveOptions);
|
|
15
|
-
// Attach core handlers for mock
|
|
16
|
-
await attachMockMiddlewares(app, {
|
|
17
|
-
...evolveOptions.devServer?.mockOptions,
|
|
18
|
-
projectCwd,
|
|
19
|
-
});
|
|
20
|
-
// Create new route `/pages*`,`*` to pure dev server
|
|
21
|
-
createAppPageRoute(projectCwd, app, devHostUri, {}, evolveOptions);
|
|
22
|
-
const pageProxy = normalizePageProxy(evolveOptions.devServer?.pageProxy || '/pages');
|
|
23
|
-
const mainPage = urlJoin(devHostUri, [pageProxy]);
|
|
24
|
-
// Open page via browser
|
|
25
|
-
if (evolveOptions.devServer?.autoOpen) {
|
|
26
|
-
openPage(mainPage);
|
|
27
|
-
}
|
|
28
|
-
logger.info(`${'static page'.padEnd(12, ' ')} ➩ ${chalk(['cyan'])(mainPage)}`);
|
|
29
|
-
};
|
|
30
|
-
// Start up main page proxy server.
|
|
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{normalizePageProxy}from"../helpers/normalize-page-proxy.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=normalizePageProxy(r.devServer?.pageProxy||"/pages"),p=urlJoin(o,[t]);r.devServer?.autoOpen&&openPage(p),logger.info(`${"static page".padEnd(12," ")} ➩ ${chalk(["cyan"])(p)}`)};
|