@flatjs/evolve 1.8.1-next.92 → 1.8.1-next.93

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,21 @@
1
1
  # @flatjs/evolve
2
2
 
3
+ ## 1.8.1-next.93
4
+
5
+ ### Patch Changes
6
+
7
+ - b70ff50: bump version
8
+ - 76ffa17: Add `Circular` dependencies check plugin in `development` phase
9
+ - ea10e66: bump version
10
+ - Updated dependencies [b70ff50]
11
+ - Updated dependencies [ea10e66]
12
+ - Updated dependencies [ba80b25]
13
+ - @flatjs/forge-postcss-plugin-pixel@1.8.1-next.35
14
+ - @flatjs/evolve-preset-babel@1.8.1-next.17
15
+ - @flatjs/common@1.8.1-next.35
16
+ - @flatjs/graph@1.8.1-next.49
17
+ - @flatjs/mock@1.8.1-next.71
18
+
3
19
  ## 1.8.1-next.92
4
20
 
5
21
  ### Patch Changes
@@ -1 +1 @@
1
- import{logger}from"@flatjs/common";import ReactRefreshWebpackPlugin from"@pmmmwh/react-refresh-webpack-plugin";import CaseSensitivePathsPlugin from"case-sensitive-paths-webpack-plugin";import ForkTsCheckerWebpackPlugin from"fork-ts-checker-webpack-plugin";import MiniCssExtractPlugin from"mini-css-extract-plugin";import webpack from"webpack";import{BundleAnalyzerPlugin}from"webpack-bundle-analyzer";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{createCleanWebpackPlugin}from"../plugins/clean-webpack/index.js";import{createBuiltinDefineVariables}from"../plugins/define-variable/index.js";import{createModuleFederationPlugin}from"../plugins/module-federation/index.js";import{createHtmlPlugins}from"../plugins/multi-html/index.js";export const createPlugins=async(e,n,a)=>{const[r,i]=n,t=enableBundleHashNameForModule(a,i?.options),l=[new webpack.WatchIgnorePlugin({paths:[/\.d\.[cm]ts$/]}),new CaseSensitivePathsPlugin,new MiniCssExtractPlugin({filename:`[name]/${getBundleFileName("css",e,t)}`,chunkFilename:"[id].[contenthash].css"}),...await createBuiltinDefineVariables(e,a),...createCleanWebpackPlugin(e,n,a),...createModuleFederationPlugin(e,n,a),...createHtmlPlugins(e,n,a)],{analyzer:s,loaderOptions:o}=a,c=(n[1].entry||[]).find((e=>/.vue$/.test(e)));o.runTsChecker&&!c&&l.push(new ForkTsCheckerWebpackPlugin({async:e,typescript:{context:a.projectCwd,memoryLimit:8192}})),s&&l.push(new BundleAnalyzerPlugin({analyzerPort:"auto",analyzerMode:"server",...s}));const u=shouldEnableReactFastRefresh(e,n,a);u&&l.push(new ReactRefreshWebpackPlugin({overlay:!1})),!u&&e&&logger.warn(`The HMR has disabled cause of \`"${r}":"moduleFederation"\``);const m=a.webpack?.plugins||[];return l.concat(m)};
1
+ import{logger}from"@flatjs/common";import ReactRefreshWebpackPlugin from"@pmmmwh/react-refresh-webpack-plugin";import CaseSensitivePathsPlugin from"case-sensitive-paths-webpack-plugin";import ForkTsCheckerWebpackPlugin from"fork-ts-checker-webpack-plugin";import MiniCssExtractPlugin from"mini-css-extract-plugin";import webpack from"webpack";import{BundleAnalyzerPlugin}from"webpack-bundle-analyzer";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{createCircularDependencyPlugin}from"../plugins/circular-dependency/index.js";import{createCleanWebpackPlugin}from"../plugins/clean-webpack/index.js";import{createBuiltinDefineVariables}from"../plugins/define-variable/index.js";import{createModuleFederationPlugin}from"../plugins/module-federation/index.js";import{createHtmlPlugins}from"../plugins/multi-html/index.js";export const createPlugins=async(e,n,a)=>{const[r,i]=n,l=enableBundleHashNameForModule(a,i?.options),t=[new webpack.WatchIgnorePlugin({paths:[/\.d\.[cm]ts$/]}),new CaseSensitivePathsPlugin,...createCircularDependencyPlugin(e,a),new MiniCssExtractPlugin({filename:`[name]/${getBundleFileName("css",e,l)}`,chunkFilename:"[id].[contenthash].css"}),...await createBuiltinDefineVariables(e,a),...createCleanWebpackPlugin(e,n,a),...createModuleFederationPlugin(e,n,a),...createHtmlPlugins(e,n,a)],{analyzer:s,loaderOptions:o}=a,c=(n[1].entry||[]).find((e=>/.vue$/.test(e)));o.runTsChecker&&!c&&t.push(new ForkTsCheckerWebpackPlugin({async:e,typescript:{context:a.projectCwd,memoryLimit:8192}})),s&&t.push(new BundleAnalyzerPlugin({analyzerPort:"auto",analyzerMode:"server",...s}));const u=shouldEnableReactFastRefresh(e,n,a);u&&t.push(new ReactRefreshWebpackPlugin({overlay:!1})),!u&&e&&logger.warn(`The HMR has disabled cause of \`"${r}":"moduleFederation"\``);const p=a.webpack?.plugins||[];return t.concat(p)};
@@ -0,0 +1,54 @@
1
+ import { type Compilation, type Compiler } from 'webpack';
2
+ export interface Options {
3
+ /**
4
+ * The project root.
5
+ */
6
+ projectCwd?: string;
7
+ /**
8
+ * exclude detection of files based on a RegExp
9
+ * @default /node_modules/
10
+ */
11
+ exclude?: RegExp;
12
+ /**
13
+ * include specific files based on a RegExp
14
+ * @default `new RegExp('.*')`
15
+ */
16
+ include?: RegExp;
17
+ /**
18
+ * add errors to webpack instead of warnings
19
+ * @default false
20
+ */
21
+ failOnError?: boolean;
22
+ /**
23
+ * allow import cycles that include an asynchronous import,
24
+ * e.g. via via import(/* webpackMode: "weak" *\/ './file.js')
25
+ * @default false
26
+ */
27
+ allowAsyncCycles?: boolean;
28
+ /**
29
+ * `onStart` is called before the cycle detection starts
30
+ */
31
+ onStart?: (options: {
32
+ compilation: Compilation;
33
+ }) => void;
34
+ /**
35
+ * `onDetected` is called for each module that is cyclical
36
+ * `paths` will be an Array of the relative module paths that make up the cycle
37
+ */
38
+ onDetected?: (options: {
39
+ paths: string[];
40
+ compilation: Compilation;
41
+ }) => void;
42
+ /**
43
+ * `onEnd` is called before the cycle detection ends
44
+ */
45
+ onEnd?: (options: {
46
+ compilation: Compilation;
47
+ }) => void;
48
+ }
49
+ export declare class CircularDependencyPlugin {
50
+ private options;
51
+ constructor(options?: Options);
52
+ apply(compiler: Compiler): void;
53
+ private isCyclic;
54
+ }
@@ -0,0 +1 @@
1
+ import{relative}from"node:path";import{mergeOptions}from"@flatjs/common";import Graph from"tarjan-graph";import webpack from"webpack";const BASE_ERROR="Circular dependency detected:\r\n",PLUGIN_TITLE="CircularDependencyPlugin";export class CircularDependencyPlugin{constructor(o={}){this.options=mergeOptions({exclude:/node_modules/,include:/.*/,failOnError:!1,allowAsyncCycles:!1,projectCwd:process.cwd()},o)}apply(o){const e=this.options.projectCwd;o.hooks.compilation.tap(PLUGIN_TITLE,(o=>{o.hooks.optimizeModules.tap(PLUGIN_TITLE,(t=>{this.options.onStart&&this.options.onStart({compilation:o});const n=new(Graph.default||Graph);for(const e of t){const t=[];for(const n of e.dependencies){if(n.constructor&&"CommonJsSelfReferenceDependency"===n.constructor.name)continue;let r=null;r=o.moduleGraph?o.moduleGraph.getModule(n):n.module,r&&(r instanceof webpack.NormalModule&&r.resource&&(this.options.allowAsyncCycles&&n.weak||e!==r&&t.push(r.identifier())))}n.add(e.identifier(),t)}const r=n.getCycles();this.isCyclic(r,o,e),this.options.onEnd&&this.options.onEnd({compilation:o})}))}))}isCyclic(o,e,t){o.forEach((o=>{const n=o.slice().reverse().map((o=>{const t=e.findModule(o.name);return t instanceof webpack.NormalModule&&t.resource||null}));if(n.every((o=>!o||this.options.exclude.test(o)||!this.options.include.test(o))))return;const r=n.map((o=>relative(t,o)));if(this.options.onDetected){try{this.options.onDetected({paths:r.concat([r[0]]),compilation:e})}catch(o){e.errors.push(o)}return}const s=new Error(BASE_ERROR.concat(r.concat([r[0]]).join(" -> ")));this.options.failOnError?e.errors.push(s):e.warnings.push(s)}))}}
@@ -0,0 +1,7 @@
1
+ import { type WebpackPlugin } from '../../create-webpack/types.js';
2
+ import { type FlatEvolveOptions } from '../../types/types-options.js';
3
+ /**
4
+ * Detect modules with circular dependencies when bundling with webpack for `development` mode.
5
+ * @returns
6
+ */
7
+ export declare const createCircularDependencyPlugin: (serveMode: boolean, evolveOptions: FlatEvolveOptions) => WebpackPlugin[];
@@ -0,0 +1 @@
1
+ import{CircularDependencyPlugin}from"./circular-dependency-plugin.js";export const createCircularDependencyPlugin=(e,n)=>e?[new CircularDependencyPlugin({projectCwd:n.projectCwd})]:[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flatjs/evolve",
3
- "version": "1.8.1-next.92",
3
+ "version": "1.8.1-next.93",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -37,29 +37,29 @@
37
37
  "typecheck": "tsc --project ./tsconfig.json --noEmit"
38
38
  },
