@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(NEOSCRIPT_KEYWORDS);
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.0",
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
- { migrationId: "neoscript-compiler-revision-16", revision: 16 };
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.0");
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") {
@@ -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(NEOSCRIPT_KEYWORDS);
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
- { migrationId: "neoscript-compiler-revision-16", revision: 16 }
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.64.0",
3
+ "version": "0.64.1",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,7 +9,7 @@ description: >-
9
9
  `@neocompose/cli` or `node cli/bin/neo.mjs` in the neo-compose repository.
10
10
  ---
11
11
 
12
- <!-- reviewed-through-cli: 0.64.0 -->
12
+ <!-- reviewed-through-cli: 0.64.1 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -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.0 -->
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.OnChanged();`, or an assignment
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 `OnChanged()`.
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.OnChanged.Clear()`. `Clear()` is a mutating statement and follows the
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