@neocompose/cli 0.64.0 → 0.64.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,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.64.1] - 2026-10-02
|
|
4
|
+
|
|
5
|
+
- Reserve `OnChanged` as a member name. Every generated Unity class declares the SDK's `OnChanged` change subscription, so a member by that name now reports `reserved-project-name` instead of pushing the SDK method aside as `OnChanged_2`.
|
|
6
|
+
|
|
3
7
|
## [0.64.0] - 2026-10-02
|
|
4
8
|
|
|
5
9
|
- Compare Class, interface, List, Set, and Dictionary values by identity in `==`, `!=`, `Contains`, `IndexOf`, and `Remove`. Two values with identical fields are no longer equal; two reads of one stored value still are. Primitives, enums, vectors, and media references still compare by value. Compiler revision 16 recompiles every stored body, so existing scripts switch too. A CLI upgrade now invalidates the local build cache, which previously kept serving IR from the older compiler for unchanged source.
|
package/dist/neo.mjs
CHANGED
|
@@ -822,7 +822,11 @@ var init_project_source_identifiers = __esm({
|
|
|
822
822
|
...NEOSCRIPT_KEYWORDS,
|
|
823
823
|
...NEOSCRIPT_BUILTIN_NAMESPACES
|
|
824
824
|
]);
|
|
825
|
-
PROJECT_MEMBER_RESERVED_NAMES = new Set(
|
|
825
|
+
PROJECT_MEMBER_RESERVED_NAMES = /* @__PURE__ */ new Set([
|
|
826
|
+
...NEOSCRIPT_KEYWORDS,
|
|
827
|
+
// Every generated C# class declares the SDK's change subscription.
|
|
828
|
+
"OnChanged"
|
|
829
|
+
]);
|
|
826
830
|
PROJECT_BINDING_RESERVED_NAMES = /* @__PURE__ */ new Set([
|
|
827
831
|
...PROJECT_RESERVED_NAMES,
|
|
828
832
|
"this",
|
|
@@ -29930,7 +29934,7 @@ var init_registry = __esm({
|
|
|
29930
29934
|
"../packages/manifest/schema-contract/registry.mjs"() {
|
|
29931
29935
|
"use strict";
|
|
29932
29936
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
29933
|
-
cliVersion: "0.64.
|
|
29937
|
+
cliVersion: "0.64.1",
|
|
29934
29938
|
projectFileUploadBatchSize: 32,
|
|
29935
29939
|
documentRecords: {
|
|
29936
29940
|
member: {
|
|
@@ -40272,7 +40276,7 @@ var init_neoscript_compiler_revision = __esm({
|
|
|
40272
40276
|
"use strict";
|
|
40273
40277
|
init_strict_ir();
|
|
40274
40278
|
ACTIVE_NEOSCRIPT_COMPILER_REVISION_ROLLOUT = // <neoscript-compiler-revision-rollout>
|
|
40275
|
-
|
|
40279
|
+
null;
|
|
40276
40280
|
}
|
|
40277
40281
|
});
|
|
40278
40282
|
|
|
@@ -69918,6 +69922,7 @@ function evaluateNSGetterWithEffects(getter, ctx, argumentValues = [], options =
|
|
|
69918
69922
|
getter.typeInfo
|
|
69919
69923
|
);
|
|
69920
69924
|
result.value = preserveReadOnlyReturnIdentity(result.value, runtimeCtx);
|
|
69925
|
+
options.inspectResult?.(result.value, runtimeCtx);
|
|
69921
69926
|
const createdSessionValues = exportedSessionValuesSince(
|
|
69922
69927
|
runtimeCtx,
|
|
69923
69928
|
creationCheckpoint,
|
|
@@ -73866,7 +73871,8 @@ function createUnorderedListProjectionCache() {
|
|
|
73866
73871
|
byContainerId: /* @__PURE__ */ new Map(),
|
|
73867
73872
|
containerIdByArray: /* @__PURE__ */ new WeakMap(),
|
|
73868
73873
|
scalarEntryIds: /* @__PURE__ */ new Set(),
|
|
73869
|
-
referenceEntryIndexesByArray: /* @__PURE__ */ new WeakMap()
|
|
73874
|
+
referenceEntryIndexesByArray: /* @__PURE__ */ new WeakMap(),
|
|
73875
|
+
referenceEntryKeysByRecord: /* @__PURE__ */ new WeakMap()
|
|
73870
73876
|
};
|
|
73871
73877
|
}
|
|
73872
73878
|
function createUnorderedScalarProjectionEntry(containerValueId, value, ctx, consumeEntryBudget = true) {
|
|
@@ -75399,6 +75405,7 @@ function evalFunction(fn, scope, ctx) {
|
|
|
75399
75405
|
const isList = isListCollection(c);
|
|
75400
75406
|
const out = isList ? [] : {};
|
|
75401
75407
|
const referenceEntryIndexes = /* @__PURE__ */ new Set();
|
|
75408
|
+
const referenceEntryKeys = /* @__PURE__ */ new Set();
|
|
75402
75409
|
const callback = prepareCollectionCallback(
|
|
75403
75410
|
innerFn,
|
|
75404
75411
|
scope,
|
|
@@ -75418,6 +75425,7 @@ function evalFunction(fn, scope, ctx) {
|
|
|
75418
75425
|
}
|
|
75419
75426
|
out.push(valueId ?? entry);
|
|
75420
75427
|
} else {
|
|
75428
|
+
if (valueId !== null) referenceEntryKeys.add(String(key));
|
|
75421
75429
|
out[String(key)] = valueId ?? entry;
|
|
75422
75430
|
}
|
|
75423
75431
|
return 0 /* Continue */;
|
|
@@ -75430,6 +75438,11 @@ function evalFunction(fn, scope, ctx) {
|
|
|
75430
75438
|
referenceEntryIndexes
|
|
75431
75439
|
);
|
|
75432
75440
|
}
|
|
75441
|
+
if (!isList)
|
|
75442
|
+
unorderedListProjectionCache(ctx).referenceEntryKeysByRecord.set(
|
|
75443
|
+
out,
|
|
75444
|
+
referenceEntryKeys
|
|
75445
|
+
);
|
|
75433
75446
|
return out;
|
|
75434
75447
|
}
|
|
75435
75448
|
case "first" /* first */:
|
|
@@ -156152,7 +156165,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
|
|
|
156152
156165
|
async function main() {
|
|
156153
156166
|
const args = parseArgs(process.argv.slice(2));
|
|
156154
156167
|
if (args.command === "--version") {
|
|
156155
|
-
console.log("0.64.
|
|
156168
|
+
console.log("0.64.1");
|
|
156156
156169
|
return;
|
|
156157
156170
|
}
|
|
156158
156171
|
if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
|
package/dist/test-worker.mjs
CHANGED
|
@@ -2172,7 +2172,11 @@ var PROJECT_RESERVED_NAMES = /* @__PURE__ */ new Set([
|
|
|
2172
2172
|
...NEOSCRIPT_KEYWORDS,
|
|
2173
2173
|
...NEOSCRIPT_BUILTIN_NAMESPACES
|
|
2174
2174
|
]);
|
|
2175
|
-
var PROJECT_MEMBER_RESERVED_NAMES = new Set(
|
|
2175
|
+
var PROJECT_MEMBER_RESERVED_NAMES = /* @__PURE__ */ new Set([
|
|
2176
|
+
...NEOSCRIPT_KEYWORDS,
|
|
2177
|
+
// Every generated C# class declares the SDK's change subscription.
|
|
2178
|
+
"OnChanged"
|
|
2179
|
+
]);
|
|
2176
2180
|
var PROJECT_BINDING_RESERVED_NAMES = /* @__PURE__ */ new Set([
|
|
2177
2181
|
...PROJECT_RESERVED_NAMES,
|
|
2178
2182
|
"this",
|
|
@@ -2224,7 +2228,7 @@ function isValidSchemaNSFunctionBindingIdentifier(value) {
|
|
|
2224
2228
|
// ../src/models/neoscript/neoscript-compiler-revision.ts
|
|
2225
2229
|
var ACTIVE_NEOSCRIPT_COMPILER_REVISION_ROLLOUT = (
|
|
2226
2230
|
// <neoscript-compiler-revision-rollout>
|
|
2227
|
-
|
|
2231
|
+
null
|
|
2228
2232
|
);
|
|
2229
2233
|
function isAcceptedNeoScriptCompilerRevision(stamp, rollout = ACTIVE_NEOSCRIPT_COMPILER_REVISION_ROLLOUT) {
|
|
2230
2234
|
if (stamp === NEOSCRIPT_COMPILER_REVISION) return true;
|
|
@@ -15000,6 +15004,7 @@ function evaluateNSGetterWithEffects(getter, ctx, argumentValues = [], options =
|
|
|
15000
15004
|
getter.typeInfo
|
|
15001
15005
|
);
|
|
15002
15006
|
result.value = preserveReadOnlyReturnIdentity(result.value, runtimeCtx);
|
|
15007
|
+
options.inspectResult?.(result.value, runtimeCtx);
|
|
15003
15008
|
const createdSessionValues = exportedSessionValuesSince(
|
|
15004
15009
|
runtimeCtx,
|
|
15005
15010
|
creationCheckpoint,
|
|
@@ -19010,7 +19015,8 @@ function createUnorderedListProjectionCache() {
|
|
|
19010
19015
|
byContainerId: /* @__PURE__ */ new Map(),
|
|
19011
19016
|
containerIdByArray: /* @__PURE__ */ new WeakMap(),
|
|
19012
19017
|
scalarEntryIds: /* @__PURE__ */ new Set(),
|
|
19013
|
-
referenceEntryIndexesByArray: /* @__PURE__ */ new WeakMap()
|
|
19018
|
+
referenceEntryIndexesByArray: /* @__PURE__ */ new WeakMap(),
|
|
19019
|
+
referenceEntryKeysByRecord: /* @__PURE__ */ new WeakMap()
|
|
19014
19020
|
};
|
|
19015
19021
|
}
|
|
19016
19022
|
function createUnorderedScalarProjectionEntry(containerValueId, value, ctx, consumeEntryBudget = true) {
|
|
@@ -20556,6 +20562,7 @@ function evalFunction(fn, scope, ctx) {
|
|
|
20556
20562
|
const isList = isListCollection(c);
|
|
20557
20563
|
const out = isList ? [] : {};
|
|
20558
20564
|
const referenceEntryIndexes = /* @__PURE__ */ new Set();
|
|
20565
|
+
const referenceEntryKeys = /* @__PURE__ */ new Set();
|
|
20559
20566
|
const callback = prepareCollectionCallback(
|
|
20560
20567
|
innerFn,
|
|
20561
20568
|
scope,
|
|
@@ -20575,6 +20582,7 @@ function evalFunction(fn, scope, ctx) {
|
|
|
20575
20582
|
}
|
|
20576
20583
|
out.push(valueId ?? entry);
|
|
20577
20584
|
} else {
|
|
20585
|
+
if (valueId !== null) referenceEntryKeys.add(String(key));
|
|
20578
20586
|
out[String(key)] = valueId ?? entry;
|
|
20579
20587
|
}
|
|
20580
20588
|
return 0 /* Continue */;
|
|
@@ -20587,6 +20595,11 @@ function evalFunction(fn, scope, ctx) {
|
|
|
20587
20595
|
referenceEntryIndexes
|
|
20588
20596
|
);
|
|
20589
20597
|
}
|
|
20598
|
+
if (!isList)
|
|
20599
|
+
unorderedListProjectionCache(ctx).referenceEntryKeysByRecord.set(
|
|
20600
|
+
out,
|
|
20601
|
+
referenceEntryKeys
|
|
20602
|
+
);
|
|
20590
20603
|
return out;
|
|
20591
20604
|
}
|
|
20592
20605
|
case "first" /* first */:
|
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.64.
|
|
113
|
+
<!-- reviewed-through-cli: 0.64.1 -->
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
The quoted version above is checked too, so this instruction cannot go stale
|
|
@@ -48,7 +48,7 @@ keeps its meaning.
|
|
|
48
48
|
|
|
49
49
|
In a void context — a `void` function, a setter, or a void delegate — `=> expr`
|
|
50
50
|
is an expression statement rather than a return, so the expression must do
|
|
51
|
-
something: a call such as `void Ping() => this.
|
|
51
|
+
something: a call such as `void Ping() => this.OnUpdated();`, or an assignment
|
|
52
52
|
such as `set(int value) => this.Raw = value;`. An expression whose value would
|
|
53
53
|
simply be discarded is rejected with a diagnostic that names the block body as
|
|
54
54
|
the fix.
|
|
@@ -106,11 +106,11 @@ migration, and text-variable bodies against that same source transaction, so
|
|
|
106
106
|
new declarations do not depend on a prior push or a network fetch.
|
|
107
107
|
|
|
108
108
|
Inside an inline Class body, unqualified names resolve against that Class;
|
|
109
|
-
invoke delegate and action members directly with `Selector()` or `
|
|
109
|
+
invoke delegate and action members directly with `Selector()` or `OnUpdated()`.
|
|
110
110
|
Spell a zero-argument action as bare `NeoAction`; type arguments name action
|
|
111
111
|
parameters, so `NeoAction<void>` is invalid rather than a zero-argument alias.
|
|
112
112
|
Clear every subscribed listener from a stored action with
|
|
113
|
-
`this.
|
|
113
|
+
`this.OnUpdated.Clear()`. `Clear()` is a mutating statement and follows the
|
|
114
114
|
action member's effective storage and writability. Only the action's declaring
|
|
115
115
|
class and derived classes may invoke it or call `Clear()`; public external
|
|
116
116
|
callers may subscribe and unsubscribe with `+=` and `-=` but cannot raise or
|