@taro-hmr-compile/plugin-webpack 0.0.1-alpha.7 → 0.0.1-alpha.9
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/compile/hmr-compiler-loader.js +44 -7
- package/dist/compile/hmr-compiler-loader.js.map +1 -1
- package/dist/compile/hmr-compiler-plugin.d.ts +4 -2
- package/dist/compile/hmr-compiler-plugin.js +11 -14
- package/dist/compile/hmr-compiler-plugin.js.map +1 -1
- package/dist/compile/lazy-compiler-loader.d.ts +1 -0
- package/dist/compile/lazy-compiler-loader.js +7 -3
- package/dist/compile/lazy-compiler-loader.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/patch/hmr-patch-plugin.d.ts +6 -5
- package/dist/patch/hmr-patch-plugin.js +33 -179
- package/dist/patch/hmr-patch-plugin.js.map +1 -1
- package/dist/patch/hmr-patch-processor.d.ts +29 -0
- package/dist/patch/hmr-patch-processor.js +106 -0
- package/dist/patch/hmr-patch-processor.js.map +1 -0
- package/dist/patch/hmr-patch-runtime-plugin.js +1 -1
- package/dist/patch/types.d.ts +16 -0
- package/dist/patch/types.js +3 -0
- package/dist/patch/types.js.map +1 -0
- package/dist/patch/utils.d.ts +28 -0
- package/dist/patch/utils.js +179 -0
- package/dist/patch/utils.js.map +1 -0
- package/package.json +2 -2
- package/src/compile/hmr-compiler-loader.ts +43 -7
- package/src/compile/hmr-compiler-plugin.ts +18 -16
- package/src/compile/lazy-compiler-loader.ts +9 -3
- package/src/index.ts +2 -0
- package/src/patch/hmr-patch-plugin.ts +42 -168
- package/src/patch/hmr-patch-processor.ts +151 -0
- package/src/patch/hmr-patch-runtime-plugin.ts +1 -1
- package/src/patch/types.ts +20 -0
- package/src/patch/utils.ts +179 -0
- package/dist/patch/hmr-patch-manager.d.ts +0 -30
- package/dist/patch/hmr-patch-manager.js +0 -75
- package/dist/patch/hmr-patch-manager.js.map +0 -1
- package/src/patch/hmr-patch-manager.ts +0 -102
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { Expression } from '@babel/types';
|
|
2
|
-
export interface BootstrapPatchSource {
|
|
3
|
-
type: 'bootstrap';
|
|
4
|
-
moduleFactories: Map<string, Expression>;
|
|
5
|
-
}
|
|
6
|
-
export interface UpdatePatchSource {
|
|
7
|
-
type: 'update';
|
|
8
|
-
fromHash: string;
|
|
9
|
-
toHash: string;
|
|
10
|
-
moduleFactories: Map<string, Expression>;
|
|
11
|
-
removedModules: string[];
|
|
12
|
-
}
|
|
13
|
-
export type PatchSource = BootstrapPatchSource | UpdatePatchSource;
|
|
14
|
-
/** 仅维护 bootstrap/update Patch 状态、连续性和压缩,不依赖 Webpack 编译对象。 */
|
|
15
|
-
export declare class HmrPatchManager {
|
|
16
|
-
private bootstrapPatch?;
|
|
17
|
-
private compactedUpdatePatch?;
|
|
18
|
-
private readonly recentUpdatePatches;
|
|
19
|
-
private readonly limit;
|
|
20
|
-
constructor(limit: number);
|
|
21
|
-
clear(): void;
|
|
22
|
-
setBootstrap(moduleFactories: Map<string, Expression>): void;
|
|
23
|
-
/** 追加 update;发现 hash 不连续时丢弃旧 update 链,并在追加后执行容量压缩。 */
|
|
24
|
-
appendUpdate(patch: UpdatePatchSource): void;
|
|
25
|
-
/** 按客户端消费顺序返回 bootstrap、压缩 update 与近期 update。 */
|
|
26
|
-
getPatches(): PatchSource[];
|
|
27
|
-
private clearUpdateHistory;
|
|
28
|
-
/** 将超出上限的旧 update 逐步合并到首个 update;bootstrap 永不参与 merge。 */
|
|
29
|
-
private compactUpdateHistory;
|
|
30
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HmrPatchManager = void 0;
|
|
4
|
-
/** 合并两个连续 update,并按后一份 update 的最终模块状态解决修改和删除冲突。 */
|
|
5
|
-
const mergeUpdatePatches = (basePatch, nextPatch) => {
|
|
6
|
-
if (basePatch.toHash !== nextPatch.fromHash) {
|
|
7
|
-
throw new Error(`[taro-hmr-compile] 无法合并不连续的 HMR patch:${basePatch.toHash} !== ${nextPatch.fromHash}`);
|
|
8
|
-
}
|
|
9
|
-
const moduleFactories = new Map(basePatch.moduleFactories);
|
|
10
|
-
const removedModules = new Set(basePatch.removedModules);
|
|
11
|
-
nextPatch.moduleFactories.forEach((factory, moduleId) => {
|
|
12
|
-
moduleFactories.set(moduleId, factory);
|
|
13
|
-
removedModules.delete(moduleId);
|
|
14
|
-
});
|
|
15
|
-
nextPatch.removedModules.forEach(moduleId => {
|
|
16
|
-
moduleFactories.delete(moduleId);
|
|
17
|
-
removedModules.add(moduleId);
|
|
18
|
-
});
|
|
19
|
-
return {
|
|
20
|
-
type: 'update',
|
|
21
|
-
fromHash: basePatch.fromHash,
|
|
22
|
-
toHash: nextPatch.toHash,
|
|
23
|
-
moduleFactories,
|
|
24
|
-
removedModules: Array.from(removedModules),
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
/** 仅维护 bootstrap/update Patch 状态、连续性和压缩,不依赖 Webpack 编译对象。 */
|
|
28
|
-
class HmrPatchManager {
|
|
29
|
-
constructor(limit) {
|
|
30
|
-
this.recentUpdatePatches = [];
|
|
31
|
-
this.limit = Math.max(1, limit);
|
|
32
|
-
}
|
|
33
|
-
clear() {
|
|
34
|
-
this.bootstrapPatch = undefined;
|
|
35
|
-
this.clearUpdateHistory();
|
|
36
|
-
}
|
|
37
|
-
setBootstrap(moduleFactories) {
|
|
38
|
-
this.bootstrapPatch = moduleFactories.size > 0
|
|
39
|
-
? { type: 'bootstrap', moduleFactories: new Map(moduleFactories) }
|
|
40
|
-
: undefined;
|
|
41
|
-
}
|
|
42
|
-
/** 追加 update;发现 hash 不连续时丢弃旧 update 链,并在追加后执行容量压缩。 */
|
|
43
|
-
appendUpdate(patch) {
|
|
44
|
-
var _a;
|
|
45
|
-
const latestPatch = (_a = this.recentUpdatePatches[this.recentUpdatePatches.length - 1]) !== null && _a !== void 0 ? _a : this.compactedUpdatePatch;
|
|
46
|
-
if (latestPatch && latestPatch.toHash !== patch.fromHash)
|
|
47
|
-
this.clearUpdateHistory();
|
|
48
|
-
this.recentUpdatePatches.push(patch);
|
|
49
|
-
this.compactUpdateHistory();
|
|
50
|
-
}
|
|
51
|
-
/** 按客户端消费顺序返回 bootstrap、压缩 update 与近期 update。 */
|
|
52
|
-
getPatches() {
|
|
53
|
-
const updatePatches = this.compactedUpdatePatch
|
|
54
|
-
? [this.compactedUpdatePatch, ...this.recentUpdatePatches]
|
|
55
|
-
: this.recentUpdatePatches;
|
|
56
|
-
return this.bootstrapPatch
|
|
57
|
-
? [this.bootstrapPatch, ...updatePatches]
|
|
58
|
-
: updatePatches;
|
|
59
|
-
}
|
|
60
|
-
clearUpdateHistory() {
|
|
61
|
-
this.compactedUpdatePatch = undefined;
|
|
62
|
-
this.recentUpdatePatches.length = 0;
|
|
63
|
-
}
|
|
64
|
-
/** 将超出上限的旧 update 逐步合并到首个 update;bootstrap 永不参与 merge。 */
|
|
65
|
-
compactUpdateHistory() {
|
|
66
|
-
while (this.recentUpdatePatches.length > this.limit) {
|
|
67
|
-
const oldestUpdatePatch = this.recentUpdatePatches.shift();
|
|
68
|
-
this.compactedUpdatePatch = this.compactedUpdatePatch
|
|
69
|
-
? mergeUpdatePatches(this.compactedUpdatePatch, oldestUpdatePatch)
|
|
70
|
-
: oldestUpdatePatch;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
exports.HmrPatchManager = HmrPatchManager;
|
|
75
|
-
//# sourceMappingURL=hmr-patch-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hmr-patch-manager.js","sourceRoot":"","sources":["../../src/patch/hmr-patch-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import type {Expression} from '@babel/types'
|
|
2
|
-
|
|
3
|
-
export interface BootstrapPatchSource {
|
|
4
|
-
type: 'bootstrap'
|
|
5
|
-
moduleFactories: Map<string, Expression>
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export interface UpdatePatchSource {
|
|
9
|
-
type: 'update'
|
|
10
|
-
fromHash: string
|
|
11
|
-
toHash: string
|
|
12
|
-
moduleFactories: Map<string, Expression>
|
|
13
|
-
removedModules: string[]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export type PatchSource = BootstrapPatchSource | UpdatePatchSource
|
|
17
|
-
|
|
18
|
-
/** 合并两个连续 update,并按后一份 update 的最终模块状态解决修改和删除冲突。 */
|
|
19
|
-
const mergeUpdatePatches = (basePatch: UpdatePatchSource, nextPatch: UpdatePatchSource): UpdatePatchSource => {
|
|
20
|
-
if (basePatch.toHash !== nextPatch.fromHash) {
|
|
21
|
-
throw new Error(`[taro-hmr-compile] 无法合并不连续的 HMR patch:${basePatch.toHash} !== ${nextPatch.fromHash}`)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const moduleFactories = new Map(basePatch.moduleFactories)
|
|
25
|
-
const removedModules = new Set(basePatch.removedModules)
|
|
26
|
-
|
|
27
|
-
nextPatch.moduleFactories.forEach((factory, moduleId) => {
|
|
28
|
-
moduleFactories.set(moduleId, factory)
|
|
29
|
-
removedModules.delete(moduleId)
|
|
30
|
-
})
|
|
31
|
-
nextPatch.removedModules.forEach(moduleId => {
|
|
32
|
-
moduleFactories.delete(moduleId)
|
|
33
|
-
removedModules.add(moduleId)
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
return {
|
|
37
|
-
type: 'update',
|
|
38
|
-
fromHash: basePatch.fromHash,
|
|
39
|
-
toHash: nextPatch.toHash,
|
|
40
|
-
moduleFactories,
|
|
41
|
-
removedModules: Array.from(removedModules),
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** 仅维护 bootstrap/update Patch 状态、连续性和压缩,不依赖 Webpack 编译对象。 */
|
|
46
|
-
export class HmrPatchManager {
|
|
47
|
-
private bootstrapPatch?: BootstrapPatchSource
|
|
48
|
-
|
|
49
|
-
private compactedUpdatePatch?: UpdatePatchSource
|
|
50
|
-
|
|
51
|
-
private readonly recentUpdatePatches: UpdatePatchSource[] = []
|
|
52
|
-
|
|
53
|
-
private readonly limit: number
|
|
54
|
-
|
|
55
|
-
constructor(limit: number) {
|
|
56
|
-
this.limit = Math.max(1, limit)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
clear() {
|
|
60
|
-
this.bootstrapPatch = undefined
|
|
61
|
-
this.clearUpdateHistory()
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
setBootstrap(moduleFactories: Map<string, Expression>) {
|
|
65
|
-
this.bootstrapPatch = moduleFactories.size > 0
|
|
66
|
-
? {type: 'bootstrap', moduleFactories: new Map(moduleFactories)}
|
|
67
|
-
: undefined
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/** 追加 update;发现 hash 不连续时丢弃旧 update 链,并在追加后执行容量压缩。 */
|
|
71
|
-
appendUpdate(patch: UpdatePatchSource) {
|
|
72
|
-
const latestPatch = this.recentUpdatePatches[this.recentUpdatePatches.length - 1] ?? this.compactedUpdatePatch
|
|
73
|
-
if (latestPatch && latestPatch.toHash !== patch.fromHash) this.clearUpdateHistory()
|
|
74
|
-
this.recentUpdatePatches.push(patch)
|
|
75
|
-
this.compactUpdateHistory()
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/** 按客户端消费顺序返回 bootstrap、压缩 update 与近期 update。 */
|
|
79
|
-
getPatches(): PatchSource[] {
|
|
80
|
-
const updatePatches = this.compactedUpdatePatch
|
|
81
|
-
? [this.compactedUpdatePatch, ...this.recentUpdatePatches]
|
|
82
|
-
: this.recentUpdatePatches
|
|
83
|
-
return this.bootstrapPatch
|
|
84
|
-
? [this.bootstrapPatch, ...updatePatches]
|
|
85
|
-
: updatePatches
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
private clearUpdateHistory() {
|
|
89
|
-
this.compactedUpdatePatch = undefined
|
|
90
|
-
this.recentUpdatePatches.length = 0
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/** 将超出上限的旧 update 逐步合并到首个 update;bootstrap 永不参与 merge。 */
|
|
94
|
-
private compactUpdateHistory() {
|
|
95
|
-
while (this.recentUpdatePatches.length > this.limit) {
|
|
96
|
-
const oldestUpdatePatch = this.recentUpdatePatches.shift()!
|
|
97
|
-
this.compactedUpdatePatch = this.compactedUpdatePatch
|
|
98
|
-
? mergeUpdatePatches(this.compactedUpdatePatch, oldestUpdatePatch)
|
|
99
|
-
: oldestUpdatePatch
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|