marko 6.0.93 → 6.0.95
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/translator/index.js
CHANGED
|
@@ -4207,7 +4207,7 @@ function replaceAssignedNode(node) {
|
|
|
4207
4207
|
return getBuildAssignment(extra)?.(
|
|
4208
4208
|
extra.section,
|
|
4209
4209
|
bindingUtil.has(
|
|
4210
|
-
extra.
|
|
4210
|
+
extra.assignmentFunction.referencedBindingsInFunction,
|
|
4211
4211
|
extra.assignment
|
|
4212
4212
|
) ? node : node.operator === "=" ? node.right : import_compiler22.types.binaryExpression(
|
|
4213
4213
|
node.operator.slice(
|
|
@@ -4237,7 +4237,7 @@ function replaceAssignedNode(node) {
|
|
|
4237
4237
|
);
|
|
4238
4238
|
if (builtAssignment) {
|
|
4239
4239
|
if (!bindingUtil.has(
|
|
4240
|
-
extra.
|
|
4240
|
+
extra.assignmentFunction.referencedBindingsInFunction,
|
|
4241
4241
|
extra.assignment
|
|
4242
4242
|
)) {
|
|
4243
4243
|
id.name = uid;
|
|
@@ -7992,12 +7992,24 @@ function trackReferencesForBinding(babelBinding, binding) {
|
|
|
7992
7992
|
}
|
|
7993
7993
|
function trackAssignment(assignment, binding) {
|
|
7994
7994
|
const fnRoot = getFnRoot(assignment);
|
|
7995
|
-
const fnExtra = fnRoot && (fnRoot.node.extra ??= {});
|
|
7996
7995
|
const section = getOrCreateSection(assignment);
|
|
7997
7996
|
setReferencesScope(assignment);
|
|
7998
7997
|
forEachIdentifierPath(assignment, (id) => {
|
|
7999
7998
|
if (id.node.name === binding.name) {
|
|
8000
|
-
|
|
7999
|
+
if (!fnRoot) {
|
|
8000
|
+
throw id.buildCodeFrameError(
|
|
8001
|
+
`Assignments to a tag ${binding.type === 3 /* param */ ? "parameter" : "variable"} must be within a script or function.`
|
|
8002
|
+
);
|
|
8003
|
+
}
|
|
8004
|
+
const fnExtra = fnRoot && (fnRoot.node.extra ??= {});
|
|
8005
|
+
const idExtra = id.node.extra ??= {};
|
|
8006
|
+
idExtra.assignment = binding;
|
|
8007
|
+
idExtra.assignmentFunction = fnExtra;
|
|
8008
|
+
fnExtra.section = idExtra.section = section;
|
|
8009
|
+
binding.assignmentSections = sectionUtil.add(
|
|
8010
|
+
binding.assignmentSections,
|
|
8011
|
+
section
|
|
8012
|
+
);
|
|
8001
8013
|
if (binding.upstreamAlias && binding.property !== void 0) {
|
|
8002
8014
|
const changePropName = binding.property + "Change";
|
|
8003
8015
|
const changeBinding = binding.upstreamAlias.propertyAliases.get(changePropName) || createBinding(
|
|
@@ -8010,16 +8022,9 @@ function trackAssignment(assignment, binding) {
|
|
|
8010
8022
|
id.node.loc,
|
|
8011
8023
|
true
|
|
8012
8024
|
);
|
|
8013
|
-
|
|
8025
|
+
idExtra.assignmentTo = changeBinding;
|
|
8014
8026
|
addReadToExpression(id, changeBinding);
|
|
8015
8027
|
}
|
|
8016
|
-
binding.assignmentSections = sectionUtil.add(
|
|
8017
|
-
binding.assignmentSections,
|
|
8018
|
-
section
|
|
8019
|
-
);
|
|
8020
|
-
extra.assignment = binding;
|
|
8021
|
-
extra.section = section;
|
|
8022
|
-
extra.fnExtra = fnExtra;
|
|
8023
8028
|
}
|
|
8024
8029
|
});
|
|
8025
8030
|
}
|
|
@@ -8199,12 +8204,13 @@ function compareIntersections(a, b) {
|
|
|
8199
8204
|
function finalizeReferences() {
|
|
8200
8205
|
const bindings = getBindings();
|
|
8201
8206
|
const readsByExpression = getReadsByExpression();
|
|
8202
|
-
const
|
|
8207
|
+
const fnReadsByExpression = getFunctionReadsByExpression();
|
|
8203
8208
|
const mergedReferences = getMergedReferences();
|
|
8204
8209
|
if (mergedReferences.size) {
|
|
8205
8210
|
for (const [target, nodes] of mergedReferences) {
|
|
8206
8211
|
const targetExtra = target.extra;
|
|
8207
8212
|
let reads = readsByExpression.get(targetExtra);
|
|
8213
|
+
let exprFnReads = fnReadsByExpression.get(targetExtra);
|
|
8208
8214
|
let { isEffect } = targetExtra;
|
|
8209
8215
|
for (const node of nodes) {
|
|
8210
8216
|
const extra = node?.extra;
|
|
@@ -8212,11 +8218,24 @@ function finalizeReferences() {
|
|
|
8212
8218
|
setCanonicalExtra(extra, targetExtra);
|
|
8213
8219
|
if (isReferencedExtra(extra)) {
|
|
8214
8220
|
const additionalReads = readsByExpression.get(extra);
|
|
8221
|
+
const additionalExprFnReads = fnReadsByExpression.get(extra);
|
|
8215
8222
|
isEffect ||= extra.isEffect;
|
|
8216
8223
|
if (additionalReads) {
|
|
8217
8224
|
reads = concat(reads, additionalReads);
|
|
8218
8225
|
readsByExpression.delete(extra);
|
|
8219
8226
|
}
|
|
8227
|
+
if (additionalExprFnReads) {
|
|
8228
|
+
if (exprFnReads) {
|
|
8229
|
+
for (const [key, value] of additionalExprFnReads) {
|
|
8230
|
+
exprFnReads.set(key, value);
|
|
8231
|
+
}
|
|
8232
|
+
} else {
|
|
8233
|
+
fnReadsByExpression.set(
|
|
8234
|
+
targetExtra,
|
|
8235
|
+
exprFnReads = new Map(additionalExprFnReads)
|
|
8236
|
+
);
|
|
8237
|
+
}
|
|
8238
|
+
}
|
|
8220
8239
|
}
|
|
8221
8240
|
}
|
|
8222
8241
|
}
|
|
@@ -8227,14 +8246,25 @@ function finalizeReferences() {
|
|
|
8227
8246
|
const intersectionsBySection = /* @__PURE__ */ new Map();
|
|
8228
8247
|
for (const [expr, reads] of readsByExpression) {
|
|
8229
8248
|
if (isReferencedExtra(expr)) {
|
|
8230
|
-
expr.referencedBindings = resolveReferencedBindings(
|
|
8231
|
-
|
|
8232
|
-
|
|
8233
|
-
|
|
8234
|
-
|
|
8235
|
-
|
|
8236
|
-
|
|
8237
|
-
|
|
8249
|
+
const referencedBindings = expr.referencedBindings = resolveReferencedBindings(expr, reads, intersectionsBySection);
|
|
8250
|
+
if (referencedBindings) {
|
|
8251
|
+
forEach(referencedBindings, (binding) => {
|
|
8252
|
+
binding.downstreamExpressions.add(expr);
|
|
8253
|
+
});
|
|
8254
|
+
const exprFnReads = fnReadsByExpression.get(expr);
|
|
8255
|
+
if (exprFnReads) {
|
|
8256
|
+
for (const [fn, fnReads] of exprFnReads) {
|
|
8257
|
+
if (fn === expr) {
|
|
8258
|
+
expr.referencedBindingsInFunction = referencedBindings;
|
|
8259
|
+
} else {
|
|
8260
|
+
fn.referencedBindingsInFunction = resolveReferencedBindingsInFunction(
|
|
8261
|
+
referencedBindings,
|
|
8262
|
+
fnReads
|
|
8263
|
+
);
|
|
8264
|
+
}
|
|
8265
|
+
}
|
|
8266
|
+
}
|
|
8267
|
+
}
|
|
8238
8268
|
}
|
|
8239
8269
|
}
|
|
8240
8270
|
for (const binding of bindings) {
|
|
@@ -8404,18 +8434,29 @@ function finalizeReferences() {
|
|
|
8404
8434
|
});
|
|
8405
8435
|
});
|
|
8406
8436
|
finalizeFunctionRegistry();
|
|
8407
|
-
|
|
8408
|
-
|
|
8409
|
-
|
|
8410
|
-
|
|
8411
|
-
|
|
8412
|
-
|
|
8413
|
-
|
|
8414
|
-
|
|
8415
|
-
|
|
8416
|
-
|
|
8417
|
-
|
|
8418
|
-
|
|
8437
|
+
const referencedExprs = /* @__PURE__ */ new Set();
|
|
8438
|
+
for (const binding of bindings) {
|
|
8439
|
+
for (const expr of binding.downstreamExpressions) {
|
|
8440
|
+
referencedExprs.add(expr);
|
|
8441
|
+
}
|
|
8442
|
+
}
|
|
8443
|
+
for (const expr of referencedExprs) {
|
|
8444
|
+
const exprFnReads = fnReadsByExpression.get(expr);
|
|
8445
|
+
if (exprFnReads) {
|
|
8446
|
+
for (const fn of exprFnReads.keys()) {
|
|
8447
|
+
if (fn.registerReason) {
|
|
8448
|
+
forEach(fn.referencedBindingsInFunction, (binding) => {
|
|
8449
|
+
addSerializeReason(binding.section, fn.registerReason, binding);
|
|
8450
|
+
if (binding.section !== fn.section) {
|
|
8451
|
+
addOwnerSerializeReason(
|
|
8452
|
+
fn.section,
|
|
8453
|
+
binding.section,
|
|
8454
|
+
fn.registerReason
|
|
8455
|
+
);
|
|
8456
|
+
}
|
|
8457
|
+
});
|
|
8458
|
+
}
|
|
8459
|
+
}
|
|
8419
8460
|
}
|
|
8420
8461
|
}
|
|
8421
8462
|
forEachSectionReverse((section) => {
|
|
@@ -8456,7 +8497,7 @@ function finalizeReferences() {
|
|
|
8456
8497
|
}
|
|
8457
8498
|
mergedReferences.clear();
|
|
8458
8499
|
readsByExpression.clear();
|
|
8459
|
-
|
|
8500
|
+
fnReadsByExpression.clear();
|
|
8460
8501
|
}
|
|
8461
8502
|
function getMaxOwnSourceOffset(intersection, section) {
|
|
8462
8503
|
let scopeOffset;
|
|
@@ -8610,7 +8651,7 @@ var propsUtil = new Sorted(function compareProps(a, b) {
|
|
|
8610
8651
|
var [getReadsByExpression] = createProgramState(
|
|
8611
8652
|
() => /* @__PURE__ */ new Map()
|
|
8612
8653
|
);
|
|
8613
|
-
var [
|
|
8654
|
+
var [getFunctionReadsByExpression] = createProgramState(
|
|
8614
8655
|
() => /* @__PURE__ */ new Map()
|
|
8615
8656
|
);
|
|
8616
8657
|
function addReadToExpression(root, binding) {
|
|
@@ -8626,11 +8667,14 @@ function addReadToExpression(root, binding) {
|
|
|
8626
8667
|
push(readsByExpression.get(exprExtra), read)
|
|
8627
8668
|
);
|
|
8628
8669
|
if (fnRoot) {
|
|
8629
|
-
const
|
|
8670
|
+
const fnReadsByExpr = getFunctionReadsByExpression();
|
|
8671
|
+
let exprFnReads = fnReadsByExpr.get(exprExtra);
|
|
8672
|
+
if (!exprFnReads) {
|
|
8673
|
+
fnReadsByExpr.set(exprExtra, exprFnReads = /* @__PURE__ */ new Map());
|
|
8674
|
+
}
|
|
8630
8675
|
const fnExtra = fnRoot.node.extra ??= {};
|
|
8631
|
-
exprExtra.fnExtra = fnExtra;
|
|
8632
8676
|
fnExtra.section = section;
|
|
8633
|
-
|
|
8677
|
+
exprFnReads.set(fnExtra, push(exprFnReads.get(fnExtra), read));
|
|
8634
8678
|
}
|
|
8635
8679
|
}
|
|
8636
8680
|
function dropReferences(node) {
|
|
@@ -8802,6 +8846,45 @@ function pruneBinding(bindings, binding) {
|
|
|
8802
8846
|
}
|
|
8803
8847
|
return shouldPrune;
|
|
8804
8848
|
}
|
|
8849
|
+
function resolveReferencedBindingsInFunction(refs, reads) {
|
|
8850
|
+
if (reads) {
|
|
8851
|
+
if (Array.isArray(reads)) {
|
|
8852
|
+
let referencedBindings;
|
|
8853
|
+
for (const read of reads) {
|
|
8854
|
+
referencedBindings = bindingUtil.add(
|
|
8855
|
+
referencedBindings,
|
|
8856
|
+
findClosestReference(read.binding, refs)
|
|
8857
|
+
);
|
|
8858
|
+
}
|
|
8859
|
+
return referencedBindings;
|
|
8860
|
+
} else {
|
|
8861
|
+
return findClosestReference(reads.binding, refs);
|
|
8862
|
+
}
|
|
8863
|
+
}
|
|
8864
|
+
}
|
|
8865
|
+
function findClosestReference(from, refs) {
|
|
8866
|
+
if (Array.isArray(refs)) {
|
|
8867
|
+
if (bindingUtil.has(refs, from)) {
|
|
8868
|
+
return from;
|
|
8869
|
+
}
|
|
8870
|
+
for (const ref of refs) {
|
|
8871
|
+
const closest = findClosestUpstream(from, ref);
|
|
8872
|
+
if (closest) return closest;
|
|
8873
|
+
}
|
|
8874
|
+
} else {
|
|
8875
|
+
const closest = findClosestUpstream(from, refs);
|
|
8876
|
+
if (closest) return closest;
|
|
8877
|
+
}
|
|
8878
|
+
throw new Error("Unable to resolve closest binding reference.");
|
|
8879
|
+
}
|
|
8880
|
+
function findClosestUpstream(from, to) {
|
|
8881
|
+
let closest = from;
|
|
8882
|
+
do {
|
|
8883
|
+
if (closest === to) {
|
|
8884
|
+
return closest;
|
|
8885
|
+
}
|
|
8886
|
+
} while (closest = closest.upstreamAlias);
|
|
8887
|
+
}
|
|
8805
8888
|
function resolveReferencedBindings(expr, reads, intersectionsBySection) {
|
|
8806
8889
|
let referencedBindings;
|
|
8807
8890
|
if (Array.isArray(reads)) {
|
|
@@ -49,9 +49,8 @@ export interface ParamBinding extends Binding {
|
|
|
49
49
|
}
|
|
50
50
|
export type ReferencedBindings = Opt<Binding>;
|
|
51
51
|
export type Intersection = Many<Binding>;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
};
|
|
52
|
+
interface ReferencedFunctionExtra extends t.FunctionExtra, ReferencedExtra {
|
|
53
|
+
}
|
|
55
54
|
declare module "@marko/compiler/dist/types" {
|
|
56
55
|
interface NodeExtra {
|
|
57
56
|
section?: Section;
|
|
@@ -69,7 +68,11 @@ declare module "@marko/compiler/dist/types" {
|
|
|
69
68
|
[kIsInvoked]?: true;
|
|
70
69
|
}
|
|
71
70
|
interface FunctionExtra {
|
|
71
|
+
referencesScope?: boolean;
|
|
72
72
|
referencedBindingsInFunction?: ReferencedBindings;
|
|
73
|
+
name?: string;
|
|
74
|
+
registerId?: string;
|
|
75
|
+
registerReason?: SerializeReason;
|
|
73
76
|
}
|
|
74
77
|
interface ArrowFunctionExpressionExtra extends FunctionExtra {
|
|
75
78
|
}
|
|
@@ -112,19 +115,17 @@ export declare function getSectionInstancesAccessorLiteral(section: Section): t.
|
|
|
112
115
|
export declare function getReadReplacement(node: t.Identifier | t.MemberExpression | t.OptionalMemberExpression): t.Node | undefined;
|
|
113
116
|
export interface ReferencedExtra extends t.NodeExtra {
|
|
114
117
|
section: Section;
|
|
115
|
-
fnExtra?: FnExtra;
|
|
116
118
|
}
|
|
117
119
|
export declare function isReferencedExtra(extra: t.NodeExtra | undefined): extra is ReferencedExtra;
|
|
118
120
|
export interface AssignedBindingExtra extends ReferencedExtra {
|
|
119
121
|
assignment: Binding;
|
|
122
|
+
assignmentFunction: ReferencedFunctionExtra;
|
|
120
123
|
}
|
|
121
124
|
export declare function isAssignedBindingExtra(extra: t.NodeExtra | undefined): extra is AssignedBindingExtra;
|
|
122
|
-
export interface RegisteredFnExtra extends ReferencedExtra {
|
|
125
|
+
export interface RegisteredFnExtra extends ReferencedExtra, t.FunctionExtra {
|
|
126
|
+
name: string;
|
|
123
127
|
registerId: string;
|
|
124
128
|
registerReason: SerializeReason;
|
|
125
|
-
name: string;
|
|
126
|
-
referencesScope?: boolean;
|
|
127
|
-
referencedBindingsInFunction: ReferencedBindings;
|
|
128
129
|
}
|
|
129
130
|
export declare function isRegisteredFnExtra(extra: t.NodeExtra | undefined): extra is RegisteredFnExtra;
|
|
130
131
|
export declare function getCanonicalExtra<T extends t.NodeExtra>(extra: T): T;
|
|
@@ -1,22 +1,4 @@
|
|
|
1
1
|
import { types as t } from "@marko/compiler";
|
|
2
|
-
import { type SerializeReason } from "../util/serialize-reasons";
|
|
3
|
-
declare module "@marko/compiler/dist/types" {
|
|
4
|
-
interface FunctionDeclarationExtra {
|
|
5
|
-
registerId?: string;
|
|
6
|
-
registerReason?: SerializeReason;
|
|
7
|
-
name?: string;
|
|
8
|
-
}
|
|
9
|
-
interface FunctionExpressionExtra {
|
|
10
|
-
registerId?: string;
|
|
11
|
-
registerReason?: SerializeReason;
|
|
12
|
-
name?: string;
|
|
13
|
-
}
|
|
14
|
-
interface ArrowFunctionExpressionExtra {
|
|
15
|
-
registerId?: string;
|
|
16
|
-
registerReason?: SerializeReason;
|
|
17
|
-
name?: string;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
2
|
declare const _default: {
|
|
21
3
|
analyze(this: unknown, fn: t.NodePath<t.Function>): void;
|
|
22
4
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "marko",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.95",
|
|
4
4
|
"description": "Optimized runtime for Marko templates.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"api",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"build": "node -r ~ts ./scripts/bundle.ts"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@marko/compiler": "^5.39.
|
|
51
|
+
"@marko/compiler": "^5.39.41",
|
|
52
52
|
"csstype": "^3.1.3",
|
|
53
53
|
"magic-string": "^0.30.17"
|
|
54
54
|
},
|