@neocompose/cli 0.24.6 → 0.24.7
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.24.7] - 2026-08-08
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Lower named delegate method groups such as `this.SelectTorso` to the P60
|
|
8
|
+
member-target wire form, then bind their receiver to each constructed
|
|
9
|
+
instance. Constructor-pane previews now retain that binding when replacing
|
|
10
|
+
the evaluator's provisional root, so animation tracks resolve against the
|
|
11
|
+
ephemeral preview graph instead of disappearing.
|
|
12
|
+
- Reconstruct stored inline-closure `this` from the nearest compatible lexical
|
|
13
|
+
owner in nested declaration graphs, keeping closures distinct from named
|
|
14
|
+
method groups as required by P60.
|
|
15
|
+
|
|
3
16
|
## [0.24.6] - 2026-08-08
|
|
4
17
|
|
|
5
18
|
### Fixed
|
package/dist/neo.mjs
CHANGED
|
@@ -10058,7 +10058,7 @@ var init_strict_resolver = __esm({
|
|
|
10058
10058
|
}
|
|
10059
10059
|
return void 0;
|
|
10060
10060
|
}
|
|
10061
|
-
resolveDelegateMethodGroup(expression, expected, scope) {
|
|
10061
|
+
resolveDelegateMethodGroup(expression, expected, scope, options = {}) {
|
|
10062
10062
|
let symbol;
|
|
10063
10063
|
let receiver = null;
|
|
10064
10064
|
let owner;
|
|
@@ -10133,29 +10133,17 @@ var init_strict_resolver = __esm({
|
|
|
10133
10133
|
expression.pos
|
|
10134
10134
|
);
|
|
10135
10135
|
}
|
|
10136
|
-
|
|
10137
|
-
|
|
10136
|
+
if (receiver?.kind === "instance" && options.allowUnboundInstanceTarget !== true && (receiver.expression.pointer.type !== "variable" /* Variable */ || receiver.expression.pointer.variableId !== this.thisVariable.id)) {
|
|
10137
|
+
throw new CompileError(
|
|
10138
|
+
"NeoDelegate method groups currently require the current 'this' receiver.",
|
|
10139
|
+
expression.pos
|
|
10140
|
+
);
|
|
10141
|
+
}
|
|
10142
|
+
return literal(
|
|
10143
|
+
expected,
|
|
10144
|
+
{ memberId: symbol.id, valueId: null },
|
|
10145
|
+
this.project
|
|
10138
10146
|
);
|
|
10139
|
-
const call = {
|
|
10140
|
-
type: "callFunction" /* CallFunction */,
|
|
10141
|
-
memberId: symbol.id,
|
|
10142
|
-
receiver: receiver?.kind === "static" ? { kind: "static", memberId: receiver.memberId } : {
|
|
10143
|
-
kind: "instance",
|
|
10144
|
-
pointer: receiver?.expression.pointer ?? this.thisVariable.pointer
|
|
10145
|
-
},
|
|
10146
|
-
args: parameters.map((parameter4) => ({
|
|
10147
|
-
type: "variable" /* Variable */,
|
|
10148
|
-
variableId: parameter4.id
|
|
10149
|
-
})),
|
|
10150
|
-
callSiteId: this.nextCallSite(expression.pos)
|
|
10151
|
-
};
|
|
10152
|
-
const action = {
|
|
10153
|
-
compilerRevision: NEOSCRIPT_COMPILER_REVISION,
|
|
10154
|
-
parameters: [this.thisVariable, this.rootVariable, ...parameters],
|
|
10155
|
-
instructions: expectedVoid ? [{ type: "functionCall" /* FunctionCall */, call }] : [{ type: "return" /* Return */, pointer: call }],
|
|
10156
|
-
typeInfo: expectedVoid ? toWireType({ kind: "primitive", name: "null" }, this.project) : toWireType(expected.returnType, this.project)
|
|
10157
|
-
};
|
|
10158
|
-
return literal(expected, { action }, this.project);
|
|
10159
10147
|
}
|
|
10160
10148
|
/** Derives the exact expected delegate signature for a test mock target. */
|
|
10161
10149
|
inferDelegateMethodGroupType(expression, scope) {
|
|
@@ -11830,7 +11818,10 @@ var init_strict_resolver = __esm({
|
|
|
11830
11818
|
const target = this.resolveDelegateMethodGroup(
|
|
11831
11819
|
targetAst,
|
|
11832
11820
|
delegateType,
|
|
11833
|
-
scope
|
|
11821
|
+
scope,
|
|
11822
|
+
// Mock targets are member-identity metadata. They are never invoked as
|
|
11823
|
+
// delegates, and mockHandle.on(receiver) owns receiver scoping.
|
|
11824
|
+
{ allowUnboundInstanceTarget: true }
|
|
11834
11825
|
);
|
|
11835
11826
|
if (target === null) {
|
|
11836
11827
|
throw new CompileError(
|
|
@@ -42238,6 +42229,7 @@ function evaluateLiteralContainer(args) {
|
|
|
42238
42229
|
}
|
|
42239
42230
|
return {
|
|
42240
42231
|
literal: literal2,
|
|
42232
|
+
...evaluated.provisionalRootId === void 0 ? {} : { provisionalRootId: evaluated.provisionalRootId },
|
|
42241
42233
|
...evaluated.existingValueRow === void 0 ? {} : { existingValueRow: evaluated.existingValueRow }
|
|
42242
42234
|
};
|
|
42243
42235
|
}
|
|
@@ -42259,6 +42251,13 @@ function buildDefaultMemberValue(args) {
|
|
|
42259
42251
|
return evaluated.existingValueRow;
|
|
42260
42252
|
}
|
|
42261
42253
|
const value2 = buildNewValue(args.projectId, evaluated.literal);
|
|
42254
|
+
if (evaluated.provisionalRootId !== void 0) {
|
|
42255
|
+
retargetDelegateReceiverValueIds(
|
|
42256
|
+
[value2, ...args.createdValues],
|
|
42257
|
+
evaluated.provisionalRootId,
|
|
42258
|
+
value2.id
|
|
42259
|
+
);
|
|
42260
|
+
}
|
|
42262
42261
|
args.createdValues.push(value2);
|
|
42263
42262
|
recordStorageKeyDeclaration(args.storageKeyDeclarations, value2.id, member);
|
|
42264
42263
|
return value2;
|
|
@@ -42465,6 +42464,28 @@ function buildNewValue(projectId, body) {
|
|
|
42465
42464
|
};
|
|
42466
42465
|
return props;
|
|
42467
42466
|
}
|
|
42467
|
+
function retargetDelegateReceiverValueIds(rows, fromValueId, toValueId) {
|
|
42468
|
+
const visited = /* @__PURE__ */ new WeakSet();
|
|
42469
|
+
const visit = (value) => {
|
|
42470
|
+
if (typeof value !== "object" || value === null) return;
|
|
42471
|
+
if (visited.has(value)) return;
|
|
42472
|
+
visited.add(value);
|
|
42473
|
+
if (isMemberDelegateTarget(value)) {
|
|
42474
|
+
if (value.valueId === fromValueId) value.valueId = toValueId;
|
|
42475
|
+
return;
|
|
42476
|
+
}
|
|
42477
|
+
if (Array.isArray(value)) {
|
|
42478
|
+
for (const entry of value) visit(entry);
|
|
42479
|
+
return;
|
|
42480
|
+
}
|
|
42481
|
+
for (const entry of Object.values(value)) visit(entry);
|
|
42482
|
+
};
|
|
42483
|
+
for (const row of rows) {
|
|
42484
|
+
if (!isLiteralValueContent(row)) continue;
|
|
42485
|
+
visit(row.value);
|
|
42486
|
+
visit(row.constructorArgs);
|
|
42487
|
+
}
|
|
42488
|
+
}
|
|
42468
42489
|
function cloneDefaultClassRecord(args) {
|
|
42469
42490
|
const sourceValue = args.sourceBody?.value;
|
|
42470
42491
|
if (!isStringRecord(sourceValue)) return {};
|
|
@@ -42601,6 +42622,13 @@ function cloneDefaultValueForMember(args) {
|
|
|
42601
42622
|
return evaluated.existingValueRow;
|
|
42602
42623
|
}
|
|
42603
42624
|
const evaluatedRow = buildNewValue(args.projectId, evaluated.literal);
|
|
42625
|
+
if (evaluated.provisionalRootId !== void 0) {
|
|
42626
|
+
retargetDelegateReceiverValueIds(
|
|
42627
|
+
[evaluatedRow, ...args.createdValues],
|
|
42628
|
+
evaluated.provisionalRootId,
|
|
42629
|
+
evaluatedRow.id
|
|
42630
|
+
);
|
|
42631
|
+
}
|
|
42604
42632
|
evaluatedRow.sourceValueId = sourceValue.sourceValueId ?? args.sourceValueId;
|
|
42605
42633
|
args.createdValues.push(evaluatedRow);
|
|
42606
42634
|
recordStorageKeyDeclaration(
|
|
@@ -58794,10 +58822,16 @@ function evalPointer(pointer, scope, ctx) {
|
|
|
58794
58822
|
if (isNSDelegateClosureValue(value)) {
|
|
58795
58823
|
return {
|
|
58796
58824
|
...value,
|
|
58797
|
-
[DELEGATE_LEXICAL_THIS]: ctx.thisValue,
|
|
58825
|
+
...ctx.thisValue === null || ctx.thisValue === void 0 ? {} : { [DELEGATE_LEXICAL_THIS]: ctx.thisValue },
|
|
58798
58826
|
[DELEGATE_LEXICAL_ROOT]: ctx.rootValue
|
|
58799
58827
|
};
|
|
58800
58828
|
}
|
|
58829
|
+
if (isMemberDelegateTarget(value) && value.valueId === null) {
|
|
58830
|
+
const member = evalMemberById(ctx.vm, value.memberId);
|
|
58831
|
+
if (member === null || member.isStatic === true) return value;
|
|
58832
|
+
const receiver = trackedRowForValueReference(ctx.thisValue, ctx);
|
|
58833
|
+
return receiver === null ? value : { ...value, valueId: receiver.id };
|
|
58834
|
+
}
|
|
58801
58835
|
return value;
|
|
58802
58836
|
}
|
|
58803
58837
|
case "variable" /* variable */: {
|
|
@@ -59173,50 +59207,49 @@ function delegateClosureLexicalThis(closure, ctx) {
|
|
|
59173
59207
|
if (Object.prototype.hasOwnProperty.call(closure, DELEGATE_LEXICAL_THIS)) {
|
|
59174
59208
|
return closure[DELEGATE_LEXICAL_THIS];
|
|
59175
59209
|
}
|
|
59210
|
+
const lexicalThisType = closure.action.parameters[0]?.typeInfo;
|
|
59211
|
+
if (lexicalThisType === void 0 || lexicalThisType.type === NS_TYPE_UNKNOWN || lexicalThisType.type === 0 /* Null */) {
|
|
59212
|
+
return null;
|
|
59213
|
+
}
|
|
59176
59214
|
const closureRow = trackedRowForValueReference(closure, ctx);
|
|
59177
59215
|
if (closureRow === null) {
|
|
59178
59216
|
throw new NSGetterRuntimeError(
|
|
59179
59217
|
"Stored NeoDelegate closure has no resolvable value row; lexical this cannot be reconstructed from ownership."
|
|
59180
59218
|
);
|
|
59181
59219
|
}
|
|
59182
|
-
const owners =
|
|
59183
|
-
|
|
59184
|
-
|
|
59185
|
-
closureRow.id
|
|
59220
|
+
const owners = [];
|
|
59221
|
+
const indexes = evaluatorIndexes(ctx);
|
|
59222
|
+
for (const [ancestorId, distance] of evaluatorOwnershipDistances(
|
|
59223
|
+
closureRow.id,
|
|
59224
|
+
indexes
|
|
59186
59225
|
)) {
|
|
59187
|
-
|
|
59226
|
+
if (ancestorId === closureRow.id) continue;
|
|
59227
|
+
const ancestor = evalValueById(
|
|
59188
59228
|
ctx.vm,
|
|
59189
|
-
|
|
59229
|
+
ancestorId,
|
|
59190
59230
|
ctx.__runtimeSessionValues,
|
|
59191
59231
|
ctx.__valueOverlay
|
|
59192
59232
|
);
|
|
59193
|
-
if (
|
|
59194
|
-
if (typeof
|
|
59195
|
-
if (
|
|
59196
|
-
if (
|
|
59197
|
-
|
|
59198
|
-
|
|
59199
|
-
const owningMember = memberForCustomSchemaValue(classId, link.key, ctx);
|
|
59200
|
-
if (owningMember?.kind !== 25 /* NSDelegate */) continue;
|
|
59201
|
-
owners.set(parent.id, parent.value);
|
|
59233
|
+
if (ancestor === null) continue;
|
|
59234
|
+
if (typeof ancestor.value !== "object") continue;
|
|
59235
|
+
if (ancestor.value === null || Array.isArray(ancestor.value)) continue;
|
|
59236
|
+
if (!runtimeValueMatchesType(ancestor.value, lexicalThisType, ctx))
|
|
59237
|
+
continue;
|
|
59238
|
+
owners.push({ id: ancestor.id, value: ancestor.value, distance });
|
|
59202
59239
|
}
|
|
59203
|
-
if (owners.
|
|
59240
|
+
if (owners.length === 0) {
|
|
59204
59241
|
throw new NSGetterRuntimeError(
|
|
59205
59242
|
`Stored NeoDelegate closure value '${closureRow.id}' has no owning class instance; lexical this cannot be reconstructed from ownership.`
|
|
59206
59243
|
);
|
|
59207
59244
|
}
|
|
59208
|
-
|
|
59209
|
-
|
|
59210
|
-
|
|
59211
|
-
);
|
|
59212
|
-
}
|
|
59213
|
-
const owner = owners.values().next();
|
|
59214
|
-
if (owner.done) {
|
|
59245
|
+
const nearestDistance = Math.min(...owners.map((owner) => owner.distance));
|
|
59246
|
+
const nearest = owners.filter((owner) => owner.distance === nearestDistance);
|
|
59247
|
+
if (nearest.length > 1) {
|
|
59215
59248
|
throw new NSGetterRuntimeError(
|
|
59216
|
-
`Stored NeoDelegate closure value '${closureRow.id}'
|
|
59249
|
+
`Stored NeoDelegate closure value '${closureRow.id}' has multiple owning class instances (${nearest.map((owner) => owner.id).join(", ")}); lexical this is ambiguous.`
|
|
59217
59250
|
);
|
|
59218
59251
|
}
|
|
59219
|
-
return
|
|
59252
|
+
return nearest[0].value;
|
|
59220
59253
|
}
|
|
59221
59254
|
function resolveCallableSignature(memberId, memberKind, ctx) {
|
|
59222
59255
|
const cacheKey = `${memberKind}:${memberId}`;
|
|
@@ -61097,6 +61130,74 @@ function stageConstructedRows(createdValues, ctx) {
|
|
|
61097
61130
|
if (ctx.__indexes !== void 0) indexEvaluatorRow(ctx.__indexes, row);
|
|
61098
61131
|
}
|
|
61099
61132
|
}
|
|
61133
|
+
function bindConstructedDelegateTargets(rootId, ctx) {
|
|
61134
|
+
const indexes = evaluatorIndexes(ctx);
|
|
61135
|
+
const pending = [rootId];
|
|
61136
|
+
const visited = /* @__PURE__ */ new Set();
|
|
61137
|
+
while (pending.length > 0) {
|
|
61138
|
+
const rowId = pending.pop();
|
|
61139
|
+
if (rowId === void 0 || visited.has(rowId)) continue;
|
|
61140
|
+
visited.add(rowId);
|
|
61141
|
+
const row = evalValueById(
|
|
61142
|
+
ctx.vm,
|
|
61143
|
+
rowId,
|
|
61144
|
+
ctx.__runtimeSessionValues,
|
|
61145
|
+
ctx.__valueOverlay
|
|
61146
|
+
);
|
|
61147
|
+
if (row === null) continue;
|
|
61148
|
+
if (Array.isArray(row.value)) {
|
|
61149
|
+
for (const childId of row.value) {
|
|
61150
|
+
if (typeof childId === "string") pending.push(childId);
|
|
61151
|
+
}
|
|
61152
|
+
} else if (typeof row.value === "object" && row.value !== null) {
|
|
61153
|
+
for (const childId of Object.values(row.value)) {
|
|
61154
|
+
if (typeof childId === "string") pending.push(childId);
|
|
61155
|
+
}
|
|
61156
|
+
}
|
|
61157
|
+
if (!isMemberDelegateTarget(row.value) || row.value.valueId !== null) {
|
|
61158
|
+
continue;
|
|
61159
|
+
}
|
|
61160
|
+
const target = evalMemberById(ctx.vm, row.value.memberId);
|
|
61161
|
+
if (target === null || target.isStatic === true) continue;
|
|
61162
|
+
const placement = findSchemaPlacement(target.id, ctx.vm.classes);
|
|
61163
|
+
if (placement === null) {
|
|
61164
|
+
throw new NSGetterRuntimeError(
|
|
61165
|
+
`NeoDelegate method target '${target.name}' has no declaring Class placement.`
|
|
61166
|
+
);
|
|
61167
|
+
}
|
|
61168
|
+
const matches = [];
|
|
61169
|
+
for (const [ancestorId, distance] of evaluatorOwnershipDistances(
|
|
61170
|
+
row.id,
|
|
61171
|
+
indexes
|
|
61172
|
+
)) {
|
|
61173
|
+
const ancestor = evalValueById(
|
|
61174
|
+
ctx.vm,
|
|
61175
|
+
ancestorId,
|
|
61176
|
+
ctx.__runtimeSessionValues,
|
|
61177
|
+
ctx.__valueOverlay
|
|
61178
|
+
);
|
|
61179
|
+
if (ancestor === null) continue;
|
|
61180
|
+
const ancestorClassId = classIdForValueRow(ancestor, ctx);
|
|
61181
|
+
if (ancestorClassId === void 0) continue;
|
|
61182
|
+
const ownsTarget = resolveInheritanceChain(
|
|
61183
|
+
ancestorClassId,
|
|
61184
|
+
ctx.vm.classes
|
|
61185
|
+
).some((schemaClass2) => schemaClass2.id === placement.ownerClass.id);
|
|
61186
|
+
if (ownsTarget) matches.push({ id: ancestor.id, distance });
|
|
61187
|
+
}
|
|
61188
|
+
if (matches.length === 0) continue;
|
|
61189
|
+
const nearestDistance = Math.min(...matches.map((match) => match.distance));
|
|
61190
|
+
const nearest = matches.filter(
|
|
61191
|
+
(match) => match.distance === nearestDistance
|
|
61192
|
+
);
|
|
61193
|
+
if (nearest.length !== 1) {
|
|
61194
|
+
throw new NSGetterRuntimeError(
|
|
61195
|
+
`NeoDelegate method target '${target.name}' has multiple equally near receiver instances (${nearest.map((match) => match.id).join(", ")}).`
|
|
61196
|
+
);
|
|
61197
|
+
}
|
|
61198
|
+
row.value = { ...row.value, valueId: nearest[0].id };
|
|
61199
|
+
}
|
|
61200
|
+
}
|
|
61100
61201
|
function publishConstructedRows(args) {
|
|
61101
61202
|
const { root, createdValues, ctx } = args;
|
|
61102
61203
|
assertConstructorRowsHaveSingleStructuralOwner(createdValues, ctx);
|
|
@@ -61158,6 +61259,7 @@ function publishConstructedRows(args) {
|
|
|
61158
61259
|
destination.set(row.id, row);
|
|
61159
61260
|
if (ctx.__indexes !== void 0) indexEvaluatorRow(ctx.__indexes, row);
|
|
61160
61261
|
}
|
|
61262
|
+
bindConstructedDelegateTargets(root.id, ctx);
|
|
61161
61263
|
state.constructorGroups.set(root.id, retained);
|
|
61162
61264
|
state.ownedValueAttachments.clear();
|
|
61163
61265
|
}
|
|
@@ -61855,6 +61957,7 @@ function evaluateInitializerInContext(init, member, ctx, createdValues, argument
|
|
|
61855
61957
|
return {
|
|
61856
61958
|
value: result.value,
|
|
61857
61959
|
classId: rootRow.classId ?? null,
|
|
61960
|
+
provisionalRootId: rootRow.id,
|
|
61858
61961
|
...constructorArgs === void 0 ? {} : { constructorArgs: structuredClone(constructorArgs) }
|
|
61859
61962
|
};
|
|
61860
61963
|
}
|
|
@@ -62146,6 +62249,7 @@ function constructDeclaredClassValueWithinFrame(descriptor, record3, info, scope
|
|
|
62146
62249
|
root.constructorArgs = structuredClone(encoded);
|
|
62147
62250
|
}
|
|
62148
62251
|
stageConstructedRows(createdValues, ctx);
|
|
62252
|
+
bindConstructedDelegateTargets(root.id, ctx);
|
|
62149
62253
|
if (record3 !== null) {
|
|
62150
62254
|
runDeclaredConstructorChain({
|
|
62151
62255
|
record: record3,
|
|
@@ -63430,6 +63534,7 @@ function evaluateMemberInitializer(args) {
|
|
|
63430
63534
|
return {
|
|
63431
63535
|
value: result.value,
|
|
63432
63536
|
classId: rootRow.classId ?? null,
|
|
63537
|
+
provisionalRootId: rootRow.id,
|
|
63433
63538
|
...constructorArgs === void 0 ? {} : { constructorArgs: structuredClone(constructorArgs) }
|
|
63434
63539
|
};
|
|
63435
63540
|
}
|
|
@@ -63490,6 +63595,13 @@ function materializeInitializerValue(args) {
|
|
|
63490
63595
|
...evaluated.classId === null ? {} : { classId: evaluated.classId },
|
|
63491
63596
|
...evaluated.constructorArgs === void 0 ? {} : { constructorArgs: structuredClone(evaluated.constructorArgs) }
|
|
63492
63597
|
};
|
|
63598
|
+
if (evaluated.provisionalRootId !== void 0) {
|
|
63599
|
+
retargetDelegateReceiverValueIds(
|
|
63600
|
+
[root, ...createdValues],
|
|
63601
|
+
evaluated.provisionalRootId,
|
|
63602
|
+
root.id
|
|
63603
|
+
);
|
|
63604
|
+
}
|
|
63493
63605
|
const allCreated = [root, ...createdValues];
|
|
63494
63606
|
for (const created of createdValues) {
|
|
63495
63607
|
if (created.classId === void 0) delete created.classId;
|
|
@@ -88472,13 +88584,15 @@ function lowerFunctionReference(context, expression, ownerClassId) {
|
|
|
88472
88584
|
return { functionMemberId: target.id };
|
|
88473
88585
|
}
|
|
88474
88586
|
function lowerDelegateValue(context, expression, ownerClassId, authoredSlice) {
|
|
88475
|
-
|
|
88476
|
-
|
|
88477
|
-
|
|
88478
|
-
|
|
88479
|
-
|
|
88587
|
+
if (expression.kind === "lambda") {
|
|
88588
|
+
const code = initializerExpressionSlice(authoredSlice);
|
|
88589
|
+
if (code === void 0) {
|
|
88590
|
+
throw new Error(
|
|
88591
|
+
"Delegate lambdas require recoverable authored source so the server can compile their closure."
|
|
88592
|
+
);
|
|
88593
|
+
}
|
|
88594
|
+
return { code };
|
|
88480
88595
|
}
|
|
88481
|
-
if (expression.kind === "lambda") return { code };
|
|
88482
88596
|
const path = memberPath(expression);
|
|
88483
88597
|
const symbol = path?.startsWith("this.") ? path.slice("this.".length) : path;
|
|
88484
88598
|
if (symbol === null || symbol === void 0 || symbol.includes(".")) {
|
|
@@ -88497,7 +88611,7 @@ function lowerDelegateValue(context, expression, ownerClassId, authoredSlice) {
|
|
|
88497
88611
|
`Delegate ${symbol} does not resolve to a function, NSFunction, or NSDelegate member.`
|
|
88498
88612
|
);
|
|
88499
88613
|
}
|
|
88500
|
-
return {
|
|
88614
|
+
return { memberId: target.id, valueId: null };
|
|
88501
88615
|
}
|
|
88502
88616
|
function fileTargetId(context, expression, registry) {
|
|
88503
88617
|
const path = memberPath(expression);
|
|
@@ -101546,7 +101660,7 @@ var init_registry2 = __esm({
|
|
|
101546
101660
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
101547
101661
|
formatVersion: 3,
|
|
101548
101662
|
contractVersion: "3.9",
|
|
101549
|
-
cliVersion: "0.24.
|
|
101663
|
+
cliVersion: "0.24.7",
|
|
101550
101664
|
projectFileUploadBatchSize: 32,
|
|
101551
101665
|
documentRecords: {
|
|
101552
101666
|
member: {
|
|
@@ -102951,21 +103065,7 @@ function errorMessage2(error) {
|
|
|
102951
103065
|
return error instanceof Error ? error.message : String(error);
|
|
102952
103066
|
}
|
|
102953
103067
|
function findDelegateTargetMemberId(value) {
|
|
102954
|
-
|
|
102955
|
-
const pending = [value.action.instructions];
|
|
102956
|
-
while (pending.length > 0) {
|
|
102957
|
-
const current = pending.shift();
|
|
102958
|
-
if (Array.isArray(current)) {
|
|
102959
|
-
pending.push(...current);
|
|
102960
|
-
continue;
|
|
102961
|
-
}
|
|
102962
|
-
if (!isRecord10(current)) continue;
|
|
102963
|
-
if (current.type === "callFunction" && typeof current.memberId === "string") {
|
|
102964
|
-
return current.memberId;
|
|
102965
|
-
}
|
|
102966
|
-
pending.push(...Object.values(current));
|
|
102967
|
-
}
|
|
102968
|
-
return null;
|
|
103068
|
+
return isRecord10(value) && typeof value.memberId === "string" ? value.memberId : null;
|
|
102969
103069
|
}
|
|
102970
103070
|
function makeEvaluatorContext(rawDocument, interceptor, documentAlreadyIsolated = false) {
|
|
102971
103071
|
const isolatedDocument = documentAlreadyIsolated ? rawDocument : structuredClone(rawDocument);
|
|
@@ -104081,7 +104181,7 @@ async function runTest(workspace, options, dependencies = {}) {
|
|
|
104081
104181
|
cliVersion: PROJECT_SCHEMA_CONTRACT.cliVersion,
|
|
104082
104182
|
runnerRevision: 3,
|
|
104083
104183
|
compilerRevision: NEOSCRIPT_COMPILER_REVISION,
|
|
104084
|
-
evaluatorRevision:
|
|
104184
|
+
evaluatorRevision: 4,
|
|
104085
104185
|
projectFingerprint,
|
|
104086
104186
|
configurationSha256: createHash10("sha256").update(JSON.stringify(workspace.config.test ?? {})).digest("hex"),
|
|
104087
104187
|
dependencyGraph: Object.fromEntries(
|
package/package.json
CHANGED
|
@@ -181,9 +181,11 @@ pulled rows.
|
|
|
181
181
|
A selector argument such as `this.SelectPants` is evaluated in the lexical
|
|
182
182
|
scope of the class that declares the clip. Here `this` is the `LegPart`, not
|
|
183
183
|
the nested track row or an outer object instance that later receives a copy of
|
|
184
|
-
the declaration default.
|
|
185
|
-
|
|
186
|
-
|
|
184
|
+
the declaration default. A named method group lowers to the P60 member-target
|
|
185
|
+
form. Its declaration default carries `valueId: null` because no instance row
|
|
186
|
+
exists yet; materializing the declaration binds it to the concrete `LegPart`
|
|
187
|
+
row. An inline closure remains compiled closure source and reconstructs its
|
|
188
|
+
lexical owner from the materialized graph. Do not interchange these two forms.
|
|
187
189
|
|
|
188
190
|
Each track has `StartFrame`, `Direction` (`.Forward` or `.Reverse`), and a
|
|
189
191
|
crop window `OffsetStartIndex`/`OffsetEndIndex`. Crop before reversing, then
|
|
@@ -82,7 +82,7 @@ wrappers.
|
|
|
82
82
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
83
83
|
|
|
84
84
|
```html
|
|
85
|
-
<!-- reviewed-through-cli: 0.24.
|
|
85
|
+
<!-- reviewed-through-cli: 0.24.7 -->
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
The quoted version above is checked too, so this instruction cannot go stale
|