@taro-minify-pack/plugin-async-pack 0.0.4 → 0.0.5-alpha.1

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.
Files changed (42) hide show
  1. package/README.md +8 -10
  2. package/dist/index.js +46 -37
  3. package/dist/index.js.map +1 -1
  4. package/dist/inject-style-component.d.ts +14 -0
  5. package/dist/inject-style-component.js +55 -0
  6. package/dist/inject-style-component.js.map +1 -0
  7. package/dist/singleton-promise.d.ts +12 -0
  8. package/dist/singleton-promise.js +37 -0
  9. package/dist/singleton-promise.js.map +1 -0
  10. package/dist/transform-app-config.d.ts +8 -0
  11. package/dist/transform-app-config.js +33 -0
  12. package/dist/transform-app-config.js.map +1 -0
  13. package/dist/transform-pages-wxml.d.ts +7 -0
  14. package/dist/transform-pages-wxml.js +30 -0
  15. package/dist/transform-pages-wxml.js.map +1 -0
  16. package/dist/transform-react-lazy.d.ts +7 -0
  17. package/dist/transform-react-lazy.js +139 -0
  18. package/dist/transform-react-lazy.js.map +1 -0
  19. package/dist/transform-webpack-runtime.js +62 -16
  20. package/dist/transform-webpack-runtime.js.map +1 -1
  21. package/dist/types.d.ts +2 -2
  22. package/dist/utils.d.ts +13 -0
  23. package/dist/utils.js +48 -0
  24. package/dist/utils.js.map +1 -0
  25. package/package.json +3 -3
  26. package/src/index.ts +46 -40
  27. package/src/inject-style-component.ts +63 -0
  28. package/src/singleton-promise.ts +41 -0
  29. package/src/transform-app-config.ts +38 -0
  30. package/src/transform-pages-wxml.ts +35 -0
  31. package/src/transform-react-lazy.ts +132 -0
  32. package/src/transform-webpack-runtime.ts +78 -20
  33. package/src/types.ts +2 -2
  34. package/src/utils.ts +42 -0
  35. package/dist/merge-output.d.ts +0 -12
  36. package/dist/merge-output.js +0 -26
  37. package/dist/merge-output.js.map +0 -1
  38. package/dist/transform-app-stylesheet.d.ts +0 -6
  39. package/dist/transform-app-stylesheet.js +0 -14
  40. package/dist/transform-app-stylesheet.js.map +0 -1
  41. package/src/merge-output.ts +0 -33
  42. package/src/transform-app-stylesheet.ts +0 -17
package/README.md CHANGED
@@ -1,22 +1,20 @@
1
1
  ## @taro-minify-pack/plugin-async-pack
2
- > 异步加载主包代码, 优化主包体积
3
- >
4
- > 注:异步模块样式文件无法异步加载,已默认在主包样式文件中引入
2
+ > 异步加载主包代码, 优化主包体积(包含异步模块`js`与样式文件)
5
3
 
6
4
  ### 安装
7
5
 
8
6
  #### npm 安装
9
7
  ```bash
10
- npm install @taro-minify-pack/plugin-async-pack
8
+ npm install @taro-minify-pack/plugin-async-pack @taro-minify-pack/react-lazy-enhanced
11
9
  ```
12
10
  #### yarn 安装
13
11
  ```bash
14
- yarn add @taro-minify-pack/plugin-async-pack
12
+ yarn add @taro-minify-pack/plugin-async-pack @taro-minify-pack/react-lazy-enhanced
15
13
  ```
16
14
 
17
15
  #### pnpm 安装
18
16
  ```bash
19
- pnpm add @taro-minify-pack/plugin-async-pack
17
+ pnpm add @taro-minify-pack/plugin-async-pack @taro-minify-pack/react-lazy-enhanced
20
18
  ```
21
19
  ### 配置
22
20
 
@@ -49,10 +47,10 @@ module.exports = {
49
47
  },
50
48
  plugins: [
51
49
  ['@taro-minify-pack/plugin-async-pack', {
52
- // js 异步分包名
53
- dynamicModuleJsDir: 'dynamic-common',
54
- // 异步模块样式文件名
55
- dynamicModuleStyleFile: 'dynamic-common'
50
+ // 异步分包名前缀
51
+ dynamicPackageNamePrefix: 'dynamic-common',
52
+ // 异步分包数量
53
+ dynamicPackageCount: 2
56
54
  }],
57
55
  ],