39
39
  "dependencies": {
40
- "@armit/config-loader": "^0.0.50",
41
- "@armit/file-utility": "^0.0.27",
42
- "@armit/git": "^0.0.35",
43
- "@armit/package": "^0.0.44",
44
- "@armit/worker-threads": "^0.0.4",
40
+ "@armit/config-loader": "^0.0.51",
41
+ "@armit/file-utility": "^0.0.28",
42
+ "@armit/git": "^0.0.36",
43
+ "@armit/package": "^0.0.45",
44
+ "@armit/worker-threads": "^0.0.5",
45
45
  "@babel/core": "7.22.9",
46
- "@flatjs/common": "1.8.1-next.34",
47
- "@flatjs/evolve-preset-babel": "1.8.1-next.16",
48
- "@flatjs/forge-postcss-plugin-pixel": "1.8.1-next.34",
49
- "@flatjs/graph": "1.8.1-next.48",
50
- "@flatjs/mock": "1.8.1-next.70",
46
+ "@flatjs/common": "1.8.1-next.35",
47
+ "@flatjs/evolve-preset-babel": "1.8.1-next.17",
48
+ "@flatjs/forge-postcss-plugin-pixel": "1.8.1-next.35",
49
+ "@flatjs/graph": "1.8.1-next.49",
50
+ "@flatjs/mock": "1.8.1-next.71",
51
51
  "@pmmmwh/react-refresh-webpack-plugin": "0.5.10",
52
52
  "@types/babel__core": "7.20.1",
53
53
  "babel-loader": "9.1.3",
54
54
  "babel-merge": "3.0.0",
55
- "babel-plugin-import": "1.13.6",
55
+ "babel-plugin-import": "1.13.8",
56
56
  "better-opn": "3.0.2",
57
57
  "case-sensitive-paths-webpack-plugin": "2.4.0",
58
58
  "css-loader": "6.8.1",
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.5.2",
62
+ "happy-dom": "10.6.3",
63
63
  "html-webpack-plugin": "5.5.3",
64
64
  "image-minimizer-webpack-plugin": "3.8.3",
65
65
  "less": "4.1.3",
@@ -71,24 +71,25 @@
71
71
  "postcss-loader": "7.3.3",
72
72
  "react-refresh": "0.14.0",
73
73
  "svgo": "3.0.2",
74
+ "tarjan-graph": "3.0.0",
74
75
  "terser-webpack-plugin": "5.3.9",
75
76
  "tsconfig-paths-webpack-plugin": "4.1.0",
76
- "type-fest": "^4.0.0",
77
+ "type-fest": "^4.1.0",
77
78
  "webpack": "5.88.2",
78
79
  "webpack-bundle-analyzer": "4.9.0",
79
80
  "webpack-dev-server": "4.15.1",
80
81
  "webpack-sources": "3.2.3"
81
82
  },
