@neocompose/cli 0.65.0 → 0.65.1
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,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.65.1] - 2026-10-03
|
|
4
|
+
|
|
5
|
+
- Pull and push reconciliation emit a stored `new NeoAnimationSegmentFrame<NeoCollider?>(value: null)`. A null constructor argument typed by a class's generic parameter now checks nullability against the row's type argument. Previously, a pushed segment holding a null frame committed, but source reconciliation failed with "Required constructor argument stores null".
|
|
6
|
+
- Pulled type arguments keep a nullable binding's `?`, in constructions, references, and declared member types. Previously `FrameBox<NeoCollider?> Box` pulled as `FrameBox<NeoCollider> Box`, and the next push made the binding required.
|
|
7
|
+
- Code compiled from stored records keeps a nullable binding's `?`. A member declared `NeoAnimationSegmentFrame<NeoCollider?>` keeps that type, so passing it where that type is expected compiles, and reading its value as a required `NeoCollider` reports an error. Previously, every bound type argument was typed as required.
|
|
8
|
+
|
|
3
9
|
## [0.65.0] - 2026-10-03
|
|
4
10
|
|
|
5
11
|
- Move `Collider` from `NeoObject` to `NeoObjectBase`, so sprite objects and layer groups can carry a box collider too. Unity codegen implements `INeoColliderSource` on `NeoObjectBase`.
|
package/dist/neo.mjs
CHANGED
|
@@ -29955,7 +29955,7 @@ var init_registry = __esm({
|
|
|
29955
29955
|
"../packages/manifest/schema-contract/registry.mjs"() {
|
|
29956
29956
|
"use strict";
|
|
29957
29957
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
29958
|
-
cliVersion: "0.65.
|
|
29958
|
+
cliVersion: "0.65.1",
|
|
29959
29959
|
projectFileUploadBatchSize: 32,
|
|
29960
29960
|
documentRecords: {
|
|
29961
29961
|
member: {
|
|
@@ -52525,7 +52525,7 @@ function renderMemberType(context, member, enclosingClassId, elementSettings = f
|
|
|
52525
52525
|
context,
|
|
52526
52526
|
required(context.members, boundMemberId, "generic binding"),
|
|
52527
52527
|
enclosingClassId
|
|
52528
|
-
)
|
|
52528
|
+
);
|
|
52529
52529
|
});
|
|
52530
52530
|
value = `${schemaClass2.name}${args.length ? `<${args.join(", ")}>` : ""}`;
|
|
52531
52531
|
}
|
|
@@ -65468,13 +65468,11 @@ function classArguments(member, context, seen, genericEnvironment) {
|
|
|
65468
65468
|
if (environmentEntry?.kind === "member") {
|
|
65469
65469
|
const argument3 = analyzerMemberById(context, environmentEntry.memberId);
|
|
65470
65470
|
return argument3 ? [
|
|
65471
|
-
|
|
65472
|
-
|
|
65473
|
-
|
|
65474
|
-
|
|
65475
|
-
|
|
65476
|
-
genericEnvironment
|
|
65477
|
-
)
|
|
65471
|
+
memberRuntimeType(
|
|
65472
|
+
argument3,
|
|
65473
|
+
context,
|
|
65474
|
+
new Set(seen),
|
|
65475
|
+
genericEnvironment
|
|
65478
65476
|
)
|
|
65479
65477
|
] : [];
|
|
65480
65478
|
}
|
|
@@ -65489,13 +65487,11 @@ function classArguments(member, context, seen, genericEnvironment) {
|
|
|
65489
65487
|
}
|
|
65490
65488
|
const argument2 = analyzerMemberById(context, binding.memberId);
|
|
65491
65489
|
return argument2 ? [
|
|
65492
|
-
|
|
65493
|
-
|
|
65494
|
-
|
|
65495
|
-
|
|
65496
|
-
|
|
65497
|
-
genericEnvironment
|
|
65498
|
-
)
|
|
65490
|
+
memberRuntimeType(
|
|
65491
|
+
argument2,
|
|
65492
|
+
context,
|
|
65493
|
+
new Set(seen),
|
|
65494
|
+
genericEnvironment
|
|
65499
65495
|
)
|
|
65500
65496
|
] : [];
|
|
65501
65497
|
});
|
|
@@ -65682,11 +65678,7 @@ function genericConstraintLanguageType(constraint, context, genericEnvironment,
|
|
|
65682
65678
|
];
|
|
65683
65679
|
}
|
|
65684
65680
|
const member = analyzerMemberById(context, binding.memberId);
|
|
65685
|
-
return member ? [
|
|
65686
|
-
requiredType(
|
|
65687
|
-
memberRuntimeType(member, context, /* @__PURE__ */ new Set(), genericEnvironment)
|
|
65688
|
-
)
|
|
65689
|
-
] : [];
|
|
65681
|
+
return member ? [memberRuntimeType(member, context, /* @__PURE__ */ new Set(), genericEnvironment)] : [];
|
|
65690
65682
|
});
|
|
65691
65683
|
return {
|
|
65692
65684
|
kind: "named",
|
|
@@ -127740,7 +127732,7 @@ function recordedStoredConstructorId(value, schemaClass2) {
|
|
|
127740
127732
|
}
|
|
127741
127733
|
function storedConstructorArgumentSource(context, type, value, environment, visited, cloneAggregateArguments = false, partial = false, constructorOwnsGraph = false) {
|
|
127742
127734
|
if (value === null) {
|
|
127743
|
-
if (!type.nullable) {
|
|
127735
|
+
if (!type.nullable && (type.kind !== "generic" || !storedGenericArgumentType(context, type, environment).nullable)) {
|
|
127744
127736
|
throw new Error("Required constructor argument stores null.");
|
|
127745
127737
|
}
|
|
127746
127738
|
return "null";
|
|
@@ -127830,26 +127822,10 @@ function storedConstructorArgumentSource(context, type, value, environment, visi
|
|
|
127830
127822
|
constructorOwnsGraph
|
|
127831
127823
|
);
|
|
127832
127824
|
}
|
|
127833
|
-
case "generic":
|
|
127834
|
-
const bindingId = environment.get(type.genericParamId);
|
|
127835
|
-
const inferredClassId = inferredGenericClassId(bindingId);
|
|
127836
|
-
const resolvedType = inferredClassId === null ? bindingId === void 0 ? null : schemaTypeForBindingMember(context, bindingId, environment) : {
|
|
127837
|
-
kind: "class",
|
|
127838
|
-
nullable: type.nullable,
|
|
127839
|
-
classId: inferredClassId,
|
|
127840
|
-
classArguments: {}
|
|
127841
|
-
};
|
|
127842
|
-
if (resolvedType === null) {
|
|
127843
|
-
throw new Error(
|
|
127844
|
-
`Stored Generic constructor argument cannot resolve parameter ${type.genericParamId}.`
|
|
127845
|
-
);
|
|
127846
|
-
}
|
|
127825
|
+
case "generic":
|
|
127847
127826
|
return storedConstructorArgumentSource(
|
|
127848
127827
|
context,
|
|
127849
|
-
|
|
127850
|
-
resolvedType,
|
|
127851
|
-
type.nullable || resolvedType.nullable
|
|
127852
|
-
),
|
|
127828
|
+
storedGenericArgumentType(context, type, environment),
|
|
127853
127829
|
value,
|
|
127854
127830
|
environment,
|
|
127855
127831
|
visited,
|
|
@@ -127857,7 +127833,6 @@ function storedConstructorArgumentSource(context, type, value, environment, visi
|
|
|
127857
127833
|
partial,
|
|
127858
127834
|
constructorOwnsGraph
|
|
127859
127835
|
);
|
|
127860
|
-
}
|
|
127861
127836
|
case "interface":
|
|
127862
127837
|
case "list":
|
|
127863
127838
|
case "dictionary":
|
|
@@ -127908,6 +127883,25 @@ function storedConstructorArgumentSource(context, type, value, environment, visi
|
|
|
127908
127883
|
);
|
|
127909
127884
|
}
|
|
127910
127885
|
}
|
|
127886
|
+
function storedGenericArgumentType(context, type, environment) {
|
|
127887
|
+
const bindingId = environment.get(type.genericParamId);
|
|
127888
|
+
const inferredClassId = inferredGenericClassId(bindingId);
|
|
127889
|
+
const resolvedType = inferredClassId === null ? bindingId === void 0 ? null : schemaTypeForBindingMember(context, bindingId, environment) : {
|
|
127890
|
+
kind: "class",
|
|
127891
|
+
nullable: type.nullable,
|
|
127892
|
+
classId: inferredClassId,
|
|
127893
|
+
classArguments: {}
|
|
127894
|
+
};
|
|
127895
|
+
if (resolvedType === null) {
|
|
127896
|
+
throw new Error(
|
|
127897
|
+
`Stored Generic constructor argument cannot resolve parameter ${type.genericParamId}.`
|
|
127898
|
+
);
|
|
127899
|
+
}
|
|
127900
|
+
return withSchemaTypeNullability(
|
|
127901
|
+
resolvedType,
|
|
127902
|
+
type.nullable || resolvedType.nullable
|
|
127903
|
+
);
|
|
127904
|
+
}
|
|
127911
127905
|
function schemaTypeForBindingMember(context, memberId, environment, visited = /* @__PURE__ */ new Set()) {
|
|
127912
127906
|
if (visited.has(memberId)) {
|
|
127913
127907
|
throw new Error(
|
|
@@ -128073,6 +128067,10 @@ function storedAggregateReplaySource(context, type, valueId, environment, constr
|
|
|
128073
128067
|
function isSharedConstructorArgument(context, valueId, constructorOwnsGraph) {
|
|
128074
128068
|
return !constructorOwnsGraph && context.readMaterializedGraph().independentlyOwnedValueIds.has(valueId);
|
|
128075
128069
|
}
|
|
128070
|
+
function storedTypeArgumentName(context, type, environment) {
|
|
128071
|
+
const settled = type.kind === "generic" ? storedGenericArgumentType(context, type, environment) : type;
|
|
128072
|
+
return `${storedSchemaTypeName(context, settled, environment)}${settled.nullable ? "?" : ""}`;
|
|
128073
|
+
}
|
|
128076
128074
|
function storedSchemaTypeName(context, type, environment, valueId) {
|
|
128077
128075
|
switch (type.kind) {
|
|
128078
128076
|
case "unknown":
|
|
@@ -128085,7 +128083,7 @@ function storedSchemaTypeName(context, type, environment, valueId) {
|
|
|
128085
128083
|
const argumentsValue = schemaClass2.genericParameters.flatMap(
|
|
128086
128084
|
(parameter4) => {
|
|
128087
128085
|
const argument2 = type.classArguments[parameter4.id];
|
|
128088
|
-
return argument2 === void 0 ? [] : [
|
|
128086
|
+
return argument2 === void 0 ? [] : [storedTypeArgumentName(context, argument2, environment)];
|
|
128089
128087
|
}
|
|
128090
128088
|
);
|
|
128091
128089
|
return `${schemaClass2.name}${argumentsValue.length === 0 ? "" : `<${argumentsValue.join(", ")}>`}`;
|
|
@@ -128113,10 +128111,10 @@ function storedSchemaTypeName(context, type, environment, valueId) {
|
|
|
128113
128111
|
return manifestMemberTypeName(context, member);
|
|
128114
128112
|
}
|
|
128115
128113
|
case "list":
|
|
128116
|
-
return `List<${
|
|
128114
|
+
return `List<${storedTypeArgumentName(context, type.entryType, environment)}>`;
|
|
128117
128115
|
case "dictionary": {
|
|
128118
128116
|
const keyType = type.keyEnumId === null ? "string" : stringField3(context.enums.get(type.keyEnumId) ?? {}, "name");
|
|
128119
|
-
return `Dictionary<${keyType}, ${
|
|
128117
|
+
return `Dictionary<${keyType}, ${storedTypeArgumentName(context, type.entryType, environment)}>`;
|
|
128120
128118
|
}
|
|
128121
128119
|
case "bool":
|
|
128122
128120
|
case "int":
|
|
@@ -128333,10 +128331,13 @@ function classValueTypeName(context, classId, member, environment) {
|
|
|
128333
128331
|
`Stored Class member ${String(member.name ?? member.id)} has no concrete ${parameter4.name} binding.`
|
|
128334
128332
|
);
|
|
128335
128333
|
}
|
|
128336
|
-
return
|
|
128334
|
+
return typeArgumentName(context, bindingMember);
|
|
128337
128335
|
});
|
|
128338
128336
|
return `${name}<${argumentsValue.join(", ")}>`;
|
|
128339
128337
|
}
|
|
128338
|
+
function typeArgumentName(context, member) {
|
|
128339
|
+
return `${manifestMemberTypeName(context, member)}${member.required ? "" : "?"}`;
|
|
128340
|
+
}
|
|
128340
128341
|
function manifestMemberTypeName(context, member) {
|
|
128341
128342
|
if (member.kind === "class") {
|
|
128342
128343
|
const schemaClass2 = context.manifestClasses.get(member.classId);
|
|
@@ -128357,7 +128358,7 @@ function manifestMemberTypeName(context, member) {
|
|
|
128357
128358
|
`Stored generic binding ${binding.memberId} was not pulled.`
|
|
128358
128359
|
);
|
|
128359
128360
|
}
|
|
128360
|
-
return
|
|
128361
|
+
return typeArgumentName(context, argument2);
|
|
128361
128362
|
});
|
|
128362
128363
|
return `${schemaClass2.name}<${argumentsValue.join(", ")}>`;
|
|
128363
128364
|
}
|
|
@@ -156205,7 +156206,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
|
|
|
156205
156206
|
async function main() {
|
|
156206
156207
|
const args = parseArgs(process.argv.slice(2));
|
|
156207
156208
|
if (args.command === "--version") {
|
|
156208
|
-
console.log("0.65.
|
|
156209
|
+
console.log("0.65.1");
|
|
156209
156210
|
return;
|
|
156210
156211
|
}
|
|
156211
156212
|
if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
|
package/dist/test-worker.mjs
CHANGED
|
@@ -40639,13 +40639,11 @@ function classArguments(member, context, seen, genericEnvironment) {
|
|
|
40639
40639
|
if (environmentEntry?.kind === "member") {
|
|
40640
40640
|
const argument3 = analyzerMemberById(context, environmentEntry.memberId);
|
|
40641
40641
|
return argument3 ? [
|
|
40642
|
-
|
|
40643
|
-
|
|
40644
|
-
|
|
40645
|
-
|
|
40646
|
-
|
|
40647
|
-
genericEnvironment
|
|
40648
|
-
)
|
|
40642
|
+
memberRuntimeType(
|
|
40643
|
+
argument3,
|
|
40644
|
+
context,
|
|
40645
|
+
new Set(seen),
|
|
40646
|
+
genericEnvironment
|
|
40649
40647
|
)
|
|
40650
40648
|
] : [];
|
|
40651
40649
|
}
|
|
@@ -40660,13 +40658,11 @@ function classArguments(member, context, seen, genericEnvironment) {
|
|
|
40660
40658
|
}
|
|
40661
40659
|
const argument2 = analyzerMemberById(context, binding.memberId);
|
|
40662
40660
|
return argument2 ? [
|
|
40663
|
-
|
|
40664
|
-
|
|
40665
|
-
|
|
40666
|
-
|
|
40667
|
-
|
|
40668
|
-
genericEnvironment
|
|
40669
|
-
)
|
|
40661
|
+
memberRuntimeType(
|
|
40662
|
+
argument2,
|
|
40663
|
+
context,
|
|
40664
|
+
new Set(seen),
|
|
40665
|
+
genericEnvironment
|
|
40670
40666
|
)
|
|
40671
40667
|
] : [];
|
|
40672
40668
|
});
|
|
@@ -40853,11 +40849,7 @@ function genericConstraintLanguageType(constraint, context, genericEnvironment,
|
|
|
40853
40849
|
];
|
|
40854
40850
|
}
|
|
40855
40851
|
const member = analyzerMemberById(context, binding.memberId);
|
|
40856
|
-
return member ? [
|
|
40857
|
-
requiredType(
|
|
40858
|
-
memberRuntimeType(member, context, /* @__PURE__ */ new Set(), genericEnvironment)
|
|
40859
|
-
)
|
|
40860
|
-
] : [];
|
|
40852
|
+
return member ? [memberRuntimeType(member, context, /* @__PURE__ */ new Set(), genericEnvironment)] : [];
|
|
40861
40853
|
});
|
|
40862
40854
|
return {
|
|
40863
40855
|
kind: "named",
|
package/package.json
CHANGED
|
@@ -110,7 +110,7 @@ wrappers.
|
|
|
110
110
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
111
111
|
|
|
112
112
|
```html
|
|
113
|
-
<!-- reviewed-through-cli: 0.65.
|
|
113
|
+
<!-- reviewed-through-cli: 0.65.1 -->
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
The quoted version above is checked too, so this instruction cannot go stale
|