58
56
  };
package/dist/index.js CHANGED
@@ -1,24 +1,20 @@
1
1
  "use strict";
2
- var __rest = (this && this.__rest) || function (s, e) {
3
- var t = {};
4
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
- t[p] = s[p];
6
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
- t[p[i]] = s[p[i]];
10
- }
11
- return t;
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
4
  };
13
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
14
8
  const webpack_sources_1 = require("webpack-sources");
15
9
  const transform_webpack_runtime_1 = require("./transform-webpack-runtime");
16
10
  const transform_before_compression_plugin_1 = require("./transform-before-compression-plugin");
17
- const merge_output_1 = require("./merge-output");
18
- const transform_app_stylesheet_1 = require("./transform-app-stylesheet");
11
+ const inject_style_component_1 = require("./inject-style-component");
12
+ const transform_app_config_1 = require("./transform-app-config");
13
+ const transform_pages_wxml_1 = require("./transform-pages-wxml");
14
+ const utils_1 = require("./utils");
19
15
  const dynamicPackOptsDefaultOpt = {
20
- dynamicModuleJsDir: 'dynamic-common',
21
- dynamicModuleStyleFile: 'dynamic-common'
16
+ dynamicPackageNamePrefix: 'dynamic-common',
17
+ dynamicPackageCount: 1
22
18
  };