82
83
  "devDependencies": {
83
- "@armit/eslint-config-bases": "^0.0.22",
84
- "@flatjs/testing": "1.8.1-next.35",
85
- "@swc/core": "1.3.70",
84
+ "@armit/eslint-config-bases": "^0.0.23",
85
+ "@flatjs/testing": "1.8.1-next.36",
86
+ "@swc/core": "1.3.74",
86
87
  "@types/express": "4.17.17",
87
88
  "@types/listr": "0.14.4",
88
- "@types/node": "20.4.4",
89
- "@vitest/coverage-istanbul": "0.33.0",
90
- "@vitest/ui": "0.33.0",
91
- "eslint": "8.45.0",
89
+ "@types/node": "20.4.6",
90
+ "@vitest/coverage-istanbul": "0.34.1",
91
+ "@vitest/ui": "0.34.1",
92
+ "eslint": "8.46.0",
92
93
  "imagemin-gifsicle": "7.0.0",
93
94
  "imagemin-jpegtran": "7.0.0",
94
95
  "imagemin-pngquant": "9.0.2",
@@ -100,7 +101,7 @@
100
101
  "swc-unplugin-ts": "1.0.2",
101
102
  "ts-node": "10.9.1",
102
103
  "vite-tsconfig-paths": "4.2.0",
103
- "vitest": "0.33.0",
104
+ "vitest": "0.34.1",
104
105
  "vue-loader": "17.2.2"
105
106
  },
106
107
  "peerDependencies": {