@neocompose/cli 0.52.4 → 0.52.5
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,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.52.5] - 2026-09-17
|
|
4
|
+
|
|
5
|
+
- Materialize computed collection defaults, including `List.Repeat<T?>(null, count)`, as stored entries when seeding new instances.
|
|
6
|
+
|
|
3
7
|
## [0.52.4] - 2026-09-17
|
|
4
8
|
|
|
5
9
|
- Accept declared list-index lookups in constructor arguments, including readable string keys such as `root.Assets.Items.Index.Slug["stone"]!`.
|
package/dist/neo.mjs
CHANGED
|
@@ -55060,7 +55060,8 @@ function evaluateLiteralContainer(args) {
|
|
|
55060
55060
|
const evaluated = args.initEvaluator(
|
|
55061
55061
|
args.member,
|
|
55062
55062
|
body.init,
|
|
55063
|
-
args.sourceValueId
|
|
55063
|
+
args.sourceValueId,
|
|
55064
|
+
args.genericEnv
|
|
55064
55065
|
);
|
|
55065
55066
|
const literal3 = {
|
|
55066
55067
|
value: evaluated.value,
|
|
@@ -55113,6 +55114,7 @@ function buildDefaultMemberValue(args) {
|
|
|
55113
55114
|
if (documentHasInitValueContent(args.document, declaredDefault)) {
|
|
55114
55115
|
const initializerCreatedValuesStart = args.createdValues.length;
|
|
55115
55116
|
const evaluated = evaluateLiteralContainer({
|
|
55117
|
+
genericEnv: args.genericEnv,
|
|
55116
55118
|
body: declaredDefault,
|
|
55117
55119
|
member,
|
|
55118
55120
|
initEvaluator: args.initEvaluator
|
|
@@ -55134,7 +55136,7 @@ function buildDefaultMemberValue(args) {
|
|
|
55134
55136
|
value2.genericBindings = { ...evaluated.genericBindings };
|
|
55135
55137
|
}
|
|
55136
55138
|
if (evaluated.provisionalRootId !== void 0) {
|
|
55137
|
-
|
|
55139
|
+
retargetInitializerRootValueIds(
|
|
55138
55140
|
[value2, ...args.createdValues.slice(initializerCreatedValuesStart)],
|
|
55139
55141
|
evaluated.provisionalRootId,
|
|
55140
55142
|
value2.id
|
|
@@ -55436,7 +55438,7 @@ function buildNewValue(projectId, body, timestamp2 = Date.now()) {
|
|
|
55436
55438
|
}
|
|
55437
55439
|
return props;
|
|
55438
55440
|
}
|
|
55439
|
-
function
|
|
55441
|
+
function retargetInitializerRootValueIds(rows, fromValueId, toValueId) {
|
|
55440
55442
|
const visited = /* @__PURE__ */ new WeakSet();
|
|
55441
55443
|
const visit = (value) => {
|
|
55442
55444
|
if (typeof value !== "object" || value === null) return;
|
|
@@ -55453,6 +55455,7 @@ function retargetDelegateReceiverValueIds(rows, fromValueId, toValueId) {
|
|
|
55453
55455
|
for (const entry of Object.values(value)) visit(entry);
|
|
55454
55456
|
};
|
|
55455
55457
|
for (const row of rows) {
|
|
55458
|
+
if (row.containerId === fromValueId) row.containerId = toValueId;
|
|
55456
55459
|
if (!isLiteralValueContent(row)) continue;
|
|
55457
55460
|
visit(row.value);
|
|
55458
55461
|
visit(row.constructorArgs);
|
|
@@ -55582,6 +55585,7 @@ function cloneDefaultValueForMember(args) {
|
|
|
55582
55585
|
if (documentHasInitValueContent(args.document, sourceValue)) {
|
|
55583
55586
|
const initializerCreatedValuesStart = args.createdValues.length;
|
|
55584
55587
|
const evaluated = evaluateLiteralContainer({
|
|
55588
|
+
genericEnv: args.genericEnv,
|
|
55585
55589
|
body: sourceValue,
|
|
55586
55590
|
member,
|
|
55587
55591
|
initEvaluator: args.initEvaluator,
|
|
@@ -55604,7 +55608,7 @@ function cloneDefaultValueForMember(args) {
|
|
|
55604
55608
|
evaluatedRow.genericBindings = { ...evaluated.genericBindings };
|
|
55605
55609
|
}
|
|
55606
55610
|
if (evaluated.provisionalRootId !== void 0) {
|
|
55607
|
-
|
|
55611
|
+
retargetInitializerRootValueIds(
|
|
55608
55612
|
[
|
|
55609
55613
|
evaluatedRow,
|
|
55610
55614
|
...args.createdValues.slice(initializerCreatedValuesStart)
|
|
@@ -71334,6 +71338,29 @@ function evaluateNSGetterWithEffects(getter, ctx, argumentValues = [], options =
|
|
|
71334
71338
|
if (getter.typeInfo.type === 20 /* Decimal */ && typeof result.value === "number") {
|
|
71335
71339
|
result.value = coerceDecimalOperand(result.value, "return");
|
|
71336
71340
|
}
|
|
71341
|
+
const initializerResult = options.initializerResult;
|
|
71342
|
+
if (initializerResult !== void 0 && result.value !== null && (isMemberListBase(initializerResult.member) || isMemberDictionaryBase(initializerResult.member)) && findKnownRowIdByValueReference(result.value, runtimeCtx) === null) {
|
|
71343
|
+
const createdValues = createdSessionValuesSince(runtimeCtx, creationCheckpoint);
|
|
71344
|
+
const declarations = /* @__PURE__ */ new Map();
|
|
71345
|
+
const root = materializeConstructorArgumentValue({
|
|
71346
|
+
member: initializerResult.member,
|
|
71347
|
+
value: result.value,
|
|
71348
|
+
genericEnv: initializerResult.genericEnv ?? /* @__PURE__ */ new Map(),
|
|
71349
|
+
ctx: runtimeCtx,
|
|
71350
|
+
createdValues,
|
|
71351
|
+
createdById: new Map(createdValues.map((row) => [row.id, row])),
|
|
71352
|
+
storageKeyDeclarations: declarations,
|
|
71353
|
+
collectionEntriesAreReferences: false
|
|
71354
|
+
});
|
|
71355
|
+
declarations.delete(root.id);
|
|
71356
|
+
publishConstructedRows({
|
|
71357
|
+
root,
|
|
71358
|
+
createdValues,
|
|
71359
|
+
storageKeyDeclarations: declarations,
|
|
71360
|
+
ctx: runtimeCtx
|
|
71361
|
+
});
|
|
71362
|
+
result.value = root.value;
|
|
71363
|
+
}
|
|
71337
71364
|
if (options.exportInitializerValues) {
|
|
71338
71365
|
const created = createdSessionValuesSince(
|
|
71339
71366
|
runtimeCtx,
|
|
@@ -74997,17 +75024,19 @@ function readDeclarationDefault(member, ctx) {
|
|
|
74997
75024
|
projectId: ctx.vm.project.id,
|
|
74998
75025
|
member,
|
|
74999
75026
|
createdValues: created,
|
|
75000
|
-
initEvaluator: (child, init, sourceValueId) => withConstructionGenericSlots(
|
|
75027
|
+
initEvaluator: (child, init, sourceValueId, genericEnv = /* @__PURE__ */ new Map()) => withConstructionGenericSlots(
|
|
75001
75028
|
child,
|
|
75002
75029
|
ctx,
|
|
75003
|
-
|
|
75030
|
+
genericEnv,
|
|
75004
75031
|
() => evaluateInitializerInContext(
|
|
75005
75032
|
init,
|
|
75006
75033
|
child,
|
|
75007
75034
|
ctx,
|
|
75008
75035
|
created,
|
|
75009
75036
|
[],
|
|
75010
|
-
sourceValueId
|
|
75037
|
+
sourceValueId,
|
|
75038
|
+
void 0,
|
|
75039
|
+
genericEnv
|
|
75011
75040
|
)
|
|
75012
75041
|
)
|
|
75013
75042
|
});
|
|
@@ -77796,7 +77825,7 @@ function constructionInitEvaluator(ctx, createdValues, argumentScopes, construct
|
|
|
77796
77825
|
}
|
|
77797
77826
|
return null;
|
|
77798
77827
|
};
|
|
77799
|
-
return (member, init, sourceValueId) => {
|
|
77828
|
+
return (member, init, sourceValueId, genericEnv = instanceEnv) => {
|
|
77800
77829
|
const memberId = Reflect.get(member, "id");
|
|
77801
77830
|
const effectiveMemberId = typeof memberId === "string" ? memberId : null;
|
|
77802
77831
|
const scopeMemberId = indexes2.initializerScopeMemberIds.get(init) ?? (typeof sourceValueId !== "string" ? void 0 : indexes2.initializerScopeMemberIdsByValueId.get(sourceValueId)) ?? effectiveMemberId;
|
|
@@ -77811,7 +77840,7 @@ function constructionInitEvaluator(ctx, createdValues, argumentScopes, construct
|
|
|
77811
77840
|
return withConstructionGenericSlots(
|
|
77812
77841
|
member,
|
|
77813
77842
|
ctx,
|
|
77814
|
-
|
|
77843
|
+
genericEnv,
|
|
77815
77844
|
() => evaluateInitializerInContext(
|
|
77816
77845
|
init,
|
|
77817
77846
|
member,
|
|
@@ -77819,7 +77848,8 @@ function constructionInitEvaluator(ctx, createdValues, argumentScopes, construct
|
|
|
77819
77848
|
createdValues,
|
|
77820
77849
|
argumentValues,
|
|
77821
77850
|
sourceValueId ?? null,
|
|
77822
|
-
scopeMemberId
|
|
77851
|
+
scopeMemberId,
|
|
77852
|
+
genericEnv
|
|
77823
77853
|
)
|
|
77824
77854
|
);
|
|
77825
77855
|
};
|
|
@@ -77956,7 +77986,7 @@ function runtimeValueReferencesVariable(value, variableId, visited = /* @__PURE_
|
|
|
77956
77986
|
(child) => runtimeValueReferencesVariable(child, variableId, visited)
|
|
77957
77987
|
);
|
|
77958
77988
|
}
|
|
77959
|
-
function evaluateInitializerInContext(init, member, ctx, createdValues, argumentValues = [], sourceValueId = null, compileMemberId) {
|
|
77989
|
+
function evaluateInitializerInContext(init, member, ctx, createdValues, argumentValues = [], sourceValueId = null, compileMemberId, genericEnv = /* @__PURE__ */ new Map()) {
|
|
77960
77990
|
ctx.__constructedArgumentsByValue ??= /* @__PURE__ */ new WeakMap();
|
|
77961
77991
|
const compiled = ensureInitializerCompiled({
|
|
77962
77992
|
init,
|
|
@@ -77972,7 +78002,8 @@ function evaluateInitializerInContext(init, member, ctx, createdValues, argument
|
|
|
77972
78002
|
result = evaluateNSGetterWithEffects(
|
|
77973
78003
|
compiled,
|
|
77974
78004
|
initializerCtx,
|
|
77975
|
-
argumentValues
|
|
78005
|
+
argumentValues,
|
|
78006
|
+
{ initializerResult: { member, genericEnv } }
|
|
77976
78007
|
);
|
|
77977
78008
|
} finally {
|
|
77978
78009
|
closeFrame();
|
|
@@ -79620,6 +79651,9 @@ function cloneConstructorLiteralValue(value) {
|
|
|
79620
79651
|
}
|
|
79621
79652
|
function materializeConstructorArgumentValue(args) {
|
|
79622
79653
|
const trackedValueId = findKnownRowIdByValueReference(args.value, args.ctx);
|
|
79654
|
+
if (args.value === null && !isRequiredMember2(args.member) && (isMemberListBase(args.member) || isMemberDictionaryBase(args.member))) {
|
|
79655
|
+
return registerConstructorArgumentRow(args, null);
|
|
79656
|
+
}
|
|
79623
79657
|
if (isMemberClassBase(args.member)) {
|
|
79624
79658
|
if (args.value === null || args.value === void 0) {
|
|
79625
79659
|
if (isRequiredMember2(args.member)) {
|
|
@@ -79955,7 +79989,8 @@ function cloneClassValueGraph(receiver, expectedClassId, ctx) {
|
|
|
79955
79989
|
initializerCreatedValues,
|
|
79956
79990
|
argumentValues,
|
|
79957
79991
|
sourceRow.id,
|
|
79958
|
-
compileMemberId
|
|
79992
|
+
compileMemberId,
|
|
79993
|
+
isMemberListBase(sourceMember) || isMemberDictionaryBase(sourceMember) ? runtimeGenericEnvForValueRow(sourceRow, ctx, /* @__PURE__ */ new Set()) : void 0
|
|
79959
79994
|
);
|
|
79960
79995
|
if (evaluated.existingValueRow !== void 0) {
|
|
79961
79996
|
const adoptedClone = cloneRow2(
|
|
@@ -79990,7 +80025,7 @@ function cloneClassValueGraph(receiver, expectedClassId, ctx) {
|
|
|
79990
80025
|
Reflect.deleteProperty(clone, "containerId");
|
|
79991
80026
|
}
|
|
79992
80027
|
if (evaluated.provisionalRootId !== void 0) {
|
|
79993
|
-
|
|
80028
|
+
retargetInitializerRootValueIds(
|
|
79994
80029
|
[clone, ...initializerCreatedValues],
|
|
79995
80030
|
evaluated.provisionalRootId,
|
|
79996
80031
|
clone.id
|
|
@@ -80555,6 +80590,7 @@ function evaluateInitializerMaterialization(args) {
|
|
|
80555
80590
|
const createdValues = [];
|
|
80556
80591
|
const storageKeyDeclarations = /* @__PURE__ */ new Map();
|
|
80557
80592
|
const evaluated = args.evaluateInitializer({
|
|
80593
|
+
genericEnv: args.genericEnv,
|
|
80558
80594
|
init: args.init,
|
|
80559
80595
|
member: args.member,
|
|
80560
80596
|
document: args.document,
|
|
@@ -80603,6 +80639,7 @@ function materializeInitializerValue(args) {
|
|
|
80603
80639
|
...args.storedConstructionReplay === true ? { storedConstructionReplay: true } : {},
|
|
80604
80640
|
...args.constructionBaselineReplay === true ? { constructionBaselineReplay: true } : {},
|
|
80605
80641
|
...args.argumentValues === void 0 ? {} : { argumentValues: args.argumentValues },
|
|
80642
|
+
genericEnv: envFromStamp(args.row.genericBindings),
|
|
80606
80643
|
sourceValueId: args.row.id,
|
|
80607
80644
|
readTracking: args.readTracking,
|
|
80608
80645
|
saveStaticBindings: args.saveStaticBindings,
|
|
@@ -80631,7 +80668,7 @@ function materializeInitializerValue(args) {
|
|
|
80631
80668
|
};
|
|
80632
80669
|
const allCreated = [root, ...createdValues];
|
|
80633
80670
|
if (evaluated.provisionalRootId !== void 0) {
|
|
80634
|
-
|
|
80671
|
+
retargetInitializerRootValueIds(
|
|
80635
80672
|
allCreated,
|
|
80636
80673
|
evaluated.provisionalRootId,
|
|
80637
80674
|
root.id
|
|
@@ -80694,7 +80731,9 @@ function materializeMemberDefaultValue(args) {
|
|
|
80694
80731
|
...args.genericEnv === void 0 ? {} : { genericEnv: args.genericEnv },
|
|
80695
80732
|
// A declaration default may itself be init-backed one level down (P43 §2),
|
|
80696
80733
|
// and those nested initializers must evaluate against the same document.
|
|
80697
|
-
initEvaluator: (member, init, sourceValueId) => args.evaluateInitializer({
|
|
80734
|
+
initEvaluator: (member, init, sourceValueId, genericEnv) => args.evaluateInitializer({
|
|
80735
|
+
genericEnv,
|
|
80736
|
+
storageKeyDeclarations,
|
|
80698
80737
|
init,
|
|
80699
80738
|
member,
|
|
80700
80739
|
document: args.document,
|
|
@@ -80719,7 +80758,7 @@ function materializeMemberDefaultValue(args) {
|
|
|
80719
80758
|
...built.genericBindings == null ? {} : { genericBindings: { ...built.genericBindings } }
|
|
80720
80759
|
};
|
|
80721
80760
|
const allCreated = [root, ...interior];
|
|
80722
|
-
|
|
80761
|
+
retargetInitializerRootValueIds(allCreated, built.id, root.id);
|
|
80723
80762
|
finalizeMaterializedRoot({
|
|
80724
80763
|
root,
|
|
80725
80764
|
allCreated,
|
|
@@ -80736,6 +80775,7 @@ var init_initializer_materialization = __esm({
|
|
|
80736
80775
|
init_deep_clone_plain_data();
|
|
80737
80776
|
init_members();
|
|
80738
80777
|
init_inheritance();
|
|
80778
|
+
init_generics();
|
|
80739
80779
|
init_evaluateNSGetter();
|
|
80740
80780
|
init_initializer_context();
|
|
80741
80781
|
init_value_row_owner_members();
|
|
@@ -83772,7 +83812,10 @@ function evaluateMemberInitializer(args) {
|
|
|
83772
83812
|
compiled,
|
|
83773
83813
|
ctx,
|
|
83774
83814
|
args.argumentValues ?? [],
|
|
83775
|
-
{
|
|
83815
|
+
{
|
|
83816
|
+
exportInitializerValues: true,
|
|
83817
|
+
initializerResult: { member: args.member, genericEnv: args.genericEnv }
|
|
83818
|
+
}
|
|
83776
83819
|
);
|
|
83777
83820
|
const created = result.createdSessionValues ?? [];
|
|
83778
83821
|
if (isMemberLookupBase(args.member)) {
|
|
@@ -98983,7 +99026,8 @@ function isStringValueRecord(value) {
|
|
|
98983
99026
|
return value !== null && typeof value === "object" && !Array.isArray(value) && Object.values(value).every((entry) => typeof entry === "string");
|
|
98984
99027
|
}
|
|
98985
99028
|
function commitInitEvaluator(document, createdValues) {
|
|
98986
|
-
return (member, init, sourceValueId) => evaluateMemberInitializer({
|
|
99029
|
+
return (member, init, sourceValueId, genericEnv) => evaluateMemberInitializer({
|
|
99030
|
+
genericEnv,
|
|
98987
99031
|
init,
|
|
98988
99032
|
member,
|
|
98989
99033
|
document,
|
|
@@ -99002,10 +99046,19 @@ function assertConstructedGraphReferencesResolve(args) {
|
|
|
99002
99046
|
const valueIds = new Set(args.document.values.map((value) => value.id));
|
|
99003
99047
|
for (const site of sites) {
|
|
99004
99048
|
if ((site.init.compiled?.parameters.length ?? 2) > 2) continue;
|
|
99049
|
+
if (site.sourceValueId === void 0 && [
|
|
99050
|
+
...referencedGenericParams(
|
|
99051
|
+
resolveMember2(site.member, args.document.members),
|
|
99052
|
+
args.document.members
|
|
99053
|
+
)
|
|
99054
|
+
].some((paramId) => site.genericEnv.get(paramId)?.kind !== "member"))
|
|
99055
|
+
continue;
|
|
99005
99056
|
const createdValues = [];
|
|
99006
99057
|
const produced = evaluateMemberInitializer({
|
|
99007
99058
|
init: site.init,
|
|
99008
99059
|
member: site.member,
|
|
99060
|
+
genericEnv: site.genericEnv,
|
|
99061
|
+
sourceValueId: site.sourceValueId,
|
|
99009
99062
|
document: args.document,
|
|
99010
99063
|
createdValues
|
|
99011
99064
|
});
|
|
@@ -99037,6 +99090,10 @@ function collectTouchedInitializerSites(args) {
|
|
|
99037
99090
|
if (!isInitValueContent(member.defaultValue)) continue;
|
|
99038
99091
|
if (!changedConstructor && !changedMemberIds.has(member.id)) continue;
|
|
99039
99092
|
sites.push({
|
|
99093
|
+
genericEnv: resolveDeclaringClassGenericEnv(
|
|
99094
|
+
member.id,
|
|
99095
|
+
args.document.classes
|
|
99096
|
+
),
|
|
99040
99097
|
label: `Member "${member.name}" (${member.id})`,
|
|
99041
99098
|
member,
|
|
99042
99099
|
init: member.defaultValue.init
|
|
@@ -99064,6 +99121,8 @@ function collectTouchedInitializerSites(args) {
|
|
|
99064
99121
|
);
|
|
99065
99122
|
}
|
|
99066
99123
|
sites.push({
|
|
99124
|
+
genericEnv: envFromStamp(row.genericBindings),
|
|
99125
|
+
sourceValueId: row.id,
|
|
99067
99126
|
label: `Value "${row.id}"`,
|
|
99068
99127
|
member,
|
|
99069
99128
|
init: row.init
|
|
@@ -99080,11 +99139,19 @@ function assertProducedGraphLookupsResolve(args) {
|
|
|
99080
99139
|
projectId: args.document.project.id,
|
|
99081
99140
|
value: args.produced.value,
|
|
99082
99141
|
classId: args.produced.classId,
|
|
99142
|
+
...args.produced.genericBindings === void 0 ? {} : { genericBindings: { ...args.produced.genericBindings } },
|
|
99083
99143
|
...args.produced.constructorArgs === void 0 ? {} : { constructorArgs: args.produced.constructorArgs },
|
|
99084
99144
|
...args.produced.instanceConstructorId === void 0 ? {} : { instanceConstructorId: args.produced.instanceConstructorId },
|
|
99085
99145
|
createdAt: 0,
|
|
99086
99146
|
updatedAt: 0
|
|
99087
99147
|
};
|
|
99148
|
+
if (args.produced.provisionalRootId !== void 0) {
|
|
99149
|
+
retargetInitializerRootValueIds(
|
|
99150
|
+
graphValues,
|
|
99151
|
+
args.produced.provisionalRootId,
|
|
99152
|
+
rootRow.id
|
|
99153
|
+
);
|
|
99154
|
+
}
|
|
99088
99155
|
const ownerByValueId = resolveSemanticOwnerMembersForValues(
|
|
99089
99156
|
{ ...args.document, values: [...graphValues, rootRow] },
|
|
99090
99157
|
new Set(args.createdValues.map((value) => value.id)),
|
|
@@ -137722,7 +137789,7 @@ var init_registry2 = __esm({
|
|
|
137722
137789
|
"schema-contract/registry.mjs"() {
|
|
137723
137790
|
"use strict";
|
|
137724
137791
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
137725
|
-
cliVersion: "0.52.
|
|
137792
|
+
cliVersion: "0.52.5",
|
|
137726
137793
|
projectFileUploadBatchSize: 32,
|
|
137727
137794
|
documentRecords: {
|
|
137728
137795
|
member: {
|
|
@@ -145595,7 +145662,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
|
|
|
145595
145662
|
async function main() {
|
|
145596
145663
|
const args = parseArgs(process.argv.slice(2));
|
|
145597
145664
|
if (args.command === "--version") {
|
|
145598
|
-
console.log("0.52.
|
|
145665
|
+
console.log("0.52.5");
|
|
145599
145666
|
return;
|
|
145600
145667
|
}
|
|
145601
145668
|
if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
|
package/package.json
CHANGED
|
@@ -97,7 +97,7 @@ wrappers.
|
|
|
97
97
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
98
98
|
|
|
99
99
|
```html
|
|
100
|
-
<!-- reviewed-through-cli: 0.52.
|
|
100
|
+
<!-- reviewed-through-cli: 0.52.5 -->
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
The quoted version above is checked too, so this instruction cannot go stale
|