23
19
  exports.default = (ctx, pluginOpts) => {
24
20
  const finalOpts = Object.assign(Object.assign({}, dynamicPackOptsDefaultOpt), pluginOpts);
@@ -30,12 +26,17 @@ exports.default = (ctx, pluginOpts) => {
30
26
  const { common, vendors } = existingSplitChunks.cacheGroups;
31
27
  const newCommonChunks = common ? Object.assign(Object.assign({}, common), { chunks: 'initial' }) : common;
32
28
  const newVendorsChunks = vendors ? Object.assign(Object.assign({}, vendors), { chunks: 'initial' }) : vendors;
29
+ const generateChunkFilename = (pathData, ext) => {
30
+ const { chunk } = pathData;
31
+ const order = (0, utils_1.hashModBigInt)((chunk === null || chunk === void 0 ? void 0 : chunk.hash) || '', finalOpts.dynamicPackageCount);
32
+ return `${(0, utils_1.generateDynamicPackageName)(Object.assign(Object.assign({}, finalOpts), { order }))}/[chunkhash]${ext}`;
33
+ };
33
34
  chain.optimization.merge({
34
35
  splitChunks: Object.assign(Object.assign({}, existingSplitChunks), { cacheGroups: Object.assign(Object.assign({}, existingSplitChunks.cacheGroups), { common: newCommonChunks, vendors: newVendorsChunks }) })
35
36
  });
36
37
  chain.merge({
37
38
  output: {
38
- chunkFilename: `${finalOpts.dynamicModuleJsDir}/[chunkhash].js`, // 异步模块输出路径
39
+ chunkFilename: (pathData) => generateChunkFilename(pathData, '.js'),
39
40
  path: ctx.paths.outputPath,
40
41
  clean: true
41
42
  }
@@ -43,37 +44,45 @@ exports.default = (ctx, pluginOpts) => {
43
44
  chain.plugin('miniCssExtractPlugin')
44
45
  .tap((args) => {
45
46
  const [options] = args;
46
- const finalOption = Object.assign(Object.assign({}, options), { chunkFilename: `${finalOpts.dynamicModuleStyleFile}/[chunkhash].wxss` });
47
- return [finalOption];
47
+ const chunkFilename = (pathData) => generateChunkFilename(pathData, '.wxss');
48
+ return [Object.assign(Object.assign({}, options), { chunkFilename })];
49
+ });
50
+ chain.module
51
+ .rule('script')
52
+ .use('babelLoader')
53
+ .tap((opts) => {
54
+ const pluginConfig = path_1.default.resolve(__dirname, './transform-react-lazy');
55
+ return Object.assign(Object.assign({}, opts), { plugins: [pluginConfig, ...(opts.plugins || [])] });
48
56
  });
49
57
  chain.plugin(transform_before_compression_plugin_1.PLUGIN_NAME).use(transform_before_compression_plugin_1.TransformBeforeCompressionPlugin, [{
50
- test: /^(runtime\.js|app\.wxss)$/,
58
+ test: /^(runtime\.js)$/,
51
59
  transform: (opt) => {
52
- const { source, assetName, assets } = opt;
60
+ const { source, assets } = opt;
53
61
  const transformOpts = Object.assign(Object.assign({}, finalOpts), { assets });
54
- if (/^app\.wxss$/.test(assetName))
55
- return (0, transform_app_stylesheet_1.transformAppStylesheet)(source, transformOpts);
56
- if (/^runtime\.js$/.test(assetName))
57
- return (0, transform_webpack_runtime_1.transformWebpackRuntime)(source, transformOpts);
58
- return source;
62
+ return (0, transform_webpack_runtime_1.transformWebpackRuntime)(source, transformOpts);
59
63
  }
60
64
  }]);
61
- chain.plugin(merge_output_1.PLUGIN_NAME).use(merge_output_1.MergeOutputPlugin, [{
62
- test: new RegExp(`^${finalOpts.dynamicModuleStyleFile}\\/.*\\.wxss$`),
63
- outputFile: `${finalOpts.dynamicModuleStyleFile}.wxss`
64
- }]);
65
+ chain.plugin(inject_style_component_1.PLUGIN_NAME).use(inject_style_component_1.InjectStyleComponentPlugin, [finalOpts]);
65
66
  });
66
67
  ctx.modifyBuildAssets(({ assets }) => {
67
- const curAppJSON = assets['app.json'];
68
- if (!curAppJSON)
68
+ const hasDynamicModule = Object.keys(assets).some((key) => (0, utils_1.isDynamicPackageName)(finalOpts.dynamicPackageNamePrefix, key));
69
+ if (!hasDynamicModule)
69
70
  return;
70
- const curAppJSONContent = JSON.parse(curAppJSON.source());
71
- const dynamicPackagesConfig = { root: finalOpts.dynamicModuleJsDir, pages: [] };
72
- const hasDynamicModule = Object.keys(assets).some((key) => key.startsWith(`${finalOpts.dynamicModuleJsDir}/`));
73
- const { resolveAlias = {}, subPackages, subpackages } = curAppJSONContent, otherAppJSON = __rest(curAppJSONContent, ["resolveAlias", "subPackages", "subpackages"]);
74
- const finalSubPackages = subPackages || subpackages || [];
75
- const newAppJSONContent = Object.assign(Object.assign({}, otherAppJSON), { subPackages: hasDynamicModule ? [...finalSubPackages, dynamicPackagesConfig] : finalSubPackages, resolveAlias: Object.assign(Object.assign({}, resolveAlias), { [`${finalOpts.dynamicModuleJsDir}/*`]: `/${finalOpts.dynamicModuleJsDir}/*` }) });
76
- assets['app.json'] = new webpack_sources_1.RawSource(JSON.stringify(newAppJSONContent, null, 2));
71
+ const asyncComponents = (() => {
72
+ if (finalOpts.dynamicPackageCount <= 1) {
73
+ return { [inject_style_component_1.InjectStyleComponentName]: `${(0, utils_1.generateDynamicPackageName)(finalOpts)}/${inject_style_component_1.InjectStyleComponentName}` };
74
+ }
75
+ return new Array(finalOpts.dynamicPackageCount).fill(null).reduce((result, _, order) => {
76
+ const dynamicPackageName = (0, utils_1.generateDynamicPackageName)(Object.assign(Object.assign({}, finalOpts), { order }));
77
+ const componentName = `${inject_style_component_1.InjectStyleComponentName}-${(0, utils_1.generateKeyByOrder)(order)}`;
78
+ return Object.assign(Object.assign({}, result), { [componentName]: `${dynamicPackageName}/${inject_style_component_1.InjectStyleComponentName}` });
79
+ }, {});
80
+ })();
81
+ const filePath = path_1.default.resolve(__dirname, './singleton-promise.js');
82
+ const fileContent = fs_1.default.readFileSync(filePath, { encoding: 'utf-8' });
83
+ assets['singleton-promise.js'] = new webpack_sources_1.RawSource(fileContent);
84
+ (0, transform_app_config_1.transformAppConfig)(Object.assign(Object.assign({}, finalOpts), { assets, asyncComponents }));
85
+ (0, transform_pages_wxml_1.transformPagesWXml)({ assets, asyncComponents });
77
86
  });
78
87
  };
79
88
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Compiler } from 'webpack';
2
+ import { AsyncPackOpts } from './types';
3
+ export declare const PLUGIN_NAME = "InjectStyleComponent";
4
+ export declare const InjectStyleComponentName = "inject-style";
5
+ type Opt = AsyncPackOpts;
6
+ export declare class InjectStyleComponentPlugin {
7
+ private readonly opt;
8
+ private readonly WXmlContent;
9
+ private readonly JsonContent;
10
+ private readonly JsContent;
11
+ constructor(opt: Opt);
12
+ apply(compiler: Compiler): void;
13
+ }
14
+ export {};
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.InjectStyleComponentPlugin = exports.InjectStyleComponentName = exports.PLUGIN_NAME = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const template_1 = __importDefault(require("@babel/template"));
9
+ const generator_1 = __importDefault(require("@babel/generator"));
10
+ const utils_1 = require("./utils");
11
+ exports.PLUGIN_NAME = 'InjectStyleComponent';
12
+ exports.InjectStyleComponentName = 'inject-style';
13
+ const injectStyleComponentCode = `
14
+ const { SingletonPromise } = require('~/singleton-promise.js')
15
+ Component({
16
+ lifetimes: {
17
+ attached: () => SingletonPromise.loaded("DYNAMIC_PACKAGE_NAME"),
18
+ detached: () => SingletonPromise.unloaded("DYNAMIC_PACKAGE_NAME")
19
+ }
20
+ })
21
+ `;
22
+ class InjectStyleComponentPlugin {
23
+ constructor(opt) {
24
+ this.WXmlContent = '<block/>';
25
+ this.JsonContent = '{"component": true,"styleIsolation": "shared"}';
26
+ this.JsContent = injectStyleComponentCode;
27
+ this.opt = opt;
28
+ }
29
+ apply(compiler) {
30
+ compiler.hooks.compilation.tap(exports.PLUGIN_NAME, (compilation) => {
31
+ const stage = compiler.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL; // 最早阶段,在优化前
32
+ compilation.hooks.processAssets.tap({ name: exports.PLUGIN_NAME, stage }, (assets) => {
33
+ for (let order = 0; order < this.opt.dynamicPackageCount; order++) {
34
+ const dynamicPackageName = (0, utils_1.generateDynamicPackageName)(Object.assign(Object.assign({}, this.opt), { order }));
35
+ const { code: jsFileContent } = (0, generator_1.default)(template_1.default.program(this.JsContent)({ DYNAMIC_PACKAGE_NAME: dynamicPackageName }));
36
+ const styleFileContent = Object.keys(assets).reduce((result, assetPath) => {
37
+ if (!(0, utils_1.isDynamicPackageWXssAssetWithOrder)(Object.assign(Object.assign({}, this.opt), { order }), assetPath))
38
+ return result;
39
+ const relativePath = path_1.default.relative(dynamicPackageName, assetPath);
40
+ const code = `@import './${relativePath}';`;
41
+ return result + code + '\n';
42
+ }, '');
43
+ const { RawSource } = compiler.webpack.sources;
44
+ const componentPath = `${dynamicPackageName}/${exports.InjectStyleComponentName}`;
45
+ compilation.assets[`${componentPath}.js`] = new RawSource(jsFileContent);
46
+ compilation.assets[`${componentPath}.wxss`] = new RawSource(styleFileContent);
47
+ compilation.assets[`${componentPath}.wxml`] = new RawSource(this.WXmlContent);
48
+ compilation.assets[`${componentPath}.json`] = new RawSource(this.JsonContent);
49
+ }
50
+ });
51
+ });
52
+ }
53
+ }
54
+ exports.InjectStyleComponentPlugin = InjectStyleComponentPlugin;
55
+ //# sourceMappingURL=inject-style-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject-style-component.js","sourceRoot":"","sources":["../src/inject-style-component.ts"],"names":[],"mappings":";;;;;;AACA,gDAAuB;AAEvB,+DAAsC;AACtC,iEAAwC;AACxC,mCAAwF;AAE3E,QAAA,WAAW,GAAG,sBAAsB,CAAA;AAEpC,QAAA,wBAAwB,GAAG,cAAc,CAAA;AAEtD,MAAM,wBAAwB,GAAG;;;;;;;;CAQhC,CAAA;AAID,MAAa,0BAA0B;IASrC,YAAa,GAAQ;QANJ,gBAAW,GAAW,UAAU,CAAA;QAEhC,gBAAW,GAAU,gDAAgD,CAAA;QAErE,cAAS,GAAW,wBAAwB,CAAA;QAG3D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,KAAK,CAAE,QAAkB;QACvB,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAW,EAAE,CAAC,WAAwB,EAAE,EAAE;YACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,+BAA+B,CAAA,CAAC,YAAY;YAEvF,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,mBAAW,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC3E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,CAAC;oBAClE,MAAM,kBAAkB,GAAG,IAAA,kCAA0B,kCAAM,IAAI,CAAC,GAAG,KAAE,KAAK,IAAG,CAAA;oBAE7E,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,IAAA,mBAAS,EAAC,kBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAA;oBACzH,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE;wBACxE,IAAI,CAAC,IAAA,0CAAkC,kCAAM,IAAI,CAAC,GAAG,KAAE,KAAK,KAAI,SAAS,CAAC;4BAAE,OAAO,MAAM,CAAA;wBACzF,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;wBACjE,MAAM,IAAI,GAAG,cAAc,YAAY,IAAI,CAAA;wBAC3C,OAAO,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;oBAC7B,CAAC,EAAE,EAAE,CAAC,CAAA;oBAEN,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAA;oBAC9C,MAAM,aAAa,GAAG,GAAG,kBAAkB,IAAI,gCAAwB,EAAE,CAAA;oBACzE,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,CAAA;oBACxE,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAA;oBAC7E,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;oBAC7E,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC/E,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAvCD,gEAuCC"}
@@ -0,0 +1,12 @@
1
+ export declare class SingletonPromise {
2
+ private static instance?;
3
+ private loadTimes;
4
+ private promise?;
5
+ private resolve?;
6
+ constructor();
7
+ static getInstance(key: string): SingletonPromise;
8
+ private resetPromise;
9
+ static wait(key: string): Promise<void> | undefined;
10
+ static loaded(key: string): void;
11
+ static unloaded(key: string): void;
12
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SingletonPromise = void 0;
4
+ class SingletonPromise {
5
+ constructor() {
6
+ this.loadTimes = 0;
7
+ this.resetPromise();
8
+ }
9
+ static getInstance(key) {
10
+ if (!SingletonPromise.instance)
11
+ SingletonPromise.instance = {};
12
+ if (!SingletonPromise.instance[key])
13
+ SingletonPromise.instance[key] = new SingletonPromise();
14
+ return SingletonPromise.instance[key];
15
+ }
16
+ resetPromise() {
17
+ this.promise = new Promise((resolve) => {
18
+ this.resolve = resolve;
19
+ });
20
+ }
21
+ static wait(key) {
22
+ return this.getInstance(key).promise;
23
+ }
24
+ static loaded(key) {
25
+ var _a, _b;
26
+ (_b = (_a = this.getInstance(key)).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);
27
+ this.getInstance(key).loadTimes += 1;
28
+ }
29
+ static unloaded(key) {
30
+ this.getInstance(key).loadTimes -= 1;
31
+ if (this.getInstance(key).loadTimes > 0)
32
+ return;
33
+ this.getInstance(key).resetPromise();
34
+ }
35
+ }
36
+ exports.SingletonPromise = SingletonPromise;
37
+ //# sourceMappingURL=singleton-promise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleton-promise.js","sourceRoot":"","sources":["../src/singleton-promise.ts"],"names":[],"mappings":";;;AAAA,MAAa,gBAAgB;IAU3B;QANQ,cAAS,GAAG,CAAC,CAAA;QAOnB,IAAI,CAAC,YAAY,EAAE,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,WAAW,CAAE,GAAU;QAC5B,IAAI,CAAC,gBAAgB,CAAC,QAAQ;YAAE,gBAAgB,CAAC,QAAQ,GAAG,EAAE,CAAA;QAC9D,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,gBAAgB,EAAE,CAAA;QAC5F,OAAO,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IACvC,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CAAE,GAAU;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,MAAM,CAAE,GAAU;;QACvB,MAAA,MAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAC,OAAO,kDAAI,CAAA;QACjC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAE,GAAU;QACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAA;QACpC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC;YAAE,OAAM;QAC/C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,CAAA;IACtC,CAAC;CACF;AAxCD,4CAwCC"}
@@ -0,0 +1,8 @@
1
+ import type { AsyncPackOpts } from './types';
2
+ import { RawSource } from 'webpack-sources';
3
+ interface Opts extends AsyncPackOpts {
4
+ assets: Record<string, RawSource>;
5
+ asyncComponents: Record<string, string>;
6
+ }
7
+ export declare const transformAppConfig: (opts: Opts) => void;
8
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.transformAppConfig = void 0;
15
+ const webpack_sources_1 = require("webpack-sources");
16
+ const utils_1 = require("./utils");
17
+ const appConfigAssetKey = 'app.json';
18
+ const transformAppConfig = (opts) => {
19
+ const { dynamicPackageCount, asyncComponents, assets } = opts;
20
+ const curAppConfig = JSON.parse(assets[appConfigAssetKey].source());
21
+ const { subPackages, subpackages, resolveAlias = {}, usingComponents = {}, componentPlaceholder = {} } = curAppConfig, otherAppJSON = __rest(curAppConfig, ["subPackages", "subpackages", "resolveAlias", "usingComponents", "componentPlaceholder"]);
22
+ const finalSubPackages = subPackages || subpackages || [];
23
+ const dynamicPackagesConfigs = new Array(dynamicPackageCount).fill(null).map((_, order) => {
24
+ return { root: (0, utils_1.generateDynamicPackageName)(Object.assign(Object.assign({}, opts), { order })), pages: [] };
25
+ });
26
+ const asyncComponentPlaceholder = Object.keys(asyncComponents).reduce((result, item) => {
27
+ return Object.assign(Object.assign({}, result), { [item]: 'block' });
28
+ }, {});
29
+ const finalAppConfig = Object.assign(Object.assign({}, otherAppJSON), { usingComponents: Object.assign(Object.assign({}, usingComponents), asyncComponents), componentPlaceholder: Object.assign(Object.assign({}, componentPlaceholder), asyncComponentPlaceholder), subPackages: [...finalSubPackages, ...dynamicPackagesConfigs], resolveAlias: Object.assign(Object.assign({}, resolveAlias), { '~/*': '/*' }) });
30
+ assets[appConfigAssetKey] = new webpack_sources_1.RawSource(JSON.stringify(finalAppConfig));
31
+ };
32
+ exports.transformAppConfig = transformAppConfig;
33
+ //# sourceMappingURL=transform-app-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-app-config.js","sourceRoot":"","sources":["../src/transform-app-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,qDAA2C;AAC3C,mCAAoD;AAOpD,MAAM,iBAAiB,GAAG,UAAU,CAAA;AAE7B,MAAM,kBAAkB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC/C,MAAM,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAE7D,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAY,CAAC,CAAA;IAE7E,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,GAAG,EAAE,EAAE,eAAe,GAAG,EAAE,EAAE,oBAAoB,GAAG,EAAE,KAAsB,YAAY,EAA7B,YAAY,UAAK,YAAY,EAAhI,yFAAiH,CAAe,CAAA;IAEtI,MAAM,gBAAgB,GAAG,WAAW,IAAI,WAAW,IAAI,EAAE,CAAA;IAEzD,MAAM,sBAAsB,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;QACxF,OAAO,EAAE,IAAI,EAAE,IAAA,kCAA0B,kCAAM,IAAI,KAAE,KAAK,IAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACrF,uCAAY,MAAM,KAAE,CAAC,IAAI,CAAC,EAAE,OAAO,IAAE;IACvC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,cAAc,mCACf,YAAY,KACf,eAAe,kCAAO,eAAe,GAAK,eAAe,GACzD,oBAAoB,kCAAO,oBAAoB,GAAK,yBAAyB,GAC7E,WAAW,EAAE,CAAC,GAAG,gBAAgB,EAAE,GAAG,sBAAsB,CAAC,EAC7D,YAAY,kCAAO,YAAY,KAAE,KAAK,EAAE,IAAI,MAC7C,CAAA;IAED,MAAM,CAAC,iBAAiB,CAAC,GAAG,IAAI,2BAAS,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAA;AAC3E,CAAC,CAAA;AA1BY,QAAA,kBAAkB,sBA0B9B"}
@@ -0,0 +1,7 @@
1
+ import { RawSource } from 'webpack-sources';
2
+ interface Opts {
3
+ assets: Record<string, RawSource>;
4
+ asyncComponents: Record<string, string>;
5
+ }
6
+ export declare const transformPagesWXml: (opts: Opts) => void;
7
+ export {};
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformPagesWXml = void 0;
4
+ const webpack_sources_1 = require("webpack-sources");
5
+ const appConfigAssetKey = 'app.json';
6
+ const transformPagesWXml = (opts) => {
7
+ const { assets, asyncComponents } = opts;
8
+ const curAppConfig = JSON.parse(assets[appConfigAssetKey].source());
9
+ const pagesPath = (() => {
10
+ var _a;
11
+ const { pages = [], subpackages, subPackages, tabBar } = curAppConfig;
12
+ const tabBarPagePaths = ((_a = tabBar === null || tabBar === void 0 ? void 0 : tabBar.list) === null || _a === void 0 ? void 0 : _a.map((item) => item.pagePath)) || [];
13
+ const curSubPackages = subPackages || subpackages || [];
14
+ const subPackagePagePaths = curSubPackages.reduce((result, item) => {
15
+ const subPackagePagePath = item.root || '';
16
+ return [...result, ...(item.pages || []).map((page) => `${subPackagePagePath}/${page}`)];
17
+ }, []);
18
+ return [...pages, ...tabBarPagePaths, ...subPackagePagePaths].map((item) => `${item}.wxml`);
19
+ })();
20
+ const asyncComponentCode = Object.keys(asyncComponents).map((item) => `<${item}/>`);
21
+ Object.keys(assets).forEach((assetPath) => {
22
+ if (!pagesPath.includes(assetPath))
23
+ return;
24
+ const source = assets[assetPath].source();
25
+ const tempCode = [source, ...asyncComponentCode].join('\n');
26
+ assets[assetPath] = new webpack_sources_1.RawSource(tempCode);
27
+ });
28
+ };
29
+ exports.transformPagesWXml = transformPagesWXml;
30
+ //# sourceMappingURL=transform-pages-wxml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-pages-wxml.js","sourceRoot":"","sources":["../src/transform-pages-wxml.ts"],"names":[],"mappings":";;;AACA,qDAA2C;AAO3C,MAAM,iBAAiB,GAAG,UAAU,CAAA;AAE7B,MAAM,kBAAkB,GAAG,CAAC,IAAU,EAAE,EAAE;IAC/C,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;IAExC,MAAM,YAAY,GAAc,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAY,CAAC,CAAA;IAExF,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE;;QACtB,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,YAAY,CAAA;QACrE,MAAM,eAAe,GAAG,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAI,EAAE,CAAA;QACxE,MAAM,cAAc,GAAG,WAAW,IAAI,WAAW,IAAI,EAAE,CAAA;QACvD,MAAM,mBAAmB,GAAG,cAAc,CAAC,MAAM,CAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YAC3E,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;YAC1C,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,kBAAkB,IAAI,IAAI,EAAE,CAAC,CAAC,CAAA;QAC1F,CAAC,EAAE,EAAE,CAAC,CAAA;QACN,OAAO,CAAC,GAAG,KAAK,EAAE,GAAG,eAAe,EAAE,GAAG,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,CAAC,CAAA;IAC7F,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;IAEnF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACxC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAM;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAY,CAAA;QACnD,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,GAAG,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3D,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,2BAAS,CAAC,QAAQ,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAxBY,QAAA,kBAAkB,sBAwB9B"}
@@ -0,0 +1,7 @@
1
+ import { PluginObj, PluginPass } from '@babel/core';
2
+ interface State extends PluginPass {
3
+ reactNamespaces: Set<string>;
4
+ reactLazyBindings: Set<string>;
5
+ }
6
+ declare const _default: () => PluginObj<State>;
7
+ export default _default;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const types = __importStar(require("@babel/types"));
37
+ const customLazySource = '@taro-minify-pack/react-lazy-enhanced';
38
+ exports.default = () => {
39
+ return {
40
+ visitor: {
41
+ Program: {
42
+ enter(programPath, state) {
43
+ const { filename = '' } = state;
44
+ if (new RegExp(customLazySource).test(filename))
45
+ return;
46
+ state.reactNamespaces = new Set();
47
+ state.reactLazyBindings = new Set();
48
+ programPath.traverse({
49
+ ImportDeclaration(path) {
50
+ if (!types.isStringLiteral(path.node.source, { value: 'react' }))
51
+ return;
52
+ const { specifiers } = path.node;
53
+ specifiers.forEach((spec) => {
54
+ const { name } = spec.local;
55
+ // import React from 'react'
56
+ if (types.isImportDefaultSpecifier(spec))
57
+ return state.reactNamespaces.add(name);
58
+ // import * as React from 'react'
59
+ if (types.isImportNamespaceSpecifier(spec))
60
+ return state.reactNamespaces.add(name);
61
+ // import { lazy } from 'react'
62
+ if (types.isImportSpecifier(spec) && types.isIdentifier(spec.imported, { name: 'lazy' })) {
63
+ state.reactLazyBindings.add(name);
64
+ }
65
+ });
66
+ }
67
+ });
68
+ programPath.traverse({
69
+ VariableDeclarator(path) {
70
+ const { id, init } = path.node;
71
+ // const a = React.lazy
72
+ if (types.isIdentifier(id)) {
73
+ if (!types.isMemberExpression(init))
74
+ return;
75
+ if (!types.isIdentifier(init.object))
76
+ return;
77
+ if (!types.isIdentifier(init.property, { name: 'lazy' }))
78
+ return;
79
+ if (!state.reactNamespaces.has(init.object.name))
80
+ return;
81
+ state.reactLazyBindings.add(id.name);
82
+ }
83
+ // const { lazy: a } = React;
84
+ if (types.isObjectPattern(id) && types.isIdentifier(init)) {
85
+ const { properties } = id;
86
+ if (!state.reactNamespaces.has(init.name))
87
+ return;
88
+ properties.forEach((prop) => {
89
+ if (!types.isObjectProperty(prop))
90
+ return;
91
+ if (!types.isIdentifier(prop.key, { name: 'lazy' }))
92
+ return;
93
+ if (!types.isIdentifier(prop.value))
94
+ return;
95
+ state.reactLazyBindings.add(prop.value.name);
96
+ });
97
+ }
98
+ }
99
+ });
100
+ },
101
+ exit(programPath, state) {
102
+ const { filename = '' } = state;
103
+ if (new RegExp(customLazySource).test(filename))
104
+ return;
105
+ let needInject = false;
106
+ const customLazyId = programPath.scope.generateUidIdentifier('customLazy');
107
+ programPath.traverse({
108
+ CallExpression(path) {
109
+ const { callee } = path.node;
110
+ if (types.isMemberExpression(callee)) {
111
+ if (!types.isIdentifier(callee.object))
112
+ return;
113
+ if (!state.reactNamespaces.has(callee.object.name))
114
+ return;
115
+ if (!types.isIdentifier(callee.property, { name: 'lazy' }))
116
+ return;
117
+ path.node.callee = customLazyId;
118
+ needInject = true;
119
+ }
120
+ if (types.isIdentifier(callee) && state.reactLazyBindings.has(callee.name)) {
121
+ path.node.callee = customLazyId;
122
+ needInject = true;
123
+ }
124
+ }
125
+ });
126
+ const hasImport = programPath.node.body.some((node) => {
127
+ return types.isImportDeclaration(node) && node.source.value === customLazySource;
128
+ });
129
+ if (hasImport || !needInject)
130
+ return;
131
+ const specifier = types.importSpecifier(customLazyId, types.identifier('lazy'));
132
+ const nodes = types.importDeclaration([specifier], types.stringLiteral(customLazySource));
133
+ programPath.unshiftContainer('body', nodes);
134
+ }
135
+ }
136
+ }
137
+ };
138
+ };
139
+ //# sourceMappingURL=transform-react-lazy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-react-lazy.js","sourceRoot":"","sources":["../src/transform-react-lazy.ts"],"names":[],"mappings":"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"}