@tramvai/cli 5.46.1 → 5.47.0
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/lib/library/babel/index.d.ts +1 -1
- package/lib/library/babel/index.d.ts.map +1 -1
- package/lib/library/babel/index.js +5 -23
- package/lib/library/babel/index.js.map +1 -1
- package/lib/library/swc/index.d.ts.map +1 -1
- package/lib/library/swc/index.js +6 -20
- package/lib/library/swc/index.js.map +1 -1
- package/lib/library/webpack/application/client/common.d.ts.map +1 -1
- package/lib/library/webpack/application/client/common.js +6 -1
- package/lib/library/webpack/application/client/common.js.map +1 -1
- package/lib/library/webpack/plugins/PolyfillCondition.d.ts +8 -0
- package/lib/library/webpack/plugins/PolyfillCondition.d.ts.map +1 -0
- package/lib/library/webpack/plugins/PolyfillCondition.js +46 -0
- package/lib/library/webpack/plugins/PolyfillCondition.js.map +1 -0
- package/lib/library/webpack/utils/polyfills/const.d.ts +3 -0
- package/lib/library/webpack/utils/polyfills/const.d.ts.map +1 -0
- package/lib/library/webpack/utils/polyfills/const.js +49 -0
- package/lib/library/webpack/utils/polyfills/const.js.map +1 -0
- package/lib/library/webpack/utils/polyfills/polyfillCondition.d.ts +8 -0
- package/lib/library/webpack/utils/polyfills/polyfillCondition.d.ts.map +1 -0
- package/lib/library/webpack/utils/polyfills/polyfillCondition.js +51 -0
- package/lib/library/webpack/utils/polyfills/polyfillCondition.js.map +1 -0
- package/lib/library/webpack/utils/polyfills/specToFeature.d.ts +7 -0
- package/lib/library/webpack/utils/polyfills/specToFeature.d.ts.map +1 -0
- package/lib/library/webpack/utils/polyfills/specToFeature.js +207 -0
- package/lib/library/webpack/utils/polyfills/specToFeature.js.map +1 -0
- package/lib/library/webpack/utils/transpiler.d.ts +2 -0
- package/lib/library/webpack/utils/transpiler.d.ts.map +1 -1
- package/lib/library/webpack/utils/transpiler.js +25 -3
- package/lib/library/webpack/utils/transpiler.js.map +1 -1
- package/lib/schema/autogeneratedSchema.json +3 -6
- package/lib/typings/configEntry/cli.d.ts +1 -2
- package/lib/typings/configEntry/cli.d.ts.map +1 -1
- package/package.json +5 -3
- package/schema.json +3 -6
- package/src/library/babel/index.ts +5 -28
- package/src/library/babel/plugins/lazy-component/lazy-component.spec.ts +2 -1
- package/src/library/babel/plugins/lazy-component/legacy-universal-replace.spec.ts +2 -1
- package/src/library/swc/index.ts +7 -26
- package/src/library/webpack/application/client/common.ts +7 -1
- package/src/library/webpack/plugins/PolyfillCondition.ts +62 -0
- package/src/library/webpack/utils/polyfills/__integration__/__snapshots__/condition.test.ts.snap +1348 -0
- package/src/library/webpack/utils/polyfills/__integration__/condition.test.ts +128 -0
- package/src/library/webpack/utils/polyfills/const.ts +46 -0
- package/src/library/webpack/utils/polyfills/polyfillCondition.ts +63 -0
- package/src/library/webpack/utils/polyfills/specToFeature.ts +243 -0
- package/src/library/webpack/utils/transpiler.ts +32 -2
- package/src/schema/autogeneratedSchema.json +3 -6
- package/src/typings/configEntry/cli.ts +1 -2
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getPolyfillCondition,
|
|
3
|
+
getMaxBrowserVersionsByFeatures,
|
|
4
|
+
} from '../utils/polyfills/polyfillCondition';
|
|
5
|
+
|
|
6
|
+
const TARGET_PLUGIN_NAME = 'stats-writer-plugin';
|
|
7
|
+
|
|
8
|
+
export default class PolyfillConditionPlugin {
|
|
9
|
+
constructor(private options: { filename: string }) {
|
|
10
|
+
this.options = options;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
apply(compiler) {
|
|
14
|
+
compiler.hooks.thisCompilation.tap(TARGET_PLUGIN_NAME, (compilation) => {
|
|
15
|
+
compilation.hooks.processAssets.tap(
|
|
16
|
+
{
|
|
17
|
+
name: TARGET_PLUGIN_NAME,
|
|
18
|
+
stage: compilation.constructor.PROCESS_ASSETS_STAGE_REPORT,
|
|
19
|
+
},
|
|
20
|
+
() => {
|
|
21
|
+
const { entrypoints } = compilation;
|
|
22
|
+
const polyfillEntrypoint = entrypoints.get('polyfill');
|
|
23
|
+
|
|
24
|
+
// If no polyfill entrypoint presented do nothing
|
|
25
|
+
if (!polyfillEntrypoint) return;
|
|
26
|
+
|
|
27
|
+
const polyfillChunk = polyfillEntrypoint.getEntrypointChunk();
|
|
28
|
+
const polyfillModules = compilation.chunkGraph.getChunkModulesIterable(polyfillChunk);
|
|
29
|
+
const coreJsModules = [];
|
|
30
|
+
|
|
31
|
+
for (const module of polyfillModules) {
|
|
32
|
+
if (module.resource && /\/core-js\/modules\//.test(module.resource)) {
|
|
33
|
+
coreJsModules.push(module);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const features = coreJsModules.map((module) =>
|
|
38
|
+
getFeatureNameFromModulePath(module.resource)
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const browserVersionsByFeatures = getMaxBrowserVersionsByFeatures(features);
|
|
42
|
+
const polyfillCondition = getPolyfillCondition(browserVersionsByFeatures);
|
|
43
|
+
const { filename } = this.options;
|
|
44
|
+
const statsJSON = JSON.parse(compilation.assets[filename].source().toString());
|
|
45
|
+
|
|
46
|
+
statsJSON.polyfillCondition = polyfillCondition;
|
|
47
|
+
statsJSON.features = browserVersionsByFeatures;
|
|
48
|
+
|
|
49
|
+
compilation.updateAsset(
|
|
50
|
+
filename,
|
|
51
|
+
new compiler.webpack.sources.RawSource(JSON.stringify(statsJSON))
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// node_modules/core-js/modules/es.array.push.js => es.array.push
|
|
60
|
+
function getFeatureNameFromModulePath(modulePath) {
|
|
61
|
+
return modulePath.split('/').at(-1).replace(/\.js$/, '');
|
|
62
|
+
}
|