marko 6.0.0-next.3.84 → 6.0.0-next.3.86
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/common/accessor.d.ts +1 -0
- package/dist/common/accessor.debug.d.ts +1 -0
- package/dist/debug/dom.js +11 -7
- package/dist/debug/dom.mjs +11 -7
- package/dist/debug/html.js +310 -243
- package/dist/debug/html.mjs +306 -242
- package/dist/dom.js +8 -5
- package/dist/dom.mjs +8 -5
- package/dist/html/compat.d.ts +1 -1
- package/dist/html/dynamic-tag.d.ts +2 -2
- package/dist/html/template.d.ts +1 -0
- package/dist/html/writer.d.ts +14 -12
- package/dist/html.d.ts +1 -1
- package/dist/html.js +221 -172
- package/dist/html.mjs +217 -171
- package/dist/translator/index.js +1461 -980
- package/dist/translator/util/evaluate.d.ts +2 -0
- package/dist/translator/util/generate-uid.d.ts +3 -0
- package/dist/translator/util/optional.d.ts +9 -7
- package/dist/translator/util/references.d.ts +9 -7
- package/dist/translator/util/sections.d.ts +7 -5
- package/dist/translator/util/serialize-reasons.d.ts +28 -17
- package/dist/translator/util/signals.d.ts +1 -2
- package/dist/translator/util/writer.d.ts +2 -1
- package/dist/translator/visitors/placeholder.d.ts +2 -2
- package/dist/translator/visitors/program/html.d.ts +3 -0
- package/dist/translator/visitors/program/index.d.ts +5 -1
- package/dist/translator/visitors/tag/custom-tag.d.ts +2 -0
- package/package.json +2 -2
package/dist/translator/index.js
CHANGED
@@ -110,7 +110,7 @@ var attrs_default = {
|
|
110
110
|
|
111
111
|
// src/translator/core/await.ts
|
112
112
|
var import_compiler25 = require("@marko/compiler");
|
113
|
-
var
|
113
|
+
var import_babel_utils18 = require("@marko/compiler/babel-utils");
|
114
114
|
|
115
115
|
// src/common/accessor.debug.ts
|
116
116
|
var AccessorPrefix = /* @__PURE__ */ ((AccessorPrefix4) => {
|
@@ -132,6 +132,7 @@ var AccessorPrefix = /* @__PURE__ */ ((AccessorPrefix4) => {
|
|
132
132
|
return AccessorPrefix4;
|
133
133
|
})(AccessorPrefix || {});
|
134
134
|
var AccessorProp = /* @__PURE__ */ ((AccessorProp4) => {
|
135
|
+
AccessorProp4["Owner"] = "_";
|
135
136
|
AccessorProp4["BranchAccessor"] = "#BranchAccessor";
|
136
137
|
AccessorProp4["CatchContent"] = "#CatchContent";
|
137
138
|
AccessorProp4["PlaceholderBranch"] = "#PlaceholderBranch";
|
@@ -154,16 +155,85 @@ function evaluate(value) {
|
|
154
155
|
if (computed) {
|
155
156
|
extra.computed = computed.value;
|
156
157
|
extra.confident = true;
|
158
|
+
extra.nullable = computed.value == null;
|
157
159
|
} else {
|
158
160
|
extra.computed = void 0;
|
159
161
|
extra.confident = false;
|
162
|
+
extra.nullable = isNullableExpr(value);
|
160
163
|
}
|
161
164
|
}
|
162
165
|
return extra;
|
163
166
|
}
|
167
|
+
function isNullableExpr(expr) {
|
168
|
+
switch (expr.type) {
|
169
|
+
case "ArrayExpression":
|
170
|
+
case "ArrowFunctionExpression":
|
171
|
+
case "BigIntLiteral":
|
172
|
+
case "BinaryExpression":
|
173
|
+
case "BooleanLiteral":
|
174
|
+
case "ClassExpression":
|
175
|
+
case "FunctionExpression":
|
176
|
+
case "NewExpression":
|
177
|
+
case "NumericLiteral":
|
178
|
+
case "ObjectExpression":
|
179
|
+
case "RegExpLiteral":
|
180
|
+
case "StringLiteral":
|
181
|
+
case "TemplateLiteral":
|
182
|
+
case "UpdateExpression":
|
183
|
+
return false;
|
184
|
+
case "AssignmentExpression":
|
185
|
+
switch (expr.operator) {
|
186
|
+
case "=":
|
187
|
+
return isNullableExpr(expr.right);
|
188
|
+
case "*=":
|
189
|
+
case "/=":
|
190
|
+
case "%=":
|
191
|
+
case "+=":
|
192
|
+
case "-=":
|
193
|
+
case "<<=":
|
194
|
+
case ">>=":
|
195
|
+
case ">>>=":
|
196
|
+
case "&=":
|
197
|
+
case "^=":
|
198
|
+
case "|=":
|
199
|
+
case "**=":
|
200
|
+
return false;
|
201
|
+
case "||=":
|
202
|
+
case "??=":
|
203
|
+
return isNullableExpr(expr.right) || isNullableExpr(expr.left);
|
204
|
+
case "&&=":
|
205
|
+
return isNullableExpr(expr.left) && isNullableExpr(expr.right);
|
206
|
+
default:
|
207
|
+
return true;
|
208
|
+
}
|
209
|
+
case "AwaitExpression":
|
210
|
+
return isNullableExpr(expr.argument);
|
211
|
+
case "ConditionalExpression":
|
212
|
+
return isNullableExpr(expr.consequent) && isNullableExpr(expr.alternate);
|
213
|
+
case "LogicalExpression":
|
214
|
+
switch (expr.operator) {
|
215
|
+
case "||":
|
216
|
+
case "??":
|
217
|
+
return isNullableExpr(expr.right) || isNullableExpr(expr.left);
|
218
|
+
case "&&":
|
219
|
+
return isNullableExpr(expr.left) && isNullableExpr(expr.right);
|
220
|
+
default:
|
221
|
+
return true;
|
222
|
+
}
|
223
|
+
case "ParenthesizedExpression":
|
224
|
+
return isNullableExpr(expr.expression);
|
225
|
+
case "SequenceExpression":
|
226
|
+
return isNullableExpr(expr.expressions[expr.expressions.length - 1]);
|
227
|
+
case "UnaryExpression":
|
228
|
+
return expr.operator === "void";
|
229
|
+
default:
|
230
|
+
return true;
|
231
|
+
}
|
232
|
+
}
|
164
233
|
|
165
234
|
// src/translator/util/references.ts
|
166
235
|
var import_compiler24 = require("@marko/compiler");
|
236
|
+
var import_babel_utils17 = require("@marko/compiler/babel-utils");
|
167
237
|
|
168
238
|
// src/translator/util/for-each-identifier.ts
|
169
239
|
function forEachIdentifier(node, cb) {
|
@@ -310,6 +380,37 @@ function generateUid(name2 = "") {
|
|
310
380
|
function generateUidIdentifier(name2) {
|
311
381
|
return import_compiler3.types.identifier(generateUid(name2));
|
312
382
|
}
|
383
|
+
var sharedUIDsForFile = /* @__PURE__ */ new WeakMap();
|
384
|
+
function getSharedUid(name2) {
|
385
|
+
const file = (0, import_babel_utils4.getFile)();
|
386
|
+
let sharedUIDs = sharedUIDsForFile.get(file);
|
387
|
+
if (!sharedUIDs) {
|
388
|
+
const { cache } = file.markoOpts;
|
389
|
+
const { filename } = file.opts;
|
390
|
+
const cacheKey = `uid-shared:${filename}`;
|
391
|
+
sharedUIDs = cache.get(cacheKey);
|
392
|
+
if (sharedUIDs) {
|
393
|
+
if (isTranslate()) {
|
394
|
+
sharedUIDs = new Map(sharedUIDs);
|
395
|
+
}
|
396
|
+
} else {
|
397
|
+
sharedUIDs = /* @__PURE__ */ new Map();
|
398
|
+
if (!isTranslate()) {
|
399
|
+
cache.set(cacheKey, sharedUIDs);
|
400
|
+
}
|
401
|
+
}
|
402
|
+
sharedUIDsForFile.set(file, sharedUIDs);
|
403
|
+
}
|
404
|
+
let uniqueName = sharedUIDs.get(name2);
|
405
|
+
if (!uniqueName) {
|
406
|
+
uniqueName = generateUid(name2);
|
407
|
+
sharedUIDs.set(name2, uniqueName);
|
408
|
+
}
|
409
|
+
return uniqueName;
|
410
|
+
}
|
411
|
+
function usedSharedUid(name2) {
|
412
|
+
return !!sharedUIDsForFile.get((0, import_babel_utils4.getFile)())?.has(name2);
|
413
|
+
}
|
313
414
|
function getInitialCounts(file) {
|
314
415
|
const counts = /* @__PURE__ */ new Map();
|
315
416
|
const program = file.path;
|
@@ -352,6 +453,7 @@ var AccessorPrefix2 = /* @__PURE__ */ ((AccessorPrefix4) => {
|
|
352
453
|
return AccessorPrefix4;
|
353
454
|
})(AccessorPrefix2 || {});
|
354
455
|
var AccessorProp2 = /* @__PURE__ */ ((AccessorProp4) => {
|
456
|
+
AccessorProp4["Owner"] = "_";
|
355
457
|
AccessorProp4["BranchAccessor"] = "a";
|
356
458
|
AccessorProp4["CatchContent"] = "b";
|
357
459
|
AccessorProp4["PlaceholderBranch"] = "c";
|
@@ -506,18 +608,8 @@ var Sorted = class {
|
|
506
608
|
findIndex(data, item) {
|
507
609
|
if (data) {
|
508
610
|
if (Array.isArray(data)) {
|
509
|
-
|
510
|
-
|
511
|
-
while (pos < max) {
|
512
|
-
const mid = pos + max >>> 1;
|
513
|
-
const compareResult = this.compare(data[mid], item);
|
514
|
-
if (compareResult === 0) return mid;
|
515
|
-
if (compareResult > 0) max = mid;
|
516
|
-
else pos = mid + 1;
|
517
|
-
}
|
518
|
-
return -1;
|
519
|
-
}
|
520
|
-
if (this.compare(data, item) === 0) {
|
611
|
+
return findIndexSorted(this.compare, data, item);
|
612
|
+
} else if (this.compare(data, item) === 0) {
|
521
613
|
return 0;
|
522
614
|
}
|
523
615
|
}
|
@@ -640,9 +732,41 @@ function find(data, cb) {
|
|
640
732
|
}
|
641
733
|
}
|
642
734
|
}
|
643
|
-
function
|
735
|
+
function toArray(data, cb) {
|
644
736
|
return data ? Array.isArray(data) ? data.map(cb) : [cb(data, 0)] : [];
|
645
737
|
}
|
738
|
+
function filterMap(data, cb) {
|
739
|
+
if (data) {
|
740
|
+
if (Array.isArray(data)) {
|
741
|
+
const len = data.length;
|
742
|
+
let result;
|
743
|
+
let i = 0;
|
744
|
+
while (i < len) {
|
745
|
+
let item = cb(data[i++]);
|
746
|
+
if (item) {
|
747
|
+
result = item;
|
748
|
+
while (i < len) {
|
749
|
+
item = cb(data[i++]);
|
750
|
+
if (item) {
|
751
|
+
result = [result, item];
|
752
|
+
while (i < len) {
|
753
|
+
item = cb(data[i++]);
|
754
|
+
if (item) {
|
755
|
+
result.push(item);
|
756
|
+
}
|
757
|
+
}
|
758
|
+
return result;
|
759
|
+
}
|
760
|
+
}
|
761
|
+
return result;
|
762
|
+
}
|
763
|
+
}
|
764
|
+
return result;
|
765
|
+
} else {
|
766
|
+
return cb(data);
|
767
|
+
}
|
768
|
+
}
|
769
|
+
}
|
646
770
|
function findSorted(compare, data, item) {
|
647
771
|
let max = data.length;
|
648
772
|
let pos = 0;
|
@@ -655,6 +779,18 @@ function findSorted(compare, data, item) {
|
|
655
779
|
else pos = mid + 1;
|
656
780
|
}
|
657
781
|
}
|
782
|
+
function findIndexSorted(compare, data, item) {
|
783
|
+
let max = data.length;
|
784
|
+
let pos = 0;
|
785
|
+
while (pos < max) {
|
786
|
+
const mid = pos + max >>> 1;
|
787
|
+
const compareResult = compare(data[mid], item);
|
788
|
+
if (compareResult === 0) return mid;
|
789
|
+
if (compareResult > 0) max = mid;
|
790
|
+
else pos = mid + 1;
|
791
|
+
}
|
792
|
+
return -1;
|
793
|
+
}
|
658
794
|
function addSorted(compare, data, item) {
|
659
795
|
const len = data.length;
|
660
796
|
let max = len;
|
@@ -783,9 +919,81 @@ var entry_builder_default = {
|
|
783
919
|
}
|
784
920
|
};
|
785
921
|
|
922
|
+
// src/translator/util/get-known-attr-values.ts
|
923
|
+
function getKnownAttrValues(tag) {
|
924
|
+
const attrs2 = {};
|
925
|
+
for (const attr2 of tag.attributes) {
|
926
|
+
if (attr2.type === "MarkoAttribute") {
|
927
|
+
attrs2[attr2.name] = attr2.value;
|
928
|
+
}
|
929
|
+
}
|
930
|
+
return attrs2;
|
931
|
+
}
|
932
|
+
|
933
|
+
// src/translator/util/is-core-tag.ts
|
934
|
+
var import_babel_utils7 = require("@marko/compiler/babel-utils");
|
935
|
+
|
936
|
+
// src/translator/util/get-tag-name.ts
|
937
|
+
function getTagName(tag) {
|
938
|
+
return tag.node.name.value;
|
939
|
+
}
|
940
|
+
|
941
|
+
// src/translator/util/is-core-tag.ts
|
942
|
+
var { taglibId } = runtime_info_default;
|
943
|
+
var htmlTaglibId = "marko-html";
|
944
|
+
var interopTaglibId = "@marko/translator-interop-class-tags";
|
945
|
+
function isCoreTag(tag) {
|
946
|
+
if (tag.isMarkoTag()) {
|
947
|
+
const tagDef = (0, import_babel_utils7.getTagDef)(tag);
|
948
|
+
if (tagDef) {
|
949
|
+
switch (tagDef.taglibId) {
|
950
|
+
case taglibId:
|
951
|
+
case interopTaglibId:
|
952
|
+
return true;
|
953
|
+
case htmlTaglibId:
|
954
|
+
switch (tagDef.name) {
|
955
|
+
case "script":
|
956
|
+
case "style":
|
957
|
+
return true;
|
958
|
+
}
|
959
|
+
break;
|
960
|
+
}
|
961
|
+
}
|
962
|
+
}
|
963
|
+
return false;
|
964
|
+
}
|
965
|
+
function isCoreTagName(tag, name2) {
|
966
|
+
return isCoreTag(tag) && getTagName(tag) === name2;
|
967
|
+
}
|
968
|
+
function isConditionTag(tag) {
|
969
|
+
if (isCoreTag(tag)) {
|
970
|
+
switch (getTagName(tag)) {
|
971
|
+
case "if":
|
972
|
+
case "else-if":
|
973
|
+
case "else":
|
974
|
+
return true;
|
975
|
+
}
|
976
|
+
}
|
977
|
+
return false;
|
978
|
+
}
|
979
|
+
function isControlFlowTag(tag) {
|
980
|
+
if (isCoreTag(tag)) {
|
981
|
+
switch (getTagName(tag)) {
|
982
|
+
case "if":
|
983
|
+
case "else-if":
|
984
|
+
case "else":
|
985
|
+
case "for":
|
986
|
+
case "await":
|
987
|
+
case "try":
|
988
|
+
return true;
|
989
|
+
}
|
990
|
+
}
|
991
|
+
return false;
|
992
|
+
}
|
993
|
+
|
786
994
|
// src/translator/util/runtime.ts
|
787
995
|
var import_compiler7 = require("@marko/compiler");
|
788
|
-
var
|
996
|
+
var import_babel_utils8 = require("@marko/compiler/babel-utils");
|
789
997
|
|
790
998
|
// src/common/attr-tag.ts
|
791
999
|
var rest = false ? Symbol("Attribute Tag") : Symbol();
|
@@ -1251,7 +1459,7 @@ var pureDOMFunctions = /* @__PURE__ */ new Set([
|
|
1251
1459
|
function importRuntime(name2) {
|
1252
1460
|
const { output } = getMarkoOpts();
|
1253
1461
|
return toMemberExpression(
|
1254
|
-
(0,
|
1462
|
+
(0, import_babel_utils8.importStar)((0, import_babel_utils8.getFile)(), getRuntimePath(output), "$"),
|
1255
1463
|
name2
|
1256
1464
|
);
|
1257
1465
|
}
|
@@ -1304,82 +1512,27 @@ function getCompatRuntimeFile() {
|
|
1304
1512
|
var import_compiler10 = require("@marko/compiler");
|
1305
1513
|
var import_babel_utils11 = require("@marko/compiler/babel-utils");
|
1306
1514
|
|
1307
|
-
// src/translator/util/is-core-tag.ts
|
1308
|
-
var import_babel_utils8 = require("@marko/compiler/babel-utils");
|
1309
|
-
|
1310
|
-
// src/translator/util/get-tag-name.ts
|
1311
|
-
function getTagName(tag) {
|
1312
|
-
return tag.node.name.value;
|
1313
|
-
}
|
1314
|
-
|
1315
|
-
// src/translator/util/is-core-tag.ts
|
1316
|
-
var { taglibId } = runtime_info_default;
|
1317
|
-
var htmlTaglibId = "marko-html";
|
1318
|
-
var interopTaglibId = "@marko/translator-interop-class-tags";
|
1319
|
-
function isCoreTag(tag) {
|
1320
|
-
if (tag.isMarkoTag()) {
|
1321
|
-
const tagDef = (0, import_babel_utils8.getTagDef)(tag);
|
1322
|
-
if (tagDef) {
|
1323
|
-
switch (tagDef.taglibId) {
|
1324
|
-
case taglibId:
|
1325
|
-
case interopTaglibId:
|
1326
|
-
return true;
|
1327
|
-
case htmlTaglibId:
|
1328
|
-
switch (tagDef.name) {
|
1329
|
-
case "script":
|
1330
|
-
case "style":
|
1331
|
-
return true;
|
1332
|
-
}
|
1333
|
-
break;
|
1334
|
-
}
|
1335
|
-
}
|
1336
|
-
}
|
1337
|
-
return false;
|
1338
|
-
}
|
1339
|
-
function isCoreTagName(tag, name2) {
|
1340
|
-
return isCoreTag(tag) && getTagName(tag) === name2;
|
1341
|
-
}
|
1342
|
-
function isConditionTag(tag) {
|
1343
|
-
if (isCoreTag(tag)) {
|
1344
|
-
switch (getTagName(tag)) {
|
1345
|
-
case "if":
|
1346
|
-
case "else-if":
|
1347
|
-
case "else":
|
1348
|
-
return true;
|
1349
|
-
}
|
1350
|
-
}
|
1351
|
-
return false;
|
1352
|
-
}
|
1353
|
-
function isControlFlowTag(tag) {
|
1354
|
-
if (isCoreTag(tag)) {
|
1355
|
-
switch (getTagName(tag)) {
|
1356
|
-
case "if":
|
1357
|
-
case "else-if":
|
1358
|
-
case "else":
|
1359
|
-
case "for":
|
1360
|
-
case "await":
|
1361
|
-
case "try":
|
1362
|
-
return true;
|
1363
|
-
}
|
1364
|
-
}
|
1365
|
-
return false;
|
1366
|
-
}
|
1367
|
-
|
1368
1515
|
// src/translator/util/serialize-reasons.ts
|
1369
1516
|
var import_compiler8 = require("@marko/compiler");
|
1370
|
-
var
|
1517
|
+
var reasonExprs = /* @__PURE__ */ new WeakMap();
|
1518
|
+
var keyedReasonExprs = /* @__PURE__ */ new WeakMap();
|
1371
1519
|
var serializeKeysByBinding = /* @__PURE__ */ new WeakMap();
|
1372
1520
|
var serializeKeyBySourceModifier = {};
|
1373
|
-
function
|
1374
|
-
|
1521
|
+
function forceSectionSerialize(section, prop) {
|
1522
|
+
if (prop) {
|
1523
|
+
forceSerializeKey(section, getSectionPropSerializeReasonKey(section, prop));
|
1524
|
+
} else if (section.serializeReason !== true) {
|
1525
|
+
reasonExprs.delete(section);
|
1526
|
+
section.serializeReason = true;
|
1527
|
+
}
|
1375
1528
|
}
|
1376
1529
|
function forceBindingSerialize(section, binding, prefix2) {
|
1377
|
-
|
1530
|
+
forceSerializeKey(section, getBindingSerializeReasonKey(binding, prefix2));
|
1378
1531
|
}
|
1379
|
-
function
|
1532
|
+
function forceSerializeKey(section, key) {
|
1380
1533
|
if (section.serializeReasons.get(key) !== true) {
|
1381
1534
|
section.serializeReasons.set(key, true);
|
1382
|
-
|
1535
|
+
keyedReasonExprs.get(section)?.delete(key);
|
1383
1536
|
}
|
1384
1537
|
}
|
1385
1538
|
function isBindingForceSerialized(section, binding, prefix2) {
|
@@ -1387,73 +1540,85 @@ function isBindingForceSerialized(section, binding, prefix2) {
|
|
1387
1540
|
getBindingSerializeReasonKey(binding, prefix2)
|
1388
1541
|
) === true;
|
1389
1542
|
}
|
1390
|
-
function
|
1391
|
-
|
1392
|
-
|
1393
|
-
|
1394
|
-
|
1395
|
-
|
1543
|
+
function addSectionSerializeReasonExpr(section, expr, prop) {
|
1544
|
+
if (expr) {
|
1545
|
+
if (prop) {
|
1546
|
+
addKeyedSerializeReasonExpr(
|
1547
|
+
section,
|
1548
|
+
getSectionPropSerializeReasonKey(section, prop),
|
1549
|
+
expr
|
1550
|
+
);
|
1551
|
+
} else if (section.serializeReason !== true) {
|
1552
|
+
if (expr === true) {
|
1553
|
+
forceSectionSerialize(section);
|
1554
|
+
} else {
|
1555
|
+
const existingExpr = reasonExprs.get(section);
|
1556
|
+
reasonExprs.set(
|
1557
|
+
section,
|
1558
|
+
existingExpr ? concat(existingExpr, expr) : expr
|
1559
|
+
);
|
1560
|
+
}
|
1561
|
+
}
|
1562
|
+
}
|
1396
1563
|
}
|
1397
1564
|
function addBindingSerializeReasonExpr(section, binding, expr, prefix2) {
|
1398
|
-
|
1399
|
-
section,
|
1400
|
-
getBindingSerializeReasonKey(binding, prefix2),
|
1401
|
-
expr
|
1402
|
-
);
|
1403
|
-
}
|
1404
|
-
function addSerializeReasonExpr(section, key, expr) {
|
1565
|
+
const key = getBindingSerializeReasonKey(binding, prefix2);
|
1405
1566
|
if (expr && section.serializeReasons.get(key) !== true) {
|
1406
|
-
|
1407
|
-
|
1567
|
+
addKeyedSerializeReasonExpr(section, key, expr);
|
1568
|
+
}
|
1569
|
+
}
|
1570
|
+
function addKeyedSerializeReasonExpr(section, key, expr) {
|
1571
|
+
if (expr === true) {
|
1572
|
+
forceSerializeKey(section, key);
|
1573
|
+
} else {
|
1574
|
+
let existingExpr;
|
1575
|
+
let keyedExprs = keyedReasonExprs.get(section);
|
1576
|
+
if (keyedExprs) {
|
1577
|
+
existingExpr = keyedExprs.get(key);
|
1408
1578
|
} else {
|
1409
|
-
|
1410
|
-
|
1411
|
-
if (exprsByKey) {
|
1412
|
-
existingExpr = exprsByKey.get(key);
|
1413
|
-
} else {
|
1414
|
-
exprsByKey = /* @__PURE__ */ new Map();
|
1415
|
-
serializeReasonExprs.set(section, exprsByKey);
|
1416
|
-
}
|
1417
|
-
exprsByKey.set(key, existingExpr ? concat(existingExpr, expr) : expr);
|
1579
|
+
keyedExprs = /* @__PURE__ */ new Map();
|
1580
|
+
keyedReasonExprs.set(section, keyedExprs);
|
1418
1581
|
}
|
1582
|
+
keyedExprs.set(key, existingExpr ? concat(existingExpr, expr) : expr);
|
1419
1583
|
}
|
1420
1584
|
}
|
1421
|
-
function
|
1422
|
-
addSerializeReasonRef(section, getPropSerializeReasonKey(extra, prop), ref);
|
1423
|
-
}
|
1424
|
-
function addSerializeReasonRef(section, key, ref) {
|
1585
|
+
function addSectionSerializeReasonRef(section, ref, prop) {
|
1425
1586
|
if (ref) {
|
1426
|
-
|
1427
|
-
|
1428
|
-
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1587
|
+
if (prop) {
|
1588
|
+
addKeyedSerializeReasonRef(
|
1589
|
+
section,
|
1590
|
+
getSectionPropSerializeReasonKey(section, prop),
|
1591
|
+
ref
|
1592
|
+
);
|
1593
|
+
} else {
|
1594
|
+
const existingReason = section.serializeReason;
|
1595
|
+
if (existingReason !== true) {
|
1596
|
+
if (ref === true) {
|
1597
|
+
forceSectionSerialize(section);
|
1434
1598
|
} else {
|
1435
|
-
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1599
|
+
const reason = getSerializeSourcesForRef(ref);
|
1600
|
+
if (reason === true) {
|
1601
|
+
forceSectionSerialize(section);
|
1602
|
+
} else {
|
1603
|
+
section.serializeReason = mergeSerializeReasons(
|
1604
|
+
existingReason,
|
1605
|
+
reason
|
1606
|
+
);
|
1607
|
+
}
|
1439
1608
|
}
|
1440
1609
|
}
|
1441
1610
|
}
|
1442
1611
|
}
|
1443
1612
|
}
|
1444
|
-
function
|
1445
|
-
|
1446
|
-
|
1447
|
-
|
1448
|
-
|
1449
|
-
|
1450
|
-
|
1451
|
-
function addSerializeReason(section, key, reason) {
|
1452
|
-
if (reason) {
|
1453
|
-
const existingReason = section.serializeReasons.get(key);
|
1454
|
-
if (existingReason !== true) {
|
1613
|
+
function addKeyedSerializeReasonRef(section, key, ref) {
|
1614
|
+
const existingReason = section.serializeReasons.get(key);
|
1615
|
+
if (existingReason !== true) {
|
1616
|
+
if (ref === true) {
|
1617
|
+
forceSerializeKey(section, key);
|
1618
|
+
} else {
|
1619
|
+
const reason = getSerializeSourcesForRef(ref);
|
1455
1620
|
if (reason === true) {
|
1456
|
-
|
1621
|
+
forceSerializeKey(section, key);
|
1457
1622
|
} else {
|
1458
1623
|
section.serializeReasons.set(
|
1459
1624
|
key,
|
@@ -1463,31 +1628,119 @@ function addSerializeReason(section, key, reason) {
|
|
1463
1628
|
}
|
1464
1629
|
}
|
1465
1630
|
}
|
1466
|
-
function
|
1467
|
-
|
1631
|
+
function addSectionSerializeReason(section, reason, prop) {
|
1632
|
+
if (reason) {
|
1633
|
+
if (prop) {
|
1634
|
+
addKeyedSerializeReason(
|
1635
|
+
section,
|
1636
|
+
getSectionPropSerializeReasonKey(section, prop),
|
1637
|
+
reason
|
1638
|
+
);
|
1639
|
+
} else {
|
1640
|
+
const existingReason = section.serializeReason;
|
1641
|
+
if (existingReason !== true) {
|
1642
|
+
if (reason === true) {
|
1643
|
+
forceSectionSerialize(section);
|
1644
|
+
} else {
|
1645
|
+
section.serializeReason = mergeSerializeReasons(
|
1646
|
+
existingReason,
|
1647
|
+
reason
|
1648
|
+
);
|
1649
|
+
}
|
1650
|
+
}
|
1651
|
+
}
|
1652
|
+
}
|
1653
|
+
}
|
1654
|
+
function addBindingSerializeReason(section, binding, reason, prefix2) {
|
1655
|
+
if (reason) {
|
1656
|
+
addKeyedSerializeReason(
|
1657
|
+
section,
|
1658
|
+
getBindingSerializeReasonKey(binding, prefix2),
|
1659
|
+
reason
|
1660
|
+
);
|
1661
|
+
}
|
1662
|
+
}
|
1663
|
+
function addKeyedSerializeReason(section, key, reason) {
|
1664
|
+
const existingReason = section.serializeReasons.get(key);
|
1665
|
+
if (existingReason !== true) {
|
1666
|
+
if (reason === true) {
|
1667
|
+
forceSerializeKey(section, key);
|
1668
|
+
} else {
|
1669
|
+
section.serializeReasons.set(
|
1670
|
+
key,
|
1671
|
+
mergeSerializeReasons(existingReason, reason)
|
1672
|
+
);
|
1673
|
+
}
|
1674
|
+
}
|
1675
|
+
}
|
1676
|
+
function getSectionSerializeReason(section, prop) {
|
1677
|
+
return prop ? section.serializeReasons.get(
|
1678
|
+
getSectionPropSerializeReasonKey(section, prop)
|
1679
|
+
) : section.serializeReason;
|
1468
1680
|
}
|
1469
1681
|
function getBindingSerializeReason(section, binding, prefix2) {
|
1470
1682
|
return section.serializeReasons.get(
|
1471
1683
|
getBindingSerializeReasonKey(binding, prefix2)
|
1472
1684
|
);
|
1473
1685
|
}
|
1474
|
-
function
|
1475
|
-
|
1476
|
-
|
1477
|
-
)
|
1686
|
+
function getSectionPropSerializeReasonKey(section, prop) {
|
1687
|
+
const keys = serializeKeyBySourceModifier[prop] ||= /* @__PURE__ */ new WeakMap();
|
1688
|
+
let key = keys.get(section);
|
1689
|
+
if (!key) {
|
1690
|
+
keys.set(
|
1691
|
+
section,
|
1692
|
+
key = Symbol(
|
1693
|
+
typeof prop === "symbol" ? `Symbol(${prop.description})` : prop
|
1694
|
+
)
|
1695
|
+
);
|
1696
|
+
}
|
1697
|
+
return key;
|
1478
1698
|
}
|
1479
1699
|
function getBindingSerializeReasonKey(binding, prefix2) {
|
1480
1700
|
const keys = prefix2 ? serializeKeyBySourceModifier[prefix2] ||= /* @__PURE__ */ new WeakMap() : serializeKeysByBinding;
|
1481
1701
|
let key = keys.get(binding);
|
1482
1702
|
if (!key) {
|
1483
|
-
keys.set(
|
1703
|
+
keys.set(
|
1704
|
+
binding,
|
1705
|
+
key = Symbol(
|
1706
|
+
(prefix2 ? typeof prefix2 === "symbol" ? `Symbol(${prefix2.description})` : prefix2 : "") + binding.name
|
1707
|
+
)
|
1708
|
+
);
|
1484
1709
|
}
|
1485
1710
|
return key;
|
1486
1711
|
}
|
1487
|
-
function
|
1488
|
-
const
|
1489
|
-
|
1490
|
-
|
1712
|
+
function applySerializeReasonExprs(section) {
|
1713
|
+
const keyedExprs = keyedReasonExprs.get(section);
|
1714
|
+
if (keyedExprs) {
|
1715
|
+
keyedReasonExprs.delete(section);
|
1716
|
+
for (const [key, exprs] of keyedExprs) {
|
1717
|
+
const reason = getSerializeSourcesForExprs(exprs);
|
1718
|
+
if (reason) {
|
1719
|
+
section.serializeReasons.set(
|
1720
|
+
key,
|
1721
|
+
mergeSerializeReasons(section.serializeReasons.get(key), reason)
|
1722
|
+
);
|
1723
|
+
}
|
1724
|
+
}
|
1725
|
+
}
|
1726
|
+
section.serializeReason = mergeSerializeReasons(
|
1727
|
+
section.serializeReason,
|
1728
|
+
getSerializeSourcesForExprs(reasonExprs.get(section))
|
1729
|
+
);
|
1730
|
+
reasonExprs.delete(section);
|
1731
|
+
}
|
1732
|
+
function finalizeSectionSerializeReasons(section) {
|
1733
|
+
let reason = section.serializeReason;
|
1734
|
+
if (reason !== true) {
|
1735
|
+
for (const [, keyedReason] of section.serializeReasons) {
|
1736
|
+
if (keyedReason === true) {
|
1737
|
+
reason = true;
|
1738
|
+
break;
|
1739
|
+
}
|
1740
|
+
reason = mergeSerializeReasons(reason, keyedReason);
|
1741
|
+
}
|
1742
|
+
section.serializeReason = reason;
|
1743
|
+
}
|
1491
1744
|
}
|
1492
1745
|
function getSerializeSourcesForExpr(expr) {
|
1493
1746
|
if (isReferencedExtra(expr)) {
|
@@ -1534,17 +1787,17 @@ function mergeSerializeReasons(a, b) {
|
|
1534
1787
|
// src/translator/util/state.ts
|
1535
1788
|
var import_babel_utils9 = require("@marko/compiler/babel-utils");
|
1536
1789
|
var createProgramState = (init) => {
|
1537
|
-
const
|
1790
|
+
const map = /* @__PURE__ */ new WeakMap();
|
1538
1791
|
return [
|
1539
1792
|
() => {
|
1540
|
-
let state =
|
1793
|
+
let state = map.get((0, import_babel_utils9.getProgram)());
|
1541
1794
|
if (!state) {
|
1542
|
-
|
1795
|
+
map.set((0, import_babel_utils9.getProgram)(), state = init());
|
1543
1796
|
}
|
1544
1797
|
return state;
|
1545
1798
|
},
|
1546
1799
|
(value) => {
|
1547
|
-
|
1800
|
+
map.set((0, import_babel_utils9.getProgram)(), value);
|
1548
1801
|
}
|
1549
1802
|
];
|
1550
1803
|
};
|
@@ -1681,7 +1934,6 @@ function analyzeExpressionTagName(name2, extra) {
|
|
1681
1934
|
}
|
1682
1935
|
|
1683
1936
|
// src/translator/util/sections.ts
|
1684
|
-
var kBranchSerializeReason = Symbol("serialize branch reason");
|
1685
1937
|
var sectionUtil = new Sorted(function compareSections(a, b) {
|
1686
1938
|
return a.id - b.id;
|
1687
1939
|
});
|
@@ -1710,6 +1962,7 @@ function startSection(path5) {
|
|
1710
1962
|
hoisted: void 0,
|
1711
1963
|
isHoistThrough: void 0,
|
1712
1964
|
assignments: void 0,
|
1965
|
+
serializeReason: void 0,
|
1713
1966
|
serializeReasons: /* @__PURE__ */ new Map(),
|
1714
1967
|
content: getContentInfo(path5),
|
1715
1968
|
upstreamExpression: void 0,
|
@@ -1923,8 +2176,8 @@ function isNativeNode(tag) {
|
|
1923
2176
|
}
|
1924
2177
|
|
1925
2178
|
// src/translator/visitors/program/dom.ts
|
1926
|
-
var
|
1927
|
-
var
|
2179
|
+
var import_compiler21 = require("@marko/compiler");
|
2180
|
+
var import_babel_utils15 = require("@marko/compiler/babel-utils");
|
1928
2181
|
|
1929
2182
|
// src/translator/util/get-style-file.ts
|
1930
2183
|
var import_path = __toESM(require("path"));
|
@@ -1963,23 +2216,12 @@ function escapeRegExp(str) {
|
|
1963
2216
|
}
|
1964
2217
|
|
1965
2218
|
// src/translator/util/signals.ts
|
1966
|
-
var
|
1967
|
-
var
|
2219
|
+
var import_compiler20 = require("@marko/compiler");
|
2220
|
+
var import_babel_utils14 = require("@marko/compiler/babel-utils");
|
1968
2221
|
|
1969
2222
|
// src/translator/core/return.ts
|
1970
|
-
var
|
1971
|
-
var
|
1972
|
-
|
1973
|
-
// src/translator/util/get-known-attr-values.ts
|
1974
|
-
function getKnownAttrValues(tag) {
|
1975
|
-
const attrs2 = {};
|
1976
|
-
for (const attr2 of tag.attributes) {
|
1977
|
-
if (attr2.type === "MarkoAttribute") {
|
1978
|
-
attrs2[attr2.name] = attr2.value;
|
1979
|
-
}
|
1980
|
-
}
|
1981
|
-
return attrs2;
|
1982
|
-
}
|
2223
|
+
var import_compiler17 = require("@marko/compiler");
|
2224
|
+
var import_babel_utils13 = require("@marko/compiler/babel-utils");
|
1983
2225
|
|
1984
2226
|
// src/translator/util/get-parent-tag.ts
|
1985
2227
|
function getParentTag(tag) {
|
@@ -2055,10 +2297,201 @@ function translateByTarget({
|
|
2055
2297
|
}
|
2056
2298
|
|
2057
2299
|
// src/translator/util/writer.ts
|
2058
|
-
var
|
2300
|
+
var import_compiler16 = require("@marko/compiler");
|
2059
2301
|
|
2060
|
-
// src/translator/
|
2302
|
+
// src/translator/visitors/program/html.ts
|
2303
|
+
var import_compiler13 = require("@marko/compiler");
|
2304
|
+
var import_babel_utils12 = require("@marko/compiler/babel-utils");
|
2305
|
+
|
2306
|
+
// src/translator/util/is-static.ts
|
2307
|
+
function isStatic(path5) {
|
2308
|
+
return path5.isImportDeclaration() || path5.isExportDeclaration() || path5.isMarkoScriptlet({ static: true });
|
2309
|
+
}
|
2310
|
+
|
2311
|
+
// src/translator/util/simplify-fn.ts
|
2061
2312
|
var import_compiler12 = require("@marko/compiler");
|
2313
|
+
function simplifyFunction(fn) {
|
2314
|
+
switch (fn.type) {
|
2315
|
+
case "FunctionDeclaration":
|
2316
|
+
case "FunctionExpression":
|
2317
|
+
case "ArrowFunctionExpression":
|
2318
|
+
return fn;
|
2319
|
+
default:
|
2320
|
+
return import_compiler12.types.functionExpression(
|
2321
|
+
null,
|
2322
|
+
fn.params,
|
2323
|
+
fn.body,
|
2324
|
+
fn.async,
|
2325
|
+
fn.generator
|
2326
|
+
);
|
2327
|
+
}
|
2328
|
+
}
|
2329
|
+
|
2330
|
+
// src/translator/visitors/program/html.ts
|
2331
|
+
function getTemplateContentName() {
|
2332
|
+
return getSharedUid("content");
|
2333
|
+
}
|
2334
|
+
function getExprIfSerialized(reason, expr) {
|
2335
|
+
return reason ? reason === true ? expr : import_compiler13.types.logicalExpression(
|
2336
|
+
"&&",
|
2337
|
+
callRuntime(
|
2338
|
+
"serializeIf",
|
2339
|
+
import_compiler13.types.identifier(getSharedUid("serialize")),
|
2340
|
+
import_compiler13.types.numericLiteral(
|
2341
|
+
resolveSerializeReasonId(
|
2342
|
+
(0, import_babel_utils12.getProgram)().node.extra.inputSerializeReasons,
|
2343
|
+
reason
|
2344
|
+
)
|
2345
|
+
)
|
2346
|
+
),
|
2347
|
+
expr
|
2348
|
+
) : void 0;
|
2349
|
+
}
|
2350
|
+
function getSerializeGuard(reason) {
|
2351
|
+
return reason ? reason === true ? import_compiler13.types.numericLiteral(1) : callRuntime(
|
2352
|
+
"serializeGuard",
|
2353
|
+
import_compiler13.types.identifier(getSharedUid("serialize")),
|
2354
|
+
import_compiler13.types.numericLiteral(
|
2355
|
+
resolveSerializeReasonId(
|
2356
|
+
(0, import_babel_utils12.getProgram)().node.extra.inputSerializeReasons,
|
2357
|
+
reason
|
2358
|
+
)
|
2359
|
+
)
|
2360
|
+
) : void 0;
|
2361
|
+
}
|
2362
|
+
var html_default = {
|
2363
|
+
translate: {
|
2364
|
+
exit(program) {
|
2365
|
+
flushInto(program);
|
2366
|
+
writeHTMLResumeStatements(program);
|
2367
|
+
traverseReplace(program.node, "body", replaceNode);
|
2368
|
+
const renderContent = [];
|
2369
|
+
for (const child of program.get("body")) {
|
2370
|
+
if (!isStatic(child)) {
|
2371
|
+
renderContent.push(child.node);
|
2372
|
+
child.remove();
|
2373
|
+
} else if (child.isMarkoScriptlet()) {
|
2374
|
+
if (child.node.target && child.node.target !== "server") {
|
2375
|
+
child.remove();
|
2376
|
+
} else {
|
2377
|
+
child.replaceWithMultiple(child.node.body);
|
2378
|
+
}
|
2379
|
+
}
|
2380
|
+
}
|
2381
|
+
const serializeId = usedSharedUid("serialize") && getSharedUid("serialize");
|
2382
|
+
const contentId = usedSharedUid("content") && getTemplateContentName();
|
2383
|
+
const contentFn = import_compiler13.types.arrowFunctionExpression(
|
2384
|
+
serializeId ? [import_compiler13.types.identifier("input"), import_compiler13.types.identifier(serializeId)] : [import_compiler13.types.identifier("input")],
|
2385
|
+
import_compiler13.types.blockStatement(renderContent)
|
2386
|
+
);
|
2387
|
+
const exportDefault = import_compiler13.types.exportDefaultDeclaration(
|
2388
|
+
callRuntime(
|
2389
|
+
"createTemplate",
|
2390
|
+
import_compiler13.types.stringLiteral(program.hub.file.metadata.marko.id),
|
2391
|
+
contentId ? import_compiler13.types.identifier(contentId) : contentFn
|
2392
|
+
)
|
2393
|
+
);
|
2394
|
+
if (contentId) {
|
2395
|
+
program.node.body.push(
|
2396
|
+
import_compiler13.types.variableDeclaration("const", [
|
2397
|
+
import_compiler13.types.variableDeclarator(import_compiler13.types.identifier(contentId), contentFn)
|
2398
|
+
]),
|
2399
|
+
exportDefault
|
2400
|
+
);
|
2401
|
+
} else {
|
2402
|
+
program.node.body.push(exportDefault);
|
2403
|
+
}
|
2404
|
+
}
|
2405
|
+
}
|
2406
|
+
};
|
2407
|
+
function replaceNode(node, container) {
|
2408
|
+
return replaceBindingReadNode(node) || replaceRegisteredFunctionNode(node, container);
|
2409
|
+
}
|
2410
|
+
function replaceBindingReadNode(node) {
|
2411
|
+
switch (node.type) {
|
2412
|
+
case "Identifier":
|
2413
|
+
case "MemberExpression": {
|
2414
|
+
const { extra } = node;
|
2415
|
+
if (extra && !(extra.read && !extra.read.binding.declared || extra.binding && !extra.binding.declared)) {
|
2416
|
+
return getReadReplacement(node);
|
2417
|
+
}
|
2418
|
+
}
|
2419
|
+
}
|
2420
|
+
}
|
2421
|
+
function replaceRegisteredFunctionNode(node, container) {
|
2422
|
+
switch (node.type) {
|
2423
|
+
case "ClassMethod": {
|
2424
|
+
const replacement = getRegisteredFnExpression(node);
|
2425
|
+
return replacement && import_compiler13.types.classProperty(node.key, replacement);
|
2426
|
+
}
|
2427
|
+
case "ClassPrivateMethod": {
|
2428
|
+
const replacement = getRegisteredFnExpression(node);
|
2429
|
+
return replacement && import_compiler13.types.classPrivateProperty(node.key, replacement);
|
2430
|
+
}
|
2431
|
+
case "ObjectMethod": {
|
2432
|
+
const replacement = getRegisteredFnExpression(node);
|
2433
|
+
return replacement && import_compiler13.types.objectProperty(node.key, replacement);
|
2434
|
+
}
|
2435
|
+
case "FunctionDeclaration": {
|
2436
|
+
const { extra } = node;
|
2437
|
+
if (isRegisteredFnExtra(extra)) {
|
2438
|
+
let registeredFnDeclarations = registeredFnDeclarationsByBody.get(
|
2439
|
+
container
|
2440
|
+
);
|
2441
|
+
if (!registeredFnDeclarations) {
|
2442
|
+
registeredFnDeclarationsByBody.set(
|
2443
|
+
container,
|
2444
|
+
registeredFnDeclarations = []
|
2445
|
+
);
|
2446
|
+
}
|
2447
|
+
registeredFnDeclarations.push({
|
2448
|
+
id: node.id.name,
|
2449
|
+
registerId: extra.registerId
|
2450
|
+
});
|
2451
|
+
}
|
2452
|
+
break;
|
2453
|
+
}
|
2454
|
+
case "ArrowFunctionExpression":
|
2455
|
+
case "FunctionExpression": {
|
2456
|
+
return getRegisteredFnExpression(node);
|
2457
|
+
}
|
2458
|
+
case "BlockStatement":
|
2459
|
+
case "MarkoScriptlet":
|
2460
|
+
addRegisteredDeclarations(node.body);
|
2461
|
+
break;
|
2462
|
+
}
|
2463
|
+
}
|
2464
|
+
var registeredFnDeclarationsByBody = /* @__PURE__ */ new WeakMap();
|
2465
|
+
function addRegisteredDeclarations(body) {
|
2466
|
+
const registeredFnDeclarations = registeredFnDeclarationsByBody.get(body);
|
2467
|
+
if (registeredFnDeclarations) {
|
2468
|
+
for (const { id, registerId } of registeredFnDeclarations) {
|
2469
|
+
body.push(
|
2470
|
+
import_compiler13.types.expressionStatement(
|
2471
|
+
callRuntime(
|
2472
|
+
"register",
|
2473
|
+
import_compiler13.types.identifier(id),
|
2474
|
+
import_compiler13.types.stringLiteral(registerId)
|
2475
|
+
)
|
2476
|
+
)
|
2477
|
+
);
|
2478
|
+
}
|
2479
|
+
}
|
2480
|
+
}
|
2481
|
+
function getRegisteredFnExpression(node) {
|
2482
|
+
const { extra } = node;
|
2483
|
+
if (isRegisteredFnExtra(extra)) {
|
2484
|
+
return callRuntime(
|
2485
|
+
"register",
|
2486
|
+
simplifyFunction(node),
|
2487
|
+
import_compiler13.types.stringLiteral(extra.registerId),
|
2488
|
+
(extra.referencedBindingsInFunction || extra.referencesScope) && getScopeIdIdentifier(extra.section)
|
2489
|
+
);
|
2490
|
+
}
|
2491
|
+
}
|
2492
|
+
|
2493
|
+
// src/translator/util/normalize-string-expression.ts
|
2494
|
+
var import_compiler14 = require("@marko/compiler");
|
2062
2495
|
function normalizeStringExpression(parts) {
|
2063
2496
|
const strs = [];
|
2064
2497
|
const exprs = [];
|
@@ -2066,9 +2499,9 @@ function normalizeStringExpression(parts) {
|
|
2066
2499
|
for (let i = 1; i < parts.length; i++) {
|
2067
2500
|
let content = parts[i];
|
2068
2501
|
if (typeof content === "object") {
|
2069
|
-
if (
|
2502
|
+
if (import_compiler14.types.isStringLiteral(content)) {
|
2070
2503
|
content = content.value;
|
2071
|
-
} else if (
|
2504
|
+
} else if (import_compiler14.types.isTemplateLiteral(content)) {
|
2072
2505
|
let nextIndex = i + 1;
|
2073
2506
|
const exprLen = content.expressions.length;
|
2074
2507
|
shiftItems(parts, nextIndex, content.quasis.length + exprLen);
|
@@ -2092,12 +2525,12 @@ function normalizeStringExpression(parts) {
|
|
2092
2525
|
return exprs[0];
|
2093
2526
|
}
|
2094
2527
|
strs.push(curStr);
|
2095
|
-
return
|
2096
|
-
strs.map((raw) =>
|
2528
|
+
return import_compiler14.types.templateLiteral(
|
2529
|
+
strs.map((raw) => import_compiler14.types.templateElement({ raw })),
|
2097
2530
|
exprs
|
2098
2531
|
);
|
2099
2532
|
} else if (curStr) {
|
2100
|
-
return
|
2533
|
+
return import_compiler14.types.stringLiteral(curStr);
|
2101
2534
|
}
|
2102
2535
|
}
|
2103
2536
|
function appendLiteral(arr, str) {
|
@@ -2110,7 +2543,7 @@ function shiftItems(list, start, offset) {
|
|
2110
2543
|
}
|
2111
2544
|
|
2112
2545
|
// src/translator/util/walks.ts
|
2113
|
-
var
|
2546
|
+
var import_compiler15 = require("@marko/compiler");
|
2114
2547
|
var [getWalks] = createSectionState(
|
2115
2548
|
"walks",
|
2116
2549
|
() => [""]
|
@@ -2289,16 +2722,16 @@ function consumeHTML(path5) {
|
|
2289
2722
|
trailers.length = 0;
|
2290
2723
|
trailers[0] = "";
|
2291
2724
|
if (writeResult && trailerResult) {
|
2292
|
-
return
|
2293
|
-
|
2725
|
+
return import_compiler16.types.expressionStatement(
|
2726
|
+
import_compiler16.types.sequenceExpression([
|
2294
2727
|
callRuntime("write", writeResult),
|
2295
2728
|
callRuntime("writeTrailers", trailerResult)
|
2296
2729
|
])
|
2297
2730
|
);
|
2298
2731
|
} else if (writeResult) {
|
2299
|
-
return
|
2732
|
+
return import_compiler16.types.expressionStatement(callRuntime("write", writeResult));
|
2300
2733
|
} else if (trailerResult) {
|
2301
|
-
return
|
2734
|
+
return import_compiler16.types.expressionStatement(callRuntime("writeTrailers", trailerResult));
|
2302
2735
|
}
|
2303
2736
|
}
|
2304
2737
|
function flushBefore(path5) {
|
@@ -2324,19 +2757,22 @@ function getSectionMeta(section) {
|
|
2324
2757
|
writes: normalizeStringExpression([writePrefix, ...writes, writePostfix])
|
2325
2758
|
};
|
2326
2759
|
}
|
2327
|
-
function markNode(path5,
|
2328
|
-
|
2329
|
-
if (binding.type !== 0 /* dom */) {
|
2760
|
+
function markNode(path5, nodeBinding, reason) {
|
2761
|
+
if (nodeBinding.type !== 0 /* dom */) {
|
2330
2762
|
throw path5.buildCodeFrameError(
|
2331
2763
|
"Tried to mark a node that was not determined to need a mark during analyze."
|
2332
2764
|
);
|
2333
2765
|
}
|
2334
2766
|
if (isOutputHTML()) {
|
2335
|
-
|
2336
|
-
|
2337
|
-
|
2338
|
-
|
2339
|
-
|
2767
|
+
if (reason) {
|
2768
|
+
const section = getSection(path5);
|
2769
|
+
writeTo(path5)`${callRuntime(
|
2770
|
+
"markResumeNode",
|
2771
|
+
getScopeIdIdentifier(section),
|
2772
|
+
getScopeAccessorLiteral(nodeBinding),
|
2773
|
+
reason === true ? void 0 : getSerializeGuard(reason)
|
2774
|
+
)}`;
|
2775
|
+
}
|
2340
2776
|
}
|
2341
2777
|
}
|
2342
2778
|
|
@@ -2345,14 +2781,14 @@ var tagsWithReturn = /* @__PURE__ */ new WeakSet();
|
|
2345
2781
|
var [getSectionReturnValueIdentifier, setReturnValueIdentifier] = createSectionState("returnValue");
|
2346
2782
|
var return_default = {
|
2347
2783
|
analyze(tag) {
|
2348
|
-
(0,
|
2349
|
-
(0,
|
2350
|
-
(0,
|
2784
|
+
(0, import_babel_utils13.assertNoArgs)(tag);
|
2785
|
+
(0, import_babel_utils13.assertNoVar)(tag);
|
2786
|
+
(0, import_babel_utils13.assertNoParams)(tag);
|
2351
2787
|
assertNoBodyContent(tag);
|
2352
|
-
(0,
|
2788
|
+
(0, import_babel_utils13.assertAllowedAttributes)(tag, ["value", "valueChange"]);
|
2353
2789
|
const parentTag = getParentTag(tag);
|
2354
2790
|
if (parentTag) {
|
2355
|
-
if ((0,
|
2791
|
+
if ((0, import_babel_utils13.isNativeTag)(parentTag)) {
|
2356
2792
|
throw tag.get("name").buildCodeFrameError(
|
2357
2793
|
"The `return` tag can not be used in a native tag."
|
2358
2794
|
);
|
@@ -2369,9 +2805,16 @@ var return_default = {
|
|
2369
2805
|
} else {
|
2370
2806
|
tagsWithReturn.add(tag.parentPath);
|
2371
2807
|
}
|
2372
|
-
|
2808
|
+
const attrs2 = getKnownAttrValues(tag.node);
|
2809
|
+
if (!attrs2.value) {
|
2373
2810
|
throw tag.get("name").buildCodeFrameError("The `return` tag requires a value.");
|
2374
2811
|
}
|
2812
|
+
if (attrs2.valueChange) {
|
2813
|
+
forceSectionSerialize(
|
2814
|
+
getSection(tag),
|
2815
|
+
getAccessorProp().TagVariableChange
|
2816
|
+
);
|
2817
|
+
}
|
2375
2818
|
},
|
2376
2819
|
translate: translateByTarget({
|
2377
2820
|
html: {
|
@@ -2380,7 +2823,7 @@ var return_default = {
|
|
2380
2823
|
const attrs2 = getKnownAttrValues(tag.node);
|
2381
2824
|
flushBefore(tag);
|
2382
2825
|
if (attrs2.valueChange) {
|
2383
|
-
|
2826
|
+
setSectionSerializedValue(
|
2384
2827
|
section,
|
2385
2828
|
getAccessorProp().TagVariableChange,
|
2386
2829
|
attrs2.valueChange
|
@@ -2390,8 +2833,8 @@ var return_default = {
|
|
2390
2833
|
const returnId = generateUidIdentifier("return");
|
2391
2834
|
setReturnValueIdentifier(section, returnId);
|
2392
2835
|
tag.replaceWith(
|
2393
|
-
|
2394
|
-
|
2836
|
+
import_compiler17.types.variableDeclaration("const", [
|
2837
|
+
import_compiler17.types.variableDeclarator(returnId, attrs2.value)
|
2395
2838
|
])
|
2396
2839
|
)[0].skip();
|
2397
2840
|
}
|
@@ -2441,44 +2884,25 @@ var return_default = {
|
|
2441
2884
|
};
|
2442
2885
|
|
2443
2886
|
// src/translator/util/get-defined-binding-expression.ts
|
2444
|
-
var
|
2887
|
+
var import_compiler18 = require("@marko/compiler");
|
2445
2888
|
function getDeclaredBindingExpression(binding) {
|
2446
2889
|
if (binding.declared || !binding.upstreamAlias) {
|
2447
|
-
return
|
2448
|
-
} else if (binding.property !== void 0) {
|
2449
|
-
return toMemberExpression(
|
2450
|
-
getDeclaredBindingExpression(binding.upstreamAlias),
|
2451
|
-
binding.property,
|
2452
|
-
binding.upstreamAlias.nullable
|
2453
|
-
);
|
2454
|
-
} else {
|
2455
|
-
return getDeclaredBindingExpression(binding.upstreamAlias);
|
2456
|
-
}
|
2457
|
-
}
|
2458
|
-
|
2459
|
-
// src/translator/util/simplify-fn.ts
|
2460
|
-
var import_compiler17 = require("@marko/compiler");
|
2461
|
-
function simplifyFunction(fn) {
|
2462
|
-
switch (fn.type) {
|
2463
|
-
case "FunctionDeclaration":
|
2464
|
-
case "FunctionExpression":
|
2465
|
-
case "ArrowFunctionExpression":
|
2466
|
-
return fn;
|
2467
|
-
default:
|
2468
|
-
return import_compiler17.types.functionExpression(
|
2469
|
-
null,
|
2470
|
-
fn.params,
|
2471
|
-
fn.body,
|
2472
|
-
fn.async,
|
2473
|
-
fn.generator
|
2474
|
-
);
|
2890
|
+
return import_compiler18.types.identifier(binding.name);
|
2891
|
+
} else if (binding.property !== void 0) {
|
2892
|
+
return toMemberExpression(
|
2893
|
+
getDeclaredBindingExpression(binding.upstreamAlias),
|
2894
|
+
binding.property,
|
2895
|
+
binding.upstreamAlias.nullable
|
2896
|
+
);
|
2897
|
+
} else {
|
2898
|
+
return getDeclaredBindingExpression(binding.upstreamAlias);
|
2475
2899
|
}
|
2476
2900
|
}
|
2477
2901
|
|
2478
2902
|
// src/translator/util/to-first-expression-or-block.ts
|
2479
|
-
var
|
2903
|
+
var import_compiler19 = require("@marko/compiler");
|
2480
2904
|
function toFirstExpressionOrBlock(stmts) {
|
2481
|
-
if (stmts.length === 1 &&
|
2905
|
+
if (stmts.length === 1 && import_compiler19.types.isExpressionStatement(stmts[0])) {
|
2482
2906
|
const { expression } = stmts[0];
|
2483
2907
|
switch (expression.type) {
|
2484
2908
|
case "ObjectExpression":
|
@@ -2488,13 +2912,13 @@ function toFirstExpressionOrBlock(stmts) {
|
|
2488
2912
|
return expression;
|
2489
2913
|
}
|
2490
2914
|
}
|
2491
|
-
return
|
2915
|
+
return import_compiler19.types.blockStatement(stmts);
|
2492
2916
|
}
|
2493
2917
|
function toParenthesizedExpressionIfNeeded(expr) {
|
2494
2918
|
switch (expr.type) {
|
2495
2919
|
case "ObjectExpression":
|
2496
2920
|
case "AssignmentExpression":
|
2497
|
-
return
|
2921
|
+
return import_compiler19.types.parenthesizedExpression(expr);
|
2498
2922
|
default:
|
2499
2923
|
return expr;
|
2500
2924
|
}
|
@@ -2509,22 +2933,13 @@ var [getClosureSignalBuilder, _setClosureSignalBuilder] = createSectionState("qu
|
|
2509
2933
|
function setClosureSignalBuilder(tag, builder) {
|
2510
2934
|
_setClosureSignalBuilder(getSectionForBody(tag.get("body")), builder);
|
2511
2935
|
}
|
2512
|
-
var [
|
2513
|
-
function
|
2936
|
+
var [getSerializedAccessors] = createSectionState("serializedScopeProperties", () => /* @__PURE__ */ new Map());
|
2937
|
+
function setSectionSerializedValue(section, prop, expression) {
|
2938
|
+
const reason = getSectionSerializeReason(section, prop);
|
2514
2939
|
if (reason) {
|
2515
|
-
|
2516
|
-
if (existingReason === true) return;
|
2517
|
-
if (!existingReason || reason === true) {
|
2518
|
-
setSerializeSectionReason(section, reason);
|
2519
|
-
} else {
|
2520
|
-
setSerializeSectionReason(
|
2521
|
-
section,
|
2522
|
-
bindingUtil.union(existingReason, reason)
|
2523
|
-
);
|
2524
|
-
}
|
2940
|
+
getSerializedAccessors(section).set(prop, { expression, reason });
|
2525
2941
|
}
|
2526
2942
|
}
|
2527
|
-
var [getSerializedAccessors] = createSectionState("serializedScopeProperties", () => /* @__PURE__ */ new Map());
|
2528
2943
|
function setBindingSerializedValue(section, binding, expression, prefix2) {
|
2529
2944
|
const reason = getBindingSerializeReason(section, binding, prefix2);
|
2530
2945
|
if (reason) {
|
@@ -2534,7 +2949,9 @@ function setBindingSerializedValue(section, binding, expression, prefix2) {
|
|
2534
2949
|
);
|
2535
2950
|
}
|
2536
2951
|
}
|
2952
|
+
var nonAnalyzedForceSerializedSection = /* @__PURE__ */ new WeakSet();
|
2537
2953
|
function setSerializedValue(section, key, expression) {
|
2954
|
+
nonAnalyzedForceSerializedSection.add(section);
|
2538
2955
|
getSerializedAccessors(section).set(key, { expression, reason: true });
|
2539
2956
|
}
|
2540
2957
|
var [getSectionWriteScopeBuilder, setSectionWriteScopeBuilder] = createSectionState(
|
@@ -2565,17 +2982,17 @@ function getHoistFunctionIdentifier(hoistedBinding) {
|
|
2565
2982
|
return identifier;
|
2566
2983
|
}
|
2567
2984
|
var unimplementedBuild = () => {
|
2568
|
-
return
|
2985
|
+
return import_compiler20.types.stringLiteral("SIGNAL NOT INITIALIZED");
|
2569
2986
|
};
|
2570
2987
|
function getSignal(section, referencedBindings, name2 = generateSignalName(referencedBindings)) {
|
2571
2988
|
const signals = getSignals(section);
|
2572
2989
|
let signal = signals.get(referencedBindings);
|
2573
2990
|
if (!signal) {
|
2574
|
-
const exportName = referencedBindings ? !Array.isArray(referencedBindings) && referencedBindings.section === section && referencedBindings.export : !section.parent && (0,
|
2991
|
+
const exportName = referencedBindings ? !Array.isArray(referencedBindings) && referencedBindings.section === section && referencedBindings.export : !section.parent && (0, import_babel_utils14.getProgram)().node.extra.domExports?.setup;
|
2575
2992
|
signals.set(
|
2576
2993
|
referencedBindings,
|
2577
2994
|
signal = {
|
2578
|
-
identifier: exportName ?
|
2995
|
+
identifier: exportName ? import_compiler20.types.identifier(exportName) : generateUidIdentifier(name2 + section.name.replace("_", "$")),
|
2579
2996
|
referencedBindings,
|
2580
2997
|
section,
|
2581
2998
|
values: [],
|
@@ -2630,9 +3047,9 @@ function getSignal(section, referencedBindings, name2 = generateSignalName(refer
|
|
2630
3047
|
const { id, scopeOffset } = intersectionMeta.get(referencedBindings);
|
2631
3048
|
return callRuntime(
|
2632
3049
|
"intersection",
|
2633
|
-
|
3050
|
+
import_compiler20.types.numericLiteral(id),
|
2634
3051
|
getSignalFn(signal),
|
2635
|
-
scopeOffset || referencedBindings.length > 2 ?
|
3052
|
+
scopeOffset || referencedBindings.length > 2 ? import_compiler20.types.numericLiteral(referencedBindings.length - 1) : void 0,
|
2636
3053
|
scopeOffset && getScopeAccessorLiteral(scopeOffset)
|
2637
3054
|
);
|
2638
3055
|
};
|
@@ -2644,7 +3061,7 @@ function getSignal(section, referencedBindings, name2 = generateSignalName(refer
|
|
2644
3061
|
"dynamicClosureRead",
|
2645
3062
|
getScopeAccessorLiteral(referencedBindings),
|
2646
3063
|
render,
|
2647
|
-
isImmediateOwner(section, referencedBindings) ? void 0 :
|
3064
|
+
isImmediateOwner(section, referencedBindings) ? void 0 : import_compiler20.types.arrowFunctionExpression(
|
2648
3065
|
[scopeIdentifier],
|
2649
3066
|
getScopeExpression(section, referencedBindings.section)
|
2650
3067
|
)
|
@@ -2692,7 +3109,7 @@ function getSignalFn(signal) {
|
|
2692
3109
|
const isValue = isBinding && binding.section === section;
|
2693
3110
|
let canUseCalleeDirectly = !signal.render.length;
|
2694
3111
|
if (isBinding && (signal.renderReferencedBindings || binding.aliases.size || binding.propertyAliases.size)) {
|
2695
|
-
const valueParam =
|
3112
|
+
const valueParam = import_compiler20.types.identifier(binding.name);
|
2696
3113
|
if (binding.loc) {
|
2697
3114
|
valueParam.loc = binding.loc;
|
2698
3115
|
valueParam.start = binding.loc.start.index;
|
@@ -2704,10 +3121,10 @@ function getSignalFn(signal) {
|
|
2704
3121
|
for (const alias of binding.aliases) {
|
2705
3122
|
const aliasSignal = getSignal(alias.section, alias);
|
2706
3123
|
signal.render.push(
|
2707
|
-
|
2708
|
-
|
3124
|
+
import_compiler20.types.expressionStatement(
|
3125
|
+
import_compiler20.types.callExpression(aliasSignal.identifier, [
|
2709
3126
|
scopeIdentifier,
|
2710
|
-
|
3127
|
+
import_compiler20.types.identifier(binding.name),
|
2711
3128
|
...getTranslatedExtraArgs(aliasSignal)
|
2712
3129
|
])
|
2713
3130
|
)
|
@@ -2716,11 +3133,11 @@ function getSignalFn(signal) {
|
|
2716
3133
|
for (const [key, alias] of binding.propertyAliases) {
|
2717
3134
|
const aliasSignal = getSignal(alias.section, alias);
|
2718
3135
|
signal.render.push(
|
2719
|
-
|
2720
|
-
|
3136
|
+
import_compiler20.types.expressionStatement(
|
3137
|
+
import_compiler20.types.callExpression(aliasSignal.identifier, [
|
2721
3138
|
scopeIdentifier,
|
2722
3139
|
toMemberExpression(
|
2723
|
-
|
3140
|
+
import_compiler20.types.identifier(binding.name),
|
2724
3141
|
key,
|
2725
3142
|
binding.nullable
|
2726
3143
|
),
|
@@ -2732,8 +3149,8 @@ function getSignalFn(signal) {
|
|
2732
3149
|
}
|
2733
3150
|
for (const value of signal.values) {
|
2734
3151
|
signal.render.push(
|
2735
|
-
|
2736
|
-
|
3152
|
+
import_compiler20.types.expressionStatement(
|
3153
|
+
import_compiler20.types.callExpression(value.signal.identifier, [
|
2737
3154
|
value.scope,
|
2738
3155
|
value.value,
|
2739
3156
|
...getTranslatedExtraArgs(value.signal)
|
@@ -2743,7 +3160,7 @@ function getSignalFn(signal) {
|
|
2743
3160
|
}
|
2744
3161
|
forEach(signal.intersection, (intersection) => {
|
2745
3162
|
signal.render.push(
|
2746
|
-
|
3163
|
+
import_compiler20.types.expressionStatement(import_compiler20.types.callExpression(intersection, [scopeIdentifier]))
|
2747
3164
|
);
|
2748
3165
|
});
|
2749
3166
|
if (isValue) {
|
@@ -2758,8 +3175,8 @@ function getSignalFn(signal) {
|
|
2758
3175
|
signal.identifier.name + "_closure"
|
2759
3176
|
);
|
2760
3177
|
signal.render.push(
|
2761
|
-
|
2762
|
-
|
3178
|
+
import_compiler20.types.expressionStatement(
|
3179
|
+
import_compiler20.types.callExpression(dynamicClosureSignalIdentifier, [
|
2763
3180
|
scopeIdentifier
|
2764
3181
|
])
|
2765
3182
|
)
|
@@ -2770,8 +3187,8 @@ function getSignalFn(signal) {
|
|
2770
3187
|
);
|
2771
3188
|
} else {
|
2772
3189
|
signal.render.push(
|
2773
|
-
|
2774
|
-
|
3190
|
+
import_compiler20.types.expressionStatement(
|
3191
|
+
import_compiler20.types.callExpression(getSignal(closureSection, binding).identifier, [
|
2775
3192
|
scopeIdentifier
|
2776
3193
|
])
|
2777
3194
|
)
|
@@ -2781,8 +3198,8 @@ function getSignalFn(signal) {
|
|
2781
3198
|
});
|
2782
3199
|
if (dynamicClosureSignalIdentifier) {
|
2783
3200
|
(signal.prependStatements ||= []).push(
|
2784
|
-
|
2785
|
-
|
3201
|
+
import_compiler20.types.variableDeclaration("const", [
|
3202
|
+
import_compiler20.types.variableDeclarator(
|
2786
3203
|
dynamicClosureSignalIdentifier,
|
2787
3204
|
callRuntime("dynamicClosure", ...dynamicClosureArgs)
|
2788
3205
|
)
|
@@ -2791,17 +3208,17 @@ function getSignalFn(signal) {
|
|
2791
3208
|
}
|
2792
3209
|
}
|
2793
3210
|
if (signal.effect.length) {
|
2794
|
-
const effectIdentifier =
|
3211
|
+
const effectIdentifier = import_compiler20.types.identifier(`${signal.identifier.name}_effect`);
|
2795
3212
|
signal.render.push(
|
2796
|
-
|
2797
|
-
|
3213
|
+
import_compiler20.types.expressionStatement(
|
3214
|
+
import_compiler20.types.callExpression(effectIdentifier, [scopeIdentifier])
|
2798
3215
|
)
|
2799
3216
|
);
|
2800
3217
|
}
|
2801
3218
|
if (isIntersection && signal.renderReferencedBindings) {
|
2802
3219
|
signal.render.unshift(
|
2803
|
-
|
2804
|
-
|
3220
|
+
import_compiler20.types.variableDeclaration("const", [
|
3221
|
+
import_compiler20.types.variableDeclarator(
|
2805
3222
|
createScopeReadPattern(section, signal.renderReferencedBindings),
|
2806
3223
|
scopeIdentifier
|
2807
3224
|
)
|
@@ -2830,7 +3247,7 @@ function getSignalFn(signal) {
|
|
2830
3247
|
}
|
2831
3248
|
}
|
2832
3249
|
}
|
2833
|
-
return
|
3250
|
+
return import_compiler20.types.arrowFunctionExpression(params, import_compiler20.types.blockStatement(signal.render));
|
2834
3251
|
}
|
2835
3252
|
var hasTranslatedExtraArgs = /* @__PURE__ */ new WeakSet();
|
2836
3253
|
var emptyExtraArgs = [];
|
@@ -2875,19 +3292,19 @@ function replaceNullishAndEmptyFunctionsWith0(args) {
|
|
2875
3292
|
for (let i = args.length; i--; ) {
|
2876
3293
|
const arg = args[i];
|
2877
3294
|
if (!arg) {
|
2878
|
-
args[i] =
|
2879
|
-
} else if (
|
3295
|
+
args[i] = import_compiler20.types.numericLiteral(0);
|
3296
|
+
} else if (import_compiler20.types.isArrowFunctionExpression(arg) && import_compiler20.types.isBlockStatement(arg.body)) {
|
2880
3297
|
const body = arg.body.body;
|
2881
3298
|
if (body.length === 0) {
|
2882
|
-
args[i] =
|
2883
|
-
} else if (body.length === 1 &&
|
3299
|
+
args[i] = import_compiler20.types.numericLiteral(0);
|
3300
|
+
} else if (body.length === 1 && import_compiler20.types.isExpressionStatement(body[0])) {
|
2884
3301
|
arg.body = toParenthesizedExpressionIfNeeded(body[0].expression);
|
2885
3302
|
}
|
2886
|
-
} else if (
|
2887
|
-
args[i] =
|
3303
|
+
} else if (import_compiler20.types.isNullLiteral(arg) || import_compiler20.types.isUnaryExpression(arg) && arg.operator === "void") {
|
3304
|
+
args[i] = import_compiler20.types.numericLiteral(0);
|
2888
3305
|
}
|
2889
3306
|
}
|
2890
|
-
for (let i = args.length - 1;
|
3307
|
+
for (let i = args.length - 1; import_compiler20.types.isNumericLiteral(args[i]) && args[i].value === 0; ) {
|
2891
3308
|
args.length = i--;
|
2892
3309
|
}
|
2893
3310
|
return args;
|
@@ -2936,7 +3353,7 @@ function getResumeRegisterId(section, referencedBindings, type) {
|
|
2936
3353
|
const {
|
2937
3354
|
markoOpts,
|
2938
3355
|
opts: { filename }
|
2939
|
-
} = (0,
|
3356
|
+
} = (0, import_babel_utils14.getFile)();
|
2940
3357
|
let name2 = "";
|
2941
3358
|
if (referencedBindings) {
|
2942
3359
|
if (typeof referencedBindings === "string") {
|
@@ -2949,7 +3366,7 @@ function getResumeRegisterId(section, referencedBindings, type) {
|
|
2949
3366
|
name2 += `_${referencedBindings.name}`;
|
2950
3367
|
}
|
2951
3368
|
}
|
2952
|
-
return (0,
|
3369
|
+
return (0, import_babel_utils14.getTemplateId)(
|
2953
3370
|
markoOpts,
|
2954
3371
|
filename,
|
2955
3372
|
`${section.id}${name2}${type ? "/" + type : ""}`
|
@@ -2960,10 +3377,10 @@ function getRegisterUID(section, name2) {
|
|
2960
3377
|
const {
|
2961
3378
|
markoOpts,
|
2962
3379
|
opts: { filename }
|
2963
|
-
} = (0,
|
3380
|
+
} = (0, import_babel_utils14.getFile)();
|
2964
3381
|
let used = usedRegisterIdsBySection.get(section);
|
2965
3382
|
if (!used) usedRegisterIdsBySection.set(section, used = /* @__PURE__ */ new Set());
|
2966
|
-
const baseId = (0,
|
3383
|
+
const baseId = (0, import_babel_utils14.getTemplateId)(
|
2967
3384
|
markoOpts,
|
2968
3385
|
filename,
|
2969
3386
|
`${section.id}/${name2}`
|
@@ -2980,7 +3397,7 @@ function writeSignals(section) {
|
|
2980
3397
|
forEach(section.hoisted, (binding) => {
|
2981
3398
|
for (const hoistedBinding of binding.hoists.values()) {
|
2982
3399
|
const accessors = [
|
2983
|
-
binding.type === 0 /* dom */ ?
|
3400
|
+
binding.type === 0 /* dom */ ? import_compiler20.types.stringLiteral(
|
2984
3401
|
getAccessorPrefix().Getter + getScopeAccessor(binding)
|
2985
3402
|
) : getScopeAccessorLiteral(binding)
|
2986
3403
|
];
|
@@ -2993,13 +3410,13 @@ function writeSignals(section) {
|
|
2993
3410
|
currentSection = parentSection;
|
2994
3411
|
}
|
2995
3412
|
const hoistIdentifier = getHoistFunctionIdentifier(hoistedBinding);
|
2996
|
-
(0,
|
2997
|
-
|
2998
|
-
|
3413
|
+
(0, import_babel_utils14.getProgram)().node.body.push(
|
3414
|
+
import_compiler20.types.variableDeclaration("const", [
|
3415
|
+
import_compiler20.types.variableDeclarator(
|
2999
3416
|
hoistIdentifier,
|
3000
3417
|
hoistedBinding.downstreamExpressions.size ? callRuntime(
|
3001
3418
|
"register",
|
3002
|
-
|
3419
|
+
import_compiler20.types.stringLiteral(
|
3003
3420
|
getResumeRegisterId(
|
3004
3421
|
hoistedBinding.section,
|
3005
3422
|
hoistedBinding,
|
@@ -3016,7 +3433,7 @@ function writeSignals(section) {
|
|
3016
3433
|
hoistedBinding.section,
|
3017
3434
|
void 0,
|
3018
3435
|
initValue(hoistedBinding),
|
3019
|
-
|
3436
|
+
import_compiler20.types.callExpression(hoistIdentifier, [scopeIdentifier])
|
3020
3437
|
);
|
3021
3438
|
}
|
3022
3439
|
}
|
@@ -3030,20 +3447,20 @@ function writeSignals(section) {
|
|
3030
3447
|
let effectDeclarator;
|
3031
3448
|
if (signal.effect.length) {
|
3032
3449
|
traverseReplace(signal, "effect", replaceEffectNode);
|
3033
|
-
const effectIdentifier =
|
3450
|
+
const effectIdentifier = import_compiler20.types.identifier(`${signal.identifier.name}_effect`);
|
3034
3451
|
const referencedBindings = signal.effectReferencedBindings;
|
3035
3452
|
const referencesScope = traverseContains(
|
3036
3453
|
signal.effect,
|
3037
3454
|
isScopeIdentifier
|
3038
3455
|
);
|
3039
|
-
effectDeclarator =
|
3456
|
+
effectDeclarator = import_compiler20.types.variableDeclarator(
|
3040
3457
|
effectIdentifier,
|
3041
3458
|
callRuntime(
|
3042
3459
|
"effect",
|
3043
|
-
|
3460
|
+
import_compiler20.types.stringLiteral(
|
3044
3461
|
getResumeRegisterId(section, signal.referencedBindings)
|
3045
3462
|
),
|
3046
|
-
|
3463
|
+
import_compiler20.types.arrowFunctionExpression(
|
3047
3464
|
referencedBindings ? referencesScope ? [
|
3048
3465
|
scopeIdentifier,
|
3049
3466
|
createScopeReadPattern(section, referencedBindings)
|
@@ -3054,44 +3471,44 @@ function writeSignals(section) {
|
|
3054
3471
|
);
|
3055
3472
|
}
|
3056
3473
|
let value = signal.build();
|
3057
|
-
if (
|
3474
|
+
if (import_compiler20.types.isCallExpression(value)) {
|
3058
3475
|
replaceNullishAndEmptyFunctionsWith0(value.arguments);
|
3059
3476
|
}
|
3060
3477
|
if (signal.register) {
|
3061
3478
|
value = callRuntime(
|
3062
3479
|
"registerBoundSignal",
|
3063
|
-
|
3480
|
+
import_compiler20.types.stringLiteral(
|
3064
3481
|
getResumeRegisterId(section, signal.referencedBindings, "var")
|
3065
3482
|
),
|
3066
3483
|
value
|
3067
3484
|
);
|
3068
3485
|
}
|
3069
|
-
const signalDeclarator =
|
3070
|
-
let signalDeclaration = !section.parent && !signal.referencedBindings && (
|
3486
|
+
const signalDeclarator = import_compiler20.types.variableDeclarator(signal.identifier, value);
|
3487
|
+
let signalDeclaration = !section.parent && !signal.referencedBindings && (import_compiler20.types.isFunctionExpression(value) || import_compiler20.types.isArrowFunctionExpression(value)) ? import_compiler20.types.functionDeclaration(
|
3071
3488
|
signal.identifier,
|
3072
3489
|
value.params,
|
3073
|
-
|
3074
|
-
) :
|
3490
|
+
import_compiler20.types.isExpression(value.body) ? import_compiler20.types.blockStatement([import_compiler20.types.expressionStatement(value.body)]) : value.body
|
3491
|
+
) : import_compiler20.types.variableDeclaration("const", [signalDeclarator]);
|
3075
3492
|
if (signal.export) {
|
3076
|
-
signalDeclaration =
|
3493
|
+
signalDeclaration = import_compiler20.types.exportNamedDeclaration(signalDeclaration);
|
3077
3494
|
}
|
3078
3495
|
const signalStatements = signal.prependStatements || [];
|
3079
3496
|
if (effectDeclarator) {
|
3080
|
-
signalStatements.push(
|
3497
|
+
signalStatements.push(import_compiler20.types.variableDeclaration("const", [effectDeclarator]));
|
3081
3498
|
}
|
3082
3499
|
signalStatements.push(signalDeclaration);
|
3083
|
-
(0,
|
3500
|
+
(0, import_babel_utils14.getProgram)().node.body.push(...signalStatements);
|
3084
3501
|
}
|
3085
3502
|
}
|
3086
3503
|
function writeRegisteredFns() {
|
3087
|
-
const registeredFns = registeredFnsForProgram.get((0,
|
3504
|
+
const registeredFns = registeredFnsForProgram.get((0, import_babel_utils14.getProgram)().node);
|
3088
3505
|
const statements = [];
|
3089
3506
|
if (registeredFns) {
|
3090
3507
|
for (const registeredFn of registeredFns) {
|
3091
3508
|
let fn;
|
3092
3509
|
const params = registeredFn.referencedBindings ? registeredFn.referencesScope ? [
|
3093
3510
|
scopeIdentifier,
|
3094
|
-
|
3511
|
+
import_compiler20.types.assignmentPattern(
|
3095
3512
|
createScopeReadPattern(
|
3096
3513
|
registeredFn.section,
|
3097
3514
|
registeredFn.referencedBindings
|
@@ -3105,18 +3522,18 @@ function writeRegisteredFns() {
|
|
3105
3522
|
)
|
3106
3523
|
] : registeredFn.referencesScope ? [scopeIdentifier] : void 0;
|
3107
3524
|
if (params) {
|
3108
|
-
fn =
|
3109
|
-
|
3525
|
+
fn = import_compiler20.types.functionDeclaration(
|
3526
|
+
import_compiler20.types.identifier(registeredFn.id),
|
3110
3527
|
params,
|
3111
|
-
|
3528
|
+
import_compiler20.types.blockStatement(toReturnedFunction(registeredFn.node))
|
3112
3529
|
);
|
3113
3530
|
} else if (registeredFn.node.type === "FunctionDeclaration" && registeredFn.node.id?.name === registeredFn.id) {
|
3114
3531
|
fn = registeredFn.node;
|
3115
3532
|
} else {
|
3116
|
-
fn =
|
3117
|
-
|
3533
|
+
fn = import_compiler20.types.functionDeclaration(
|
3534
|
+
import_compiler20.types.identifier(registeredFn.id),
|
3118
3535
|
registeredFn.node.params,
|
3119
|
-
registeredFn.node.body.type === "BlockStatement" ? registeredFn.node.body :
|
3536
|
+
registeredFn.node.body.type === "BlockStatement" ? registeredFn.node.body : import_compiler20.types.blockStatement([import_compiler20.types.returnStatement(registeredFn.node.body)]),
|
3120
3537
|
registeredFn.node.generator,
|
3121
3538
|
registeredFn.node.async
|
3122
3539
|
);
|
@@ -3125,21 +3542,21 @@ function writeRegisteredFns() {
|
|
3125
3542
|
}
|
3126
3543
|
for (const registeredFn of registeredFns) {
|
3127
3544
|
statements.push(
|
3128
|
-
|
3545
|
+
import_compiler20.types.expressionStatement(
|
3129
3546
|
callRuntime(
|
3130
3547
|
"register",
|
3131
|
-
|
3132
|
-
|
3548
|
+
import_compiler20.types.stringLiteral(registeredFn.registerId),
|
3549
|
+
import_compiler20.types.identifier(registeredFn.id)
|
3133
3550
|
)
|
3134
3551
|
)
|
3135
3552
|
);
|
3136
3553
|
}
|
3137
|
-
(0,
|
3554
|
+
(0, import_babel_utils14.getProgram)().node.body.push(...statements);
|
3138
3555
|
}
|
3139
3556
|
}
|
3140
3557
|
function toReturnedFunction(rawFn) {
|
3141
3558
|
const fn = simplifyFunction(rawFn);
|
3142
|
-
return fn.type === "FunctionDeclaration" ? [fn,
|
3559
|
+
return fn.type === "FunctionDeclaration" ? [fn, import_compiler20.types.returnStatement(fn.id)] : [import_compiler20.types.returnStatement(fn)];
|
3143
3560
|
}
|
3144
3561
|
function sortSignals(a, b) {
|
3145
3562
|
const aReferencedBindings = getReferencedBindings(a);
|
@@ -3176,12 +3593,7 @@ function writeHTMLResumeStatements(path5) {
|
|
3176
3593
|
forEach(section.referencedHoists, serializeOwnersUntilBinding);
|
3177
3594
|
forEach(section.referencedClosures, (closure) => {
|
3178
3595
|
if (closure.sources) {
|
3179
|
-
const serializeReason = getBindingSerializeReason(
|
3180
|
-
closure.section,
|
3181
|
-
closure
|
3182
|
-
);
|
3183
3596
|
serializeOwnersUntilBinding(closure);
|
3184
|
-
serializeSectionIfNeeded(closure.section, serializeReason);
|
3185
3597
|
if (isDynamicClosure(section, closure)) {
|
3186
3598
|
const closureSignal = getSignal(closure.section, closure);
|
3187
3599
|
let identifier = htmlDynamicClosureInstancesIdentifier.get(closureSignal);
|
@@ -3193,10 +3605,10 @@ function writeHTMLResumeStatements(path5) {
|
|
3193
3605
|
)
|
3194
3606
|
);
|
3195
3607
|
getHTMLSectionStatements(closure.section).push(
|
3196
|
-
|
3197
|
-
|
3608
|
+
import_compiler20.types.variableDeclaration("const", [
|
3609
|
+
import_compiler20.types.variableDeclarator(
|
3198
3610
|
identifier,
|
3199
|
-
|
3611
|
+
import_compiler20.types.newExpression(import_compiler20.types.identifier("Set"), [])
|
3200
3612
|
)
|
3201
3613
|
])
|
3202
3614
|
);
|
@@ -3210,7 +3622,7 @@ function writeHTMLResumeStatements(path5) {
|
|
3210
3622
|
setBindingSerializedValue(
|
3211
3623
|
section,
|
3212
3624
|
closure,
|
3213
|
-
|
3625
|
+
import_compiler20.types.numericLiteral(getDynamicClosureIndex(closure, section)),
|
3214
3626
|
getAccessorPrefix().ClosureSignalIndex
|
3215
3627
|
);
|
3216
3628
|
addWriteScopeBuilder(
|
@@ -3225,13 +3637,13 @@ function writeHTMLResumeStatements(path5) {
|
|
3225
3637
|
for (const hoistedBinding of binding.hoists.values()) {
|
3226
3638
|
if (hoistedBinding.downstreamExpressions.size) {
|
3227
3639
|
getHTMLSectionStatements(hoistedBinding.section).push(
|
3228
|
-
|
3229
|
-
|
3230
|
-
|
3640
|
+
import_compiler20.types.variableDeclaration("const", [
|
3641
|
+
import_compiler20.types.variableDeclarator(
|
3642
|
+
import_compiler20.types.identifier(hoistedBinding.name),
|
3231
3643
|
callRuntime(
|
3232
3644
|
"hoist",
|
3233
3645
|
getScopeIdIdentifier(hoistedBinding.section),
|
3234
|
-
|
3646
|
+
import_compiler20.types.stringLiteral(
|
3235
3647
|
getResumeRegisterId(
|
3236
3648
|
hoistedBinding.section,
|
3237
3649
|
hoistedBinding,
|
@@ -3252,10 +3664,10 @@ function writeHTMLResumeStatements(path5) {
|
|
3252
3664
|
);
|
3253
3665
|
sectionDynamicSubscribers.add(currentSection);
|
3254
3666
|
getHTMLSectionStatements(parentSection).push(
|
3255
|
-
|
3256
|
-
|
3667
|
+
import_compiler20.types.variableDeclaration("const", [
|
3668
|
+
import_compiler20.types.variableDeclarator(
|
3257
3669
|
subscribersIdentifier,
|
3258
|
-
|
3670
|
+
import_compiler20.types.newExpression(import_compiler20.types.identifier("Set"), [])
|
3259
3671
|
)
|
3260
3672
|
])
|
3261
3673
|
);
|
@@ -3284,11 +3696,11 @@ function writeHTMLResumeStatements(path5) {
|
|
3284
3696
|
if (allSignals[i].effect.length) {
|
3285
3697
|
const signalRefs = allSignals[i].referencedBindings;
|
3286
3698
|
body.push(
|
3287
|
-
|
3699
|
+
import_compiler20.types.expressionStatement(
|
3288
3700
|
callRuntime(
|
3289
3701
|
"writeEffect",
|
3290
3702
|
scopeIdIdentifier,
|
3291
|
-
|
3703
|
+
import_compiler20.types.stringLiteral(getResumeRegisterId(section, signalRefs))
|
3292
3704
|
)
|
3293
3705
|
)
|
3294
3706
|
);
|
@@ -3296,22 +3708,27 @@ function writeHTMLResumeStatements(path5) {
|
|
3296
3708
|
}
|
3297
3709
|
const serializedLookup = getSerializedAccessors(section);
|
3298
3710
|
const serializedProperties = [];
|
3711
|
+
const sectionSerializeReason = nonAnalyzedForceSerializedSection.has(section) ? true : section.serializeReason;
|
3299
3712
|
forEach(section.bindings, (binding) => {
|
3300
3713
|
if (binding.type === 0 /* dom */) return;
|
3301
|
-
const
|
3302
|
-
if (!
|
3714
|
+
const reason = getBindingSerializeReason(section, binding);
|
3715
|
+
if (!reason) return;
|
3303
3716
|
const accessor = getScopeAccessor(binding);
|
3304
3717
|
serializedLookup.delete(accessor);
|
3305
3718
|
serializedProperties.push(
|
3306
|
-
toObjectProperty(
|
3719
|
+
toObjectProperty(
|
3720
|
+
accessor,
|
3721
|
+
sectionSerializeReason && (sectionSerializeReason === reason || sectionSerializeReason !== true && reason !== true && compareSerializeReasons(sectionSerializeReason, reason) === 0) ? getDeclaredBindingExpression(binding) : getExprIfSerialized(reason, getDeclaredBindingExpression(binding))
|
3722
|
+
)
|
3307
3723
|
);
|
3308
3724
|
});
|
3309
|
-
for (const [key, { expression }] of serializedLookup) {
|
3310
|
-
serializedProperties.push(
|
3725
|
+
for (const [key, { expression, reason }] of serializedLookup) {
|
3726
|
+
serializedProperties.push(
|
3727
|
+
toObjectProperty(key, getExprIfSerialized(reason, expression))
|
3728
|
+
);
|
3311
3729
|
}
|
3312
3730
|
const writeScopeBuilder = getSectionWriteScopeBuilder(section);
|
3313
|
-
|
3314
|
-
if (writeScopeBuilder || serializedProperties.length || forceSerializeReason) {
|
3731
|
+
if (sectionSerializeReason) {
|
3315
3732
|
for (const prop of serializedProperties) {
|
3316
3733
|
if (prop.key.type === "Identifier" && prop.value.type === "Identifier" && prop.key.name === prop.value.name) {
|
3317
3734
|
prop.shorthand = true;
|
@@ -3319,7 +3736,7 @@ function writeHTMLResumeStatements(path5) {
|
|
3319
3736
|
}
|
3320
3737
|
const writeScopeArgs = [
|
3321
3738
|
scopeIdIdentifier,
|
3322
|
-
|
3739
|
+
import_compiler20.types.objectExpression(serializedProperties)
|
3323
3740
|
];
|
3324
3741
|
if (!isOptimize()) {
|
3325
3742
|
let debugVars;
|
@@ -3335,38 +3752,42 @@ function writeHTMLResumeStatements(path5) {
|
|
3335
3752
|
}
|
3336
3753
|
root = root.upstreamAlias;
|
3337
3754
|
}
|
3338
|
-
const locExpr = root.loc &&
|
3755
|
+
const locExpr = root.loc && import_compiler20.types.stringLiteral(
|
3339
3756
|
`${root.loc.start.line}:${root.loc.start.column + 1}`
|
3340
3757
|
);
|
3341
3758
|
(debugVars ||= []).push(
|
3342
3759
|
toObjectProperty(
|
3343
3760
|
getScopeAccessor(binding),
|
3344
|
-
root !== binding ?
|
3345
|
-
locExpr ? [
|
3346
|
-
) : locExpr ||
|
3761
|
+
root !== binding ? import_compiler20.types.arrayExpression(
|
3762
|
+
locExpr ? [import_compiler20.types.stringLiteral(root.name + access), locExpr] : [import_compiler20.types.stringLiteral(root.name + access)]
|
3763
|
+
) : locExpr || import_compiler20.types.numericLiteral(0)
|
3347
3764
|
)
|
3348
3765
|
);
|
3349
3766
|
});
|
3350
3767
|
writeScopeArgs.push(
|
3351
|
-
|
3352
|
-
section.loc && section.loc.start.line != null ?
|
3768
|
+
import_compiler20.types.stringLiteral(path5.hub.file.opts.filenameRelative),
|
3769
|
+
section.loc && section.loc.start.line != null ? import_compiler20.types.stringLiteral(
|
3353
3770
|
`${section.loc.start.line}:${section.loc.start.column + 1}`
|
3354
|
-
) :
|
3771
|
+
) : import_compiler20.types.numericLiteral(0)
|
3355
3772
|
);
|
3356
3773
|
if (debugVars) {
|
3357
|
-
writeScopeArgs.push(
|
3774
|
+
writeScopeArgs.push(import_compiler20.types.objectExpression(debugVars));
|
3358
3775
|
}
|
3359
3776
|
}
|
3360
|
-
|
3361
|
-
|
3362
|
-
|
3363
|
-
|
3364
|
-
|
3777
|
+
let writeScopeCall = writeScopeBuilder ? writeScopeBuilder(callRuntime("writeScope", ...writeScopeArgs)) : callRuntime("writeScope", ...writeScopeArgs);
|
3778
|
+
if (sectionSerializeReason !== true) {
|
3779
|
+
writeScopeCall = import_compiler20.types.logicalExpression(
|
3780
|
+
"&&",
|
3781
|
+
getSerializeGuard(sectionSerializeReason),
|
3782
|
+
writeScopeCall
|
3783
|
+
);
|
3784
|
+
}
|
3785
|
+
body.push(import_compiler20.types.expressionStatement(writeScopeCall));
|
3365
3786
|
}
|
3366
3787
|
const resumeClosestBranch2 = !section.isBranch && (section.hasAbortSignal || !!section.referencedClosures || !!find(section.bindings, (binding) => binding.type === 1 /* let */));
|
3367
3788
|
if (resumeClosestBranch2) {
|
3368
3789
|
body.push(
|
3369
|
-
|
3790
|
+
import_compiler20.types.expressionStatement(
|
3370
3791
|
callRuntime("resumeClosestBranch", scopeIdIdentifier)
|
3371
3792
|
)
|
3372
3793
|
);
|
@@ -3374,26 +3795,28 @@ function writeHTMLResumeStatements(path5) {
|
|
3374
3795
|
const additionalStatements = getHTMLSectionStatements(section);
|
3375
3796
|
if (body.length || additionalStatements.length) {
|
3376
3797
|
body.unshift(
|
3377
|
-
|
3378
|
-
|
3798
|
+
import_compiler20.types.variableDeclaration("const", [
|
3799
|
+
import_compiler20.types.variableDeclarator(scopeIdIdentifier, callRuntime("nextScopeId"))
|
3379
3800
|
]),
|
3380
3801
|
...additionalStatements
|
3381
3802
|
);
|
3382
3803
|
}
|
3383
3804
|
const returnIdentifier = getSectionReturnValueIdentifier(section);
|
3384
3805
|
if (returnIdentifier !== void 0) {
|
3385
|
-
body.push(
|
3806
|
+
body.push(import_compiler20.types.returnStatement(returnIdentifier));
|
3386
3807
|
}
|
3387
3808
|
}
|
3388
3809
|
function serializeOwners(from, to) {
|
3810
|
+
const ownerProp = getAccessorProp().Owner;
|
3389
3811
|
let cur = from;
|
3390
3812
|
while (cur !== to) {
|
3391
3813
|
const parent = cur.parent;
|
3392
3814
|
if (!parent) break;
|
3393
3815
|
const serialized = getSerializedAccessors(cur);
|
3816
|
+
nonAnalyzedForceSerializedSection.add(cur);
|
3394
3817
|
cur = parent;
|
3395
|
-
if (!serialized.has(
|
3396
|
-
serialized.set(
|
3818
|
+
if (!serialized.has(ownerProp)) {
|
3819
|
+
serialized.set(ownerProp, {
|
3397
3820
|
expression: callRuntime("ensureScopeWithId", getScopeIdIdentifier(cur)),
|
3398
3821
|
reason: true
|
3399
3822
|
});
|
@@ -3404,12 +3827,12 @@ function getSetup(section) {
|
|
3404
3827
|
return getSignals(section).get(void 0)?.identifier;
|
3405
3828
|
}
|
3406
3829
|
function replaceRenderNode(node) {
|
3407
|
-
return replaceAssignedNode(node) ||
|
3830
|
+
return replaceAssignedNode(node) || replaceBindingReadNode2(node) || replaceRegisteredFunctionNode2(node);
|
3408
3831
|
}
|
3409
3832
|
function replaceEffectNode(node) {
|
3410
|
-
return replaceAssignedNode(node) ||
|
3833
|
+
return replaceAssignedNode(node) || replaceBindingReadNode2(node);
|
3411
3834
|
}
|
3412
|
-
function
|
3835
|
+
function replaceBindingReadNode2(node) {
|
3413
3836
|
switch (node.type) {
|
3414
3837
|
case "Identifier":
|
3415
3838
|
case "MemberExpression": {
|
@@ -3429,14 +3852,14 @@ function replaceAssignedNode(node) {
|
|
3429
3852
|
if (buildAssignment) {
|
3430
3853
|
const replacement = buildAssignment(
|
3431
3854
|
extra.section,
|
3432
|
-
|
3855
|
+
import_compiler20.types.binaryExpression(
|
3433
3856
|
node.operator === "++" ? "+" : "-",
|
3434
3857
|
node.argument,
|
3435
|
-
|
3858
|
+
import_compiler20.types.numericLiteral(1)
|
3436
3859
|
)
|
3437
3860
|
);
|
3438
3861
|
if (!node.prefix) {
|
3439
|
-
return
|
3862
|
+
return import_compiler20.types.sequenceExpression([replacement, node.argument]);
|
3440
3863
|
}
|
3441
3864
|
return replacement;
|
3442
3865
|
}
|
@@ -3455,7 +3878,7 @@ function replaceAssignedNode(node) {
|
|
3455
3878
|
if (buildAssignment) {
|
3456
3879
|
return buildAssignment(
|
3457
3880
|
extra.section,
|
3458
|
-
node.operator === "=" ? node.right :
|
3881
|
+
node.operator === "=" ? node.right : import_compiler20.types.binaryExpression(
|
3459
3882
|
node.operator.slice(
|
3460
3883
|
0,
|
3461
3884
|
-1
|
@@ -3481,26 +3904,26 @@ function replaceAssignedNode(node) {
|
|
3481
3904
|
);
|
3482
3905
|
if (signal?.buildAssignment) {
|
3483
3906
|
id.name = generateUid(id.name);
|
3484
|
-
(params ||= []).push(
|
3907
|
+
(params ||= []).push(import_compiler20.types.identifier(id.name));
|
3485
3908
|
(assignments ||= []).push(
|
3486
|
-
signal.buildAssignment(extra.section,
|
3909
|
+
signal.buildAssignment(extra.section, import_compiler20.types.identifier(id.name))
|
3487
3910
|
);
|
3488
3911
|
}
|
3489
3912
|
}
|
3490
3913
|
});
|
3491
3914
|
if (params && assignments) {
|
3492
3915
|
const resultId = generateUid("result");
|
3493
|
-
return
|
3494
|
-
|
3495
|
-
[
|
3496
|
-
|
3497
|
-
|
3916
|
+
return import_compiler20.types.callExpression(
|
3917
|
+
import_compiler20.types.arrowFunctionExpression(
|
3918
|
+
[import_compiler20.types.identifier(resultId), ...params],
|
3919
|
+
import_compiler20.types.sequenceExpression([
|
3920
|
+
import_compiler20.types.assignmentExpression(
|
3498
3921
|
"=",
|
3499
3922
|
node.left,
|
3500
|
-
|
3923
|
+
import_compiler20.types.identifier(resultId)
|
3501
3924
|
),
|
3502
3925
|
...assignments,
|
3503
|
-
|
3926
|
+
import_compiler20.types.identifier(resultId)
|
3504
3927
|
])
|
3505
3928
|
),
|
3506
3929
|
[node.right]
|
@@ -3513,44 +3936,44 @@ function replaceAssignedNode(node) {
|
|
3513
3936
|
}
|
3514
3937
|
}
|
3515
3938
|
var registeredFnsForProgram = /* @__PURE__ */ new WeakMap();
|
3516
|
-
function
|
3939
|
+
function replaceRegisteredFunctionNode2(node) {
|
3517
3940
|
switch (node.type) {
|
3518
3941
|
case "ClassMethod": {
|
3519
|
-
const replacement =
|
3520
|
-
return replacement &&
|
3942
|
+
const replacement = getRegisteredFnExpression2(node);
|
3943
|
+
return replacement && import_compiler20.types.classProperty(node.key, replacement);
|
3521
3944
|
}
|
3522
3945
|
case "ClassPrivateMethod": {
|
3523
|
-
const replacement =
|
3524
|
-
return replacement &&
|
3946
|
+
const replacement = getRegisteredFnExpression2(node);
|
3947
|
+
return replacement && import_compiler20.types.classPrivateProperty(node.key, replacement);
|
3525
3948
|
}
|
3526
3949
|
case "ObjectMethod": {
|
3527
|
-
const replacement =
|
3528
|
-
return replacement &&
|
3950
|
+
const replacement = getRegisteredFnExpression2(node);
|
3951
|
+
return replacement && import_compiler20.types.objectProperty(node.key, replacement);
|
3529
3952
|
}
|
3530
3953
|
case "ArrowFunctionExpression":
|
3531
3954
|
case "FunctionExpression": {
|
3532
|
-
return
|
3955
|
+
return getRegisteredFnExpression2(node);
|
3533
3956
|
}
|
3534
3957
|
case "FunctionDeclaration": {
|
3535
|
-
const replacement =
|
3958
|
+
const replacement = getRegisteredFnExpression2(node);
|
3536
3959
|
if (replacement) {
|
3537
|
-
return
|
3538
|
-
|
3960
|
+
return import_compiler20.types.variableDeclaration("const", [
|
3961
|
+
import_compiler20.types.variableDeclarator(node.id, replacement)
|
3539
3962
|
]);
|
3540
3963
|
}
|
3541
3964
|
break;
|
3542
3965
|
}
|
3543
3966
|
}
|
3544
3967
|
}
|
3545
|
-
function
|
3968
|
+
function getRegisteredFnExpression2(node) {
|
3546
3969
|
const { extra } = node;
|
3547
3970
|
if (isRegisteredFnExtra(extra)) {
|
3548
3971
|
const id = extra.name;
|
3549
3972
|
const referencesScope = extra.referencesScope;
|
3550
3973
|
const referencedBindings = extra.referencedBindingsInFunction;
|
3551
|
-
let registedFns = registeredFnsForProgram.get((0,
|
3974
|
+
let registedFns = registeredFnsForProgram.get((0, import_babel_utils14.getProgram)().node);
|
3552
3975
|
if (!registedFns) {
|
3553
|
-
registeredFnsForProgram.set((0,
|
3976
|
+
registeredFnsForProgram.set((0, import_babel_utils14.getProgram)().node, registedFns = []);
|
3554
3977
|
}
|
3555
3978
|
registedFns.push({
|
3556
3979
|
id,
|
@@ -3561,9 +3984,9 @@ function getRegisteredFnExpression(node) {
|
|
3561
3984
|
referencedBindings
|
3562
3985
|
});
|
3563
3986
|
if (referencesScope || referencedBindings) {
|
3564
|
-
return
|
3987
|
+
return import_compiler20.types.callExpression(import_compiler20.types.identifier(id), [scopeIdentifier]);
|
3565
3988
|
} else {
|
3566
|
-
return
|
3989
|
+
return import_compiler20.types.identifier(id);
|
3567
3990
|
}
|
3568
3991
|
}
|
3569
3992
|
}
|
@@ -3576,30 +3999,30 @@ var dom_default = {
|
|
3576
3999
|
const section = getSectionForBody(program);
|
3577
4000
|
const { walks, writes, setup } = getSectionMeta(section);
|
3578
4001
|
const domExports = program.node.extra.domExports;
|
3579
|
-
const templateIdentifier =
|
3580
|
-
const walksIdentifier =
|
3581
|
-
const setupIdentifier =
|
4002
|
+
const templateIdentifier = import_compiler21.types.identifier(domExports.template);
|
4003
|
+
const walksIdentifier = import_compiler21.types.identifier(domExports.walks);
|
4004
|
+
const setupIdentifier = import_compiler21.types.identifier(domExports.setup);
|
3582
4005
|
const inputBinding = program.node.params[0].extra?.binding;
|
3583
4006
|
const programInputSignal = inputBinding && bindingHasDownstreamExpressions(inputBinding) ? initValue(inputBinding) : void 0;
|
3584
4007
|
const styleFile = getStyleFile(program.hub.file);
|
3585
4008
|
if (styleFile) {
|
3586
|
-
(0,
|
4009
|
+
(0, import_babel_utils15.importDefault)(program.hub.file, styleFile);
|
3587
4010
|
}
|
3588
4011
|
forEachSectionReverse((childSection) => {
|
3589
4012
|
if (childSection !== section) {
|
3590
4013
|
const tagParamsSignal = childSection.params && initValue(childSection.params);
|
3591
4014
|
const { walks: walks2, writes: writes2, setup: setup2 } = getSectionMeta(childSection);
|
3592
|
-
const identifier =
|
3593
|
-
const referencedClosures = childSection.referencedClosures ?
|
4015
|
+
const identifier = import_compiler21.types.identifier(childSection.name);
|
4016
|
+
const referencedClosures = childSection.referencedClosures ? import_compiler21.types.arrowFunctionExpression(
|
3594
4017
|
[scopeIdentifier],
|
3595
4018
|
toFirstExpressionOrBlock(
|
3596
|
-
|
4019
|
+
toArray(childSection.referencedClosures, (closure) => {
|
3597
4020
|
const closureSignal = getSignal(childSection, closure);
|
3598
|
-
return
|
3599
|
-
|
3600
|
-
isDynamicClosure(childSection, closure) ? closureSignal.identifier :
|
4021
|
+
return import_compiler21.types.expressionStatement(
|
4022
|
+
import_compiler21.types.callExpression(
|
4023
|
+
isDynamicClosure(childSection, closure) ? closureSignal.identifier : import_compiler21.types.memberExpression(
|
3601
4024
|
closureSignal.identifier,
|
3602
|
-
|
4025
|
+
import_compiler21.types.identifier(getAccessorProp().Owner)
|
3603
4026
|
),
|
3604
4027
|
[scopeIdentifier]
|
3605
4028
|
)
|
@@ -3618,7 +4041,7 @@ var dom_default = {
|
|
3618
4041
|
])
|
3619
4042
|
) : callRuntime(
|
3620
4043
|
isSerializedSection(childSection) ? "registerContent" : "createContent",
|
3621
|
-
|
4044
|
+
import_compiler21.types.stringLiteral(getResumeRegisterId(childSection, "renderer")),
|
3622
4045
|
...replaceNullishAndEmptyFunctionsWith0([
|
3623
4046
|
writes2,
|
3624
4047
|
walks2,
|
@@ -3630,8 +4053,8 @@ var dom_default = {
|
|
3630
4053
|
);
|
3631
4054
|
writeSignals(childSection);
|
3632
4055
|
program.node.body.push(
|
3633
|
-
|
3634
|
-
|
4056
|
+
import_compiler21.types.variableDeclaration("const", [
|
4057
|
+
import_compiler21.types.variableDeclarator(identifier, renderer)
|
3635
4058
|
])
|
3636
4059
|
);
|
3637
4060
|
}
|
@@ -3640,36 +4063,36 @@ var dom_default = {
|
|
3640
4063
|
writeRegisteredFns();
|
3641
4064
|
if (!setup) {
|
3642
4065
|
program.node.body.unshift(
|
3643
|
-
|
3644
|
-
|
3645
|
-
|
4066
|
+
import_compiler21.types.exportNamedDeclaration(
|
4067
|
+
import_compiler21.types.variableDeclaration("const", [
|
4068
|
+
import_compiler21.types.variableDeclarator(
|
3646
4069
|
setupIdentifier,
|
3647
|
-
|
4070
|
+
import_compiler21.types.arrowFunctionExpression([], import_compiler21.types.blockStatement([]))
|
3648
4071
|
)
|
3649
4072
|
])
|
3650
4073
|
)
|
3651
4074
|
);
|
3652
4075
|
}
|
3653
4076
|
program.node.body.unshift(
|
3654
|
-
|
3655
|
-
|
3656
|
-
|
4077
|
+
import_compiler21.types.exportNamedDeclaration(
|
4078
|
+
import_compiler21.types.variableDeclaration("const", [
|
4079
|
+
import_compiler21.types.variableDeclarator(
|
3657
4080
|
templateIdentifier,
|
3658
|
-
writes ||
|
4081
|
+
writes || import_compiler21.types.stringLiteral("")
|
3659
4082
|
)
|
3660
4083
|
])
|
3661
4084
|
),
|
3662
|
-
|
3663
|
-
|
3664
|
-
|
4085
|
+
import_compiler21.types.exportNamedDeclaration(
|
4086
|
+
import_compiler21.types.variableDeclaration("const", [
|
4087
|
+
import_compiler21.types.variableDeclarator(walksIdentifier, walks || import_compiler21.types.stringLiteral(""))
|
3665
4088
|
])
|
3666
4089
|
)
|
3667
4090
|
);
|
3668
4091
|
program.node.body.push(
|
3669
|
-
|
4092
|
+
import_compiler21.types.exportDefaultDeclaration(
|
3670
4093
|
callRuntime(
|
3671
4094
|
"createTemplate",
|
3672
|
-
|
4095
|
+
import_compiler21.types.stringLiteral(program.hub.file.metadata.marko.id),
|
3673
4096
|
templateIdentifier,
|
3674
4097
|
walksIdentifier,
|
3675
4098
|
setupIdentifier,
|
@@ -3681,157 +4104,6 @@ var dom_default = {
|
|
3681
4104
|
}
|
3682
4105
|
};
|
3683
4106
|
|
3684
|
-
// src/translator/visitors/program/html.ts
|
3685
|
-
var import_compiler21 = require("@marko/compiler");
|
3686
|
-
var import_babel_utils15 = require("@marko/compiler/babel-utils");
|
3687
|
-
|
3688
|
-
// src/translator/util/is-static.ts
|
3689
|
-
function isStatic(path5) {
|
3690
|
-
return path5.isImportDeclaration() || path5.isExportDeclaration() || path5.isMarkoScriptlet({ static: true });
|
3691
|
-
}
|
3692
|
-
|
3693
|
-
// src/translator/visitors/program/html.ts
|
3694
|
-
var templateContentIdentifierForProgram = /* @__PURE__ */ new WeakMap();
|
3695
|
-
function getTemplateContentName() {
|
3696
|
-
let name2 = templateContentIdentifierForProgram.get((0, import_babel_utils15.getProgram)());
|
3697
|
-
if (!name2) {
|
3698
|
-
templateContentIdentifierForProgram.set(
|
3699
|
-
(0, import_babel_utils15.getProgram)(),
|
3700
|
-
name2 = generateUid("content")
|
3701
|
-
);
|
3702
|
-
}
|
3703
|
-
return name2;
|
3704
|
-
}
|
3705
|
-
var html_default = {
|
3706
|
-
translate: {
|
3707
|
-
exit(program) {
|
3708
|
-
flushInto(program);
|
3709
|
-
writeHTMLResumeStatements(program);
|
3710
|
-
traverseReplace(program.node, "body", replaceNode);
|
3711
|
-
const renderContent = [];
|
3712
|
-
for (const child of program.get("body")) {
|
3713
|
-
if (!isStatic(child)) {
|
3714
|
-
renderContent.push(child.node);
|
3715
|
-
child.remove();
|
3716
|
-
} else if (child.isMarkoScriptlet()) {
|
3717
|
-
if (child.node.target && child.node.target !== "server") {
|
3718
|
-
child.remove();
|
3719
|
-
} else {
|
3720
|
-
child.replaceWithMultiple(child.node.body);
|
3721
|
-
}
|
3722
|
-
}
|
3723
|
-
}
|
3724
|
-
const contentId = templateContentIdentifierForProgram.get(program);
|
3725
|
-
const contentFn = import_compiler21.types.arrowFunctionExpression(
|
3726
|
-
[import_compiler21.types.identifier("input")],
|
3727
|
-
import_compiler21.types.blockStatement(renderContent)
|
3728
|
-
);
|
3729
|
-
const exportDefault = import_compiler21.types.exportDefaultDeclaration(
|
3730
|
-
callRuntime(
|
3731
|
-
"createTemplate",
|
3732
|
-
import_compiler21.types.stringLiteral(program.hub.file.metadata.marko.id),
|
3733
|
-
contentId ? import_compiler21.types.identifier(contentId) : contentFn
|
3734
|
-
)
|
3735
|
-
);
|
3736
|
-
if (contentId) {
|
3737
|
-
program.node.body.push(
|
3738
|
-
import_compiler21.types.variableDeclaration("const", [
|
3739
|
-
import_compiler21.types.variableDeclarator(import_compiler21.types.identifier(contentId), contentFn)
|
3740
|
-
]),
|
3741
|
-
exportDefault
|
3742
|
-
);
|
3743
|
-
} else {
|
3744
|
-
program.node.body.push(exportDefault);
|
3745
|
-
}
|
3746
|
-
}
|
3747
|
-
}
|
3748
|
-
};
|
3749
|
-
function replaceNode(node, container) {
|
3750
|
-
return replaceBindingReadNode2(node) || replaceRegisteredFunctionNode2(node, container);
|
3751
|
-
}
|
3752
|
-
function replaceBindingReadNode2(node) {
|
3753
|
-
switch (node.type) {
|
3754
|
-
case "Identifier":
|
3755
|
-
case "MemberExpression": {
|
3756
|
-
const { extra } = node;
|
3757
|
-
if (extra && !(extra.read && !extra.read.binding.declared || extra.binding && !extra.binding.declared)) {
|
3758
|
-
return getReadReplacement(node);
|
3759
|
-
}
|
3760
|
-
}
|
3761
|
-
}
|
3762
|
-
}
|
3763
|
-
function replaceRegisteredFunctionNode2(node, container) {
|
3764
|
-
switch (node.type) {
|
3765
|
-
case "ClassMethod": {
|
3766
|
-
const replacement = getRegisteredFnExpression2(node);
|
3767
|
-
return replacement && import_compiler21.types.classProperty(node.key, replacement);
|
3768
|
-
}
|
3769
|
-
case "ClassPrivateMethod": {
|
3770
|
-
const replacement = getRegisteredFnExpression2(node);
|
3771
|
-
return replacement && import_compiler21.types.classPrivateProperty(node.key, replacement);
|
3772
|
-
}
|
3773
|
-
case "ObjectMethod": {
|
3774
|
-
const replacement = getRegisteredFnExpression2(node);
|
3775
|
-
return replacement && import_compiler21.types.objectProperty(node.key, replacement);
|
3776
|
-
}
|
3777
|
-
case "FunctionDeclaration": {
|
3778
|
-
const { extra } = node;
|
3779
|
-
if (isRegisteredFnExtra(extra)) {
|
3780
|
-
let registeredFnDeclarations = registeredFnDeclarationsByBody.get(
|
3781
|
-
container
|
3782
|
-
);
|
3783
|
-
if (!registeredFnDeclarations) {
|
3784
|
-
registeredFnDeclarationsByBody.set(
|
3785
|
-
container,
|
3786
|
-
registeredFnDeclarations = []
|
3787
|
-
);
|
3788
|
-
}
|
3789
|
-
registeredFnDeclarations.push({
|
3790
|
-
id: node.id.name,
|
3791
|
-
registerId: extra.registerId
|
3792
|
-
});
|
3793
|
-
}
|
3794
|
-
break;
|
3795
|
-
}
|
3796
|
-
case "ArrowFunctionExpression":
|
3797
|
-
case "FunctionExpression": {
|
3798
|
-
return getRegisteredFnExpression2(node);
|
3799
|
-
}
|
3800
|
-
case "BlockStatement":
|
3801
|
-
case "MarkoScriptlet":
|
3802
|
-
addRegisteredDeclarations(node.body);
|
3803
|
-
break;
|
3804
|
-
}
|
3805
|
-
}
|
3806
|
-
var registeredFnDeclarationsByBody = /* @__PURE__ */ new WeakMap();
|
3807
|
-
function addRegisteredDeclarations(body) {
|
3808
|
-
const registeredFnDeclarations = registeredFnDeclarationsByBody.get(body);
|
3809
|
-
if (registeredFnDeclarations) {
|
3810
|
-
for (const { id, registerId } of registeredFnDeclarations) {
|
3811
|
-
body.push(
|
3812
|
-
import_compiler21.types.expressionStatement(
|
3813
|
-
callRuntime(
|
3814
|
-
"register",
|
3815
|
-
import_compiler21.types.identifier(id),
|
3816
|
-
import_compiler21.types.stringLiteral(registerId)
|
3817
|
-
)
|
3818
|
-
)
|
3819
|
-
);
|
3820
|
-
}
|
3821
|
-
}
|
3822
|
-
}
|
3823
|
-
function getRegisteredFnExpression2(node) {
|
3824
|
-
const { extra } = node;
|
3825
|
-
if (isRegisteredFnExtra(extra)) {
|
3826
|
-
return callRuntime(
|
3827
|
-
"register",
|
3828
|
-
simplifyFunction(node),
|
3829
|
-
import_compiler21.types.stringLiteral(extra.registerId),
|
3830
|
-
(extra.referencedBindingsInFunction || extra.referencesScope) && getScopeIdIdentifier(extra.section)
|
3831
|
-
);
|
3832
|
-
}
|
3833
|
-
}
|
3834
|
-
|
3835
4107
|
// src/translator/visitors/program/index.ts
|
3836
4108
|
var cleanIdentifier;
|
3837
4109
|
var scopeIdentifier;
|
@@ -3851,18 +4123,27 @@ var program_default = {
|
|
3851
4123
|
enter(program) {
|
3852
4124
|
startSection(program);
|
3853
4125
|
trackParamsReferences(program, 2 /* input */);
|
4126
|
+
const programExtra = program.node.extra ??= {};
|
3854
4127
|
const inputBinding = program.node.params[0].extra?.binding;
|
3855
4128
|
if (inputBinding) {
|
3856
4129
|
inputBinding.nullable = false;
|
3857
4130
|
}
|
3858
|
-
|
4131
|
+
programExtra.domExports = {
|
3859
4132
|
template: generateUid("template"),
|
3860
4133
|
walks: generateUid("walks"),
|
3861
4134
|
setup: generateUid("setup"),
|
3862
|
-
input: void 0
|
4135
|
+
input: void 0
|
3863
4136
|
// TODO look into recursive components with fine grained params.
|
3864
|
-
closures: generateUid("closures")
|
3865
4137
|
};
|
4138
|
+
for (const child of program.get("body")) {
|
4139
|
+
if (isCoreTagName(child, "return")) {
|
4140
|
+
const { value } = getKnownAttrValues(child.node);
|
4141
|
+
if (value) {
|
4142
|
+
programExtra.returnValueExpr = value.extra ??= {};
|
4143
|
+
}
|
4144
|
+
break;
|
4145
|
+
}
|
4146
|
+
}
|
3866
4147
|
},
|
3867
4148
|
exit(program) {
|
3868
4149
|
finalizeReferences();
|
@@ -3925,6 +4206,17 @@ var program_default = {
|
|
3925
4206
|
}
|
3926
4207
|
}
|
3927
4208
|
};
|
4209
|
+
function resolveSerializeReasonId(inputSerializeReasons, reason) {
|
4210
|
+
const id = findIndexSorted(
|
4211
|
+
compareSerializeReasons,
|
4212
|
+
inputSerializeReasons,
|
4213
|
+
reason
|
4214
|
+
);
|
4215
|
+
if (id === -1) {
|
4216
|
+
throw new Error("Unable to resolve serialize reason against input");
|
4217
|
+
}
|
4218
|
+
return id;
|
4219
|
+
}
|
3928
4220
|
function resolveRelativeToEntry(entryFile, file, req) {
|
3929
4221
|
return file === entryFile ? (0, import_babel_utils16.resolveRelativePath)(file, req) : (0, import_babel_utils16.resolveRelativePath)(
|
3930
4222
|
entryFile,
|
@@ -3965,7 +4257,10 @@ function createScopeReadPattern(section, referencedBindings) {
|
|
3965
4257
|
for (; i <= relativeDepth; i++) {
|
3966
4258
|
const nestedPattern = import_compiler23.types.objectPattern([]);
|
3967
4259
|
prev.properties.push(
|
3968
|
-
import_compiler23.types.objectProperty(
|
4260
|
+
import_compiler23.types.objectProperty(
|
4261
|
+
import_compiler23.types.identifier(getAccessorProp().Owner),
|
4262
|
+
nestedPattern
|
4263
|
+
)
|
3969
4264
|
);
|
3970
4265
|
nestedPatterns.push(nestedPattern);
|
3971
4266
|
prev = nestedPattern;
|
@@ -3987,7 +4282,7 @@ function getScopeExpression(section, targetSection) {
|
|
3987
4282
|
let scope = scopeIdentifier ?? import_compiler23.types.identifier("undefined");
|
3988
4283
|
const diff = section.depth - targetSection.depth;
|
3989
4284
|
for (let i = 0; i < diff; i++) {
|
3990
|
-
scope = import_compiler23.types.memberExpression(scope, import_compiler23.types.identifier(
|
4285
|
+
scope = import_compiler23.types.memberExpression(scope, import_compiler23.types.identifier(getAccessorProp().Owner));
|
3991
4286
|
}
|
3992
4287
|
if (diff < 0) {
|
3993
4288
|
throw new Error("Unable to find scope for reference.");
|
@@ -4015,7 +4310,7 @@ function withPreviousLocation(newNode, originalNode) {
|
|
4015
4310
|
var kIsInvoked = Symbol("hoist is invoked");
|
4016
4311
|
var [getBindings] = createProgramState(() => /* @__PURE__ */ new Set());
|
4017
4312
|
var [getNextBindingId, setNextBindingId] = createProgramState(() => 0);
|
4018
|
-
function createBinding(name2, type, section, upstreamAlias,
|
4313
|
+
function createBinding(name2, type, section, upstreamAlias, property, loc = null, declared = false) {
|
4019
4314
|
const id = getNextBindingId();
|
4020
4315
|
const binding = {
|
4021
4316
|
id,
|
@@ -4033,11 +4328,10 @@ function createBinding(name2, type, section, upstreamAlias, upstreamExpression,
|
|
4033
4328
|
hoists: /* @__PURE__ */ new Map(),
|
4034
4329
|
propertyAliases: /* @__PURE__ */ new Map(),
|
4035
4330
|
upstreamAlias,
|
4036
|
-
upstreamExpression,
|
4037
4331
|
downstreamExpressions: /* @__PURE__ */ new Set(),
|
4038
4332
|
scopeOffset: void 0,
|
4039
4333
|
export: void 0,
|
4040
|
-
nullable:
|
4334
|
+
nullable: true
|
4041
4335
|
};
|
4042
4336
|
if (property) {
|
4043
4337
|
if (declared) upstreamAlias.nullable = false;
|
@@ -4056,27 +4350,25 @@ function createBinding(name2, type, section, upstreamAlias, upstreamExpression,
|
|
4056
4350
|
getBindings().add(binding);
|
4057
4351
|
return binding;
|
4058
4352
|
}
|
4059
|
-
function trackVarReferences(tag, type, upstreamAlias
|
4353
|
+
function trackVarReferences(tag, type, upstreamAlias) {
|
4060
4354
|
const tagVar = tag.node.var;
|
4061
4355
|
if (tagVar) {
|
4062
4356
|
const section = getOrCreateSection(tag);
|
4063
4357
|
const canonicalUpstreamAlias = getCanonicalBinding(upstreamAlias);
|
4064
|
-
if (upstreamAlias && upstreamExpression) upstreamExpression.pruned = true;
|
4065
4358
|
createBindingsAndTrackReferences(
|
4066
4359
|
tagVar,
|
4067
|
-
type,
|
4360
|
+
upstreamAlias ? upstreamAlias.type : type,
|
4068
4361
|
tag.scope,
|
4069
4362
|
section,
|
4070
4363
|
canonicalUpstreamAlias,
|
4071
|
-
upstreamExpression,
|
4072
4364
|
void 0
|
4073
4365
|
);
|
4366
|
+
return tagVar.extra?.binding;
|
4074
4367
|
}
|
4075
4368
|
}
|
4076
|
-
function trackParamsReferences(body, type, upstreamAlias
|
4369
|
+
function trackParamsReferences(body, type, upstreamAlias) {
|
4077
4370
|
const params = body.node.params;
|
4078
4371
|
if (body.node.body.length && params.length) {
|
4079
|
-
if (upstreamAlias && upstreamExpression) upstreamExpression.pruned = true;
|
4080
4372
|
const section = getOrCreateSection(body);
|
4081
4373
|
const canonicalUpstreamAlias = getCanonicalBinding(upstreamAlias);
|
4082
4374
|
const paramsBinding = canonicalUpstreamAlias || ((body.node.extra ??= {}).binding = createBinding(
|
@@ -4084,7 +4376,6 @@ function trackParamsReferences(body, type, upstreamAlias, upstreamExpression) {
|
|
4084
4376
|
type,
|
4085
4377
|
section,
|
4086
4378
|
canonicalUpstreamAlias,
|
4087
|
-
upstreamExpression,
|
4088
4379
|
void 0
|
4089
4380
|
));
|
4090
4381
|
section.params = paramsBinding;
|
@@ -4095,10 +4386,10 @@ function trackParamsReferences(body, type, upstreamAlias, upstreamExpression) {
|
|
4095
4386
|
body.scope,
|
4096
4387
|
section,
|
4097
4388
|
paramsBinding,
|
4098
|
-
upstreamExpression,
|
4099
4389
|
i + ""
|
4100
4390
|
);
|
4101
4391
|
}
|
4392
|
+
return paramsBinding;
|
4102
4393
|
}
|
4103
4394
|
}
|
4104
4395
|
function trackHoistedReference(referencePath, binding) {
|
@@ -4116,7 +4407,6 @@ function trackHoistedReference(referencePath, binding) {
|
|
4116
4407
|
hoistSection,
|
4117
4408
|
void 0,
|
4118
4409
|
void 0,
|
4119
|
-
void 0,
|
4120
4410
|
binding.loc,
|
4121
4411
|
true
|
4122
4412
|
)
|
@@ -4141,9 +4431,8 @@ function trackHoistedReference(referencePath, binding) {
|
|
4141
4431
|
hoistedBinding
|
4142
4432
|
);
|
4143
4433
|
}
|
4144
|
-
function trackReferencesForBinding(babelBinding) {
|
4145
|
-
const {
|
4146
|
-
const binding = identifier.extra.binding;
|
4434
|
+
function trackReferencesForBinding(babelBinding, binding) {
|
4435
|
+
const { referencePaths, constantViolations } = babelBinding;
|
4147
4436
|
for (const referencePath of referencePaths) {
|
4148
4437
|
const referenceSection = getOrCreateSection(referencePath);
|
4149
4438
|
if (isSameOrChildSection(binding.section, referenceSection)) {
|
@@ -4184,20 +4473,21 @@ function setReferencesScope(path5) {
|
|
4184
4473
|
(fnRoot.node.extra ??= {}).referencesScope = true;
|
4185
4474
|
}
|
4186
4475
|
}
|
4187
|
-
function createBindingsAndTrackReferences(lVal, type, scope, section, upstreamAlias,
|
4476
|
+
function createBindingsAndTrackReferences(lVal, type, scope, section, upstreamAlias, property) {
|
4188
4477
|
switch (lVal.type) {
|
4189
4478
|
case "Identifier":
|
4190
|
-
(
|
4191
|
-
lVal.name,
|
4192
|
-
|
4193
|
-
|
4194
|
-
|
4195
|
-
|
4196
|
-
|
4197
|
-
|
4198
|
-
|
4479
|
+
trackReferencesForBinding(
|
4480
|
+
scope.getBinding(lVal.name),
|
4481
|
+
(lVal.extra ??= {}).binding = createBinding(
|
4482
|
+
lVal.name,
|
4483
|
+
type,
|
4484
|
+
section,
|
4485
|
+
upstreamAlias,
|
4486
|
+
property,
|
4487
|
+
lVal.loc,
|
4488
|
+
true
|
4489
|
+
)
|
4199
4490
|
);
|
4200
|
-
trackReferencesForBinding(scope.getBinding(lVal.name));
|
4201
4491
|
break;
|
4202
4492
|
case "ObjectPattern": {
|
4203
4493
|
const patternBinding = (property ? upstreamAlias.propertyAliases.get(property) : upstreamAlias) || ((lVal.extra ??= {}).binding = createBinding(
|
@@ -4205,7 +4495,6 @@ function createBindingsAndTrackReferences(lVal, type, scope, section, upstreamAl
|
|
4205
4495
|
type,
|
4206
4496
|
section,
|
4207
4497
|
upstreamAlias,
|
4208
|
-
void 0,
|
4209
4498
|
property,
|
4210
4499
|
lVal.loc
|
4211
4500
|
));
|
@@ -4217,7 +4506,6 @@ function createBindingsAndTrackReferences(lVal, type, scope, section, upstreamAl
|
|
4217
4506
|
scope,
|
4218
4507
|
section,
|
4219
4508
|
patternBinding,
|
4220
|
-
void 0,
|
4221
4509
|
property
|
4222
4510
|
);
|
4223
4511
|
} else {
|
@@ -4235,7 +4523,6 @@ function createBindingsAndTrackReferences(lVal, type, scope, section, upstreamAl
|
|
4235
4523
|
scope,
|
4236
4524
|
section,
|
4237
4525
|
patternBinding,
|
4238
|
-
void 0,
|
4239
4526
|
key
|
4240
4527
|
);
|
4241
4528
|
}
|
@@ -4248,7 +4535,6 @@ function createBindingsAndTrackReferences(lVal, type, scope, section, upstreamAl
|
|
4248
4535
|
type,
|
4249
4536
|
section,
|
4250
4537
|
upstreamAlias,
|
4251
|
-
void 0,
|
4252
4538
|
property,
|
4253
4539
|
lVal.loc
|
4254
4540
|
));
|
@@ -4263,7 +4549,6 @@ function createBindingsAndTrackReferences(lVal, type, scope, section, upstreamAl
|
|
4263
4549
|
scope,
|
4264
4550
|
section,
|
4265
4551
|
patternBinding,
|
4266
|
-
void 0,
|
4267
4552
|
property
|
4268
4553
|
);
|
4269
4554
|
} else {
|
@@ -4273,7 +4558,6 @@ function createBindingsAndTrackReferences(lVal, type, scope, section, upstreamAl
|
|
4273
4558
|
scope,
|
4274
4559
|
section,
|
4275
4560
|
patternBinding,
|
4276
|
-
void 0,
|
4277
4561
|
`${i}`
|
4278
4562
|
);
|
4279
4563
|
}
|
@@ -4288,7 +4572,6 @@ function createBindingsAndTrackReferences(lVal, type, scope, section, upstreamAl
|
|
4288
4572
|
scope,
|
4289
4573
|
section,
|
4290
4574
|
upstreamAlias,
|
4291
|
-
void 0,
|
4292
4575
|
property
|
4293
4576
|
);
|
4294
4577
|
break;
|
@@ -4318,7 +4601,6 @@ function trackReference(referencePath, binding) {
|
|
4318
4601
|
reference.type,
|
4319
4602
|
reference.section,
|
4320
4603
|
reference,
|
4321
|
-
void 0,
|
4322
4604
|
prop
|
4323
4605
|
);
|
4324
4606
|
}
|
@@ -4342,8 +4624,13 @@ var [getMergedReferences] = createProgramState(
|
|
4342
4624
|
() => /* @__PURE__ */ new Map()
|
4343
4625
|
);
|
4344
4626
|
function mergeReferences(section, target, nodes) {
|
4345
|
-
|
4627
|
+
const targetExtra = target.extra ??= {};
|
4628
|
+
targetExtra.section = section;
|
4346
4629
|
getMergedReferences().set(target, nodes);
|
4630
|
+
return targetExtra;
|
4631
|
+
}
|
4632
|
+
function compareSerializeReasons(a, b) {
|
4633
|
+
return Array.isArray(a) ? Array.isArray(b) ? compareIntersections(a, b) : -1 : Array.isArray(b) ? 1 : bindingUtil.compare(a, b);
|
4347
4634
|
}
|
4348
4635
|
function compareIntersections(a, b) {
|
4349
4636
|
const len = a.length;
|
@@ -4449,29 +4736,20 @@ function finalizeReferences() {
|
|
4449
4736
|
}
|
4450
4737
|
}
|
4451
4738
|
forEachSection((section) => {
|
4739
|
+
if (isSectionWithHoists(section)) {
|
4740
|
+
forceSectionSerialize(section);
|
4741
|
+
}
|
4452
4742
|
if (section.parent && section.isBranch && section.sectionAccessor && section.upstreamExpression) {
|
4453
|
-
|
4454
|
-
|
4455
|
-
|
4456
|
-
|
4457
|
-
|
4458
|
-
|
4459
|
-
addPropSerializeReasonRef(
|
4460
|
-
tagSection,
|
4461
|
-
tagExtra,
|
4462
|
-
kBranchSerializeReason,
|
4463
|
-
getDirectClosures(section)
|
4464
|
-
);
|
4465
|
-
}
|
4466
|
-
addPropSerializeReasonExpr(
|
4467
|
-
tagSection,
|
4468
|
-
tagExtra,
|
4469
|
-
kBranchSerializeReason,
|
4470
|
-
tagExtra
|
4743
|
+
addSectionSerializeReasonRef(section, getDirectClosures(section));
|
4744
|
+
addSectionSerializeReasonExpr(section, section.upstreamExpression);
|
4745
|
+
addBindingSerializeReasonExpr(
|
4746
|
+
section.parent,
|
4747
|
+
section.sectionAccessor.binding,
|
4748
|
+
section.upstreamExpression
|
4471
4749
|
);
|
4472
|
-
addBindingSerializeReasonExpr(tagSection, nodeBinding, tagExtra);
|
4473
4750
|
}
|
4474
4751
|
});
|
4752
|
+
forEachSection(applySerializeReasonExprs);
|
4475
4753
|
forEachSection((section) => {
|
4476
4754
|
const intersections = intersectionsBySection.get(section);
|
4477
4755
|
if (intersections) {
|
@@ -4518,6 +4796,12 @@ function finalizeReferences() {
|
|
4518
4796
|
}
|
4519
4797
|
addBindingSerializeReason(closure.section, closure, serializeReason);
|
4520
4798
|
}
|
4799
|
+
if (closure.sources) {
|
4800
|
+
addSectionSerializeReason(
|
4801
|
+
closure.section,
|
4802
|
+
getBindingSerializeReason(closure.section, closure)
|
4803
|
+
);
|
4804
|
+
}
|
4521
4805
|
if (closure.serializeSources && isDynamicClosure(section, closure)) {
|
4522
4806
|
addBindingSerializeReason(
|
4523
4807
|
closure.section,
|
@@ -4534,19 +4818,26 @@ function finalizeReferences() {
|
|
4534
4818
|
}
|
4535
4819
|
});
|
4536
4820
|
});
|
4821
|
+
let inputSerializeReasons;
|
4537
4822
|
forEachSection((section) => {
|
4538
|
-
|
4539
|
-
if (
|
4540
|
-
|
4541
|
-
|
4542
|
-
|
4543
|
-
|
4544
|
-
|
4545
|
-
|
4546
|
-
|
4547
|
-
|
4823
|
+
finalizeSectionSerializeReasons(section);
|
4824
|
+
if (section.serializeReason && section.serializeReason !== true) {
|
4825
|
+
inputSerializeReasons = inputSerializeReasons ? addSorted(
|
4826
|
+
compareSerializeReasons,
|
4827
|
+
inputSerializeReasons,
|
4828
|
+
section.serializeReason
|
4829
|
+
) : [section.serializeReason];
|
4830
|
+
}
|
4831
|
+
for (const [, reason] of section.serializeReasons) {
|
4832
|
+
if (reason !== true) {
|
4833
|
+
inputSerializeReasons = inputSerializeReasons ? addSorted(compareSerializeReasons, inputSerializeReasons, reason) : [reason];
|
4548
4834
|
}
|
4549
4835
|
}
|
4836
|
+
});
|
4837
|
+
const programExtra = (0, import_babel_utils17.getProgram)().node.extra;
|
4838
|
+
programExtra.returnSerializeReason = programExtra.returnValueExpr && getSerializeSourcesForExpr(programExtra.returnValueExpr);
|
4839
|
+
programExtra.inputSerializeReasons = inputSerializeReasons;
|
4840
|
+
forEachSection((section) => {
|
4550
4841
|
let intersectionIndex = 0;
|
4551
4842
|
const intersections = intersectionsBySection.get(section) || [];
|
4552
4843
|
const { id, bindings: bindings2 } = section;
|
@@ -4588,33 +4879,65 @@ function getMaxOwnSourceOffset(intersection, section) {
|
|
4588
4879
|
return scopeOffset;
|
4589
4880
|
}
|
4590
4881
|
var intersectionMeta = /* @__PURE__ */ new WeakMap();
|
4882
|
+
function setBindingValueExpr(binding, valueExpr) {
|
4883
|
+
bindingValueExprs.set(binding, valueExpr || false);
|
4884
|
+
}
|
4885
|
+
var resolvedSources = /* @__PURE__ */ new WeakSet();
|
4886
|
+
var bindingValueExprs = /* @__PURE__ */ new WeakMap();
|
4591
4887
|
function resolveBindingSources(binding) {
|
4592
|
-
|
4593
|
-
|
4594
|
-
|
4595
|
-
|
4596
|
-
|
4597
|
-
|
4598
|
-
|
4599
|
-
|
4600
|
-
|
4601
|
-
|
4602
|
-
|
4603
|
-
|
4604
|
-
|
4605
|
-
|
4606
|
-
|
4607
|
-
|
4608
|
-
|
4609
|
-
|
4610
|
-
|
4611
|
-
|
4612
|
-
|
4613
|
-
|
4888
|
+
if (resolvedSources.has(binding)) return;
|
4889
|
+
resolvedSources.add(binding);
|
4890
|
+
switch (binding.type) {
|
4891
|
+
case 1 /* let */:
|
4892
|
+
binding.sources = binding;
|
4893
|
+
binding.serializeSources = true;
|
4894
|
+
return;
|
4895
|
+
case 2 /* input */:
|
4896
|
+
binding.sources = binding;
|
4897
|
+
binding.serializeSources = binding;
|
4898
|
+
return;
|
4899
|
+
}
|
4900
|
+
let alias;
|
4901
|
+
let source = binding;
|
4902
|
+
while (alias = source.upstreamAlias) {
|
4903
|
+
source = alias;
|
4904
|
+
}
|
4905
|
+
if (source === binding) {
|
4906
|
+
resolveDerivedSources(binding);
|
4907
|
+
return;
|
4908
|
+
}
|
4909
|
+
if (!resolvedSources.has(source)) {
|
4910
|
+
resolvedSources.add(source);
|
4911
|
+
resolveDerivedSources(source);
|
4912
|
+
}
|
4913
|
+
binding.sources = source.sources;
|
4914
|
+
binding.serializeSources = source.serializeSources;
|
4915
|
+
}
|
4916
|
+
function resolveDerivedSources(binding) {
|
4917
|
+
const exprs = bindingValueExprs.get(binding);
|
4918
|
+
bindingValueExprs.delete(binding);
|
4919
|
+
if (exprs === void 0 || exprs === true) {
|
4920
|
+
binding.serializeSources = true;
|
4921
|
+
binding.sources = binding;
|
4922
|
+
} else if (exprs) {
|
4923
|
+
const seen = /* @__PURE__ */ new Set();
|
4924
|
+
let onlyInputSources = true;
|
4925
|
+
let sources;
|
4926
|
+
forEach(exprs, (expr) => {
|
4927
|
+
if (isReferencedExtra(expr)) {
|
4928
|
+
forEach(expr.referencedBindings, (ref) => {
|
4929
|
+
if (!seen.has(ref)) {
|
4930
|
+
seen.add(ref);
|
4931
|
+
resolveBindingSources(ref);
|
4932
|
+
sources = bindingUtil.union(sources, ref.sources);
|
4933
|
+
onlyInputSources &&= ref.serializeSources !== true;
|
4934
|
+
}
|
4935
|
+
});
|
4614
4936
|
}
|
4615
|
-
}
|
4616
|
-
|
4617
|
-
sources =
|
4937
|
+
});
|
4938
|
+
if (sources) {
|
4939
|
+
binding.sources = sources;
|
4940
|
+
binding.serializeSources = onlyInputSources ? sources : true;
|
4618
4941
|
}
|
4619
4942
|
}
|
4620
4943
|
}
|
@@ -4843,22 +5166,16 @@ function isRegisteredFnExtra(extra) {
|
|
4843
5166
|
var kDOMBinding = Symbol("await tag dom binding");
|
4844
5167
|
var await_default = {
|
4845
5168
|
analyze(tag) {
|
4846
|
-
(0,
|
4847
|
-
(0,
|
5169
|
+
(0, import_babel_utils18.assertNoVar)(tag);
|
5170
|
+
(0, import_babel_utils18.assertNoArgs)(tag);
|
4848
5171
|
assertNoSpreadAttrs(tag);
|
4849
|
-
(0,
|
5172
|
+
(0, import_babel_utils18.assertNoAttributeTags)(tag);
|
4850
5173
|
const { node } = tag;
|
4851
5174
|
const tagBody = tag.get("body");
|
4852
5175
|
const section = getOrCreateSection(tag);
|
4853
5176
|
const [valueAttr] = node.attributes;
|
4854
5177
|
const tagExtra = tag.node.extra ??= {};
|
4855
|
-
tagExtra[kDOMBinding] = createBinding(
|
4856
|
-
"#text",
|
4857
|
-
0 /* dom */,
|
4858
|
-
section,
|
4859
|
-
void 0,
|
4860
|
-
tagExtra
|
4861
|
-
);
|
5178
|
+
tagExtra[kDOMBinding] = createBinding("#text", 0 /* dom */, section);
|
4862
5179
|
if (!valueAttr) {
|
4863
5180
|
throw tag.get("name").buildCodeFrameError("The `await` tag requires a value.");
|
4864
5181
|
}
|
@@ -4876,13 +5193,12 @@ var await_default = {
|
|
4876
5193
|
);
|
4877
5194
|
}
|
4878
5195
|
const bodySection = startSection(tagBody);
|
5196
|
+
const valueExtra = evaluate(valueAttr.value);
|
4879
5197
|
getOrCreateSection(tag);
|
4880
|
-
trackParamsReferences(
|
4881
|
-
|
4882
|
-
|
4883
|
-
|
4884
|
-
evaluate(valueAttr.value)
|
4885
|
-
);
|
5198
|
+
const paramsBinding = trackParamsReferences(tagBody, 3 /* param */);
|
5199
|
+
if (paramsBinding) {
|
5200
|
+
setBindingValueExpr(paramsBinding, valueExtra);
|
5201
|
+
}
|
4886
5202
|
bodySection.upstreamExpression = valueAttr.value.extra;
|
4887
5203
|
},
|
4888
5204
|
translate: translateByTarget({
|
@@ -4970,7 +5286,7 @@ var await_default = {
|
|
4970
5286
|
|
4971
5287
|
// src/translator/core/client.ts
|
4972
5288
|
var import_compiler26 = require("@marko/compiler");
|
4973
|
-
var
|
5289
|
+
var import_babel_utils19 = require("@marko/compiler/babel-utils");
|
4974
5290
|
var client_default = {
|
4975
5291
|
parse(tag) {
|
4976
5292
|
const {
|
@@ -4980,7 +5296,7 @@ var client_default = {
|
|
4980
5296
|
const rawValue = node.rawValue;
|
4981
5297
|
const code = rawValue.replace(/^client\s*/, "").trim();
|
4982
5298
|
const start = node.name.start + (rawValue.length - code.length);
|
4983
|
-
let body = (0,
|
5299
|
+
let body = (0, import_babel_utils19.parseStatements)(file, code, start, start + code.length);
|
4984
5300
|
if (body.length === 1 && import_compiler26.types.isBlockStatement(body[0])) {
|
4985
5301
|
body = body[0].body;
|
4986
5302
|
}
|
@@ -5001,7 +5317,7 @@ var client_default = {
|
|
5001
5317
|
|
5002
5318
|
// src/translator/core/const.ts
|
5003
5319
|
var import_compiler28 = require("@marko/compiler");
|
5004
|
-
var
|
5320
|
+
var import_babel_utils20 = require("@marko/compiler/babel-utils");
|
5005
5321
|
|
5006
5322
|
// src/translator/util/translate-var.ts
|
5007
5323
|
var import_compiler27 = require("@marko/compiler");
|
@@ -5020,8 +5336,8 @@ function translateVar(tag, initialValue, kind = "const") {
|
|
5020
5336
|
// src/translator/core/const.ts
|
5021
5337
|
var const_default = {
|
5022
5338
|
analyze(tag) {
|
5023
|
-
(0,
|
5024
|
-
(0,
|
5339
|
+
(0, import_babel_utils20.assertNoArgs)(tag);
|
5340
|
+
(0, import_babel_utils20.assertNoParams)(tag);
|
5025
5341
|
assertNoBodyContent(tag);
|
5026
5342
|
const { node } = tag;
|
5027
5343
|
const [valueAttr] = node.attributes;
|
@@ -5036,14 +5352,16 @@ var const_default = {
|
|
5036
5352
|
"The `const` tag only supports the `value` attribute."
|
5037
5353
|
);
|
5038
5354
|
}
|
5039
|
-
const
|
5040
|
-
|
5041
|
-
|
5042
|
-
|
5043
|
-
|
5044
|
-
|
5045
|
-
|
5046
|
-
|
5355
|
+
const valueExtra = evaluate(valueAttr.value);
|
5356
|
+
const upstreamAlias = import_compiler28.types.isIdentifier(valueAttr.value) ? tag.scope.getBinding(valueAttr.value.name)?.identifier.extra?.binding : void 0;
|
5357
|
+
if (upstreamAlias) {
|
5358
|
+
valueExtra.pruned = true;
|
5359
|
+
}
|
5360
|
+
const binding = trackVarReferences(tag, 4 /* derived */, upstreamAlias);
|
5361
|
+
if (binding) {
|
5362
|
+
if (!valueExtra.nullable) binding.nullable = false;
|
5363
|
+
setBindingValueExpr(binding, valueExtra);
|
5364
|
+
}
|
5047
5365
|
},
|
5048
5366
|
translate: {
|
5049
5367
|
exit(tag) {
|
@@ -5078,13 +5396,13 @@ var const_default = {
|
|
5078
5396
|
|
5079
5397
|
// src/translator/core/debug.ts
|
5080
5398
|
var import_compiler29 = require("@marko/compiler");
|
5081
|
-
var
|
5399
|
+
var import_babel_utils21 = require("@marko/compiler/babel-utils");
|
5082
5400
|
var debug_default = {
|
5083
5401
|
analyze(tag) {
|
5084
5402
|
const [valueAttr] = tag.node.attributes;
|
5085
|
-
(0,
|
5086
|
-
(0,
|
5087
|
-
(0,
|
5403
|
+
(0, import_babel_utils21.assertNoVar)(tag);
|
5404
|
+
(0, import_babel_utils21.assertNoArgs)(tag);
|
5405
|
+
(0, import_babel_utils21.assertNoParams)(tag);
|
5088
5406
|
assertNoBodyContent(tag);
|
5089
5407
|
if (tag.node.attributes.length > 1 || tag.node.attributes.length === 1 && (!import_compiler29.types.isMarkoAttribute(valueAttr) || !valueAttr.default && valueAttr.name !== "value")) {
|
5090
5408
|
throw tag.get("name").buildCodeFrameError(
|
@@ -5121,11 +5439,11 @@ var debug_default = {
|
|
5121
5439
|
|
5122
5440
|
// src/translator/core/define.ts
|
5123
5441
|
var import_compiler35 = require("@marko/compiler");
|
5124
|
-
var
|
5442
|
+
var import_babel_utils27 = require("@marko/compiler/babel-utils");
|
5125
5443
|
|
5126
5444
|
// src/translator/util/nested-attribute-tags.ts
|
5127
5445
|
var import_compiler30 = require("@marko/compiler");
|
5128
|
-
var
|
5446
|
+
var import_babel_utils22 = require("@marko/compiler/babel-utils");
|
5129
5447
|
var attrTagToIdentifierLookup = /* @__PURE__ */ new WeakMap();
|
5130
5448
|
function getAttrTagIdentifier(meta) {
|
5131
5449
|
let name2 = attrTagToIdentifierLookup.get(meta);
|
@@ -5145,13 +5463,13 @@ function analyzeAttributeTags(tag) {
|
|
5145
5463
|
const sampleAttrTagsForControlFlow = /* @__PURE__ */ new Map();
|
5146
5464
|
for (const child of attrTags2) {
|
5147
5465
|
if (child.isMarkoTag()) {
|
5148
|
-
if ((0,
|
5466
|
+
if ((0, import_babel_utils22.isAttributeTag)(child)) {
|
5149
5467
|
const name2 = getTagName(child);
|
5150
5468
|
lookup[name2] ||= createAttrTagMeta(name2, [name2]);
|
5151
5469
|
(attrTagNodesByName[name2] ||= []).push(child);
|
5152
5470
|
analyzeAttributeTags(child);
|
5153
5471
|
} else {
|
5154
|
-
const isRepeated = (0,
|
5472
|
+
const isRepeated = (0, import_babel_utils22.isLoopTag)(child);
|
5155
5473
|
let curGroup;
|
5156
5474
|
for (const name2 of crawlAttrTags(child, attrTagNodesByName)) {
|
5157
5475
|
const oldMeta = lookup[name2];
|
@@ -5206,7 +5524,7 @@ function crawlAttrTags(tag, attrTagNodesByName, attrTagNames = /* @__PURE__ */ n
|
|
5206
5524
|
const attrTags2 = tag.node.body.attributeTags ? tag.get("body").get("body") : tag.get("attributeTags");
|
5207
5525
|
for (const child of attrTags2) {
|
5208
5526
|
if (child.isMarkoTag()) {
|
5209
|
-
if ((0,
|
5527
|
+
if ((0, import_babel_utils22.isAttributeTag)(child)) {
|
5210
5528
|
const tagName = getTagName(child);
|
5211
5529
|
attrTagNames.add(tagName);
|
5212
5530
|
(attrTagNodesByName[tagName] ||= []).push(child);
|
@@ -5247,19 +5565,19 @@ function getConditionRoot(tag) {
|
|
5247
5565
|
|
5248
5566
|
// src/translator/util/translate-attrs.ts
|
5249
5567
|
var import_compiler34 = require("@marko/compiler");
|
5250
|
-
var
|
5568
|
+
var import_babel_utils26 = require("@marko/compiler/babel-utils");
|
5251
5569
|
|
5252
5570
|
// src/translator/core/for.ts
|
5253
5571
|
var import_compiler33 = require("@marko/compiler");
|
5254
|
-
var
|
5572
|
+
var import_babel_utils25 = require("@marko/compiler/babel-utils");
|
5255
5573
|
|
5256
5574
|
// src/translator/util/is-only-child-in-parent.ts
|
5257
5575
|
var import_compiler32 = require("@marko/compiler");
|
5258
|
-
var
|
5576
|
+
var import_babel_utils24 = require("@marko/compiler/babel-utils");
|
5259
5577
|
|
5260
5578
|
// src/translator/visitors/tag/native-tag.ts
|
5261
5579
|
var import_compiler31 = require("@marko/compiler");
|
5262
|
-
var
|
5580
|
+
var import_babel_utils23 = require("@marko/compiler/babel-utils");
|
5263
5581
|
var kNativeTagBinding = Symbol("native tag binding");
|
5264
5582
|
var kSkipMark = Symbol("skip native tag mark");
|
5265
5583
|
var kGetterId = Symbol("node getter id");
|
@@ -5361,9 +5679,9 @@ var native_tag_default = {
|
|
5361
5679
|
},
|
5362
5680
|
analyze: {
|
5363
5681
|
enter(tag) {
|
5364
|
-
(0,
|
5365
|
-
(0,
|
5366
|
-
(0,
|
5682
|
+
(0, import_babel_utils23.assertNoArgs)(tag);
|
5683
|
+
(0, import_babel_utils23.assertNoParams)(tag);
|
5684
|
+
(0, import_babel_utils23.assertNoAttributeTags)(tag);
|
5367
5685
|
const { node } = tag;
|
5368
5686
|
if (node.var && !import_compiler31.types.isIdentifier(node.var)) {
|
5369
5687
|
throw tag.get("var").buildCodeFrameError(
|
@@ -5416,7 +5734,7 @@ var native_tag_default = {
|
|
5416
5734
|
0 /* dom */,
|
5417
5735
|
tagSection
|
5418
5736
|
);
|
5419
|
-
(0,
|
5737
|
+
(0, import_babel_utils23.getProgram)().node.extra.isInteractive ||= hasEventHandlers;
|
5420
5738
|
if (spreadReferenceNodes) {
|
5421
5739
|
if (relatedControllable && !relatedControllable.attrs.every(Boolean)) {
|
5422
5740
|
for (const attr2 of relatedControllable.attrs) {
|
@@ -5438,6 +5756,7 @@ var native_tag_default = {
|
|
5438
5756
|
);
|
5439
5757
|
}
|
5440
5758
|
if (node.var) {
|
5759
|
+
forceSectionSerialize(tagSection);
|
5441
5760
|
forceBindingSerialize(tagSection, nodeBinding);
|
5442
5761
|
const varBinding = tag.scope.getBinding(node.var.name);
|
5443
5762
|
for (const referencePath of varBinding.referencePaths) {
|
@@ -5474,7 +5793,7 @@ var native_tag_default = {
|
|
5474
5793
|
const nodeBinding = tagExtra[kNativeTagBinding];
|
5475
5794
|
const isHTML = isOutputHTML();
|
5476
5795
|
const name2 = tag.get("name");
|
5477
|
-
const tagDef = (0,
|
5796
|
+
const tagDef = (0, import_babel_utils23.getTagDef)(tag);
|
5478
5797
|
const write2 = writeTo(tag);
|
5479
5798
|
const tagSection = getSection(tag);
|
5480
5799
|
if (isHTML && tagExtra.tagNameNullable) {
|
@@ -5491,7 +5810,6 @@ var native_tag_default = {
|
|
5491
5810
|
serializeOwners(referenceSection, tagSection);
|
5492
5811
|
}
|
5493
5812
|
}
|
5494
|
-
serializeSectionIfNeeded(tagSection, true);
|
5495
5813
|
translateVar(
|
5496
5814
|
tag,
|
5497
5815
|
callRuntime(
|
@@ -5504,7 +5822,7 @@ var native_tag_default = {
|
|
5504
5822
|
let getterFnIdentifier;
|
5505
5823
|
if (getterId) {
|
5506
5824
|
getterFnIdentifier = generateUidIdentifier(`get_${varName}`);
|
5507
|
-
(0,
|
5825
|
+
(0, import_babel_utils23.getProgram)().node.body.push(
|
5508
5826
|
import_compiler31.types.variableDeclaration("const", [
|
5509
5827
|
import_compiler31.types.variableDeclarator(
|
5510
5828
|
getterFnIdentifier,
|
@@ -5794,7 +6112,7 @@ var native_tag_default = {
|
|
5794
6112
|
const tagExtra = tag.node.extra;
|
5795
6113
|
const nodeBinding = tagExtra[kNativeTagBinding];
|
5796
6114
|
const isHTML = isOutputHTML();
|
5797
|
-
const openTagOnly = (0,
|
6115
|
+
const openTagOnly = (0, import_babel_utils23.getTagDef)(tag)?.parseOptions?.openTagOnly;
|
5798
6116
|
const selectArgs = isHTML && htmlSelectArgs.get(tag.node);
|
5799
6117
|
const tagName = getTagName(tag);
|
5800
6118
|
const tagSection = getSection(tag);
|
@@ -5822,12 +6140,11 @@ var native_tag_default = {
|
|
5822
6140
|
} else {
|
5823
6141
|
tag.insertBefore(tag.node.body.body).forEach((child) => child.skip());
|
5824
6142
|
}
|
5825
|
-
const
|
5826
|
-
const shouldMark = !!serializeMarkerReason;
|
6143
|
+
const markerSerializeReason = nodeBinding && !tagExtra[kSkipMark] && getBindingSerializeReason(tagSection, nodeBinding);
|
5827
6144
|
if (!openTagOnly && !selectArgs) {
|
5828
6145
|
writeTo(
|
5829
6146
|
tag,
|
5830
|
-
isHTML && !
|
6147
|
+
isHTML && !markerSerializeReason && (tagName === "html" || tagName === "body")
|
5831
6148
|
)`</${tag.node.name}>`;
|
5832
6149
|
}
|
5833
6150
|
if (isHTML && tagExtra.tagNameNullable) {
|
@@ -5835,8 +6152,8 @@ var native_tag_default = {
|
|
5835
6152
|
import_compiler31.types.ifStatement(tag.node.name, consumeHTML(tag))
|
5836
6153
|
)[0].skip();
|
5837
6154
|
}
|
5838
|
-
if (
|
5839
|
-
markNode(tag, nodeBinding);
|
6155
|
+
if (markerSerializeReason) {
|
6156
|
+
markNode(tag, nodeBinding, markerSerializeReason);
|
5840
6157
|
}
|
5841
6158
|
exit2(tag);
|
5842
6159
|
tag.remove();
|
@@ -5935,7 +6252,7 @@ function isOnlyChildInParent(tag, branchSize = 1) {
|
|
5935
6252
|
return extra[kOnlyChildInParent];
|
5936
6253
|
}
|
5937
6254
|
const parentTag = getParentTag(tag);
|
5938
|
-
if (parentTag && (0,
|
6255
|
+
if (parentTag && (0, import_babel_utils24.getTagDef)(parentTag)?.html) {
|
5939
6256
|
return extra[kOnlyChildInParent] = tag.parent.body.length === branchSize;
|
5940
6257
|
}
|
5941
6258
|
return extra[kOnlyChildInParent] = false;
|
@@ -5961,11 +6278,10 @@ function getOptimizedOnlyChildNodeBinding(tag, section, branchSize = 1) {
|
|
5961
6278
|
// src/translator/core/for.ts
|
5962
6279
|
var for_default = {
|
5963
6280
|
analyze(tag) {
|
5964
|
-
const tagExtra = tag.node.extra ??= {};
|
5965
6281
|
const isAttrTag = tag.node.body.attributeTags;
|
5966
6282
|
let allowAttrs;
|
5967
|
-
(0,
|
5968
|
-
(0,
|
6283
|
+
(0, import_babel_utils25.assertNoVar)(tag);
|
6284
|
+
(0, import_babel_utils25.assertNoArgs)(tag);
|
5969
6285
|
assertNoSpreadAttrs(tag);
|
5970
6286
|
switch (getForType(tag.node)) {
|
5971
6287
|
case "of":
|
@@ -5985,7 +6301,7 @@ var for_default = {
|
|
5985
6301
|
if (!isAttrTag) {
|
5986
6302
|
allowAttrs.push("by");
|
5987
6303
|
}
|
5988
|
-
(0,
|
6304
|
+
(0, import_babel_utils25.assertAllowedAttributes)(tag, allowAttrs);
|
5989
6305
|
if (isAttrTag) return;
|
5990
6306
|
const tagBody = tag.get("body");
|
5991
6307
|
const bodySection = startSection(tagBody);
|
@@ -5995,8 +6311,15 @@ var for_default = {
|
|
5995
6311
|
}
|
5996
6312
|
const tagSection = getOrCreateSection(tag);
|
5997
6313
|
const nodeBinding = getOptimizedOnlyChildNodeBinding(tag, tagSection);
|
5998
|
-
trackParamsReferences(tagBody, 3 /* param
|
5999
|
-
|
6314
|
+
const paramsBinding = trackParamsReferences(tagBody, 3 /* param */);
|
6315
|
+
const tagExtra = mergeReferences(
|
6316
|
+
tagSection,
|
6317
|
+
tag.node,
|
6318
|
+
getAllTagReferenceNodes(tag.node)
|
6319
|
+
);
|
6320
|
+
if (paramsBinding) {
|
6321
|
+
setBindingValueExpr(paramsBinding, tagExtra);
|
6322
|
+
}
|
6000
6323
|
bodySection.sectionAccessor = {
|
6001
6324
|
binding: nodeBinding,
|
6002
6325
|
prefix: getAccessorPrefix().LoopScopeMap
|
@@ -6027,7 +6350,6 @@ var for_default = {
|
|
6027
6350
|
const tagSection = getSection(tag);
|
6028
6351
|
const bodySection = getSectionForBody(tagBody);
|
6029
6352
|
const { node } = tag;
|
6030
|
-
const tagExtra = node.extra;
|
6031
6353
|
const onlyChildInParentOptimization = isOnlyChildInParent(tag);
|
6032
6354
|
const nodeBinding = getOptimizedOnlyChildNodeBinding(tag, tagSection);
|
6033
6355
|
const forAttrs = getKnownAttrValues(node);
|
@@ -6036,31 +6358,34 @@ var for_default = {
|
|
6036
6358
|
const statements = [];
|
6037
6359
|
const bodyStatements = node.body.body;
|
6038
6360
|
const singleNodeOptimization = bodySection.content === null || bodySection.content.singleChild && bodySection.content.startType !== 4 /* Text */;
|
6039
|
-
const branchSerializeReason =
|
6040
|
-
tagSection,
|
6041
|
-
tagExtra,
|
6042
|
-
kBranchSerializeReason
|
6043
|
-
);
|
6361
|
+
const branchSerializeReason = getSectionSerializeReason(bodySection);
|
6044
6362
|
const markerSerializeReason = getBindingSerializeReason(
|
6045
6363
|
tagSection,
|
6046
6364
|
nodeBinding
|
6047
6365
|
);
|
6048
|
-
const serializeReason = branchSerializeReason || markerSerializeReason;
|
6049
6366
|
if (markerSerializeReason && onlyChildInParentOptimization) {
|
6050
6367
|
getParentTag(tag).node.extra[kSkipMark] = true;
|
6051
6368
|
}
|
6052
6369
|
flushInto(tag);
|
6053
6370
|
writeHTMLResumeStatements(tagBody);
|
6054
6371
|
const forTagArgs = getBaseArgsInForTag(forType, forAttrs);
|
6055
|
-
const forTagHTMLRuntime =
|
6372
|
+
const forTagHTMLRuntime = branchSerializeReason ? forTypeToHTMLResumeRuntime(forType, singleNodeOptimization) : forTypeToRuntime(forType);
|
6056
6373
|
forTagArgs.push(
|
6057
6374
|
import_compiler33.types.arrowFunctionExpression(params, import_compiler33.types.blockStatement(bodyStatements))
|
6058
6375
|
);
|
6059
|
-
if (
|
6376
|
+
if (branchSerializeReason) {
|
6060
6377
|
forTagArgs.push(
|
6061
6378
|
forAttrs.by || import_compiler33.types.numericLiteral(0),
|
6062
6379
|
getScopeIdIdentifier(tagSection),
|
6063
|
-
getScopeAccessorLiteral(nodeBinding)
|
6380
|
+
getScopeAccessorLiteral(nodeBinding),
|
6381
|
+
branchSerializeReason !== true && markerSerializeReason && markerSerializeReason !== true && !bindingUtil.isSuperset(
|
6382
|
+
branchSerializeReason,
|
6383
|
+
markerSerializeReason
|
6384
|
+
) ? import_compiler33.types.logicalExpression(
|
6385
|
+
"||",
|
6386
|
+
getSerializeGuard(branchSerializeReason),
|
6387
|
+
getSerializeGuard(markerSerializeReason)
|
6388
|
+
) : getSerializeGuard(branchSerializeReason)
|
6064
6389
|
);
|
6065
6390
|
if (onlyChildInParentOptimization) {
|
6066
6391
|
forTagArgs.push(import_compiler33.types.numericLiteral(1));
|
@@ -6315,7 +6640,7 @@ function translateAttrs(tag, templateExports, statements = [], contentKey = "con
|
|
6315
6640
|
for (let i = 0; i < attrTags2.length; i++) {
|
6316
6641
|
const child = attrTags2[i];
|
6317
6642
|
if (child.isMarkoTag()) {
|
6318
|
-
if ((0,
|
6643
|
+
if ((0, import_babel_utils26.isAttributeTag)(child)) {
|
6319
6644
|
const attrTagMeta = attrTagLookup[getTagName(child)];
|
6320
6645
|
if (attrTagMeta.dynamic) {
|
6321
6646
|
i = addDynamicAttrTagStatements(
|
@@ -6413,7 +6738,7 @@ function getTranslatedBodyContentProperty(props) {
|
|
6413
6738
|
function addDynamicAttrTagStatements(attrTags2, index, attrTagLookup, statements, templateExports, contentKey = "content") {
|
6414
6739
|
const tag = attrTags2[index];
|
6415
6740
|
if (tag.isMarkoTag()) {
|
6416
|
-
if ((0,
|
6741
|
+
if ((0, import_babel_utils26.isAttributeTag)(tag)) {
|
6417
6742
|
const attrTagMeta = attrTagLookup[getTagName(tag)];
|
6418
6743
|
if (usesExport(templateExports, attrTagMeta.name) && attrTagMeta.dynamic) {
|
6419
6744
|
const translatedAttrTag = translateAttrs(
|
@@ -6618,7 +6943,7 @@ function buildContent(body) {
|
|
6618
6943
|
}
|
6619
6944
|
function getNonAttributeTagParent(tag) {
|
6620
6945
|
let cur = tag;
|
6621
|
-
while ((0,
|
6946
|
+
while ((0, import_babel_utils26.isAttributeTag)(cur) || (0, import_babel_utils26.isTransparentTag)(cur)) {
|
6622
6947
|
cur = getParentTag(cur);
|
6623
6948
|
}
|
6624
6949
|
return cur;
|
@@ -6627,7 +6952,7 @@ function getNonAttributeTagParent(tag) {
|
|
6627
6952
|
// src/translator/core/define.ts
|
6628
6953
|
var define_default = {
|
6629
6954
|
analyze(tag) {
|
6630
|
-
(0,
|
6955
|
+
(0, import_babel_utils27.assertNoArgs)(tag);
|
6631
6956
|
if (!tag.node.var) {
|
6632
6957
|
throw tag.get("name").buildCodeFrameError("The `define` tag requires a tag variable.");
|
6633
6958
|
}
|
@@ -6696,17 +7021,17 @@ var define_default = {
|
|
6696
7021
|
|
6697
7022
|
// src/translator/core/effect.ts
|
6698
7023
|
var import_compiler36 = require("@marko/compiler");
|
6699
|
-
var
|
7024
|
+
var import_babel_utils28 = require("@marko/compiler/babel-utils");
|
6700
7025
|
var effect_default = {
|
6701
7026
|
migrate: [
|
6702
7027
|
(tag) => {
|
6703
|
-
(0,
|
6704
|
-
(0,
|
7028
|
+
(0, import_babel_utils28.assertNoArgs)(tag);
|
7029
|
+
(0, import_babel_utils28.assertNoParams)(tag);
|
6705
7030
|
assertNoBodyContent(tag);
|
6706
|
-
(0,
|
7031
|
+
(0, import_babel_utils28.assertNoAttributeTags)(tag);
|
6707
7032
|
assertNoSpreadAttrs(tag);
|
6708
|
-
(0,
|
6709
|
-
(0,
|
7033
|
+
(0, import_babel_utils28.assertAllowedAttributes)(tag, ["value"]);
|
7034
|
+
(0, import_babel_utils28.diagnosticDeprecate)(tag, {
|
6710
7035
|
label: "The 'effect' tag has been replaced by the 'script' tag.",
|
6711
7036
|
fix() {
|
6712
7037
|
const { node } = tag;
|
@@ -6729,12 +7054,12 @@ var effect_default = {
|
|
6729
7054
|
};
|
6730
7055
|
|
6731
7056
|
// src/translator/core/export.ts
|
6732
|
-
var
|
7057
|
+
var import_babel_utils29 = require("@marko/compiler/babel-utils");
|
6733
7058
|
var export_default = {
|
6734
7059
|
parse(tag) {
|
6735
7060
|
const { node } = tag;
|
6736
7061
|
tag.replaceWith(
|
6737
|
-
(0,
|
7062
|
+
(0, import_babel_utils29.parseStatements)(tag.hub.file, node.rawValue, node.start, node.end)[0]
|
6738
7063
|
);
|
6739
7064
|
},
|
6740
7065
|
parseOptions: {
|
@@ -6750,14 +7075,14 @@ var export_default = {
|
|
6750
7075
|
|
6751
7076
|
// src/translator/core/html-comment.ts
|
6752
7077
|
var import_compiler37 = require("@marko/compiler");
|
6753
|
-
var
|
7078
|
+
var import_babel_utils30 = require("@marko/compiler/babel-utils");
|
6754
7079
|
var kNodeBinding = Symbol("comment tag binding");
|
6755
7080
|
var kGetterId2 = Symbol("node getter id");
|
6756
7081
|
var html_comment_default = {
|
6757
7082
|
analyze(tag) {
|
6758
|
-
(0,
|
6759
|
-
(0,
|
6760
|
-
(0,
|
7083
|
+
(0, import_babel_utils30.assertNoArgs)(tag);
|
7084
|
+
(0, import_babel_utils30.assertNoParams)(tag);
|
7085
|
+
(0, import_babel_utils30.assertNoAttributes)(tag);
|
6761
7086
|
const tagVar = tag.node.var;
|
6762
7087
|
let needsBinding = false;
|
6763
7088
|
let needsGetter = false;
|
@@ -6787,8 +7112,8 @@ var html_comment_default = {
|
|
6787
7112
|
}
|
6788
7113
|
}
|
6789
7114
|
if (needsBinding) {
|
6790
|
-
const tagExtra = tag.node.extra ??= {};
|
6791
7115
|
const tagSection = getOrCreateSection(tag);
|
7116
|
+
const tagExtra = mergeReferences(tagSection, tag.node, referenceNodes);
|
6792
7117
|
const nodeBinding = tagExtra[kNodeBinding] = createBinding(
|
6793
7118
|
"#comment",
|
6794
7119
|
0 /* dom */,
|
@@ -6797,7 +7122,6 @@ var html_comment_default = {
|
|
6797
7122
|
if (needsGetter) {
|
6798
7123
|
tagExtra[kGetterId2] = getRegisterUID(tagSection, "comment");
|
6799
7124
|
}
|
6800
|
-
mergeReferences(tagSection, tag.node, referenceNodes);
|
6801
7125
|
if (tagVar) {
|
6802
7126
|
forceBindingSerialize(tagSection, nodeBinding);
|
6803
7127
|
} else {
|
@@ -6828,7 +7152,7 @@ var html_comment_default = {
|
|
6828
7152
|
let getterFnIdentifier;
|
6829
7153
|
if (getterId) {
|
6830
7154
|
getterFnIdentifier = generateUidIdentifier(`get_${varName}`);
|
6831
|
-
(0,
|
7155
|
+
(0, import_babel_utils30.getProgram)().node.body.push(
|
6832
7156
|
import_compiler37.types.variableDeclaration("const", [
|
6833
7157
|
import_compiler37.types.variableDeclarator(
|
6834
7158
|
getterFnIdentifier,
|
@@ -6915,9 +7239,12 @@ var html_comment_default = {
|
|
6915
7239
|
}
|
6916
7240
|
exit2(tag);
|
6917
7241
|
write2`-->`;
|
6918
|
-
|
6919
|
-
|
6920
|
-
|
7242
|
+
if (nodeBinding) {
|
7243
|
+
markNode(
|
7244
|
+
tag,
|
7245
|
+
nodeBinding,
|
7246
|
+
getBindingSerializeReason(tagSection, nodeBinding)
|
7247
|
+
);
|
6921
7248
|
}
|
6922
7249
|
tag.remove();
|
6923
7250
|
}
|
@@ -6936,13 +7263,13 @@ var html_comment_default = {
|
|
6936
7263
|
|
6937
7264
|
// src/translator/core/html-script.ts
|
6938
7265
|
var import_compiler38 = require("@marko/compiler");
|
6939
|
-
var
|
7266
|
+
var import_babel_utils31 = require("@marko/compiler/babel-utils");
|
6940
7267
|
var kNodeBinding2 = Symbol("script tag node binding");
|
6941
7268
|
var kGetterId3 = Symbol("node getter id");
|
6942
7269
|
var html_script_default = {
|
6943
7270
|
analyze(tag) {
|
6944
|
-
(0,
|
6945
|
-
(0,
|
7271
|
+
(0, import_babel_utils31.assertNoArgs)(tag);
|
7272
|
+
(0, import_babel_utils31.assertNoParams)(tag);
|
6946
7273
|
const { node } = tag;
|
6947
7274
|
if (node.var && !import_compiler38.types.isIdentifier(node.var)) {
|
6948
7275
|
throw tag.get("var").buildCodeFrameError(
|
@@ -7004,7 +7331,7 @@ var html_script_default = {
|
|
7004
7331
|
0 /* dom */,
|
7005
7332
|
tagSection
|
7006
7333
|
);
|
7007
|
-
(0,
|
7334
|
+
(0, import_babel_utils31.getProgram)().node.extra.isInteractive ||= hasEventHandlers;
|
7008
7335
|
if (spreadReferenceNodes) {
|
7009
7336
|
mergeReferences(tagSection, tag.node, spreadReferenceNodes);
|
7010
7337
|
}
|
@@ -7064,7 +7391,7 @@ var html_script_default = {
|
|
7064
7391
|
let getterFnIdentifier;
|
7065
7392
|
if (getterId) {
|
7066
7393
|
getterFnIdentifier = generateUidIdentifier(`get_${varName}`);
|
7067
|
-
(0,
|
7394
|
+
(0, import_babel_utils31.getProgram)().node.body.push(
|
7068
7395
|
import_compiler38.types.variableDeclaration("const", [
|
7069
7396
|
import_compiler38.types.variableDeclarator(
|
7070
7397
|
getterFnIdentifier,
|
@@ -7272,12 +7599,12 @@ var html_script_default = {
|
|
7272
7599
|
}
|
7273
7600
|
}
|
7274
7601
|
write2`</script>`;
|
7275
|
-
|
7276
|
-
|
7277
|
-
|
7278
|
-
|
7279
|
-
|
7280
|
-
|
7602
|
+
if (nodeBinding) {
|
7603
|
+
markNode(
|
7604
|
+
tag,
|
7605
|
+
nodeBinding,
|
7606
|
+
getBindingSerializeReason(tagSection, nodeBinding)
|
7607
|
+
);
|
7281
7608
|
}
|
7282
7609
|
exit2(tag);
|
7283
7610
|
tag.remove();
|
@@ -7343,13 +7670,13 @@ function getUsedAttrs2(tag) {
|
|
7343
7670
|
|
7344
7671
|
// src/translator/core/html-style.ts
|
7345
7672
|
var import_compiler39 = require("@marko/compiler");
|
7346
|
-
var
|
7673
|
+
var import_babel_utils32 = require("@marko/compiler/babel-utils");
|
7347
7674
|
var kNodeBinding3 = Symbol("style tag node binding");
|
7348
7675
|
var kGetterId4 = Symbol("node getter id");
|
7349
7676
|
var html_style_default = {
|
7350
7677
|
analyze(tag) {
|
7351
|
-
(0,
|
7352
|
-
(0,
|
7678
|
+
(0, import_babel_utils32.assertNoArgs)(tag);
|
7679
|
+
(0, import_babel_utils32.assertNoParams)(tag);
|
7353
7680
|
const { node } = tag;
|
7354
7681
|
if (node.var && !import_compiler39.types.isIdentifier(node.var)) {
|
7355
7682
|
throw tag.get("var").buildCodeFrameError(
|
@@ -7411,7 +7738,7 @@ var html_style_default = {
|
|
7411
7738
|
0 /* dom */,
|
7412
7739
|
tagSection
|
7413
7740
|
);
|
7414
|
-
(0,
|
7741
|
+
(0, import_babel_utils32.getProgram)().node.extra.isInteractive ||= hasEventHandlers;
|
7415
7742
|
if (spreadReferenceNodes) {
|
7416
7743
|
mergeReferences(tagSection, tag.node, spreadReferenceNodes);
|
7417
7744
|
}
|
@@ -7471,7 +7798,7 @@ var html_style_default = {
|
|
7471
7798
|
let getterFnIdentifier;
|
7472
7799
|
if (getterId) {
|
7473
7800
|
getterFnIdentifier = generateUidIdentifier(`get_${varName}`);
|
7474
|
-
(0,
|
7801
|
+
(0, import_babel_utils32.getProgram)().node.body.push(
|
7475
7802
|
import_compiler39.types.variableDeclaration("const", [
|
7476
7803
|
import_compiler39.types.variableDeclarator(
|
7477
7804
|
getterFnIdentifier,
|
@@ -7679,12 +8006,12 @@ var html_style_default = {
|
|
7679
8006
|
}
|
7680
8007
|
}
|
7681
8008
|
write2`</style>`;
|
7682
|
-
|
7683
|
-
|
7684
|
-
|
7685
|
-
|
7686
|
-
|
7687
|
-
|
8009
|
+
if (nodeBinding) {
|
8010
|
+
markNode(
|
8011
|
+
tag,
|
8012
|
+
nodeBinding,
|
8013
|
+
getBindingSerializeReason(tagSection, nodeBinding)
|
8014
|
+
);
|
7688
8015
|
}
|
7689
8016
|
exit2(tag);
|
7690
8017
|
tag.remove();
|
@@ -7745,14 +8072,14 @@ function getUsedAttrs3(tag) {
|
|
7745
8072
|
|
7746
8073
|
// src/translator/core/id.ts
|
7747
8074
|
var import_compiler40 = require("@marko/compiler");
|
7748
|
-
var
|
8075
|
+
var import_babel_utils33 = require("@marko/compiler/babel-utils");
|
7749
8076
|
var id_default = {
|
7750
8077
|
analyze(tag) {
|
7751
|
-
(0,
|
7752
|
-
(0,
|
7753
|
-
(0,
|
8078
|
+
(0, import_babel_utils33.assertNoArgs)(tag);
|
8079
|
+
(0, import_babel_utils33.assertNoParams)(tag);
|
8080
|
+
(0, import_babel_utils33.assertNoAttributes)(tag);
|
7754
8081
|
assertNoBodyContent(tag);
|
7755
|
-
(0,
|
8082
|
+
(0, import_babel_utils33.assertNoAttributeTags)(tag);
|
7756
8083
|
const { node } = tag;
|
7757
8084
|
if (!node.var) {
|
7758
8085
|
throw tag.get("name").buildCodeFrameError("The `id` tag requires a tag variable.");
|
@@ -7794,7 +8121,7 @@ var id_default = {
|
|
7794
8121
|
|
7795
8122
|
// src/translator/core/if.ts
|
7796
8123
|
var import_compiler42 = require("@marko/compiler");
|
7797
|
-
var
|
8124
|
+
var import_babel_utils34 = require("@marko/compiler/babel-utils");
|
7798
8125
|
|
7799
8126
|
// src/translator/util/to-first-statement-or-block.ts
|
7800
8127
|
var import_compiler41 = require("@marko/compiler");
|
@@ -7879,27 +8206,39 @@ var IfTag = {
|
|
7879
8206
|
ifTagSection
|
7880
8207
|
);
|
7881
8208
|
const onlyChildInParentOptimization = isOnlyChildInParent(ifTag);
|
7882
|
-
const branchSerializeReason = getPropSerializeReason(
|
7883
|
-
ifTagSection,
|
7884
|
-
ifTagExtra,
|
7885
|
-
kBranchSerializeReason
|
7886
|
-
);
|
7887
8209
|
const markerSerializeReason = getBindingSerializeReason(
|
7888
8210
|
ifTagSection,
|
7889
8211
|
nodeBinding
|
7890
8212
|
);
|
7891
8213
|
const nextTag = tag.getNextSibling();
|
8214
|
+
let branchSerializeReasons;
|
7892
8215
|
let statement;
|
7893
8216
|
if (markerSerializeReason && onlyChildInParentOptimization) {
|
7894
8217
|
getParentTag(ifTag).node.extra[kSkipMark] = true;
|
7895
8218
|
}
|
7896
8219
|
for (let i = branches.length; i--; ) {
|
7897
|
-
const [branchTag] = branches[i];
|
8220
|
+
const [branchTag, branchBody] = branches[i];
|
7898
8221
|
const bodyStatements = branchTag.node.body.body;
|
7899
|
-
if (
|
7900
|
-
|
7901
|
-
|
7902
|
-
|
8222
|
+
if (branchBody) {
|
8223
|
+
const branchSerializeReason = getSectionSerializeReason(branchBody);
|
8224
|
+
if (branchSerializeReason) {
|
8225
|
+
if (branchSerializeReasons !== true) {
|
8226
|
+
if (branchSerializeReason === true) {
|
8227
|
+
branchSerializeReasons = true;
|
8228
|
+
} else if (branchSerializeReasons) {
|
8229
|
+
branchSerializeReasons = addSorted(
|
8230
|
+
compareSerializeReasons,
|
8231
|
+
branchSerializeReasons,
|
8232
|
+
branchSerializeReason
|
8233
|
+
);
|
8234
|
+
} else {
|
8235
|
+
branchSerializeReasons = [branchSerializeReason];
|
8236
|
+
}
|
8237
|
+
}
|
8238
|
+
bodyStatements.push(
|
8239
|
+
import_compiler42.types.returnStatement(import_compiler42.types.numericLiteral(i))
|
8240
|
+
);
|
8241
|
+
}
|
7903
8242
|
}
|
7904
8243
|
const [testAttr] = branchTag.node.attributes;
|
7905
8244
|
const curStatement = toFirstStatementOrBlock(bodyStatements);
|
@@ -7914,7 +8253,8 @@ var IfTag = {
|
|
7914
8253
|
}
|
7915
8254
|
branchTag.remove();
|
7916
8255
|
}
|
7917
|
-
if (
|
8256
|
+
if (branchSerializeReasons) {
|
8257
|
+
const branchSerializeExpr = branchSerializeReasons === true ? !onlyChildInParentOptimization && !markerSerializeReason ? void 0 : getSerializeGuard(branchSerializeReasons) : getSerializeGuardForAny(branchSerializeReasons);
|
7918
8258
|
const cbNode = import_compiler42.types.arrowFunctionExpression(
|
7919
8259
|
[],
|
7920
8260
|
import_compiler42.types.blockStatement([statement])
|
@@ -7925,14 +8265,16 @@ var IfTag = {
|
|
7925
8265
|
cbNode,
|
7926
8266
|
getScopeIdIdentifier(ifTagSection),
|
7927
8267
|
getScopeAccessorLiteral(nodeBinding),
|
7928
|
-
|
8268
|
+
branchSerializeExpr,
|
8269
|
+
markerSerializeReason ? getSerializeGuard(markerSerializeReason) : onlyChildInParentOptimization ? import_compiler42.types.numericLiteral(0) : void 0,
|
7929
8270
|
onlyChildInParentOptimization && import_compiler42.types.numericLiteral(1)
|
7930
8271
|
) : callRuntime(
|
7931
8272
|
"resumeConditional",
|
7932
8273
|
cbNode,
|
7933
8274
|
getScopeIdIdentifier(ifTagSection),
|
7934
8275
|
getScopeAccessorLiteral(nodeBinding),
|
7935
|
-
|
8276
|
+
branchSerializeExpr,
|
8277
|
+
getSerializeGuard(markerSerializeReason)
|
7936
8278
|
)
|
7937
8279
|
);
|
7938
8280
|
}
|
@@ -8024,9 +8366,9 @@ var ElseTag = {
|
|
8024
8366
|
]
|
8025
8367
|
};
|
8026
8368
|
function assertValidCondition(tag) {
|
8027
|
-
(0,
|
8028
|
-
(0,
|
8029
|
-
(0,
|
8369
|
+
(0, import_babel_utils34.assertNoVar)(tag);
|
8370
|
+
(0, import_babel_utils34.assertNoArgs)(tag);
|
8371
|
+
(0, import_babel_utils34.assertNoParams)(tag);
|
8030
8372
|
assertHasBody(tag);
|
8031
8373
|
assertNoSpreadAttrs(tag);
|
8032
8374
|
switch (getTagName(tag)) {
|
@@ -8114,6 +8456,13 @@ function getBranches(tag) {
|
|
8114
8456
|
}
|
8115
8457
|
return branches;
|
8116
8458
|
}
|
8459
|
+
function getSerializeGuardForAny(reasons) {
|
8460
|
+
let expr = getSerializeGuard(reasons[0]);
|
8461
|
+
for (let i = 1; i < reasons.length; i++) {
|
8462
|
+
expr = import_compiler42.types.logicalExpression("||", expr, getSerializeGuard(reasons[i]));
|
8463
|
+
}
|
8464
|
+
return expr;
|
8465
|
+
}
|
8117
8466
|
function isLastBranch(tag) {
|
8118
8467
|
const branches = getBranches(tag);
|
8119
8468
|
return branches[branches.length - 1][0] === tag;
|
@@ -8123,12 +8472,12 @@ function isRoot(tag) {
|
|
8123
8472
|
}
|
8124
8473
|
|
8125
8474
|
// src/translator/core/import.ts
|
8126
|
-
var
|
8475
|
+
var import_babel_utils35 = require("@marko/compiler/babel-utils");
|
8127
8476
|
var import_default = {
|
8128
8477
|
parse(tag) {
|
8129
8478
|
const { node } = tag;
|
8130
8479
|
tag.replaceWith(
|
8131
|
-
(0,
|
8480
|
+
(0, import_babel_utils35.parseStatements)(tag.hub.file, node.rawValue, node.start, node.end)[0]
|
8132
8481
|
);
|
8133
8482
|
},
|
8134
8483
|
parseOptions: {
|
@@ -8147,7 +8496,7 @@ var import_default = {
|
|
8147
8496
|
|
8148
8497
|
// src/translator/core/let.ts
|
8149
8498
|
var import_compiler43 = require("@marko/compiler");
|
8150
|
-
var
|
8499
|
+
var import_babel_utils36 = require("@marko/compiler/babel-utils");
|
8151
8500
|
var let_default = {
|
8152
8501
|
analyze(tag) {
|
8153
8502
|
const { node } = tag;
|
@@ -8176,8 +8525,8 @@ var let_default = {
|
|
8176
8525
|
}
|
8177
8526
|
}
|
8178
8527
|
}
|
8179
|
-
(0,
|
8180
|
-
(0,
|
8528
|
+
(0, import_babel_utils36.assertNoArgs)(tag);
|
8529
|
+
(0, import_babel_utils36.assertNoParams)(tag);
|
8181
8530
|
assertNoBodyContent(tag);
|
8182
8531
|
assertNoSpreadAttrs(tag);
|
8183
8532
|
if (!tagVar) {
|
@@ -8186,16 +8535,26 @@ var let_default = {
|
|
8186
8535
|
if (!import_compiler43.types.isIdentifier(tagVar)) {
|
8187
8536
|
throw tag.get("var").buildCodeFrameError("The `let` tag variable cannot be destructured.");
|
8188
8537
|
}
|
8189
|
-
if (valueChangeAttr && (0,
|
8538
|
+
if (valueChangeAttr && (0, import_babel_utils36.computeNode)(valueChangeAttr.value)) {
|
8190
8539
|
throw tag.get("attributes").find((attr2) => attr2.node === valueChangeAttr).get("value").buildCodeFrameError(
|
8191
8540
|
"The `let` tag `valueChange` attribute must be a function."
|
8192
8541
|
);
|
8193
8542
|
}
|
8194
|
-
|
8195
|
-
|
8196
|
-
|
8197
|
-
|
8198
|
-
|
8543
|
+
const binding = trackVarReferences(tag, 1 /* let */);
|
8544
|
+
setBindingValueExpr(
|
8545
|
+
binding,
|
8546
|
+
mergeReferences(getOrCreateSection(tag), tag.node, [
|
8547
|
+
valueAttr?.value,
|
8548
|
+
valueChangeAttr?.value
|
8549
|
+
])
|
8550
|
+
);
|
8551
|
+
if (valueChangeAttr) {
|
8552
|
+
forceBindingSerialize(
|
8553
|
+
getSection(tag),
|
8554
|
+
binding,
|
8555
|
+
getAccessorPrefix().TagVariableChange
|
8556
|
+
);
|
8557
|
+
}
|
8199
8558
|
},
|
8200
8559
|
translate: {
|
8201
8560
|
exit(tag) {
|
@@ -8223,10 +8582,11 @@ var let_default = {
|
|
8223
8582
|
} else {
|
8224
8583
|
translateVar(tag, valueAttr.value, "let");
|
8225
8584
|
if (valueChangeAttr) {
|
8226
|
-
|
8585
|
+
setBindingSerializedValue(
|
8227
8586
|
section,
|
8228
|
-
|
8229
|
-
valueChangeAttr.value
|
8587
|
+
binding,
|
8588
|
+
valueChangeAttr.value,
|
8589
|
+
getAccessorPrefix().TagVariableChange
|
8230
8590
|
);
|
8231
8591
|
}
|
8232
8592
|
}
|
@@ -8248,23 +8608,25 @@ var let_default = {
|
|
8248
8608
|
|
8249
8609
|
// src/translator/core/lifecycle.ts
|
8250
8610
|
var import_compiler44 = require("@marko/compiler");
|
8251
|
-
var
|
8611
|
+
var import_babel_utils37 = require("@marko/compiler/babel-utils");
|
8252
8612
|
var kRef = Symbol("lifecycle attrs reference");
|
8253
8613
|
var lifecycle_default = {
|
8254
8614
|
analyze(tag) {
|
8255
|
-
(0,
|
8256
|
-
(0,
|
8257
|
-
(0,
|
8615
|
+
(0, import_babel_utils37.assertNoArgs)(tag);
|
8616
|
+
(0, import_babel_utils37.assertNoVar)(tag);
|
8617
|
+
(0, import_babel_utils37.assertNoParams)(tag);
|
8258
8618
|
assertNoBodyContent(tag);
|
8259
8619
|
const { node } = tag;
|
8260
|
-
const tagExtra = node.extra ??= {};
|
8261
8620
|
const section = getOrCreateSection(tag);
|
8621
|
+
const tagExtra = mergeReferences(
|
8622
|
+
section,
|
8623
|
+
tag.node,
|
8624
|
+
getAllTagReferenceNodes(tag.node)
|
8625
|
+
);
|
8262
8626
|
tagExtra[kRef] = createBinding(
|
8263
8627
|
generateUid("lifecycle"),
|
8264
8628
|
4 /* derived */,
|
8265
|
-
section
|
8266
|
-
void 0,
|
8267
|
-
tagExtra
|
8629
|
+
section
|
8268
8630
|
);
|
8269
8631
|
if (node.attributes.length === 0) {
|
8270
8632
|
throw tag.get("name").buildCodeFrameError(
|
@@ -8279,8 +8641,7 @@ var lifecycle_default = {
|
|
8279
8641
|
}
|
8280
8642
|
(attr2.value.extra ??= {}).isEffect = true;
|
8281
8643
|
}
|
8282
|
-
((0,
|
8283
|
-
mergeReferences(section, tag.node, getAllTagReferenceNodes(tag.node));
|
8644
|
+
((0, import_babel_utils37.getProgram)().node.extra ??= {}).isInteractive = true;
|
8284
8645
|
},
|
8285
8646
|
translate: {
|
8286
8647
|
exit(tag) {
|
@@ -8328,13 +8689,13 @@ var lifecycle_default = {
|
|
8328
8689
|
|
8329
8690
|
// src/translator/core/log.ts
|
8330
8691
|
var import_compiler45 = require("@marko/compiler");
|
8331
|
-
var
|
8692
|
+
var import_babel_utils38 = require("@marko/compiler/babel-utils");
|
8332
8693
|
var log_default = {
|
8333
8694
|
analyze(tag) {
|
8334
8695
|
const [valueAttr] = tag.node.attributes;
|
8335
|
-
(0,
|
8336
|
-
(0,
|
8337
|
-
(0,
|
8696
|
+
(0, import_babel_utils38.assertNoArgs)(tag);
|
8697
|
+
(0, import_babel_utils38.assertNoVar)(tag);
|
8698
|
+
(0, import_babel_utils38.assertNoParams)(tag);
|
8338
8699
|
assertNoBodyContent(tag);
|
8339
8700
|
if (!valueAttr) {
|
8340
8701
|
throw tag.get("name").buildCodeFrameError("The `log` tag requires a value.");
|
@@ -8380,7 +8741,7 @@ var log_default = {
|
|
8380
8741
|
|
8381
8742
|
// src/translator/core/script.ts
|
8382
8743
|
var import_compiler46 = require("@marko/compiler");
|
8383
|
-
var
|
8744
|
+
var import_babel_utils39 = require("@marko/compiler/babel-utils");
|
8384
8745
|
var htmlScriptTagAlternateMsg = " For a native html `script` tag use the `html-script` core tag instead.";
|
8385
8746
|
var script_default = {
|
8386
8747
|
parse(tag) {
|
@@ -8400,7 +8761,7 @@ var script_default = {
|
|
8400
8761
|
}
|
8401
8762
|
const start = body[0]?.start;
|
8402
8763
|
const end = body[body.length - 1]?.end;
|
8403
|
-
const bodyStatements = (0,
|
8764
|
+
const bodyStatements = (0, import_babel_utils39.parseStatements)(tag.hub.file, code, start, end);
|
8404
8765
|
const valueFn = import_compiler46.types.arrowFunctionExpression(
|
8405
8766
|
[],
|
8406
8767
|
import_compiler46.types.blockStatement(bodyStatements),
|
@@ -8412,10 +8773,10 @@ var script_default = {
|
|
8412
8773
|
},
|
8413
8774
|
analyze(tag) {
|
8414
8775
|
const { node } = tag;
|
8415
|
-
(0,
|
8416
|
-
(0,
|
8776
|
+
(0, import_babel_utils39.assertNoArgs)(tag);
|
8777
|
+
(0, import_babel_utils39.assertNoParams)(tag);
|
8417
8778
|
assertNoBodyContent(tag);
|
8418
|
-
(0,
|
8779
|
+
(0, import_babel_utils39.assertNoAttributeTags)(tag);
|
8419
8780
|
if (node.var) {
|
8420
8781
|
throw tag.hub.buildError(
|
8421
8782
|
node.var,
|
@@ -8430,7 +8791,7 @@ var script_default = {
|
|
8430
8791
|
}
|
8431
8792
|
seenValueAttr = true;
|
8432
8793
|
(attr2.value.extra ??= {}).isEffect = true;
|
8433
|
-
((0,
|
8794
|
+
((0, import_babel_utils39.getProgram)().node.extra ??= {}).isInteractive = true;
|
8434
8795
|
} else {
|
8435
8796
|
throw tag.hub.buildError(
|
8436
8797
|
attr2,
|
@@ -8519,7 +8880,7 @@ function isAwaitExpression(node) {
|
|
8519
8880
|
|
8520
8881
|
// src/translator/core/server.ts
|
8521
8882
|
var import_compiler47 = require("@marko/compiler");
|
8522
|
-
var
|
8883
|
+
var import_babel_utils40 = require("@marko/compiler/babel-utils");
|
8523
8884
|
var server_default = {
|
8524
8885
|
parse(tag) {
|
8525
8886
|
const {
|
@@ -8529,7 +8890,7 @@ var server_default = {
|
|
8529
8890
|
const rawValue = node.rawValue;
|
8530
8891
|
const code = rawValue.replace(/^server\s*/, "").trim();
|
8531
8892
|
const start = node.name.start + (rawValue.length - code.length);
|
8532
|
-
let body = (0,
|
8893
|
+
let body = (0, import_babel_utils40.parseStatements)(file, code, start, start + code.length);
|
8533
8894
|
if (body.length === 1 && import_compiler47.types.isBlockStatement(body[0])) {
|
8534
8895
|
body = body[0].body;
|
8535
8896
|
}
|
@@ -8550,7 +8911,7 @@ var server_default = {
|
|
8550
8911
|
|
8551
8912
|
// src/translator/core/static.ts
|
8552
8913
|
var import_compiler48 = require("@marko/compiler");
|
8553
|
-
var
|
8914
|
+
var import_babel_utils41 = require("@marko/compiler/babel-utils");
|
8554
8915
|
var static_default = {
|
8555
8916
|
parse(tag) {
|
8556
8917
|
const {
|
@@ -8560,7 +8921,7 @@ var static_default = {
|
|
8560
8921
|
const rawValue = node.rawValue;
|
8561
8922
|
const code = rawValue.replace(/^static\s*/, "").trim();
|
8562
8923
|
const start = node.name.start + (rawValue.length - code.length);
|
8563
|
-
let body = (0,
|
8924
|
+
let body = (0, import_babel_utils41.parseStatements)(file, code, start, start + code.length);
|
8564
8925
|
if (body.length === 1 && import_compiler48.types.isBlockStatement(body[0])) {
|
8565
8926
|
body = body[0].body;
|
8566
8927
|
}
|
@@ -8581,16 +8942,16 @@ var static_default = {
|
|
8581
8942
|
|
8582
8943
|
// src/translator/core/style.ts
|
8583
8944
|
var import_compiler49 = require("@marko/compiler");
|
8584
|
-
var
|
8945
|
+
var import_babel_utils42 = require("@marko/compiler/babel-utils");
|
8585
8946
|
var import_magic_string = __toESM(require("magic-string"));
|
8586
8947
|
var import_path3 = __toESM(require("path"));
|
8587
8948
|
var STYLE_EXT_REG = /^style((?:\.[a-zA-Z0-9$_-]+)+)?/;
|
8588
8949
|
var htmlStyleTagAlternateMsg = " For a native html `style` tag use the `html-style` core tag instead.";
|
8589
8950
|
var style_default = {
|
8590
8951
|
analyze(tag) {
|
8591
|
-
(0,
|
8592
|
-
(0,
|
8593
|
-
(0,
|
8952
|
+
(0, import_babel_utils42.assertNoArgs)(tag);
|
8953
|
+
(0, import_babel_utils42.assertNoParams)(tag);
|
8954
|
+
(0, import_babel_utils42.assertNoAttributeTags)(tag);
|
8594
8955
|
const { node } = tag;
|
8595
8956
|
const ext = STYLE_EXT_REG.exec(node.rawValue || "")?.[1]?.slice(1);
|
8596
8957
|
for (const attr2 of node.attributes) {
|
@@ -8629,49 +8990,49 @@ var style_default = {
|
|
8629
8990
|
}
|
8630
8991
|
const markoText = node.body.body[0];
|
8631
8992
|
const { resolveVirtualDependency } = getMarkoOpts();
|
8632
|
-
const start = (0,
|
8633
|
-
const end = (0,
|
8993
|
+
const start = (0, import_babel_utils42.getStart)(file, markoText);
|
8994
|
+
const end = (0, import_babel_utils42.getEnd)(file, markoText);
|
8634
8995
|
let code = markoText.value;
|
8635
|
-
let
|
8996
|
+
let map;
|
8636
8997
|
if (resolveVirtualDependency && sourceMaps && start !== null && end !== null) {
|
8637
8998
|
const magicString = new import_magic_string.default(file.code, { filename });
|
8638
8999
|
magicString.remove(0, start);
|
8639
9000
|
magicString.remove(end, file.code.length);
|
8640
|
-
|
9001
|
+
map = magicString.generateMap({
|
8641
9002
|
source: filename,
|
8642
9003
|
includeContent: true
|
8643
9004
|
});
|
8644
9005
|
if (sourceMaps === "inline" || sourceMaps === "both") {
|
8645
9006
|
code += `
|
8646
|
-
/*# sourceMappingURL=${
|
9007
|
+
/*# sourceMappingURL=${map.toUrl()}*/`;
|
8647
9008
|
if (sourceMaps === "inline") {
|
8648
|
-
|
9009
|
+
map = void 0;
|
8649
9010
|
}
|
8650
9011
|
}
|
8651
9012
|
}
|
8652
9013
|
const importPath = resolveVirtualDependency?.(filename, {
|
8653
9014
|
virtualPath: `./${import_path3.default.basename(filename) + ext}`,
|
8654
9015
|
code,
|
8655
|
-
map
|
9016
|
+
map
|
8656
9017
|
});
|
8657
9018
|
if (importPath) {
|
8658
9019
|
if (!node.var) {
|
8659
|
-
(0,
|
9020
|
+
(0, import_babel_utils42.getProgram)().node.body.push(
|
8660
9021
|
import_compiler49.types.importDeclaration([], import_compiler49.types.stringLiteral(importPath))
|
8661
9022
|
);
|
8662
9023
|
} else if (import_compiler49.types.isIdentifier(node.var)) {
|
8663
|
-
(0,
|
9024
|
+
(0, import_babel_utils42.getProgram)().node.body.push(
|
8664
9025
|
import_compiler49.types.importDeclaration(
|
8665
9026
|
[import_compiler49.types.importDefaultSpecifier(node.var)],
|
8666
9027
|
import_compiler49.types.stringLiteral(importPath)
|
8667
9028
|
)
|
8668
9029
|
);
|
8669
9030
|
} else {
|
8670
|
-
(0,
|
9031
|
+
(0, import_babel_utils42.getProgram)().node.body.push(
|
8671
9032
|
import_compiler49.types.variableDeclaration("const", [
|
8672
9033
|
import_compiler49.types.variableDeclarator(
|
8673
9034
|
node.var,
|
8674
|
-
(0,
|
9035
|
+
(0, import_babel_utils42.importDefault)(file, importPath, "style")
|
8675
9036
|
)
|
8676
9037
|
])
|
8677
9038
|
);
|
@@ -8690,32 +9051,27 @@ var style_default = {
|
|
8690
9051
|
|
8691
9052
|
// src/translator/core/try.ts
|
8692
9053
|
var import_compiler50 = require("@marko/compiler");
|
8693
|
-
var
|
9054
|
+
var import_babel_utils43 = require("@marko/compiler/babel-utils");
|
8694
9055
|
var kDOMBinding2 = Symbol("try tag dom binding");
|
8695
9056
|
var try_default = {
|
8696
9057
|
analyze(tag) {
|
8697
|
-
(0,
|
8698
|
-
(0,
|
8699
|
-
(0,
|
8700
|
-
(0,
|
9058
|
+
(0, import_babel_utils43.assertNoVar)(tag);
|
9059
|
+
(0, import_babel_utils43.assertNoArgs)(tag);
|
9060
|
+
(0, import_babel_utils43.assertNoParams)(tag);
|
9061
|
+
(0, import_babel_utils43.assertNoAttributes)(tag);
|
8701
9062
|
assertNoSpreadAttrs(tag);
|
8702
9063
|
analyzeAttributeTags(tag);
|
8703
|
-
const { node } = tag;
|
8704
9064
|
const section = getOrCreateSection(tag);
|
8705
|
-
const tagExtra =
|
8706
|
-
const tagBody = tag.get("body");
|
8707
|
-
tagExtra[kDOMBinding2] = createBinding(
|
8708
|
-
"#text",
|
8709
|
-
0 /* dom */,
|
9065
|
+
const tagExtra = mergeReferences(
|
8710
9066
|
section,
|
8711
|
-
|
8712
|
-
|
9067
|
+
tag.node,
|
9068
|
+
getAllTagReferenceNodes(tag.node)
|
8713
9069
|
);
|
8714
|
-
|
9070
|
+
tagExtra[kDOMBinding2] = createBinding("#text", 0 /* dom */, section);
|
9071
|
+
if (!tag.node.body.body.length) {
|
8715
9072
|
throw tag.get("name").buildCodeFrameError("The `try` tag requires body content.");
|
8716
9073
|
}
|
8717
|
-
startSection(
|
8718
|
-
mergeReferences(section, tag.node, getAllTagReferenceNodes(tag.node));
|
9074
|
+
startSection(tag.get("body"));
|
8719
9075
|
},
|
8720
9076
|
translate: translateByTarget({
|
8721
9077
|
html: {
|
@@ -8802,7 +9158,7 @@ var try_default = {
|
|
8802
9158
|
translatedAttrs.statements
|
8803
9159
|
);
|
8804
9160
|
}
|
8805
|
-
(0,
|
9161
|
+
(0, import_babel_utils43.getProgram)().node.body.push(
|
8806
9162
|
import_compiler50.types.expressionStatement(callRuntime("enableCatch"))
|
8807
9163
|
);
|
8808
9164
|
addValue(
|
@@ -8902,7 +9258,7 @@ var document_type_default = {
|
|
8902
9258
|
|
8903
9259
|
// src/translator/visitors/function.ts
|
8904
9260
|
var import_compiler51 = require("@marko/compiler");
|
8905
|
-
var
|
9261
|
+
var import_babel_utils44 = require("@marko/compiler/babel-utils");
|
8906
9262
|
var function_default = {
|
8907
9263
|
analyze(fn) {
|
8908
9264
|
if (fn !== getFnRoot(fn)) {
|
@@ -8912,7 +9268,7 @@ var function_default = {
|
|
8912
9268
|
if (markoRoot && (markoRoot.isMarkoPlaceholder() || markoRoot.isMarkoScriptlet() && markoRoot.node.target === "server")) {
|
8913
9269
|
return;
|
8914
9270
|
}
|
8915
|
-
if (isMarkoAttribute(markoRoot) && ((0,
|
9271
|
+
if (isMarkoAttribute(markoRoot) && ((0, import_babel_utils44.isNativeTag)(markoRoot.parentPath) && /^on[A-Z-]/.test(markoRoot.node.name) || isCoreTagName(markoRoot.parentPath, "script") || isCoreTagName(markoRoot.parentPath, "lifecycle") || isCoreTagName(markoRoot.parentPath, "for"))) {
|
8916
9272
|
return;
|
8917
9273
|
}
|
8918
9274
|
const { node } = fn;
|
@@ -8921,14 +9277,14 @@ var function_default = {
|
|
8921
9277
|
const {
|
8922
9278
|
markoOpts,
|
8923
9279
|
opts: { filename }
|
8924
|
-
} = (0,
|
9280
|
+
} = (0, import_babel_utils44.getFile)();
|
8925
9281
|
const name2 = extra.name = generateUid(
|
8926
9282
|
fn.node.id?.name || (isMarkoAttribute(markoRoot) ? markoRoot.node.default ? import_compiler51.types.toIdentifier(
|
8927
9283
|
markoRoot.parentPath.has("var") ? markoRoot.parentPath.get("var") : markoRoot.parentPath.get("name")
|
8928
9284
|
) : markoRoot.node.name : import_compiler51.types.isVariableDeclarator(fn.parent) && import_compiler51.types.isIdentifier(fn.parent.id) ? fn.parent.id.name : import_compiler51.types.isObjectMethod(node) && import_compiler51.types.isIdentifier(node.key) ? node.key.name : "anonymous")
|
8929
9285
|
);
|
8930
9286
|
extra.section = section;
|
8931
|
-
extra.registerId = (0,
|
9287
|
+
extra.registerId = (0, import_babel_utils44.getTemplateId)(
|
8932
9288
|
markoOpts,
|
8933
9289
|
filename,
|
8934
9290
|
`${section.id}/${name2.slice(1)}`
|
@@ -8940,13 +9296,13 @@ function isMarkoAttribute(path5) {
|
|
8940
9296
|
}
|
8941
9297
|
|
8942
9298
|
// src/translator/visitors/import-declaration.ts
|
8943
|
-
var
|
9299
|
+
var import_babel_utils45 = require("@marko/compiler/babel-utils");
|
8944
9300
|
var import_declaration_default = {
|
8945
9301
|
analyze(importDecl) {
|
8946
9302
|
const { node } = importDecl;
|
8947
9303
|
const { source } = node;
|
8948
9304
|
const { value } = source;
|
8949
|
-
const tagImport = (0,
|
9305
|
+
const tagImport = (0, import_babel_utils45.resolveTagImport)(importDecl, value);
|
8950
9306
|
if (tagImport) {
|
8951
9307
|
node.extra ??= {};
|
8952
9308
|
node.extra.tagImport = tagImport;
|
@@ -8987,7 +9343,7 @@ function isNonHTMLText(placeholder) {
|
|
8987
9343
|
}
|
8988
9344
|
|
8989
9345
|
// src/translator/visitors/placeholder.ts
|
8990
|
-
var
|
9346
|
+
var kNodeBinding4 = Symbol("placeholder node binding");
|
8991
9347
|
var kSiblingText = Symbol("placeholder has sibling text");
|
8992
9348
|
var placeholder_default = {
|
8993
9349
|
analyze(placeholder) {
|
@@ -8997,15 +9353,13 @@ var placeholder_default = {
|
|
8997
9353
|
const { confident, computed } = valueExtra;
|
8998
9354
|
if (!(confident && (node.escape || isVoid2(computed)))) {
|
8999
9355
|
const section = getOrCreateSection(placeholder);
|
9000
|
-
const
|
9356
|
+
const nodeBinding = (node.extra ??= {})[kNodeBinding4] = createBinding(
|
9001
9357
|
"#text",
|
9002
9358
|
0 /* dom */,
|
9003
|
-
section
|
9004
|
-
void 0,
|
9005
|
-
valueExtra
|
9359
|
+
section
|
9006
9360
|
);
|
9007
9361
|
analyzeSiblingText(placeholder);
|
9008
|
-
addBindingSerializeReasonExpr(section,
|
9362
|
+
addBindingSerializeReasonExpr(section, nodeBinding, valueExtra);
|
9009
9363
|
}
|
9010
9364
|
},
|
9011
9365
|
translate: {
|
@@ -9022,7 +9376,7 @@ var placeholder_default = {
|
|
9022
9376
|
const isHTML = isOutputHTML();
|
9023
9377
|
const write2 = writeTo(placeholder);
|
9024
9378
|
const extra = node.extra || {};
|
9025
|
-
const nodeBinding = extra[
|
9379
|
+
const nodeBinding = extra[kNodeBinding4];
|
9026
9380
|
const canWriteHTML = isHTML || confident && node.escape;
|
9027
9381
|
const method = canWriteHTML ? node.escape ? "escapeXML" : "toString" : node.escape ? "data" : "html";
|
9028
9382
|
const section = getSection(placeholder);
|
@@ -9033,7 +9387,11 @@ var placeholder_default = {
|
|
9033
9387
|
} else {
|
9034
9388
|
if (siblingText === 1 /* Before */) {
|
9035
9389
|
if (isHTML && markerSerializeReason) {
|
9036
|
-
|
9390
|
+
if (markerSerializeReason === true) {
|
9391
|
+
write2`<!>`;
|
9392
|
+
} else {
|
9393
|
+
write2`${callRuntime("commentSeparator", getSerializeGuard(markerSerializeReason))}`;
|
9394
|
+
}
|
9037
9395
|
}
|
9038
9396
|
visit(placeholder, 37 /* Replace */);
|
9039
9397
|
} else if (siblingText === 2 /* After */) {
|
@@ -9044,8 +9402,8 @@ var placeholder_default = {
|
|
9044
9402
|
}
|
9045
9403
|
if (isHTML) {
|
9046
9404
|
write2`${callRuntime(method, value)}`;
|
9047
|
-
if (
|
9048
|
-
markNode(placeholder, nodeBinding);
|
9405
|
+
if (nodeBinding) {
|
9406
|
+
markNode(placeholder, nodeBinding, markerSerializeReason);
|
9049
9407
|
}
|
9050
9408
|
} else {
|
9051
9409
|
addStatement(
|
@@ -9242,7 +9600,7 @@ var scriptlet_default = {
|
|
9242
9600
|
}
|
9243
9601
|
if (isHTML) {
|
9244
9602
|
} else {
|
9245
|
-
traverseReplace(node, "body",
|
9603
|
+
traverseReplace(node, "body", replaceRegisteredFunctionNode2);
|
9246
9604
|
scriptlet.replaceWithMultiple(node.body);
|
9247
9605
|
}
|
9248
9606
|
}
|
@@ -9251,20 +9609,20 @@ var scriptlet_default = {
|
|
9251
9609
|
|
9252
9610
|
// src/translator/visitors/tag/index.ts
|
9253
9611
|
var import_compiler58 = require("@marko/compiler");
|
9254
|
-
var
|
9612
|
+
var import_babel_utils49 = require("@marko/compiler/babel-utils");
|
9255
9613
|
|
9256
9614
|
// src/translator/visitors/tag/attribute-tag.ts
|
9257
9615
|
var import_compiler55 = require("@marko/compiler");
|
9258
|
-
var
|
9616
|
+
var import_babel_utils46 = require("@marko/compiler/babel-utils");
|
9259
9617
|
var attribute_tag_default = {
|
9260
9618
|
analyze: {
|
9261
9619
|
enter(tag) {
|
9262
|
-
(0,
|
9263
|
-
(0,
|
9620
|
+
(0, import_babel_utils46.assertNoVar)(tag);
|
9621
|
+
(0, import_babel_utils46.assertNoArgs)(tag);
|
9264
9622
|
const body = tag.get("body");
|
9265
9623
|
startSection(body);
|
9266
9624
|
trackParamsReferences(body, 3 /* param */);
|
9267
|
-
if (!(0,
|
9625
|
+
if (!(0, import_babel_utils46.findParentTag)(tag)) {
|
9268
9626
|
throw tag.get("name").buildCodeFrameError("@tags must be nested within another tag.");
|
9269
9627
|
}
|
9270
9628
|
}
|
@@ -9286,16 +9644,19 @@ var attribute_tag_default = {
|
|
9286
9644
|
|
9287
9645
|
// src/translator/visitors/tag/custom-tag.ts
|
9288
9646
|
var import_compiler56 = require("@marko/compiler");
|
9289
|
-
var
|
9647
|
+
var import_babel_utils47 = require("@marko/compiler/babel-utils");
|
9290
9648
|
var import_path4 = __toESM(require("path"));
|
9291
9649
|
var kChildScopeBinding = Symbol("custom tag child scope");
|
9292
9650
|
var kChildOffsetScopeBinding = Symbol("custom tag scope offset");
|
9651
|
+
var kChildInputSerializePropIds = Symbol(
|
9652
|
+
"custom tag child serialize reasons"
|
9653
|
+
);
|
9293
9654
|
var custom_tag_default = {
|
9294
9655
|
analyze: {
|
9295
9656
|
enter(tag) {
|
9296
|
-
(0,
|
9657
|
+
(0, import_babel_utils47.assertAttributesOrSingleArg)(tag);
|
9297
9658
|
analyzeAttributeTags(tag);
|
9298
|
-
const templateFile = (0,
|
9659
|
+
const templateFile = (0, import_babel_utils47.getTagTemplate)(tag);
|
9299
9660
|
if (!templateFile) {
|
9300
9661
|
const tagName = getTagName(tag);
|
9301
9662
|
if (tagName && tag.scope.hasBinding(tagName)) {
|
@@ -9311,42 +9672,75 @@ var custom_tag_default = {
|
|
9311
9672
|
const childScopeBinding = tagExtra[kChildScopeBinding] = createBinding(
|
9312
9673
|
"#childScope",
|
9313
9674
|
0 /* dom */,
|
9314
|
-
section
|
9315
|
-
void 0,
|
9316
|
-
tagExtra
|
9675
|
+
section
|
9317
9676
|
);
|
9318
9677
|
const attrExprs = /* @__PURE__ */ new Set([tagExtra]);
|
9319
|
-
const hasVar = !!tag.node.var;
|
9320
|
-
if (hasVar) {
|
9321
|
-
trackVarReferences(tag, 4 /* derived */);
|
9322
|
-
tag.node.var.extra.binding.scopeOffset = tagExtra[kChildOffsetScopeBinding] = createBinding(
|
9323
|
-
"#scopeOffset",
|
9324
|
-
0 /* dom */,
|
9325
|
-
section,
|
9326
|
-
void 0,
|
9327
|
-
tagExtra
|
9328
|
-
);
|
9329
|
-
}
|
9330
9678
|
startSection(tagBody);
|
9331
9679
|
trackParamsReferences(tagBody, 3 /* param */);
|
9332
|
-
const childFile = (0,
|
9680
|
+
const childFile = (0, import_babel_utils47.loadFileForTag)(tag);
|
9681
|
+
if (!childFile) {
|
9682
|
+
throw tag.get("name").buildCodeFrameError("Unable to resolve file for tag.");
|
9683
|
+
}
|
9684
|
+
const varBinding = trackVarReferences(tag, 4 /* derived */);
|
9685
|
+
if (varBinding) {
|
9686
|
+
varBinding.scopeOffset = tagExtra[kChildOffsetScopeBinding] = createBinding("#scopeOffset", 0 /* dom */, section);
|
9687
|
+
}
|
9333
9688
|
if (childFile.opts.filename === tag.hub.file.opts.filename) {
|
9334
9689
|
mergeReferences(section, tag.node, getAllTagReferenceNodes(tag.node));
|
9690
|
+
if (varBinding) {
|
9691
|
+
const varSerializeReason = (0, import_babel_utils47.getProgram)().node.extra.returnValueExpr;
|
9692
|
+
setBindingValueExpr(varBinding, varSerializeReason);
|
9693
|
+
addBindingSerializeReasonExpr(
|
9694
|
+
section,
|
9695
|
+
childScopeBinding,
|
9696
|
+
varSerializeReason
|
9697
|
+
);
|
9698
|
+
}
|
9335
9699
|
} else {
|
9336
|
-
const
|
9700
|
+
const childProgram = childFile.ast.program;
|
9701
|
+
const childExtra = childProgram.extra;
|
9702
|
+
const childInputBinding = childProgram.params[0].extra?.binding;
|
9703
|
+
const inputExpr = {};
|
9337
9704
|
analyzeAttrs(
|
9338
9705
|
tagExtra,
|
9339
9706
|
section,
|
9340
9707
|
tag,
|
9341
|
-
|
9342
|
-
attrExprs
|
9708
|
+
childExtra?.domExports.input,
|
9709
|
+
attrExprs,
|
9710
|
+
inputExpr
|
9343
9711
|
);
|
9344
|
-
|
9712
|
+
if (varBinding) {
|
9713
|
+
const varSerializeReason = mapChildReasonToLocalReason(
|
9714
|
+
childExtra.returnSerializeReason,
|
9715
|
+
childInputBinding,
|
9716
|
+
inputExpr
|
9717
|
+
);
|
9718
|
+
setBindingValueExpr(varBinding, varSerializeReason);
|
9719
|
+
addBindingSerializeReasonExpr(
|
9720
|
+
section,
|
9721
|
+
childScopeBinding,
|
9722
|
+
varSerializeReason
|
9723
|
+
);
|
9724
|
+
}
|
9725
|
+
if (childExtra.inputSerializeReasons) {
|
9726
|
+
const childInputSerializePropIds = tagExtra[kChildInputSerializePropIds] = [];
|
9727
|
+
for (const reason of childExtra.inputSerializeReasons) {
|
9728
|
+
const propId = Symbol();
|
9729
|
+
childInputSerializePropIds.push(propId);
|
9730
|
+
addBindingSerializeReasonExpr(
|
9731
|
+
section,
|
9732
|
+
childScopeBinding,
|
9733
|
+
mapChildReasonToLocalReason(reason, childInputBinding, inputExpr),
|
9734
|
+
propId
|
9735
|
+
);
|
9736
|
+
}
|
9737
|
+
}
|
9738
|
+
(0, import_babel_utils47.getProgram)().node.extra.hasInteractiveChild = childExtra?.isInteractive || childExtra?.hasInteractiveChild || false;
|
9345
9739
|
}
|
9346
9740
|
addBindingSerializeReasonExpr(
|
9347
9741
|
section,
|
9348
9742
|
childScopeBinding,
|
9349
|
-
|
9743
|
+
fromIter(attrExprs)
|
9350
9744
|
);
|
9351
9745
|
}
|
9352
9746
|
},
|
@@ -9375,13 +9769,15 @@ function translateHTML(tag) {
|
|
9375
9769
|
writeHTMLResumeStatements(tagBody);
|
9376
9770
|
if (import_compiler56.types.isStringLiteral(node.name)) {
|
9377
9771
|
const relativePath = getTagRelativePath(tag);
|
9378
|
-
tagIdentifier = isCircularRequest(tag.hub.file, relativePath) ? import_compiler56.types.identifier(getTemplateContentName()) : (0,
|
9772
|
+
tagIdentifier = isCircularRequest(tag.hub.file, relativePath) ? import_compiler56.types.identifier(getTemplateContentName()) : (0, import_babel_utils47.importDefault)(tag.hub.file, relativePath, getTagName(tag));
|
9379
9773
|
} else {
|
9380
9774
|
tagIdentifier = node.name;
|
9381
9775
|
}
|
9382
9776
|
const tagVar = node.var;
|
9383
9777
|
const section = getSection(tag);
|
9384
|
-
const
|
9778
|
+
const childProgram = (0, import_babel_utils47.loadFileForTag)(tag).ast.program;
|
9779
|
+
const childExtra = childProgram.extra;
|
9780
|
+
const inputExport = childExtra.domExports?.input;
|
9385
9781
|
const { properties, statements } = inputExport ? translateAttrs(tag, inputExport.props) : {
|
9386
9782
|
properties: [],
|
9387
9783
|
statements: []
|
@@ -9391,11 +9787,46 @@ function translateHTML(tag) {
|
|
9391
9787
|
section,
|
9392
9788
|
childScopeBinding
|
9393
9789
|
);
|
9790
|
+
const childSerializeReasonIds = tagExtra[kChildInputSerializePropIds];
|
9791
|
+
let childSerializeReasonExpr;
|
9792
|
+
if (childSerializeReasonIds) {
|
9793
|
+
if (childSerializeReasonIds.length === 1) {
|
9794
|
+
childSerializeReasonExpr = getSerializeGuard(
|
9795
|
+
getBindingSerializeReason(
|
9796
|
+
section,
|
9797
|
+
childScopeBinding,
|
9798
|
+
childSerializeReasonIds[0]
|
9799
|
+
)
|
9800
|
+
);
|
9801
|
+
} else {
|
9802
|
+
const props = [];
|
9803
|
+
let hasDynamicReasons = false;
|
9804
|
+
let hasSkippedReasons = false;
|
9805
|
+
for (let i = 0; i < childSerializeReasonIds.length; i++) {
|
9806
|
+
const reason = getBindingSerializeReason(
|
9807
|
+
section,
|
9808
|
+
childScopeBinding,
|
9809
|
+
childSerializeReasonIds[i]
|
9810
|
+
);
|
9811
|
+
if (reason) {
|
9812
|
+
hasDynamicReasons ||= reason !== true;
|
9813
|
+
props.push(
|
9814
|
+
import_compiler56.types.objectProperty(import_compiler56.types.numericLiteral(i), getSerializeGuard(reason))
|
9815
|
+
);
|
9816
|
+
} else {
|
9817
|
+
hasSkippedReasons = true;
|
9818
|
+
}
|
9819
|
+
}
|
9820
|
+
if (props.length) {
|
9821
|
+
childSerializeReasonExpr = hasDynamicReasons || hasSkippedReasons ? import_compiler56.types.objectExpression(props) : import_compiler56.types.numericLiteral(1);
|
9822
|
+
}
|
9823
|
+
}
|
9824
|
+
}
|
9394
9825
|
if (childScopeSerializeReason) {
|
9395
9826
|
const peekScopeId = generateUidIdentifier(childScopeBinding?.name);
|
9396
9827
|
tag.insertBefore(
|
9397
9828
|
import_compiler56.types.variableDeclaration("const", [
|
9398
|
-
import_compiler56.types.variableDeclarator(peekScopeId, callRuntime("
|
9829
|
+
import_compiler56.types.variableDeclarator(peekScopeId, callRuntime("peekNextScopeId"))
|
9399
9830
|
])
|
9400
9831
|
);
|
9401
9832
|
setBindingSerializedValue(
|
@@ -9443,7 +9874,8 @@ function translateHTML(tag) {
|
|
9443
9874
|
}
|
9444
9875
|
let renderTagExpr = callExpression(
|
9445
9876
|
tagIdentifier,
|
9446
|
-
propsToExpression(properties)
|
9877
|
+
propsToExpression(properties),
|
9878
|
+
childSerializeReasonExpr
|
9447
9879
|
);
|
9448
9880
|
if (tagVar) {
|
9449
9881
|
translateVar(tag, import_compiler56.types.unaryExpression("void", import_compiler56.types.numericLiteral(0)), "let");
|
@@ -9459,12 +9891,19 @@ function translateHTML(tag) {
|
|
9459
9891
|
} else if (tagVar) {
|
9460
9892
|
translateVar(
|
9461
9893
|
tag,
|
9462
|
-
callExpression(
|
9894
|
+
callExpression(
|
9895
|
+
tagIdentifier,
|
9896
|
+
propsToExpression(properties),
|
9897
|
+
childSerializeReasonExpr
|
9898
|
+
)
|
9463
9899
|
);
|
9464
|
-
serializeSectionIfNeeded(section, true);
|
9465
9900
|
} else {
|
9466
9901
|
statements.push(
|
9467
|
-
callStatement(
|
9902
|
+
callStatement(
|
9903
|
+
tagIdentifier,
|
9904
|
+
propsToExpression(properties),
|
9905
|
+
childSerializeReasonExpr
|
9906
|
+
)
|
9468
9907
|
);
|
9469
9908
|
}
|
9470
9909
|
for (const replacement of tag.replaceWithMultiple(statements)) {
|
@@ -9480,7 +9919,7 @@ function translateDOM(tag) {
|
|
9480
9919
|
const { file } = tag.hub;
|
9481
9920
|
const tagName = import_compiler56.types.isIdentifier(node.name) ? node.name.name : import_compiler56.types.isStringLiteral(node.name) ? node.name.value : "tag";
|
9482
9921
|
const relativePath = getTagRelativePath(tag);
|
9483
|
-
const childFile = (0,
|
9922
|
+
const childFile = (0, import_babel_utils47.loadFileForTag)(tag);
|
9484
9923
|
const childExports = childFile.ast.program.extra.domExports;
|
9485
9924
|
const tagIdentifier = importOrSelfReferenceName(
|
9486
9925
|
file,
|
@@ -9498,10 +9937,10 @@ function translateDOM(tag) {
|
|
9498
9937
|
attrTagCallsByTag: void 0
|
9499
9938
|
});
|
9500
9939
|
}
|
9501
|
-
write2`${(0,
|
9940
|
+
write2`${(0, import_babel_utils47.importNamed)(file, relativePath, childExports.template, `${tagName}_template`)}`;
|
9502
9941
|
injectWalks(
|
9503
9942
|
tag,
|
9504
|
-
(0,
|
9943
|
+
(0, import_babel_utils47.importNamed)(file, relativePath, childExports.walks, `${tagName}_walks`)
|
9505
9944
|
);
|
9506
9945
|
if (node.var) {
|
9507
9946
|
const source = initValue(
|
@@ -9548,8 +9987,8 @@ function getTagRelativePath(tag) {
|
|
9548
9987
|
} = tag;
|
9549
9988
|
let relativePath;
|
9550
9989
|
if (import_compiler56.types.isStringLiteral(node.name)) {
|
9551
|
-
const template = (0,
|
9552
|
-
relativePath = template && (0,
|
9990
|
+
const template = (0, import_babel_utils47.getTagTemplate)(tag);
|
9991
|
+
relativePath = template && (0, import_babel_utils47.resolveRelativePath)(file, template);
|
9553
9992
|
} else if (node.extra?.tagNameImported) {
|
9554
9993
|
relativePath = node.extra.tagNameImported;
|
9555
9994
|
}
|
@@ -9564,19 +10003,20 @@ function getTagRelativePath(tag) {
|
|
9564
10003
|
}
|
9565
10004
|
return relativePath;
|
9566
10005
|
}
|
9567
|
-
function analyzeAttrs(rootTagExtra, section, tag, templateExport, rootAttrExprs) {
|
10006
|
+
function analyzeAttrs(rootTagExtra, section, tag, templateExport, rootAttrExprs, inputExpr) {
|
9568
10007
|
if (!templateExport) {
|
9569
10008
|
dropReferences(getAllTagReferenceNodes(tag.node));
|
9570
10009
|
return;
|
9571
10010
|
}
|
9572
10011
|
if (!templateExport.props || tag.node.arguments?.length) {
|
9573
|
-
|
10012
|
+
inputExpr.value = mergeReferences(
|
10013
|
+
section,
|
10014
|
+
tag.node,
|
10015
|
+
getAllTagReferenceNodes(tag.node)
|
10016
|
+
);
|
9574
10017
|
return;
|
9575
10018
|
}
|
9576
|
-
const
|
9577
|
-
if (bodySection) {
|
9578
|
-
bodySection.downstreamBinding = (templateExport.props.content || templateExport.props).binding;
|
9579
|
-
}
|
10019
|
+
const known = inputExpr.known = {};
|
9580
10020
|
const attrTagLookup = analyzeAttributeTags(tag);
|
9581
10021
|
const seen = /* @__PURE__ */ new Set();
|
9582
10022
|
if (attrTagLookup) {
|
@@ -9599,7 +10039,7 @@ function analyzeAttrs(rootTagExtra, section, tag, templateExport, rootAttrExprs)
|
|
9599
10039
|
const attrTags2 = tag.node.body.attributeTags ? tag.get("body").get("body") : tag.get("attributeTags");
|
9600
10040
|
for (const child of attrTags2) {
|
9601
10041
|
if (child.isMarkoTag()) {
|
9602
|
-
if ((0,
|
10042
|
+
if ((0, import_babel_utils47.isAttributeTag)(child)) {
|
9603
10043
|
const attrTagMeta = attrTagLookup[getTagName(child)];
|
9604
10044
|
const childAttrExports = templateExport.props[attrTagMeta.name];
|
9605
10045
|
if (childAttrExports) {
|
@@ -9609,7 +10049,8 @@ function analyzeAttrs(rootTagExtra, section, tag, templateExport, rootAttrExprs)
|
|
9609
10049
|
section,
|
9610
10050
|
child,
|
9611
10051
|
childAttrExports,
|
9612
|
-
rootAttrExprs
|
10052
|
+
rootAttrExprs,
|
10053
|
+
known[attrTagMeta.name] = {}
|
9613
10054
|
);
|
9614
10055
|
} else {
|
9615
10056
|
analyzeDynamicChildGroup(attrTagMeta.group, child);
|
@@ -9634,12 +10075,27 @@ function analyzeAttrs(rootTagExtra, section, tag, templateExport, rootAttrExprs)
|
|
9634
10075
|
}
|
9635
10076
|
}
|
9636
10077
|
}
|
9637
|
-
for (const
|
9638
|
-
|
9639
|
-
|
9640
|
-
|
9641
|
-
|
9642
|
-
|
10078
|
+
for (const [
|
10079
|
+
group,
|
10080
|
+
{
|
10081
|
+
firstTag: { node },
|
10082
|
+
referenceNodes
|
10083
|
+
}
|
10084
|
+
] of nodeReferencesByGroup) {
|
10085
|
+
const groupExtra = mergeReferences(section, node, referenceNodes);
|
10086
|
+
const groupKnownValue = { value: groupExtra };
|
10087
|
+
rootAttrExprs.add(groupExtra);
|
10088
|
+
for (const name2 of group) {
|
10089
|
+
known[attrTagLookup[name2].name] = groupKnownValue;
|
10090
|
+
}
|
10091
|
+
}
|
10092
|
+
}
|
10093
|
+
if (!seen.has("content")) {
|
10094
|
+
const bodySection = getSectionForBody(tag.get("body"));
|
10095
|
+
if (bodySection) {
|
10096
|
+
seen.add("content");
|
10097
|
+
known.content = { value: void 0 };
|
10098
|
+
bodySection.downstreamBinding = (templateExport.props.content || templateExport.props).binding;
|
9643
10099
|
}
|
9644
10100
|
}
|
9645
10101
|
const { attributes } = tag.node;
|
@@ -9658,11 +10114,13 @@ function analyzeAttrs(rootTagExtra, section, tag, templateExport, rootAttrExprs)
|
|
9658
10114
|
} else if (import_compiler56.types.isMarkoSpreadAttribute(attr2)) {
|
9659
10115
|
spreadReferenceNodes = [attr2.value];
|
9660
10116
|
} else {
|
9661
|
-
|
10117
|
+
const attrValueExtra = attr2.value.extra ??= {};
|
10118
|
+
known[attr2.name] = { value: attrValueExtra };
|
10119
|
+
rootAttrExprs.add(attrValueExtra);
|
9662
10120
|
}
|
9663
10121
|
}
|
9664
10122
|
if (spreadReferenceNodes) {
|
9665
|
-
mergeReferences(section, tag.node, spreadReferenceNodes);
|
10123
|
+
inputExpr.value = mergeReferences(section, tag.node, spreadReferenceNodes);
|
9666
10124
|
}
|
9667
10125
|
}
|
9668
10126
|
function writeAttrsToExports(tag, templateExport, importAlias, info) {
|
@@ -9703,7 +10161,7 @@ function writeAttrsToExports(tag, templateExport, importAlias, info) {
|
|
9703
10161
|
);
|
9704
10162
|
}
|
9705
10163
|
let translatedProps = propsToExpression(translatedAttrs.properties);
|
9706
|
-
if ((0,
|
10164
|
+
if ((0, import_babel_utils47.isAttributeTag)(tag)) {
|
9707
10165
|
const attrTagName = getTagName(tag);
|
9708
10166
|
const parentTag = tag.parentPath;
|
9709
10167
|
const repeated = analyzeAttributeTags(parentTag)?.[attrTagName]?.repeated;
|
@@ -9775,7 +10233,7 @@ function writeAttrsToExports(tag, templateExport, importAlias, info) {
|
|
9775
10233
|
for (let i = 0; i < attrTags2.length; i++) {
|
9776
10234
|
const child = attrTags2[i];
|
9777
10235
|
if (child.isMarkoTag()) {
|
9778
|
-
if ((0,
|
10236
|
+
if ((0, import_babel_utils47.isAttributeTag)(child)) {
|
9779
10237
|
const attrTagMeta = attrTagLookup[getTagName(child)];
|
9780
10238
|
const childAttrExport = templateExport.props[attrTagMeta.name];
|
9781
10239
|
if (childAttrExport) {
|
@@ -9832,7 +10290,7 @@ function writeAttrsToExports(tag, templateExport, importAlias, info) {
|
|
9832
10290
|
if (bodySection && !seen.has("content")) {
|
9833
10291
|
seen.add("content");
|
9834
10292
|
if (templateExport.props.content) {
|
9835
|
-
const contentExportIdentifier = (0,
|
10293
|
+
const contentExportIdentifier = (0, import_babel_utils47.importNamed)(
|
9836
10294
|
tag.hub.file,
|
9837
10295
|
info.relativePath,
|
9838
10296
|
templateExport.props.content.id,
|
@@ -9921,7 +10379,37 @@ function importOrSelfReferenceName(file, request, name2, nameHint) {
|
|
9921
10379
|
if (isCircularRequest(file, request)) {
|
9922
10380
|
return import_compiler56.types.identifier(name2);
|
9923
10381
|
}
|
9924
|
-
return (0,
|
10382
|
+
return (0, import_babel_utils47.importNamed)(file, request, name2, nameHint);
|
10383
|
+
}
|
10384
|
+
function mapChildReasonToLocalReason(childReason, childInputBinding, inputExpr) {
|
10385
|
+
if (childReason) {
|
10386
|
+
if (childReason === true) return true;
|
10387
|
+
return filterMap(
|
10388
|
+
childReason,
|
10389
|
+
(inputBinding) => resolveChildInputExpr(childInputBinding, inputBinding, inputExpr)
|
10390
|
+
);
|
10391
|
+
}
|
10392
|
+
}
|
10393
|
+
function resolveChildInputExpr(inputBinding, propBinding, expr) {
|
10394
|
+
if (expr) {
|
10395
|
+
let curExpr = expr;
|
10396
|
+
if (inputBinding !== propBinding) {
|
10397
|
+
const props = [propBinding.property];
|
10398
|
+
let curBinding = propBinding;
|
10399
|
+
while (inputBinding !== (curBinding = curBinding.upstreamAlias)) {
|
10400
|
+
props.push(curBinding.property);
|
10401
|
+
}
|
10402
|
+
for (let i = props.length; i--; ) {
|
10403
|
+
const nestedExpr = curExpr.known?.[props[i]];
|
10404
|
+
if (nestedExpr) {
|
10405
|
+
curExpr = nestedExpr;
|
10406
|
+
} else {
|
10407
|
+
break;
|
10408
|
+
}
|
10409
|
+
}
|
10410
|
+
}
|
10411
|
+
return curExpr.value;
|
10412
|
+
}
|
9925
10413
|
}
|
9926
10414
|
function isCircularRequest(file, request) {
|
9927
10415
|
const { filename } = file.opts;
|
@@ -9948,42 +10436,33 @@ function always() {
|
|
9948
10436
|
|
9949
10437
|
// src/translator/visitors/tag/dynamic-tag.ts
|
9950
10438
|
var import_compiler57 = require("@marko/compiler");
|
9951
|
-
var
|
10439
|
+
var import_babel_utils48 = require("@marko/compiler/babel-utils");
|
9952
10440
|
var kDOMBinding3 = Symbol("dynamic tag dom binding");
|
9953
10441
|
var kChildOffsetScopeBinding2 = Symbol("custom tag scope offset");
|
9954
10442
|
var dynamic_tag_default = {
|
9955
10443
|
analyze: {
|
9956
10444
|
enter(tag) {
|
9957
|
-
(0,
|
10445
|
+
(0, import_babel_utils48.assertAttributesOrArgs)(tag);
|
9958
10446
|
analyzeAttributeTags(tag);
|
9959
10447
|
const tagSection = getOrCreateSection(tag);
|
9960
|
-
const tagExtra = tag.node
|
10448
|
+
const tagExtra = mergeReferences(tagSection, tag.node, [
|
10449
|
+
tag.node.name,
|
10450
|
+
...getAllTagReferenceNodes(tag.node)
|
10451
|
+
]);
|
9961
10452
|
const tagBody = tag.get("body");
|
9962
10453
|
const isClassAPI = tagExtra.featureType === "class";
|
9963
10454
|
const hasVar = !!tag.node.var;
|
9964
10455
|
const nodeBinding = tagExtra[kDOMBinding3] = createBinding(
|
9965
10456
|
"#text",
|
9966
10457
|
0 /* dom */,
|
9967
|
-
tagSection
|
9968
|
-
void 0,
|
9969
|
-
tagExtra
|
10458
|
+
tagSection
|
9970
10459
|
);
|
9971
10460
|
if (hasVar) {
|
9972
10461
|
trackVarReferences(tag, 4 /* derived */);
|
9973
|
-
tag.node.var.extra.binding.scopeOffset = tagExtra[kChildOffsetScopeBinding2] = createBinding(
|
9974
|
-
"#scopeOffset",
|
9975
|
-
0 /* dom */,
|
9976
|
-
tagSection,
|
9977
|
-
void 0,
|
9978
|
-
tagExtra
|
9979
|
-
);
|
10462
|
+
tag.node.var.extra.binding.scopeOffset = tagExtra[kChildOffsetScopeBinding2] = createBinding("#scopeOffset", 0 /* dom */, tagSection);
|
9980
10463
|
}
|
9981
10464
|
startSection(tagBody);
|
9982
10465
|
trackParamsReferences(tagBody, 3 /* param */);
|
9983
|
-
mergeReferences(tagSection, tag.node, [
|
9984
|
-
tag.node.name,
|
9985
|
-
...getAllTagReferenceNodes(tag.node)
|
9986
|
-
]);
|
9987
10466
|
addBindingSerializeReasonExpr(
|
9988
10467
|
tagSection,
|
9989
10468
|
nodeBinding,
|
@@ -10010,7 +10489,7 @@ var dynamic_tag_default = {
|
|
10010
10489
|
const isClassAPI = tagExtra.featureType === "class";
|
10011
10490
|
let tagExpression = node.name;
|
10012
10491
|
if (import_compiler57.types.isStringLiteral(tagExpression)) {
|
10013
|
-
tagExpression = (0,
|
10492
|
+
tagExpression = (0, import_babel_utils48.importDefault)(
|
10014
10493
|
tag.hub.file,
|
10015
10494
|
getTagRelativePath(tag),
|
10016
10495
|
tagExpression.value
|
@@ -10018,15 +10497,15 @@ var dynamic_tag_default = {
|
|
10018
10497
|
}
|
10019
10498
|
if (isClassAPI) {
|
10020
10499
|
if (isOutputHTML()) {
|
10021
|
-
(0,
|
10500
|
+
(0, import_babel_utils48.getProgram)().node.body.push(
|
10022
10501
|
import_compiler57.types.markoScriptlet(
|
10023
10502
|
[
|
10024
10503
|
import_compiler57.types.expressionStatement(
|
10025
10504
|
import_compiler57.types.callExpression(
|
10026
|
-
(0,
|
10505
|
+
(0, import_babel_utils48.importNamed)(tag.hub.file, getCompatRuntimeFile(), "s"),
|
10027
10506
|
[
|
10028
10507
|
import_compiler57.types.identifier(tagExpression.name),
|
10029
|
-
import_compiler57.types.stringLiteral((0,
|
10508
|
+
import_compiler57.types.stringLiteral((0, import_babel_utils48.loadFileForTag)(tag).metadata.marko.id)
|
10030
10509
|
]
|
10031
10510
|
)
|
10032
10511
|
)
|
@@ -10035,11 +10514,11 @@ var dynamic_tag_default = {
|
|
10035
10514
|
)
|
10036
10515
|
);
|
10037
10516
|
} else {
|
10038
|
-
(0,
|
10517
|
+
(0, import_babel_utils48.getProgram)().node.body.push(
|
10039
10518
|
import_compiler57.types.expressionStatement(
|
10040
10519
|
callRuntime(
|
10041
10520
|
"register",
|
10042
|
-
import_compiler57.types.stringLiteral((0,
|
10521
|
+
import_compiler57.types.stringLiteral((0, import_babel_utils48.loadFileForTag)(tag).metadata.marko.id),
|
10043
10522
|
import_compiler57.types.identifier(tagExpression.name)
|
10044
10523
|
)
|
10045
10524
|
)
|
@@ -10084,7 +10563,7 @@ var dynamic_tag_default = {
|
|
10084
10563
|
import_compiler57.types.arrayExpression(args),
|
10085
10564
|
import_compiler57.types.numericLiteral(0),
|
10086
10565
|
import_compiler57.types.numericLiteral(1),
|
10087
|
-
serializeReason
|
10566
|
+
getSerializeGuard(serializeReason)
|
10088
10567
|
) : callRuntime(
|
10089
10568
|
"dynamicTag",
|
10090
10569
|
getScopeIdIdentifier(tagSection),
|
@@ -10093,15 +10572,17 @@ var dynamic_tag_default = {
|
|
10093
10572
|
args[0],
|
10094
10573
|
args[1] || (serializeReason ? import_compiler57.types.numericLiteral(0) : void 0),
|
10095
10574
|
serializeReason ? import_compiler57.types.numericLiteral(0) : void 0,
|
10096
|
-
serializeReason
|
10575
|
+
getSerializeGuard(serializeReason)
|
10097
10576
|
);
|
10098
10577
|
if (node.var) {
|
10099
|
-
const dynamicScopeIdentifier = generateUidIdentifier(
|
10578
|
+
const dynamicScopeIdentifier = generateUidIdentifier(
|
10579
|
+
tag.get("name").toString() + "_scope"
|
10580
|
+
);
|
10100
10581
|
statements.push(
|
10101
10582
|
import_compiler57.types.variableDeclaration("const", [
|
10102
10583
|
import_compiler57.types.variableDeclarator(
|
10103
10584
|
dynamicScopeIdentifier,
|
10104
|
-
callRuntime("
|
10585
|
+
callRuntime("peekNextScopeId")
|
10105
10586
|
)
|
10106
10587
|
])
|
10107
10588
|
);
|
@@ -10219,7 +10700,7 @@ var tag_default = {
|
|
10219
10700
|
},
|
10220
10701
|
analyze: {
|
10221
10702
|
enter(tag) {
|
10222
|
-
const tagDef = (0,
|
10703
|
+
const tagDef = (0, import_babel_utils49.getTagDef)(tag);
|
10223
10704
|
const type = analyzeTagNameType(tag);
|
10224
10705
|
const hook = tagDef?.analyzer?.hook;
|
10225
10706
|
if (hook) {
|
@@ -10243,7 +10724,7 @@ var tag_default = {
|
|
10243
10724
|
}
|
10244
10725
|
},
|
10245
10726
|
exit(tag) {
|
10246
|
-
const hook = (0,
|
10727
|
+
const hook = (0, import_babel_utils49.getTagDef)(tag)?.analyzer?.hook;
|
10247
10728
|
if (hook) {
|
10248
10729
|
exit(hook, tag);
|
10249
10730
|
return;
|
@@ -10252,7 +10733,7 @@ var tag_default = {
|
|
10252
10733
|
},
|
10253
10734
|
translate: {
|
10254
10735
|
enter(tag) {
|
10255
|
-
const tagDef = (0,
|
10736
|
+
const tagDef = (0, import_babel_utils49.getTagDef)(tag);
|
10256
10737
|
const extra = tag.node.extra;
|
10257
10738
|
if (tagDef?.translator) {
|
10258
10739
|
if (tagDef.translator.path) {
|
@@ -10269,7 +10750,7 @@ var tag_default = {
|
|
10269
10750
|
);
|
10270
10751
|
}
|
10271
10752
|
if (attr2.node.modifier) {
|
10272
|
-
if ((0,
|
10753
|
+
if ((0, import_babel_utils49.isNativeTag)(attr2.parentPath)) {
|
10273
10754
|
attr2.node.name += `:${attr2.node.modifier}`;
|
10274
10755
|
} else {
|
10275
10756
|
throw attr2.buildCodeFrameError(
|
@@ -10305,7 +10786,7 @@ var tag_default = {
|
|
10305
10786
|
}
|
10306
10787
|
},
|
10307
10788
|
exit(tag) {
|
10308
|
-
const translator = (0,
|
10789
|
+
const translator = (0, import_babel_utils49.getTagDef)(tag)?.translator;
|
10309
10790
|
if (translator) {
|
10310
10791
|
exit(translator.hook, tag);
|
10311
10792
|
return;
|