@neocompose/cli 0.24.7 → 0.24.8
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.8] - 2026-08-08
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Preserve generated Generic-slot initializers while closing their concrete
|
|
8
|
+
type. `NeoAnimationSegmentFrame<int>(value: 60)` now materializes `Value` as
|
|
9
|
+
`60` instead of replacing the initializer with the Int binding's fallback
|
|
10
|
+
`0`, keeping local and server construction graphs identical.
|
|
11
|
+
- Keep constructor-pane preview graphs stable while runtime values change, and
|
|
12
|
+
invalidate each animation segment lane only from the value rows that its
|
|
13
|
+
getter actually reads. Direction changes update the affected leaves without
|
|
14
|
+
reconstructing the ephemeral character graph.
|
|
15
|
+
|
|
3
16
|
## [0.24.7] - 2026-08-08
|
|
4
17
|
|
|
5
18
|
### Fixed
|
package/dist/neo.mjs
CHANGED
|
@@ -40044,6 +40044,9 @@ function substituteMember(member, env, members) {
|
|
|
40044
40044
|
accessModifierKind: resolved.accessModifierKind,
|
|
40045
40045
|
system: resolved.system ?? void 0
|
|
40046
40046
|
};
|
|
40047
|
+
if (resolved.defaultValue !== void 0) {
|
|
40048
|
+
substituted.defaultValue = resolved.defaultValue;
|
|
40049
|
+
}
|
|
40047
40050
|
const slotId = getOptionalString(member, "id");
|
|
40048
40051
|
if (slotId !== void 0) {
|
|
40049
40052
|
substituted.id = slotId;
|
|
@@ -56638,7 +56641,8 @@ function evalMemberById(vm, id2) {
|
|
|
56638
56641
|
if (vm.databaseVM?.memberById) return vm.databaseVM.memberById(id2);
|
|
56639
56642
|
return vm.members.find((a) => a.id === id2) ?? null;
|
|
56640
56643
|
}
|
|
56641
|
-
function evalValueById(
|
|
56644
|
+
function evalValueById(ctx, id2, runtimeValues, overlayValues) {
|
|
56645
|
+
const vm = ctx.vm;
|
|
56642
56646
|
const runtime = runtimeValues?.get(id2);
|
|
56643
56647
|
if (runtime !== void 0) return runtime;
|
|
56644
56648
|
const overlay = overlayValues?.get(id2);
|
|
@@ -56908,7 +56912,7 @@ function evaluatorOwnershipDistances(rowId, indexes) {
|
|
|
56908
56912
|
}
|
|
56909
56913
|
function resolveRuntimeReferenceRow(sourceValueId, ctx) {
|
|
56910
56914
|
const direct = evalValueById(
|
|
56911
|
-
ctx
|
|
56915
|
+
ctx,
|
|
56912
56916
|
sourceValueId,
|
|
56913
56917
|
ctx.__runtimeSessionValues,
|
|
56914
56918
|
ctx.__valueOverlay
|
|
@@ -57347,7 +57351,7 @@ function finalizeConstructorAllocations(ctx, returnValue, ownsInvocationState, r
|
|
|
57347
57351
|
if (scannedRows.has(valueId)) return;
|
|
57348
57352
|
scannedRows.add(valueId);
|
|
57349
57353
|
const row = evalValueById(
|
|
57350
|
-
ctx
|
|
57354
|
+
ctx,
|
|
57351
57355
|
valueId,
|
|
57352
57356
|
ctx.__runtimeSessionValues,
|
|
57353
57357
|
ctx.__valueOverlay
|
|
@@ -57357,7 +57361,7 @@ function finalizeConstructorAllocations(ctx, returnValue, ownsInvocationState, r
|
|
|
57357
57361
|
const { id: argumentId, typeInfo } = argument2;
|
|
57358
57362
|
if (groupByRowId.has(argumentId)) scanOwnedRow(argumentId);
|
|
57359
57363
|
const argumentRow = evalValueById(
|
|
57360
|
-
ctx
|
|
57364
|
+
ctx,
|
|
57361
57365
|
argumentId,
|
|
57362
57366
|
ctx.__runtimeSessionValues,
|
|
57363
57367
|
ctx.__valueOverlay
|
|
@@ -58210,7 +58214,7 @@ function applyOverlayAssignment(target, targetTypeInfo, value, scope, ctx) {
|
|
|
58210
58214
|
const existing2 = receiver[index];
|
|
58211
58215
|
if (typeof existing2 === "string") {
|
|
58212
58216
|
const row = evalValueById(
|
|
58213
|
-
ctx
|
|
58217
|
+
ctx,
|
|
58214
58218
|
existing2,
|
|
58215
58219
|
ctx.__runtimeSessionValues,
|
|
58216
58220
|
ctx.__valueOverlay
|
|
@@ -58247,7 +58251,7 @@ function applyOverlayAssignment(target, targetTypeInfo, value, scope, ctx) {
|
|
|
58247
58251
|
const existing = object2[stringKey];
|
|
58248
58252
|
if (typeof existing === "string") {
|
|
58249
58253
|
const row = evalValueById(
|
|
58250
|
-
ctx
|
|
58254
|
+
ctx,
|
|
58251
58255
|
existing,
|
|
58252
58256
|
ctx.__runtimeSessionValues,
|
|
58253
58257
|
ctx.__valueOverlay
|
|
@@ -58297,7 +58301,7 @@ function applyOverlayStaticAssignment(memberId, value, ctx) {
|
|
|
58297
58301
|
}
|
|
58298
58302
|
if (!referenceAssignment && currentId !== null) {
|
|
58299
58303
|
const row2 = evalValueById(
|
|
58300
|
-
ctx
|
|
58304
|
+
ctx,
|
|
58301
58305
|
currentId,
|
|
58302
58306
|
ctx.__runtimeSessionValues,
|
|
58303
58307
|
ctx.__valueOverlay
|
|
@@ -58803,7 +58807,7 @@ function evalStaticMember(memberId, ctx) {
|
|
|
58803
58807
|
return null;
|
|
58804
58808
|
}
|
|
58805
58809
|
const row = evalValueById(
|
|
58806
|
-
ctx
|
|
58810
|
+
ctx,
|
|
58807
58811
|
targetId,
|
|
58808
58812
|
ctx.__runtimeSessionValues,
|
|
58809
58813
|
ctx.__valueOverlay
|
|
@@ -58813,6 +58817,7 @@ function evalStaticMember(memberId, ctx) {
|
|
|
58813
58817
|
`Static member '${member.name}' is bound to missing value '${targetId}'.`
|
|
58814
58818
|
);
|
|
58815
58819
|
}
|
|
58820
|
+
ctx.valueDependencies?.add(row.id);
|
|
58816
58821
|
return row.value;
|
|
58817
58822
|
}
|
|
58818
58823
|
function evalPointer(pointer, scope, ctx) {
|
|
@@ -59098,7 +59103,7 @@ function invokeDelegateValue(value, args, ctx, callSiteId) {
|
|
|
59098
59103
|
let receiver = null;
|
|
59099
59104
|
if (value.valueId !== null) {
|
|
59100
59105
|
const row = evalValueById(
|
|
59101
|
-
ctx
|
|
59106
|
+
ctx,
|
|
59102
59107
|
value.valueId,
|
|
59103
59108
|
ctx.__runtimeSessionValues,
|
|
59104
59109
|
ctx.__valueOverlay
|
|
@@ -59225,7 +59230,7 @@ function delegateClosureLexicalThis(closure, ctx) {
|
|
|
59225
59230
|
)) {
|
|
59226
59231
|
if (ancestorId === closureRow.id) continue;
|
|
59227
59232
|
const ancestor = evalValueById(
|
|
59228
|
-
ctx
|
|
59233
|
+
ctx,
|
|
59229
59234
|
ancestorId,
|
|
59230
59235
|
ctx.__runtimeSessionValues,
|
|
59231
59236
|
ctx.__valueOverlay
|
|
@@ -59371,7 +59376,7 @@ function runtimeParentGenericEnv(row, ctx, visited) {
|
|
|
59371
59376
|
const result = /* @__PURE__ */ new Map();
|
|
59372
59377
|
for (const link of evaluatorParentLinks(evaluatorIndexes(ctx), row.id)) {
|
|
59373
59378
|
const parent = evalValueById(
|
|
59374
|
-
ctx
|
|
59379
|
+
ctx,
|
|
59375
59380
|
link.parentId,
|
|
59376
59381
|
ctx.__runtimeSessionValues,
|
|
59377
59382
|
ctx.__valueOverlay
|
|
@@ -60042,12 +60047,13 @@ function resolveAssetRuntimeMember(receiver, memberName, ctx) {
|
|
|
60042
60047
|
function resolveValueIfId(at, ctx) {
|
|
60043
60048
|
if (typeof at !== "string") return at;
|
|
60044
60049
|
const row = evalValueById(
|
|
60045
|
-
ctx
|
|
60050
|
+
ctx,
|
|
60046
60051
|
at,
|
|
60047
60052
|
ctx.__runtimeSessionValues,
|
|
60048
60053
|
ctx.__valueOverlay
|
|
60049
60054
|
);
|
|
60050
60055
|
if (!row) return at;
|
|
60056
|
+
ctx.valueDependencies?.add(row.id);
|
|
60051
60057
|
const member = memberForValueRow(row, ctx);
|
|
60052
60058
|
const value = member === null ? resolveLocalizedRowValue(row, ctx) : resolveLocalizedRowValueForMember(row, member, ctx);
|
|
60053
60059
|
return shouldUnwrapSingleLookupValue(member) ? unwrapSingleLookupValue(value, ctx) : value;
|
|
@@ -60055,12 +60061,13 @@ function resolveValueIfId(at, ctx) {
|
|
|
60055
60061
|
function resolveValueIfIdForMember(at, member, ctx) {
|
|
60056
60062
|
if (typeof at !== "string") return at;
|
|
60057
60063
|
const row = evalValueById(
|
|
60058
|
-
ctx
|
|
60064
|
+
ctx,
|
|
60059
60065
|
at,
|
|
60060
60066
|
ctx.__runtimeSessionValues,
|
|
60061
60067
|
ctx.__valueOverlay
|
|
60062
60068
|
);
|
|
60063
60069
|
if (!row) return at;
|
|
60070
|
+
ctx.valueDependencies?.add(row.id);
|
|
60064
60071
|
const value = resolveLocalizedRowValueForMember(row, member, ctx);
|
|
60065
60072
|
return shouldUnwrapSingleLookupValue(member) ? unwrapSingleLookupValue(value, ctx) : value;
|
|
60066
60073
|
}
|
|
@@ -60072,12 +60079,15 @@ function shouldUnwrapSingleLookupValue(member) {
|
|
|
60072
60079
|
function unwrapSingleLookupValue(value, ctx) {
|
|
60073
60080
|
if (Array.isArray(value) && value.length === 1 && typeof value[0] === "string") {
|
|
60074
60081
|
const next = evalValueById(
|
|
60075
|
-
ctx
|
|
60082
|
+
ctx,
|
|
60076
60083
|
value[0],
|
|
60077
60084
|
ctx.__runtimeSessionValues,
|
|
60078
60085
|
ctx.__valueOverlay
|
|
60079
60086
|
);
|
|
60080
|
-
if (next)
|
|
60087
|
+
if (next) {
|
|
60088
|
+
ctx.valueDependencies?.add(next.id);
|
|
60089
|
+
return next.value;
|
|
60090
|
+
}
|
|
60081
60091
|
}
|
|
60082
60092
|
return value;
|
|
60083
60093
|
}
|
|
@@ -60118,7 +60128,7 @@ function resolveMemberForValueRow(row, ctx, visited) {
|
|
|
60118
60128
|
}
|
|
60119
60129
|
for (const link of evaluatorParentLinks(indexes, row.id)) {
|
|
60120
60130
|
const parent = evalValueById(
|
|
60121
|
-
ctx
|
|
60131
|
+
ctx,
|
|
60122
60132
|
link.parentId,
|
|
60123
60133
|
ctx.__runtimeSessionValues,
|
|
60124
60134
|
ctx.__valueOverlay
|
|
@@ -60443,7 +60453,7 @@ function evalDeclaredListIndex(info, scope, ctx) {
|
|
|
60443
60453
|
for (const valueId of collection) {
|
|
60444
60454
|
if (typeof valueId !== "string") continue;
|
|
60445
60455
|
const row = evalValueById(
|
|
60446
|
-
ctx
|
|
60456
|
+
ctx,
|
|
60447
60457
|
valueId,
|
|
60448
60458
|
ctx.__runtimeSessionValues,
|
|
60449
60459
|
ctx.__valueOverlay
|
|
@@ -61028,7 +61038,7 @@ function applyConstructorFields(args) {
|
|
|
61028
61038
|
const trackedValueId = findKnownRowIdByValueReference(value, ctx);
|
|
61029
61039
|
if (trackedValueId !== null && isMemberClassBase(member)) {
|
|
61030
61040
|
const source = evalValueById(
|
|
61031
|
-
ctx
|
|
61041
|
+
ctx,
|
|
61032
61042
|
trackedValueId,
|
|
61033
61043
|
ctx.__runtimeSessionValues,
|
|
61034
61044
|
ctx.__valueOverlay
|
|
@@ -61139,7 +61149,7 @@ function bindConstructedDelegateTargets(rootId, ctx) {
|
|
|
61139
61149
|
if (rowId === void 0 || visited.has(rowId)) continue;
|
|
61140
61150
|
visited.add(rowId);
|
|
61141
61151
|
const row = evalValueById(
|
|
61142
|
-
ctx
|
|
61152
|
+
ctx,
|
|
61143
61153
|
rowId,
|
|
61144
61154
|
ctx.__runtimeSessionValues,
|
|
61145
61155
|
ctx.__valueOverlay
|
|
@@ -61171,7 +61181,7 @@ function bindConstructedDelegateTargets(rootId, ctx) {
|
|
|
61171
61181
|
indexes
|
|
61172
61182
|
)) {
|
|
61173
61183
|
const ancestor = evalValueById(
|
|
61174
|
-
ctx
|
|
61184
|
+
ctx,
|
|
61175
61185
|
ancestorId,
|
|
61176
61186
|
ctx.__runtimeSessionValues,
|
|
61177
61187
|
ctx.__valueOverlay
|
|
@@ -62318,7 +62328,7 @@ function constructDeclaredClassValueWithinFrame(descriptor, record3, info, scope
|
|
|
62318
62328
|
}
|
|
62319
62329
|
function assertOwnedValueAttachable(valueId, destination, destinationName2, ctx, reserveUntilPublished = false) {
|
|
62320
62330
|
const row = evalValueById(
|
|
62321
|
-
ctx
|
|
62331
|
+
ctx,
|
|
62322
62332
|
valueId,
|
|
62323
62333
|
ctx.__runtimeSessionValues,
|
|
62324
62334
|
ctx.__valueOverlay
|
|
@@ -62364,7 +62374,7 @@ function currentOwnedValueAttachments(valueId, ctx) {
|
|
|
62364
62374
|
found.set(attachment.identity, attachment);
|
|
62365
62375
|
};
|
|
62366
62376
|
const row = evalValueById(
|
|
62367
|
-
ctx
|
|
62377
|
+
ctx,
|
|
62368
62378
|
valueId,
|
|
62369
62379
|
ctx.__runtimeSessionValues,
|
|
62370
62380
|
ctx.__valueOverlay
|
|
@@ -62401,7 +62411,7 @@ function currentOwnedValueAttachments(valueId, ctx) {
|
|
|
62401
62411
|
);
|
|
62402
62412
|
for (const parentId of parentIds) {
|
|
62403
62413
|
const parent = evalValueById(
|
|
62404
|
-
ctx
|
|
62414
|
+
ctx,
|
|
62405
62415
|
parentId,
|
|
62406
62416
|
ctx.__runtimeSessionValues,
|
|
62407
62417
|
ctx.__valueOverlay
|
|
@@ -62469,7 +62479,7 @@ function constructorArgumentStorage(valueId, ctx, visiting = /* @__PURE__ */ new
|
|
|
62469
62479
|
if (visiting.has(valueId)) return null;
|
|
62470
62480
|
visiting.add(valueId);
|
|
62471
62481
|
const row = evalValueById(
|
|
62472
|
-
ctx
|
|
62482
|
+
ctx,
|
|
62473
62483
|
valueId,
|
|
62474
62484
|
ctx.__runtimeSessionValues,
|
|
62475
62485
|
ctx.__valueOverlay
|
|
@@ -62491,7 +62501,7 @@ function constructorArgumentStorage(valueId, ctx, visiting = /* @__PURE__ */ new
|
|
|
62491
62501
|
const parentIds = /* @__PURE__ */ new Set();
|
|
62492
62502
|
for (const owner of currentOwnedValueAttachments(valueId, ctx)) {
|
|
62493
62503
|
if (evalValueById(
|
|
62494
|
-
ctx
|
|
62504
|
+
ctx,
|
|
62495
62505
|
owner.label,
|
|
62496
62506
|
ctx.__runtimeSessionValues,
|
|
62497
62507
|
ctx.__valueOverlay
|
|
@@ -62601,7 +62611,7 @@ function cloneConstructorArgumentGraph(args) {
|
|
|
62601
62611
|
args.ctx
|
|
62602
62612
|
);
|
|
62603
62613
|
const child = evalValueById(
|
|
62604
|
-
args.ctx
|
|
62614
|
+
args.ctx,
|
|
62605
62615
|
childId,
|
|
62606
62616
|
args.ctx.__runtimeSessionValues,
|
|
62607
62617
|
args.ctx.__valueOverlay
|
|
@@ -62637,7 +62647,7 @@ function cloneConstructorArgumentGraph(args) {
|
|
|
62637
62647
|
);
|
|
62638
62648
|
}
|
|
62639
62649
|
const child = evalValueById(
|
|
62640
|
-
args.ctx
|
|
62650
|
+
args.ctx,
|
|
62641
62651
|
childId,
|
|
62642
62652
|
args.ctx.__runtimeSessionValues,
|
|
62643
62653
|
args.ctx.__valueOverlay
|
|
@@ -62684,7 +62694,7 @@ function cloneConstructorArgumentGraph(args) {
|
|
|
62684
62694
|
);
|
|
62685
62695
|
}
|
|
62686
62696
|
const child = evalValueById(
|
|
62687
|
-
args.ctx
|
|
62697
|
+
args.ctx,
|
|
62688
62698
|
childId,
|
|
62689
62699
|
args.ctx.__runtimeSessionValues,
|
|
62690
62700
|
args.ctx.__valueOverlay
|
|
@@ -62726,7 +62736,7 @@ function materializeConstructorArgumentValue(args) {
|
|
|
62726
62736
|
}
|
|
62727
62737
|
if (trackedValueId !== null) {
|
|
62728
62738
|
const tracked = evalValueById(
|
|
62729
|
-
args.ctx
|
|
62739
|
+
args.ctx,
|
|
62730
62740
|
trackedValueId,
|
|
62731
62741
|
args.ctx.__runtimeSessionValues,
|
|
62732
62742
|
args.ctx.__valueOverlay
|
|
@@ -62909,7 +62919,7 @@ function assertConstructorClassValueAdmitted(args) {
|
|
|
62909
62919
|
function constructorCollectionEntryValue(value, ctx, resolveStoredId) {
|
|
62910
62920
|
if (!resolveStoredId || typeof value !== "string") return value;
|
|
62911
62921
|
const row = evalValueById(
|
|
62912
|
-
ctx
|
|
62922
|
+
ctx,
|
|
62913
62923
|
value,
|
|
62914
62924
|
ctx.__runtimeSessionValues,
|
|
62915
62925
|
ctx.__valueOverlay
|
|
@@ -62959,7 +62969,7 @@ function cloneClassValueGraph(receiver, expectedClassId, ctx) {
|
|
|
62959
62969
|
);
|
|
62960
62970
|
}
|
|
62961
62971
|
const source = evalValueById(
|
|
62962
|
-
ctx
|
|
62972
|
+
ctx,
|
|
62963
62973
|
sourceId3,
|
|
62964
62974
|
ctx.__runtimeSessionValues,
|
|
62965
62975
|
ctx.__valueOverlay
|
|
@@ -63024,7 +63034,7 @@ function cloneClassValueGraph(receiver, expectedClassId, ctx) {
|
|
|
63024
63034
|
const childTypeInfo = sourceTypeInfo?.type === 5 /* Dictionary */ ? sourceTypeInfo.entryTypeInfo : void 0;
|
|
63025
63035
|
if (childMember === null && childTypeInfo === void 0) continue;
|
|
63026
63036
|
const child = evalValueById(
|
|
63027
|
-
ctx
|
|
63037
|
+
ctx,
|
|
63028
63038
|
childId,
|
|
63029
63039
|
ctx.__runtimeSessionValues,
|
|
63030
63040
|
ctx.__valueOverlay
|
|
@@ -63045,7 +63055,7 @@ function cloneClassValueGraph(receiver, expectedClassId, ctx) {
|
|
|
63045
63055
|
clone.value = sourceRow.value.map((childId) => {
|
|
63046
63056
|
if (typeof childId !== "string") return childId;
|
|
63047
63057
|
const child = evalValueById(
|
|
63048
|
-
ctx
|
|
63058
|
+
ctx,
|
|
63049
63059
|
childId,
|
|
63050
63060
|
ctx.__runtimeSessionValues,
|
|
63051
63061
|
ctx.__valueOverlay
|
|
@@ -63075,7 +63085,7 @@ function cloneClassValueGraph(receiver, expectedClassId, ctx) {
|
|
|
63075
63085
|
}
|
|
63076
63086
|
if (constructorArgumentReferenceCounts.get(argument2.id) !== 1) continue;
|
|
63077
63087
|
const argumentRow = evalValueById(
|
|
63078
|
-
ctx
|
|
63088
|
+
ctx,
|
|
63079
63089
|
argument2.id,
|
|
63080
63090
|
ctx.__runtimeSessionValues,
|
|
63081
63091
|
ctx.__valueOverlay
|
|
@@ -101660,7 +101670,7 @@ var init_registry2 = __esm({
|
|
|
101660
101670
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
101661
101671
|
formatVersion: 3,
|
|
101662
101672
|
contractVersion: "3.9",
|
|
101663
|
-
cliVersion: "0.24.
|
|
101673
|
+
cliVersion: "0.24.8",
|
|
101664
101674
|
projectFileUploadBatchSize: 32,
|
|
101665
101675
|
documentRecords: {
|
|
101666
101676
|
member: {
|
package/package.json
CHANGED
|
@@ -127,6 +127,10 @@ Use `NeoAnimationSegment<T>` for a frame-indexed value lane. The shipped
|
|
|
127
127
|
sprite specialization is `NeoSpriteAnimationSegment`, whose
|
|
128
128
|
`NeoAnimationSegmentFrame<SpriteInfo>` rows each provide `Index` and
|
|
129
129
|
`Value`. Sparse frame values hold until the next row or `Duration`.
|
|
130
|
+
Pass `Value` through the frame constructor (for example,
|
|
131
|
+
`new NeoAnimationSegmentFrame<int>(value: 60)`). The constructor argument is
|
|
132
|
+
the frame's authored value; it must not collapse to the concrete generic
|
|
133
|
+
binding's fallback while the segment is materialized.
|
|
130
134
|
|
|
131
135
|
Use one polymorphic `NeoAnimationClip.Tracks` list:
|
|
132
136
|
|
|
@@ -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.8 -->
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
The quoted version above is checked too, so this instruction cannot go stale
|