@taro-minify-pack/plugin-async-pack 0.0.5-alpha.3 → 0.0.5-alpha.4
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/inject-style-component.js +9 -2
- package/dist/inject-style-component.js.map +1 -1
- package/dist/singleton-promise.d.ts +9 -5
- package/dist/singleton-promise.js +27 -18
- package/dist/singleton-promise.js.map +1 -1
- package/dist/transform-pages-wxml.js +4 -3
- package/dist/transform-pages-wxml.js.map +1 -1
- package/dist/transform-webpack-runtime.js +1 -1
- package/package.json +2 -1
- package/src/inject-style-component.ts +9 -2
- package/src/singleton-promise.ts +29 -18
- package/src/transform-pages-wxml.ts +4 -4
- package/src/transform-webpack-runtime.ts +1 -1
- package/tsconfig.json +1 -1
|
@@ -13,9 +13,16 @@ exports.InjectStyleComponentName = 'inject-style';
|
|
|
13
13
|
const injectStyleComponentCode = `
|
|
14
14
|
const { SingletonPromise } = require('~/singleton-promise.js')
|
|
15
15
|
Component({
|
|
16
|
+
properties: {
|
|
17
|
+
route: String,
|
|
18
|
+
},
|
|
16
19
|
lifetimes: {
|
|
17
|
-
attached: ()
|
|
18
|
-
|
|
20
|
+
attached: function () {
|
|
21
|
+
return SingletonPromise.loaded({dynamicPackageName:"DYNAMIC_PACKAGE_NAME",pageRoute:this.data.route})
|
|
22
|
+
},
|
|
23
|
+
detached: function () {
|
|
24
|
+
return SingletonPromise.unloaded({dynamicPackageName:"DYNAMIC_PACKAGE_NAME",pageRoute:this.data.route})
|
|
25
|
+
}
|
|
19
26
|
}
|
|
20
27
|
})
|
|
21
28
|
`;
|
|
@@ -1 +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
|
|
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;;;;;;;;;;;;;;;CAehC,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"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
+
interface Opt {
|
|
2
|
+
dynamicPackageName: string;
|
|
3
|
+
pageRoute: string;
|
|
4
|
+
}
|
|
1
5
|
export declare class SingletonPromise {
|
|
2
6
|
private static instance?;
|
|
3
|
-
private loadTimes;
|
|
4
7
|
private promise?;
|
|
5
8
|
private resolve?;
|
|
6
9
|
constructor();
|
|
7
|
-
static getInstance(key: string): SingletonPromise;
|
|
8
10
|
private resetPromise;
|
|
9
|
-
static
|
|
10
|
-
static
|
|
11
|
-
static
|
|
11
|
+
static getInstance(opt: Pick<Opt, 'dynamicPackageName'>): Map<string, SingletonPromise>;
|
|
12
|
+
static wait(opt: Pick<Opt, 'dynamicPackageName'>): Promise<(void | undefined)[]>;
|
|
13
|
+
static loaded(opt: Opt): void;
|
|
14
|
+
static unloaded(opt: Opt): void;
|
|
12
15
|
}
|
|
16
|
+
export {};
|
|
@@ -3,34 +3,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SingletonPromise = void 0;
|
|
4
4
|
class SingletonPromise {
|
|
5
5
|
constructor() {
|
|
6
|
-
this.loadTimes = 0;
|
|
7
6
|
this.resetPromise();
|
|
8
7
|
}
|
|
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
8
|
resetPromise() {
|
|
17
9
|
this.promise = new Promise((resolve) => {
|
|
18
10
|
this.resolve = resolve;
|
|
19
11
|
});
|
|
20
12
|
}
|
|
21
|
-
static
|
|
22
|
-
|
|
13
|
+
static getInstance(opt) {
|
|
14
|
+
const { dynamicPackageName } = opt;
|
|
15
|
+
if (!SingletonPromise.instance)
|
|
16
|
+
SingletonPromise.instance = new Map();
|
|
17
|
+
if (!SingletonPromise.instance.has(dynamicPackageName))
|
|
18
|
+
SingletonPromise.instance.set(dynamicPackageName, new Map());
|
|
19
|
+
return SingletonPromise.instance.get(dynamicPackageName);
|
|
20
|
+
}
|
|
21
|
+
static wait(opt) {
|
|
22
|
+
const instance = this.getInstance(opt);
|
|
23
|
+
const currentPages = getCurrentPages();
|
|
24
|
+
return Promise.all(currentPages.map(page => {
|
|
25
|
+
var _a;
|
|
26
|
+
if (!instance.has(page.route))
|
|
27
|
+
instance.set(page.route, new SingletonPromise());
|
|
28
|
+
return (_a = instance.get(page.route)) === null || _a === void 0 ? void 0 : _a.promise;
|
|
29
|
+
}));
|
|
23
30
|
}
|
|
24
|
-
static loaded(
|
|
31
|
+
static loaded(opt) {
|
|
25
32
|
var _a, _b;
|
|
26
|
-
|
|
27
|
-
this.getInstance(
|
|
33
|
+
const { pageRoute } = opt;
|
|
34
|
+
const instance = this.getInstance(opt);
|
|
35
|
+
if (!instance.has(pageRoute))
|
|
36
|
+
instance.set(pageRoute, new SingletonPromise());
|
|
37
|
+
(_b = (_a = instance.get(pageRoute)) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
28
38
|
}
|
|
29
|
-
static unloaded(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.getInstance(key).resetPromise();
|
|
39
|
+
static unloaded(opt) {
|
|
40
|
+
const { pageRoute } = opt;
|
|
41
|
+
const instance = this.getInstance(opt);
|
|
42
|
+
instance.delete(pageRoute);
|
|
34
43
|
}
|
|
35
44
|
}
|
|
36
45
|
exports.SingletonPromise = SingletonPromise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleton-promise.js","sourceRoot":"","sources":["../src/singleton-promise.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"singleton-promise.js","sourceRoot":"","sources":["../src/singleton-promise.ts"],"names":[],"mappings":";;;AAKA,MAAa,gBAAgB;IAQ3B;QACE,IAAI,CAAC,YAAY,EAAE,CAAA;IACrB,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,WAAW,CAAE,GAAoC;QACtD,MAAM,EAAE,kBAAkB,EAAE,GAAG,GAAG,CAAA;QAClC,IAAI,CAAC,gBAAgB,CAAC,QAAQ;YAAE,gBAAgB,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;QACrE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;QACpH,OAAO,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAE,CAAA;IAC3D,CAAC;IAED,MAAM,CAAC,IAAI,CAAE,GAAoC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACtC,MAAM,YAAY,GAAG,eAAe,EAAE,CAAA;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;;YACzC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAA;YAC/E,OAAO,MAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,0CAAE,OAAO,CAAA;QAC1C,CAAC,CAAC,CAAC,CAAA;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CAAE,GAAQ;;QACrB,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAA;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,gBAAgB,EAAE,CAAC,CAAA;QAC7E,MAAA,MAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,0CAAE,OAAO,kDAAI,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAE,GAAQ;QACvB,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAA;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACtC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC;CACF;AA9CD,4CA8CC"}
|
|
@@ -6,7 +6,7 @@ const appConfigAssetKey = 'app.json';
|
|
|
6
6
|
const transformPagesWXml = (opts) => {
|
|
7
7
|
const { assets, asyncComponents } = opts;
|
|
8
8
|
const curAppConfig = JSON.parse(assets[appConfigAssetKey].source());
|
|
9
|
-
const
|
|
9
|
+
const pageWXmlPaths = (() => {
|
|
10
10
|
var _a;
|
|
11
11
|
const { pages = [], subpackages, subPackages, tabBar } = curAppConfig;
|
|
12
12
|
const tabBarPagePaths = ((_a = tabBar === null || tabBar === void 0 ? void 0 : tabBar.list) === null || _a === void 0 ? void 0 : _a.map((item) => item.pagePath)) || [];
|
|
@@ -17,11 +17,12 @@ const transformPagesWXml = (opts) => {
|
|
|
17
17
|
}, []);
|
|
18
18
|
return [...pages, ...tabBarPagePaths, ...subPackagePagePaths].map((item) => `${item}.wxml`);
|
|
19
19
|
})();
|
|
20
|
-
const asyncComponentCode = Object.keys(asyncComponents).map((item) => `<${item}/>`);
|
|
21
20
|
Object.keys(assets).forEach((assetPath) => {
|
|
22
|
-
if (!
|
|
21
|
+
if (!pageWXmlPaths.includes(assetPath))
|
|
23
22
|
return;
|
|
24
23
|
const source = assets[assetPath].source();
|
|
24
|
+
const pageRoute = assetPath.replace(/\.wxml$/, '');
|
|
25
|
+
const asyncComponentCode = Object.keys(asyncComponents).map((item) => `<${item} route="${pageRoute}"/>`);
|
|
25
26
|
const tempCode = [source, ...asyncComponentCode].join('\n');
|
|
26
27
|
assets[assetPath] = new webpack_sources_1.RawSource(tempCode);
|
|
27
28
|
});
|
|
@@ -1 +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,
|
|
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,aAAa,GAAG,CAAC,GAAG,EAAE;;QAC1B,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,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACxC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAM;QAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,EAAY,CAAA;QACnD,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;QAClD,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,WAAW,SAAS,KAAK,CAAC,CAAA;QACxG,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"}
|
|
@@ -174,7 +174,7 @@ loadStylesheet = function (chunkId) {
|
|
|
174
174
|
const dynamicPackageNameRegex = DYNAMIC_PACKAGE_NAME_REGEX;
|
|
175
175
|
const [,dynamicPackageName] = fullHref.match(dynamicPackageNameRegex) || [];
|
|
176
176
|
const { SingletonPromise } = require('~/singleton-promise.js');
|
|
177
|
-
return SingletonPromise.wait(dynamicPackageName)
|
|
177
|
+
return SingletonPromise.wait({ dynamicPackageName })
|
|
178
178
|
}
|
|
179
179
|
`;
|
|
180
180
|
const replaceLoadStylesheetFn = (nodePath, opts) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taro-minify-pack/plugin-async-pack",
|
|
3
|
-
"version": "0.0.5-alpha.
|
|
3
|
+
"version": "0.0.5-alpha.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"@types/babel__traverse": "^7.20.6",
|
|
34
34
|
"@types/node": "^18.19.130",
|
|
35
35
|
"@types/webpack-sources": "^3.2.3",
|
|
36
|
+
"@types/wechat-miniprogram": "^3.4.9",
|
|
36
37
|
"@typescript-eslint/eslint-plugin": "^8.26.1",
|
|
37
38
|
"@typescript-eslint/parser": "^8.26.1",
|
|
38
39
|
"eslint": "^8.19.0",
|
|
@@ -12,9 +12,16 @@ export const InjectStyleComponentName = 'inject-style'
|
|
|
12
12
|
const injectStyleComponentCode = `
|
|
13
13
|
const { SingletonPromise } = require('~/singleton-promise.js')
|
|
14
14
|
Component({
|
|
15
|
+
properties: {
|
|
16
|
+
route: String,
|
|
17
|
+
},
|
|
15
18
|
lifetimes: {
|
|
16
|
-
attached: ()
|
|
17
|
-
|
|
19
|
+
attached: function () {
|
|
20
|
+
return SingletonPromise.loaded({dynamicPackageName:"DYNAMIC_PACKAGE_NAME",pageRoute:this.data.route})
|
|
21
|
+
},
|
|
22
|
+
detached: function () {
|
|
23
|
+
return SingletonPromise.unloaded({dynamicPackageName:"DYNAMIC_PACKAGE_NAME",pageRoute:this.data.route})
|
|
24
|
+
}
|
|
18
25
|
}
|
|
19
26
|
})
|
|
20
27
|
`
|
package/src/singleton-promise.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
interface Opt {
|
|
2
|
+
dynamicPackageName: string
|
|
3
|
+
pageRoute: string
|
|
4
|
+
}
|
|
5
|
+
|
|
1
6
|
export class SingletonPromise {
|
|
2
7
|
// 静态属性存放单例
|
|
3
|
-
private static instance?:
|
|
4
|
-
|
|
5
|
-
private loadTimes = 0
|
|
8
|
+
private static instance?: Map<string, Map<string, SingletonPromise>>
|
|
6
9
|
|
|
7
10
|
private promise?: Promise<void>
|
|
8
11
|
|
|
@@ -12,30 +15,38 @@ export class SingletonPromise {
|
|
|
12
15
|
this.resetPromise()
|
|
13
16
|
}
|
|
14
17
|
|
|
15
|
-
static getInstance (key:string) {
|
|
16
|
-
if (!SingletonPromise.instance) SingletonPromise.instance = {}
|
|
17
|
-
if (!SingletonPromise.instance[key]) SingletonPromise.instance[key] = new SingletonPromise()
|
|
18
|
-
return SingletonPromise.instance[key]
|
|
19
|
-
}
|
|
20
|
-
|
|
21
18
|
private resetPromise () {
|
|
22
19
|
this.promise = new Promise<void>((resolve) => {
|
|
23
20
|
this.resolve = resolve
|
|
24
21
|
})
|
|
25
22
|
}
|
|
26
23
|
|
|
27
|
-
static
|
|
28
|
-
|
|
24
|
+
static getInstance (opt: Pick<Opt, 'dynamicPackageName'>) {
|
|
25
|
+
const { dynamicPackageName } = opt
|
|
26
|
+
if (!SingletonPromise.instance) SingletonPromise.instance = new Map()
|
|
27
|
+
if (!SingletonPromise.instance.has(dynamicPackageName)) SingletonPromise.instance.set(dynamicPackageName, new Map())
|
|
28
|
+
return SingletonPromise.instance.get(dynamicPackageName)!
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static wait (opt: Pick<Opt, 'dynamicPackageName'>) {
|
|
32
|
+
const instance = this.getInstance(opt)
|
|
33
|
+
const currentPages = getCurrentPages()
|
|
34
|
+
return Promise.all(currentPages.map(page => {
|
|
35
|
+
if (!instance.has(page.route)) instance.set(page.route, new SingletonPromise())
|
|
36
|
+
return instance.get(page.route)?.promise
|
|
37
|
+
}))
|
|
29
38
|
}
|
|
30
39
|
|
|
31
|
-
static loaded (
|
|
32
|
-
|
|
33
|
-
this.getInstance(
|
|
40
|
+
static loaded (opt: Opt) {
|
|
41
|
+
const { pageRoute } = opt
|
|
42
|
+
const instance = this.getInstance(opt)
|
|
43
|
+
if (!instance.has(pageRoute)) instance.set(pageRoute, new SingletonPromise())
|
|
44
|
+
instance.get(pageRoute)?.resolve?.()
|
|
34
45
|
}
|
|
35
46
|
|
|
36
|
-
static unloaded (
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
47
|
+
static unloaded (opt: Opt) {
|
|
48
|
+
const { pageRoute } = opt
|
|
49
|
+
const instance = this.getInstance(opt)
|
|
50
|
+
instance.delete(pageRoute)
|
|
40
51
|
}
|
|
41
52
|
}
|
|
@@ -13,7 +13,7 @@ export const transformPagesWXml = (opts: Opts) => {
|
|
|
13
13
|
|
|
14
14
|
const curAppConfig: AppConfig = JSON.parse(assets[appConfigAssetKey].source() as string)
|
|
15
15
|
|
|
16
|
-
const
|
|
16
|
+
const pageWXmlPaths = (() => {
|
|
17
17
|
const { pages = [], subpackages, subPackages, tabBar } = curAppConfig
|
|
18
18
|
const tabBarPagePaths = tabBar?.list?.map((item) => item.pagePath) || []
|
|
19
19
|
const curSubPackages = subPackages || subpackages || []
|
|
@@ -24,11 +24,11 @@ export const transformPagesWXml = (opts: Opts) => {
|
|
|
24
24
|
return [...pages, ...tabBarPagePaths, ...subPackagePagePaths].map((item) => `${item}.wxml`)
|
|
25
25
|
})()
|
|
26
26
|
|
|
27
|
-
const asyncComponentCode = Object.keys(asyncComponents).map((item) => `<${item}/>`)
|
|
28
|
-
|
|
29
27
|
Object.keys(assets).forEach((assetPath) => {
|
|
30
|
-
if (!
|
|
28
|
+
if (!pageWXmlPaths.includes(assetPath)) return
|
|
31
29
|
const source = assets[assetPath].source() as string
|
|
30
|
+
const pageRoute = assetPath.replace(/\.wxml$/, '')
|
|
31
|
+
const asyncComponentCode = Object.keys(asyncComponents).map((item) => `<${item} route="${pageRoute}"/>`)
|
|
32
32
|
const tempCode = [source, ...asyncComponentCode].join('\n')
|
|
33
33
|
assets[assetPath] = new RawSource(tempCode)
|
|
34
34
|
})
|
|
@@ -175,7 +175,7 @@ loadStylesheet = function (chunkId) {
|
|
|
175
175
|
const dynamicPackageNameRegex = DYNAMIC_PACKAGE_NAME_REGEX;
|
|
176
176
|
const [,dynamicPackageName] = fullHref.match(dynamicPackageNameRegex) || [];
|
|
177
177
|
const { SingletonPromise } = require('~/singleton-promise.js');
|
|
178
|
-
return SingletonPromise.wait(dynamicPackageName)
|
|
178
|
+
return SingletonPromise.wait({ dynamicPackageName })
|
|
179
179
|
}
|
|
180
180
|
`
|
|
181
181
|
|