xhs-mp-compiler-cli 1.1.1 → 1.1.3

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 (110) hide show
  1. package/package.json +11 -5
  2. package/dist/bin/xhs-mp-cli-build.d.ts +0 -2
  3. package/dist/bin/xhs-mp-cli-build.js +0 -40
  4. package/dist/bin/xhs-mp-cli-dev.d.ts +0 -2
  5. package/dist/bin/xhs-mp-cli-dev.js +0 -59
  6. package/dist/bin/xhs-mp-cli.d.ts +0 -2
  7. package/dist/bin/xhs-mp-cli.js +0 -16
  8. package/dist/compiler.d.ts +0 -76
  9. package/dist/compiler.js +0 -361
  10. package/dist/compilerCP.d.ts +0 -1
  11. package/dist/compilerCP.js +0 -175
  12. package/dist/config/constant.config.d.ts +0 -7
  13. package/dist/config/constant.config.js +0 -10
  14. package/dist/dev-server/index.d.ts +0 -3
  15. package/dist/dev-server/index.js +0 -64
  16. package/dist/dev-server/lib/ensurePort.d.ts +0 -2
  17. package/dist/dev-server/lib/ensurePort.js +0 -32
  18. package/dist/dev-server/lib/openBrowser.d.ts +0 -2
  19. package/dist/dev-server/lib/openBrowser.js +0 -23
  20. package/dist/dev-server/lib/openChrome.applescript +0 -78
  21. package/dist/index.d.ts +0 -1
  22. package/dist/index.js +0 -5
  23. package/dist/packs/index.d.ts +0 -14
  24. package/dist/packs/index.js +0 -31
  25. package/dist/packs/mp-pack/index.d.ts +0 -3
  26. package/dist/packs/mp-pack/index.js +0 -32
  27. package/dist/packs/webpack/index.d.ts +0 -3
  28. package/dist/packs/webpack/index.js +0 -92
  29. package/dist/packs/webpack/webpack.d.ts +0 -21
  30. package/dist/packs/webpack/webpack.js +0 -79
  31. package/dist/presets/babel.d.ts +0 -8
  32. package/dist/presets/babel.js +0 -59
  33. package/dist/presets/common.d.ts +0 -4
  34. package/dist/presets/common.js +0 -46
  35. package/dist/presets/configs/minigame/assets/assetsEntryPlugin.d.ts +0 -10
  36. package/dist/presets/configs/minigame/assets/assetsEntryPlugin.js +0 -46
  37. package/dist/presets/configs/minigame/assets/index.d.ts +0 -2
  38. package/dist/presets/configs/minigame/assets/index.js +0 -65
  39. package/dist/presets/configs/minigame/service/index.d.ts +0 -3
  40. package/dist/presets/configs/minigame/service/index.js +0 -34
  41. package/dist/presets/configs/minigame/service/resolveLimitPlugin.d.ts +0 -8
  42. package/dist/presets/configs/minigame/service/resolveLimitPlugin.js +0 -35
  43. package/dist/presets/configs/minigame/service/serviceChunkPlugin.d.ts +0 -9
  44. package/dist/presets/configs/minigame/service/serviceChunkPlugin.js +0 -69
  45. package/dist/presets/configs/minigame/service/serviceEntryPlugin.d.ts +0 -10
  46. package/dist/presets/configs/minigame/service/serviceEntryPlugin.js +0 -32
  47. package/dist/presets/configs/miniprogram/assets/assetsEntryPlugin.d.ts +0 -12
  48. package/dist/presets/configs/miniprogram/assets/assetsEntryPlugin.js +0 -132
  49. package/dist/presets/configs/miniprogram/assets/index.d.ts +0 -4
  50. package/dist/presets/configs/miniprogram/assets/index.js +0 -47
  51. package/dist/presets/configs/miniprogram/render/component.d.ts +0 -3
  52. package/dist/presets/configs/miniprogram/render/component.js +0 -47
  53. package/dist/presets/configs/miniprogram/render/index.d.ts +0 -5
  54. package/dist/presets/configs/miniprogram/render/index.js +0 -70
  55. package/dist/presets/configs/miniprogram/render/render.d.ts +0 -3
  56. package/dist/presets/configs/miniprogram/render/render.js +0 -49
  57. package/dist/presets/configs/miniprogram/render/renderChunkPlugin.d.ts +0 -8
  58. package/dist/presets/configs/miniprogram/render/renderChunkPlugin.js +0 -55
  59. package/dist/presets/configs/miniprogram/render/sjsEntryPlugin.d.ts +0 -15
  60. package/dist/presets/configs/miniprogram/render/sjsEntryPlugin.js +0 -163
  61. package/dist/presets/configs/miniprogram/service/index.d.ts +0 -5
  62. package/dist/presets/configs/miniprogram/service/index.js +0 -72
  63. package/dist/presets/configs/miniprogram/service/resolveLimitPlugin.d.ts +0 -8
  64. package/dist/presets/configs/miniprogram/service/resolveLimitPlugin.js +0 -66
  65. package/dist/presets/configs/miniprogram/service/serviceChunkPlugin.d.ts +0 -9
  66. package/dist/presets/configs/miniprogram/service/serviceChunkPlugin.js +0 -65
  67. package/dist/presets/index.d.ts +0 -2
  68. package/dist/presets/index.js +0 -95
  69. package/dist/presets/loaders/mg-entry-loader.d.ts +0 -1
  70. package/dist/presets/loaders/mg-entry-loader.js +0 -27
  71. package/dist/presets/loaders/mini-style-loader.d.ts +0 -1
  72. package/dist/presets/loaders/mini-style-loader.js +0 -72
  73. package/dist/presets/loaders/mp-entry-loader.d.ts +0 -1
  74. package/dist/presets/loaders/mp-entry-loader.js +0 -196
  75. package/dist/presets/loaders/sjs-loader/index.d.ts +0 -12
  76. package/dist/presets/loaders/sjs-loader/index.js +0 -605
  77. package/dist/presets/loaders/sjs-loader/scope.d.ts +0 -36
  78. package/dist/presets/loaders/sjs-loader/scope.js +0 -122
  79. package/dist/presets/loaders/sjs-loader/tranform.d.ts +0 -2
  80. package/dist/presets/loaders/sjs-loader/tranform.js +0 -31
  81. package/dist/presets/loaders/wxss-loader.d.ts +0 -1
  82. package/dist/presets/loaders/wxss-loader.js +0 -77
  83. package/dist/presets/plugins/InjectorPlugin.d.ts +0 -7
  84. package/dist/presets/plugins/InjectorPlugin.js +0 -14
  85. package/dist/presets/prod.d.ts +0 -4
  86. package/dist/presets/prod.js +0 -80
  87. package/dist/types/index.d.ts +0 -118
  88. package/dist/types/index.js +0 -13
  89. package/dist/utils/asyncWebpack.d.ts +0 -3
  90. package/dist/utils/asyncWebpack.js +0 -38
  91. package/dist/utils/common.d.ts +0 -8
  92. package/dist/utils/common.js +0 -36
  93. package/dist/utils/const.d.ts +0 -27
  94. package/dist/utils/const.js +0 -47
  95. package/dist/utils/css.d.ts +0 -2
  96. package/dist/utils/css.js +0 -41
  97. package/dist/utils/depenedHelper.d.ts +0 -31
  98. package/dist/utils/depenedHelper.js +0 -89
  99. package/dist/utils/getSuffixName.d.ts +0 -3
  100. package/dist/utils/getSuffixName.js +0 -18
  101. package/dist/utils/loader-utils.d.ts +0 -15
  102. package/dist/utils/loader-utils.js +0 -59
  103. package/dist/utils/postcssRpx2Vw.d.ts +0 -12
  104. package/dist/utils/postcssRpx2Vw.js +0 -35
  105. package/dist/utils/projectConfig.d.ts +0 -1
  106. package/dist/utils/projectConfig.js +0 -20
  107. package/dist/utils/tagTransformMap.d.ts +0 -35
  108. package/dist/utils/tagTransformMap.js +0 -38
  109. package/dist/utils/utils.d.ts +0 -5
  110. package/dist/utils/utils.js +0 -37
