@flatjs/evolve 1.8.1-next.103 → 1.8.1-next.104

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @flatjs/evolve
2
2
 
3
+ ## 1.8.1-next.104
4
+
5
+ ### Patch Changes
6
+
7
+ - 3a8aa0b: Add `graphTreeNodeFilter` allow customized filter wihile dynamic build
8
+ - 9f098ad: Bump version
9
+ - Updated dependencies [9f098ad]
10
+ - @flatjs/forge-postcss-plugin-pixel@1.8.1-next.37
11
+ - @flatjs/evolve-preset-babel@1.8.1-next.22
12
+ - @flatjs/common@1.8.1-next.37
13
+ - @flatjs/graph@1.8.1-next.54
14
+ - @flatjs/mock@1.8.1-next.78
15
+
3
16
  ## 1.8.1-next.103
4
17
 
5
18
  ### Patch Changes
@@ -2,7 +2,7 @@ import { type PartialDeep } from 'type-fest';
2
2
  import { type ConfigLoaderOptions } from '../load-config/load-evolve-config.js';
3
3
  import { type FlatEvolveOptions } from '../types/types-options.js';
4
4
  import { type EvolveBuildResult } from './start-one-entry-build.js';
5
- export declare function getBuildEntryFiles(projectCwd: string, diffFiles: string[], allEntryInputs: string[], resolveAlias?: Record<string, string>): Promise<string[]>;
5
+ export declare function getBuildEntryFiles(projectCwd: string, diffFiles: string[], allEntryInputs: string[], resolveAlias?: Record<string, string>, graphTreeNodeFilter?: (moduleId: string) => boolean): Promise<string[]>;
6
6
  /**
7
7
  * Dynamic check which entry modules need to build.
8
8
  * @returns
@@ -1 +1 @@
1
- import{isAbsolute,join}from"node:path";import{getDiffFiles,getCommitIdOfBranch}from"@armit/git";import{createThreadPool}from"@armit/worker-threads";import{arraysIntersect,chalk,logger,requireResolve}from"@flatjs/common";import{traverseGraph}from"@flatjs/graph";import Listr from"listr";import{filterActivedEntriesByEntryInputs,filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{getGitRoot}from"../helpers/get-git-root.js";import{getMaxProcessTasks}from"../helpers/get-max-process-tasks.js";import{jsonSerializer}from"../helpers/json-serializer.js";import{resolveEntryMapInputFiles}from"../helpers/resolve-entry-map-input-files.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{envVerify}from"./env-verify.js";import{getWorkerPath}from"./get-worker-path.js";export async function getBuildEntryFiles(e,t,r,i){const o=[],n=[];for(const e of r)t.includes(e)?o.push(e):n.push(e);if(n.length){const r=await traverseGraph({input:n,projectCwd:e,treeNodeFilter:()=>!0,lessImportOptions:{projectCwd:e,aliases:i}});if(!r)return o;logger.debug(`DependencyGraph:\n${JSON.stringify(r,null,2)}`);for(const e of n){const i=r[e]||[];arraysIntersect(i,t)&&o.push(e)}}return o}export async function dynamicCheckBuildEntryMap(e,t,r,i,o){const n={command:"build",resolve:requireResolve},s=await loadEvolveConfig(n,e,i,o);if(s.ci?.fixedBuildModules&&s.ci?.fixedBuildModules.length){logger.info("Use `fixedBuildModules` configuration to build...");return{buildEntries:filterActivedEntriesByModule(s.entryMap,s.ci?.fixedBuildModules),newEvolveOptions:s}}if(logger.info("Dynamicly checking code changed modules ..."),!t){const e=s.ci?.basedBranch||"origin/master";t=await getCommitIdOfBranch(e),logger.info(`Resolving base branch "${e}" commit hash "${t}" ...`)}let a=t?await getDiffFiles(t,r):[];const l=getGitRoot(e);if(!l)throw new Error(`No .git root (${e}) found`);if(a=a.map((e=>isAbsolute(e)?e:join(l,e))),logger.debug(`Diff files: \n${JSON.stringify(a,null,2)}`),!a.length)return logger.warn("It seems that there are no code files changed."),{buildEntries:{},newEvolveOptions:s};const c=await resolveEntryMapInputFiles(e,s.entryMap),d=await getBuildEntryFiles(e,a,c,s.webpack?.resolve?.alias);logger.debug(`To build entry files: \n${JSON.stringify(d,null,2)}`);return{buildEntries:await filterActivedEntriesByEntryInputs(e,s.entryMap,d),newEvolveOptions:s}}export const startDynamicBuild=async(e,t,r,i={},o)=>{const{buildEntries:n,newEvolveOptions:s}=await dynamicCheckBuildEntryMap(e,t,r,i,o);await envVerify(e,s);const a=Object.keys(n);if(!a.length)return logger.warn("No build entries providered!"),[];const l=getMaxProcessTasks(a.length,s.maxProcesses);logger.info(`Start dynamic build with (${chalk(["magenta"])(String(l))}) workers:\n${JSON.stringify({buildEntries:a},null,2)}`);const c=getWorkerPath(),d=await createThreadPool(c,{size:l}),f=new Listr([],{concurrent:l,exitOnError:!0}),g=[];for(const[t]of Object.entries(n))f.add({title:`Build module ${chalk(["magenta"])(t)} ...`,task:async()=>{const r=await d.startBuildWorker(e,t,jsonSerializer.stringify(i),o);g.push(r)}});return f.tasks.length&&await f.run(),d.pool.terminate(),g};
1
+ import{isAbsolute,join}from"node:path";import{getDiffFiles,getCommitIdOfBranch}from"@armit/git";import{createThreadPool}from"@armit/worker-threads";import{arraysIntersect,chalk,logger,requireResolve}from"@flatjs/common";import{traverseGraph}from"@flatjs/graph";import Listr from"listr";import{filterActivedEntriesByEntryInputs,filterActivedEntriesByModule}from"../helpers/filter-actived-entries.js";import{getGitRoot}from"../helpers/get-git-root.js";import{getMaxProcessTasks}from"../helpers/get-max-process-tasks.js";import{jsonSerializer}from"../helpers/json-serializer.js";import{resolveEntryMapInputFiles}from"../helpers/resolve-entry-map-input-files.js";import{loadEvolveConfig}from"../load-config/load-evolve-config.js";import{envVerify}from"./env-verify.js";import{getWorkerPath}from"./get-worker-path.js";export async function getBuildEntryFiles(e,t,r,i,o){const n=[],s=[];for(const e of r)t.includes(e)?n.push(e):s.push(e);if(s.length){const r=await traverseGraph({input:s,projectCwd:e,treeNodeFilter:o||(()=>!0),lessImportOptions:{projectCwd:e,aliases:i}});if(!r)return n;logger.debug(`DependencyGraph:\n${JSON.stringify(r,null,2)}`);for(const e of s){const i=r[e]||[];arraysIntersect(i,t)&&n.push(e)}}return n}export async function dynamicCheckBuildEntryMap(e,t,r,i,o){const n={command:"build",resolve:requireResolve},s=await loadEvolveConfig(n,e,i,o);if(s.ci?.fixedBuildModules&&s.ci?.fixedBuildModules.length){logger.info("Use `fixedBuildModules` configuration to build...");return{buildEntries:filterActivedEntriesByModule(s.entryMap,s.ci?.fixedBuildModules),newEvolveOptions:s}}if(logger.info("Dynamicly checking code changed modules ..."),!t){const e=s.ci?.basedBranch||"origin/master";t=await getCommitIdOfBranch(e),logger.info(`Resolving base branch "${e}" commit hash "${t}" ...`)}let a=t?await getDiffFiles(t,r):[];const l=getGitRoot(e);if(!l)throw new Error(`No .git root (${e}) found`);if(a=a.map((e=>isAbsolute(e)?e:join(l,e))),logger.debug(`Diff files: \n${JSON.stringify(a,null,2)}`),!a.length)return logger.warn("It seems that there are no code files changed."),{buildEntries:{},newEvolveOptions:s};const c=await resolveEntryMapInputFiles(e,s.entryMap),d=await getBuildEntryFiles(e,a,c,s.webpack?.resolve?.alias,s.ci?.graphTreeNodeFilter);logger.debug(`To build entry files: \n${JSON.stringify(d,null,2)}`);return{buildEntries:await filterActivedEntriesByEntryInputs(e,s.entryMap,d),newEvolveOptions:s}}export const startDynamicBuild=async(e,t,r,i={},o)=>{const{buildEntries:n,newEvolveOptions:s}=await dynamicCheckBuildEntryMap(e,t,r,i,o);await envVerify(e,s);const a=Object.keys(n);if(!a.length)return logger.warn("No build entries providered!"),[];const l=getMaxProcessTasks(a.length,s.maxProcesses);logger.info(`Start dynamic build with (${chalk(["magenta"])(String(l))}) workers:\n${JSON.stringify({buildEntries:a},null,2)}`);const c=getWorkerPath(),d=await createThreadPool(c,{size:l}),f=new Listr([],{concurrent:l,exitOnError:!0}),g=[];for(const[t]of Object.entries(n))f.add({title:`Build module ${chalk(["magenta"])(t)} ...`,task:async()=>{const r=await d.startBuildWorker(e,t,jsonSerializer.stringify(i),o);g.push(r)}});return f.tasks.length&&await f.run(),d.pool.terminate(),g};
@@ -5,6 +5,12 @@
5
5
  * 3. Normally build manually using (`flat build evolve -m "a;b"`)
6
6
  */