@@ -1,605 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SJS_HELPER = void 0;
4
- const lodash_1 = require("lodash");
5
- const tranform_1 = require("./tranform");
6
- const scope_1 = require("./scope");
7
- exports.SJS_HELPER = '_sjs$';
8
- const SETTER = `${exports.SJS_HELPER}.s`;
9
- const GETTER = `${exports.SJS_HELPER}.g`;
10
- const CALLER = `${exports.SJS_HELPER}.c`;
11
- function sjsCompiler(code, onRequire) {
12
- var _a;
13
- const errors = [];
14
- const offset = 1;
15
- // scan 阶段只是对整个树的遍历,会对作用域进行收集,禁止修改语法树
16
- // generate 阶段会生成 helper形式代码
17
- // legacyGenerate 阶段 只生成一份修改 .constructor 访问的代码
18
- let mode = 'scan';
19
- // 普通变量作用域管理
20
- const scopeManager = new scope_1.ScopeManager();
21
- // require语句
22
- const requireCallee = [];
23
- // 找到对应行
24
- function emitCompilerError(msg, span) {
25
- if (mode !== 'scan')
26
- return;
27
- const message = msg.trim().split(/\s+/).length > 1 ? msg : `${msg} is disallowed`;
28
- errors.push({ message, span: Object.assign({}, span) });
29
- }
30
- function handlePattern(pattern) {
31
- switch (pattern.type) {
32
- case "RestElement":
33
- // function f(...a) {}
34
- handlePattern(pattern.argument);
35
- if (pattern.argument.type === "Identifier") {
36
- scopeManager.pushIdentifier(pattern.argument);
37
- }
38
- break;
39
- case "AssignmentPattern":
40
- // 默认值语法 function f(a = 1) {}
41
- handleExpression(pattern.right);
42
- if (pattern.left.type === "Identifier") {
43
- scopeManager.pushIdentifier(pattern.left);
44
- }
45
- break;
46
- case 'Identifier':
47
- // function f(a) {}
48
- scopeManager.pushIdentifier(pattern);
49
- break;
50
- case "MemberExpression":
51
- handleExpression(pattern);
52
- break;
53
- case "ArrayPattern":
54
- emitCompilerError("Destructuring assignment like const [a, b] = array; is disallowed ", pattern.span);
55
- break;
56
- case "ObjectPattern":
57
- emitCompilerError("Destructuring assignment like const {a, b} = obj; is disallowed ", pattern.span);
58
- break;
59
- default:
60
- // @ts-ignore
61
- emitCompilerError(pattern.type, pattern.span);
62
- break;
63
- }
64
- }
65
- function handleParam(p) {
66
- var _a;
67
- // 参数不支持装饰器
68
- if ((_a = p === null || p === void 0 ? void 0 : p.decorators) === null || _a === void 0 ? void 0 : _a.length) {
69
- emitCompilerError(p.type, p.span);
70
- }
71
- if (p.pat) {
72
- handlePattern(p.pat);
73
- }
74
- }
75
- function handleStatement(e) {
76
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
77
- switch (e.type) {
78
- case "BlockStatement":
79
- scopeManager.enterScope();
80
- (_a = e.stmts) === null || _a === void 0 ? void 0 : _a.forEach(handleStatement);
81
- scopeManager.exitScope();
82
- break;
83
- case "TryStatement":
84
- if (e.block) {
85
- handleStatement(e.block);
86
- }
87
- // catch 部分是有参数的
88
- scopeManager.enterScope();
89
- if ((_b = e.handler) === null || _b === void 0 ? void 0 : _b.param) {
90
- handlePattern((_c = e.handler) === null || _c === void 0 ? void 0 : _c.param);
91
- }
92
- if (((_e = (_d = e.handler) === null || _d === void 0 ? void 0 : _d.body) === null || _e === void 0 ? void 0 : _e.type) === "BlockStatement") {
93
- (_g = (_f = e.handler) === null || _f === void 0 ? void 0 : _f.body) === null || _g === void 0 ? void 0 : _g.stmts.forEach(handleStatement);
94
- }
95
- scopeManager.exitScope();
96
- if (e.finalizer) {
97
- handleStatement(e.finalizer);
98
- }
99
- break;
100
- case "ForStatement":
101
- scopeManager.enterScope();
102
- if (e.init) {
103
- switch (e.init.type) {
104
- case "VariableDeclaration":
105
- handleStatement(e.init);
106
- break;
107
- default:
108
- handleExpression(e.init);
109
- break;
110
- }
111
- }
112
- if (e.test) {
113
- handleExpression(e.test);
114
- }
115
- if (e.update) {
116
- handleExpression(e.update);
117
- }
118
- if (e.body.type === "BlockStatement") {
119
- (_h = e.body.stmts) === null || _h === void 0 ? void 0 : _h.forEach(handleStatement);
120
- }
121
- else {
122
- handleStatement(e.body);
123
- }
124
- scopeManager.exitScope();
125
- break;
126
- case "SwitchStatement":
127
- // 处理switch条件
128
- handleExpression(e.discriminant);
129
- // 处理case条件
130
- (_j = e.cases) === null || _j === void 0 ? void 0 : _j.forEach((case_) => {
131
- var _a;
132
- if (case_.test) {
133
- handleExpression(case_.test);
134
- }
135
- (_a = case_.consequent) === null || _a === void 0 ? void 0 : _a.forEach(handleStatement);
136
- });
137
- break;
138
- case "DoWhileStatement":
139
- case "WhileStatement":
140
- handleExpression(e.test);
141
- handleStatement(e.body);
142
- break;
143
- case "IfStatement":
144
- handleExpression(e.test);
145
- handleStatement(e.consequent);
146
- if (e.alternate) {
147
- handleStatement(e.alternate);
148
- }
149
- break;
150
- case "ExpressionStatement":
151
- handleExpression(e.expression);
152
- break;
153
- case "FunctionDeclaration":
154
- checkFunction(e);
155
- scopeManager.pushIdentifier(e.identifier);
156
- scopeManager.enterScope();
157
- e.params.forEach(handleParam);
158
- if (((_k = e === null || e === void 0 ? void 0 : e.body) === null || _k === void 0 ? void 0 : _k.type) === "BlockStatement") {
159
- (_l = e.body.stmts) === null || _l === void 0 ? void 0 : _l.forEach(handleStatement);
160
- }
161
- scopeManager.exitScope();
162
- break;
163
- case "ReturnStatement":
164
- if (e.argument) {
165
- handleExpression(e.argument);
166
- }
167
- break;
168
- case "VariableDeclaration":
169
- for (const declaration of e.declarations) {
170
- switch (declaration.id.type) {
171
- case "Identifier":
172
- scopeManager.pushIdentifier(declaration.id);
173
- break;
174
- default:
175
- // @ts-ignore
176
- emitCompilerError(declaration.id.type, declaration.id.span);
177
- break;
178
- }
179
- if (declaration.init) {
180
- handleExpression(declaration.init);
181
- }
182
- }
183
- break;
184
- case "BreakStatement":
185
- case "DebuggerStatement":
186
- case "ContinueStatement":
187
- case "EmptyStatement":
188
- break;
189
- default:
190
- emitCompilerError(e.type, e.span);
191
- break;
192
- }
193
- }
194
- function handleProperty(p) {
195
- switch (p.type) {
196
- case "Computed":
197
- {
198
- const expression = p.expression;
199
- handleExpression(expression);
200
- }
201
- break;
202
- case "Identifier":
203
- break;
204
- default:
205
- emitCompilerError(p.type, p.span);
206
- break;
207
- }
208
- }
209
- function handleObjectPropertyName(key) {
210
- switch (key.type) {
211
- case "Computed":
212
- {
213
- const expression = key.expression;
214
- handleExpression(expression);
215
- }
216
- break;
217
- default:
218
- break;
219
- }
220
- }
221
- function handleObjectProperty(i) {
222
- var _a, _b, _c;
223
- switch (i.type) {
224
- case "KeyValueProperty":
225
- handleObjectPropertyName(i.key);
226
- handleExpression(i.value);
227
- break;
228
- case "GetterProperty":
229
- handleObjectPropertyName(i.key);
230
- scopeManager.enterScope();
231
- if (((_a = i.body) === null || _a === void 0 ? void 0 : _a.type) === "BlockStatement") {
232
- i.body.stmts.forEach(handleStatement);
233
- }
234
- scopeManager.exitScope();
235
- break;
236
- case "SetterProperty":
237
- handleObjectPropertyName(i.key);
238
- scopeManager.enterScope();
239
- handlePattern(i.param);
240
- if (((_b = i.body) === null || _b === void 0 ? void 0 : _b.type) === "BlockStatement") {
241
- i.body.stmts.forEach(handleStatement);
242
- }
243
- scopeManager.exitScope();
244
- break;
245
- case "Identifier":
246
- scopeManager.pushAccess(i);
247
- fixSpecialVarWhenGenerate(i);
248
- break;
249
- case "MethodProperty":
250
- handleObjectPropertyName(i.key);
251
- checkFunction(i);
252
- scopeManager.enterScope();
253
- i.params.forEach(handleParam);
254
- if (((_c = i.body) === null || _c === void 0 ? void 0 : _c.type) === "BlockStatement") {
255
- i.body.stmts.forEach(handleStatement);
256
- }
257
- scopeManager.exitScope();
258
- break;
259
- case "SpreadElement":
260
- handleExpression(i.arguments);
261
- break;
262
- default:
263
- // @ts-ignore
264
- emitCompilerError(i.type, i.span);
265
- break;
266
- }
267
- }
268
- function modifyProperty(p) {
269
- if (p.type === "Computed") {
270
- handleExpression(p.expression);
271
- return p.expression;
272
- }
273
- if (p.type === "Identifier") {
274
- return {
275
- type: 'StringLiteral',
276
- span: p.span,
277
- value: p.value,
278
- raw: JSON.stringify(p.value)
279
- };
280
- }
281
- if (p.type === "PrivateName") {
282
- return { type: 'NullLiteral' };
283
- }
284
- }
285
- function checkFunction(e) {
286
- // 不允许使用 async 或者 generator 语法
287
- if (e.async || e.generator) {
288
- emitCompilerError(e.type, e.span);
289
- }
290
- }
291
- function collectRequireWhenScan(c) {
292
- if (mode !== 'scan') {
293
- return;
294
- }
295
- requireCallee.push(c);
296
- // 标记作用域
297
- if (c.callee.type === 'Identifier') {
298
- c.callee._xhsScope = scopeManager.getCurrentScope();
299
- }
300
- }
301
- function fixSpecialVarWhenGenerate(id) {
302
- var _a;
303
- if (mode !== 'generate') {
304
- return;
305
- }
306
- // 发现调用全局特殊变量
307
- if (scope_1.SPECIFY_VAR.includes(id.value) && ((_a = id._xhsScope) === null || _a === void 0 ? void 0 : _a.checkGlobal(id.value))) {
308
- // 生成阶段判断是否是调用全局环境
309
- id.value = `${exports.SJS_HELPER}.${id.value}`;
310
- }
311
- }
312
- function handleExpression(e) {
313
- var _a, _b, _c, _d, _e;
314
- switch (e.type) {
315
- case "FunctionExpression":
316
- checkFunction(e);
317
- if (e.identifier) {
318
- scopeManager.pushIdentifier(e.identifier);
319
- }
320
- scopeManager.enterScope();
321
- e.params.forEach(handleParam);
322
- if (((_a = e.body) === null || _a === void 0 ? void 0 : _a.type) === "BlockStatement") {
323
- (_b = e.body.stmts) === null || _b === void 0 ? void 0 : _b.forEach(handleStatement);
324
- }
325
- scopeManager.exitScope();
326
- break;
327
- case "ArrowFunctionExpression":
328
- checkFunction(e);
329
- scopeManager.enterScope();
330
- e.params.forEach(handlePattern);
331
- if (e.body.type === "BlockStatement") {
332
- (_c = e.body.stmts) === null || _c === void 0 ? void 0 : _c.forEach(handleStatement);
333
- }
334
- else {
335
- handleExpression(e.body);
336
- }
337
- scopeManager.exitScope();
338
- break;
339
- case "CallExpression":
340
- switch (e.callee.type) {
341
- case "Import":
342
- case "Super":
343
- emitCompilerError(e.callee.type, e.span);
344
- break;
345
- default:
346
- if (e.callee.type === "MemberExpression" && mode === 'generate') {
347
- const oldCallee = e.callee;
348
- const NewCallExpression = e;
349
- NewCallExpression.type = "CallExpression";
350
- NewCallExpression.callee = {
351
- type: 'Identifier',
352
- span: e.span,
353
- value: CALLER,
354
- optional: false
355
- };
356
- handleExpression(oldCallee.object);
357
- e.arguments.forEach(i => handleExpression(i.expression));
358
- NewCallExpression.arguments = [
359
- { expression: modifyProperty(oldCallee.property) },
360
- { expression: oldCallee.object },
361
- {
362
- expression: {
363
- type: "ArrayExpression",
364
- elements: e.arguments,
365
- span: e.span
366
- }
367
- },
368
- ];
369
- }
370
- else if (e.callee.type === "MemberExpression"
371
- && mode === 'legacyGenerate'
372
- && e.callee.property.type === "Identifier"
373
- && e.callee.property.value === "constructor") {
374
- e.callee.property.value = `${e.callee.property.value}.name`;
375
- handleExpression(e.callee.object);
376
- e.arguments.forEach(i => handleExpression(i.expression));
377
- }
378
- else {
379
- if (e.callee.type === "Identifier") {
380
- if (e.callee.value === "require") {
381
- collectRequireWhenScan(e);
382
- }
383
- // 需要后置处理,否则callee.value会被修改
384
- fixSpecialVarWhenGenerate(e.callee);
385
- }
386
- handleExpression(e.callee);
387
- e.arguments.forEach(i => handleExpression(i.expression));
388
- }
389
- break;
390
- }
391
- break;
392
- case "ArrayExpression":
393
- (_d = e.elements) === null || _d === void 0 ? void 0 : _d.forEach(i => {
394
- if (i) {
395
- handleExpression(i.expression);
396
- }
397
- });
398
- break;
399
- case "ObjectExpression":
400
- e.properties.forEach(handleObjectProperty);
401
- break;
402
- case "TemplateLiteral":
403
- // 当中会有表达式
404
- e.expressions.forEach(handleExpression);
405
- break;
406
- case "UpdateExpression":
407
- if (e.argument.type === "MemberExpression" && mode === 'generate') {
408
- const NewUpdateExpression = e;
409
- NewUpdateExpression.type = "CallExpression";
410
- NewUpdateExpression.callee = {
411
- type: 'Identifier',
412
- span: e.span,
413
- value: SETTER,
414
- optional: false
415
- };
416
- handleExpression(e.argument.object);
417
- NewUpdateExpression.arguments = [
418
- { expression: modifyProperty(e.argument.property) },
419
- { expression: e.argument.object },
420
- {
421
- expression: {
422
- type: 'StringLiteral',
423
- span: e.span,
424
- value: e.operator,
425
- raw: JSON.stringify(e.operator)
426
- }
427
- },
428
- ];
429
- Reflect.deleteProperty(e, 'prefix');
430
- Reflect.deleteProperty(e, 'operator');
431
- Reflect.deleteProperty(e, 'argument');
432
- }
433
- else {
434
- handleExpression(e.argument);
435
- }
436
- break;
437
- case "UnaryExpression":
438
- handleExpression(e.argument);
439
- break;
440
- case "AssignmentExpression":
441
- if (e.left.type === 'MemberExpression' && mode === 'generate') {
442
- const NewAssignmentExpression = e;
443
- NewAssignmentExpression.type = "CallExpression";
444
- NewAssignmentExpression.callee = {
445
- type: 'Identifier',
446
- span: e.span,
447
- value: SETTER,
448
- optional: false
449
- };
450
- handleExpression(e.right);
451
- handleExpression(e.left.object);
452
- NewAssignmentExpression.arguments = [
453
- { expression: modifyProperty(e.left.property) },
454
- { expression: e.left.object },
455
- {
456
- expression: {
457
- type: 'StringLiteral',
458
- span: e.span,
459
- value: e.operator,
460
- raw: JSON.stringify(e.operator)
461
- }
462
- },
463
- { expression: e.right }
464
- ];
465
- Reflect.deleteProperty(e, 'left');
466
- Reflect.deleteProperty(e, 'right');
467
- Reflect.deleteProperty(e, 'operator');
468
- }
469
- else {
470
- handlePattern(e.left);
471
- handleExpression(e.right);
472
- }
473
- break;
474
- case "BinaryExpression":
475
- handleExpression(e.left);
476
- handleExpression(e.right);
477
- break;
478
- case "ConditionalExpression":
479
- handleExpression(e.test);
480
- handleExpression(e.consequent);
481
- handleExpression(e.alternate);
482
- break;
483
- case "MemberExpression":
484
- if (mode === 'generate') {
485
- const NewMemberExpression = e;
486
- NewMemberExpression.type = "CallExpression";
487
- NewMemberExpression.callee = {
488
- type: 'Identifier',
489
- span: e.span,
490
- value: GETTER,
491
- optional: false
492
- };
493
- handleExpression(e.object);
494
- NewMemberExpression.arguments = [
495
- { expression: modifyProperty(e.property) },
496
- { expression: e.object }
497
- ];
498
- // 清除语法树
499
- Reflect.deleteProperty(e, 'object');
500
- Reflect.deleteProperty(e, 'property');
501
- }
502
- else if (mode === 'legacyGenerate' && e.property.type === "Identifier" && e.property.value === "constructor") {
503
- e.property.value = `${e.property.value}.name`;
504
- handleExpression(e.object);
505
- }
506
- else {
507
- // 只遍历
508
- handleExpression(e.object);
509
- handleProperty(e.property);
510
- }
511
- break;
512
- case "ParenthesisExpression":
513
- handleExpression(e.expression);
514
- break;
515
- case "SequenceExpression":
516
- (_e = e.expressions) === null || _e === void 0 ? void 0 : _e.forEach(handleExpression);
517
- break;
518
- case "Identifier":
519
- scopeManager.pushAccess(e);
520
- fixSpecialVarWhenGenerate(e);
521
- break;
522
- // 以下都是字面量无需处理
523
- case "BigIntLiteral":
524
- case "NullLiteral":
525
- case "StringLiteral":
526
- case "BooleanLiteral":
527
- case "NumericLiteral":
528
- case "ThisExpression":
529
- case "RegExpLiteral":
530
- break;
531
- default:
532
- // @ts-ignore
533
- emitCompilerError(e.type, e.span);
534
- break;
535
- }
536
- }
537
- function getSourceCode(span) {
538
- return code.slice(span.start - offset, span.end - offset);
539
- }
540
- let legacyModule;
541
- const result = (0, tranform_1.transform)(code, (module) => {
542
- // 1. 校验基本语法错误,收集变量作用域,构建作用域表
543
- mode = "scan";
544
- scopeManager.enterScope();
545
- module.body.forEach(handleStatement);
546
- scopeManager.exitScope();
547
- scopeManager.stop();
548
- // 2. 分析作用域表 找出不是sjs 标准的模块进行屏蔽
549
- // 2.2 从最小作用域向上分析
550
- const validResult = scopeManager.getDFSScope().map(i => i.anlysis()).filter(Boolean);
551
- validResult.forEach(i => {
552
- if (i) {
553
- emitCompilerError(`identifier(${i.variable}) is undefined`, i.span);
554
- }
555
- });
556
- // 2.1 require语句校验以及处理path
557
- requireCallee.forEach(i => {
558
- var _a, _b, _c;
559
- // 调用全局环境 require
560
- if (i.callee.type === "Identifier" && ((_a = i.callee._xhsScope) === null || _a === void 0 ? void 0 : _a.checkGlobal(i.callee.value))) {
561
- const requirePath = (_c = (_b = i.arguments) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.expression;
562
- if (requirePath && (requirePath === null || requirePath === void 0 ? void 0 : requirePath.type) === 'StringLiteral' && (requirePath === null || requirePath === void 0 ? void 0 : requirePath.value)) {
563
- try {
564
- const formatPath = onRequire === null || onRequire === void 0 ? void 0 : onRequire(requirePath === null || requirePath === void 0 ? void 0 : requirePath.value);
565
- requirePath.value = formatPath;
566
- requirePath.raw = JSON.stringify(formatPath);
567
- }
568
- catch (error) {
569
- // 校验path 地址是否正确不正确进行报错
570
- emitCompilerError(error.message, i.span);
571
- }
572
- }
573
- else {
574
- emitCompilerError('require() must provide static path, dynamic or empty path is disallowed', i.span);
575
- }
576
- }
577
- });
578
- // 3. 抛出前面检查出来的错误
579
- if (errors.length) {
580
- module.body = [];
581
- return module;
582
- }
583
- // 上面的没出错,拷贝一份语法树用于生成兼容代码
584
- legacyModule = (0, lodash_1.cloneDeep)(module);
585
- // 4. 修改语法树生成 set get call 语法
586
- mode = "generate";
587
- module.body.forEach(handleStatement);
588
- return module;
589
- });
590
- mode = 'legacyGenerate';
591
- // 生成老版本的兼容代码
592
- const legacyCode = ((_a = legacyModule === null || legacyModule === void 0 ? void 0 : legacyModule.body) === null || _a === void 0 ? void 0 : _a.length)
593
- ? (0, tranform_1.transform)('var magic;', () => {
594
- legacyModule.body.forEach(handleStatement);
595
- return legacyModule;
596
- }, 'es2015', true).code
597
- : '';
598
- return {
599
- code: result.code,
600
- map: result.map,
601
- legacyCode,
602
- errors,
603
- };
604
- }
605
- exports.default = sjsCompiler;
@@ -1,36 +0,0 @@
1
- import type { Span, Identifier } from '@swc/core';
2
- export declare const SPECIFY_VAR: string[];
3
- declare module "@swc/core" {
4
- interface Identifier {
5
- _xhsScope?: Scope;
6
- }
7
- }
8
- export declare class Scope {
9
- private parentScope;
10
- private defines;
11
- private access;
12
- toString(): string;
13
- /**
14
- * @returns
15
- */
16
- anlysis(): {
17
- variable: string;
18
- span: Span;
19
- } | undefined;
20
- checkGlobal(key: string): boolean;
21
- setAccess(key: string, value: Span): void;
22
- setDefines(key: string, value: Span): void;
23
- setParentScope(scope: Scope | undefined): void;
24
- }
25
- export declare class ScopeManager {
26
- private _scopeStack;
27
- private _scopeTables;
28
- private _stop;
29
- stop(): void;
30
- enterScope(): void;
31
- exitScope(): void;
32
- getCurrentScope(): Scope | undefined;
33
- pushIdentifier(id: Identifier): void;
34
- pushAccess(id: Identifier): void;
35
- getDFSScope(): Scope[];
36
- }