7
7
  export type FlatEvolveCI = {
8
+ /**
9
+ * A function used to determine if a module (also include root node) should be included in the dependency tree
10
+ * @param moduleId The imported module
11
+ * @default `() => true`
12
+ */
13
+ graphTreeNodeFilter?: (moduleId: string) => boolean;
8
14
  /**
9
15
  * The build module patterns, `Highest Priority First`
10
16
  * Support "a;b;c" RegExp pattern; `new RegExp(`${pattern}`).test(entryKey)`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatjs/evolve",
3
- "version": "1.8.1-next.103",
3
+ "version": "1.8.1-next.104",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -37,18 +37,18 @@
37
37
  "typecheck": "tsc --project ./tsconfig.json --noEmit"
38
38
  },
39
39
  "dependencies": {
40
- "@armit/config-loader": "^0.0.52",
41
- "@armit/file-utility": "^0.0.29",
42
- "@armit/git": "^0.0.37",
43
- "@armit/package": "^0.0.46",
44
- "@armit/worker-threads": "^0.0.6",
40
+ "@armit/config-loader": "^0.0.53",
41
+ "@armit/file-utility": "^0.0.30",
42
+ "@armit/git": "^0.0.38",
43
+ "@armit/package": "^0.0.47",
44
+ "@armit/worker-threads": "^0.0.7",
45
45
  "@babel/core": "7.22.10",
46
- "@flatjs/common": "1.8.1-next.36",
47
- "@flatjs/evolve-preset-babel": "1.8.1-next.21",
48
- "@flatjs/forge-postcss-plugin-pixel": "1.8.1-next.36",
49
- "@flatjs/graph": "1.8.1-next.53",
50
- "@flatjs/mock": "1.8.1-next.77",
51
- "@pmmmwh/react-refresh-webpack-plugin": "0.5.10",
46
+ "@flatjs/common": "1.8.1-next.37",
47
+ "@flatjs/evolve-preset-babel": "1.8.1-next.22",
48
+ "@flatjs/forge-postcss-plugin-pixel": "1.8.1-next.37",
49
+ "@flatjs/graph": "1.8.1-next.54",
50
+ "@flatjs/mock": "1.8.1-next.78",
51
+ "@pmmmwh/react-refresh-webpack-plugin": "0.5.11",
52
52
  "@types/babel__core": "7.20.1",
53
53
  "babel-loader": "9.1.3",
54
54
  "babel-merge": "3.0.0",
@@ -59,7 +59,7 @@
59
59
  "cssnano": "6.0.1",
60
60
  "express": "4.18.2",
61
61
  "fork-ts-checker-webpack-plugin": "8.0.0",
62
- "happy-dom": "10.9.0",
62
+ "happy-dom": "10.10.0",
63
63
  "html-webpack-plugin": "5.5.3",
64
64
  "image-minimizer-webpack-plugin": "3.8.3",
65
65
  "less": "4.2.0",
@@ -67,7 +67,7 @@
67
67
  "listr": "0.14.3",
68
68
  "lodash": "4.17.21",
69
69
  "mini-css-extract-plugin": "2.7.6",
70
- "postcss": "8.4.27",
70
+ "postcss": "8.4.28",
71
71
  "postcss-loader": "7.3.3",
72
72
  "react-refresh": "0.14.0",
73
73
  "svgo": "3.0.2",
@@ -81,21 +81,21 @@
81
81
  "webpack-sources": "3.2.3"
82
82
  },
83
83
  "devDependencies": {
84
- "@armit/eslint-config-bases": "^0.0.24",
85
- "@flatjs/testing": "1.8.1-next.38",
86
- "@swc/core": "1.3.76",
84
+ "@armit/eslint-config-bases": "^0.0.25",
85
+ "@flatjs/testing": "1.8.1-next.39",
86
+ "@swc/core": "1.3.77",
87
87
  "@types/express": "4.17.17",
88
88
  "@types/listr": "0.14.4",
89
- "@types/node": "20.4.9",
89
+ "@types/node": "20.5.0",
90
90
  "@vitest/coverage-istanbul": "0.34.1",
91
91
  "@vitest/ui": "0.34.1",
92
- "eslint": "8.46.0",
92
+ "eslint": "8.47.0",
93
93
  "imagemin-gifsicle": "7.0.0",
94
94
  "imagemin-jpegtran": "7.0.0",
95
95
  "imagemin-pngquant": "9.0.2",
96
96
  "imagemin-svgo": "10.0.1",
97
97
  "npm-run-all": "4.1.5",
98
- "prettier": "3.0.1",
98
+ "prettier": "3.0.2",
99
99
  "react": "18.2.0",
100
100
  "rimraf": "5.0.1",
101
101
  "swc-unplugin-ts": "1.0.2",