@neocompose/cli 0.68.4 → 0.69.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.
@@ -37258,6 +37258,17 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
37258
37258
  targetType,
37259
37259
  schemaClass
37260
37260
  );
37261
+ if (memberType.kind === "action") {
37262
+ return {
37263
+ schemaKey: member.schemaKey ?? member.name,
37264
+ memberId: member.id,
37265
+ valuePointer: this.resolveReplayedListenerSet(
37266
+ entry.value,
37267
+ memberType,
37268
+ scope
37269
+ )
37270
+ };
37271
+ }
37261
37272
  const value = this.resolveExpression(entry.value, scope, memberType);
37262
37273
  if (!isNeoScriptTypeAssignable(value.type, memberType, this.project)) {
37263
37274
  throw new CompileError(
@@ -37272,6 +37283,43 @@ var StrictNeoScriptResolver = class _StrictNeoScriptResolver {
37272
37283
  };
37273
37284
  });
37274
37285
  }
37286
+ /**
37287
+ * P62 §2. A stored action slot replays as the listener list it stores. Each
37288
+ * entry resolves to the same static (member, row) identity the authored list
37289
+ * lowers to. Executable script cannot reassign a listener set (§3.2).
37290
+ */
37291
+ resolveReplayedListenerSet(expression, actionType, scope) {
37292
+ if (this.context.storedConstructionReplay !== true) {
37293
+ throw new CompileError(
37294
+ `Cannot assign to ${this.describe(actionType)}; a listener set is not reassignable from script. Use '+=' to add a listener or '-=' to remove one.`,
37295
+ expression.pos
37296
+ );
37297
+ }
37298
+ if (expression.kind !== "litList") {
37299
+ throw new CompileError(
37300
+ `A stored ${this.describe(actionType)} replays as a bracketed listener list.`,
37301
+ expression.pos
37302
+ );
37303
+ }
37304
+ const listeners = [];
37305
+ for (const element of expression.elements) {
37306
+ const listener = this.resolveActionListener(element, actionType, scope);
37307
+ if (listener.type !== "value" /* Value */) {
37308
+ throw new CompileError(
37309
+ "A stored listener must name a stable (member, row) target.",
37310
+ element.pos
37311
+ );
37312
+ }
37313
+ listeners.push(listener.value.value);
37314
+ }
37315
+ return {
37316
+ type: "value" /* Value */,
37317
+ value: {
37318
+ typeInfo: toWireType(actionType, this.project),
37319
+ value: { listeners }
37320
+ }
37321
+ };
37322
+ }
37275
37323
  resolveTileConversion(callee, args, typeArguments, scope, pos) {
37276
37324
  const receiver = this.resolveExpression(callee.receiver, scope);
37277
37325
  const owner = receiver.type.kind === "named" ? this.project.typeById.get(receiver.type.typeId) : void 0;
@@ -43398,7 +43446,6 @@ var project_document_read_exports = {};
43398
43446
  __export(project_document_read_exports, {
43399
43447
  DOCUMENT_MANIFEST_PAGE_SIZE: () => DOCUMENT_MANIFEST_PAGE_SIZE,
43400
43448
  assembleProjectDocumentRaw: () => assembleProjectDocumentRaw,
43401
- createDocumentPageReader: () => createDocumentPageReader,
43402
43449
  fetchProjectDocumentPartitionRecords: () => fetchProjectDocumentPartitionRecords,
43403
43450
  fetchProjectDocumentRawChunked: () => fetchProjectDocumentRawChunked,
43404
43451
  fetchProjectDocumentRawChunkedOnce: () => fetchProjectDocumentRawChunkedOnce,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.68.4",
3
+ "version": "0.69.1",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -41,6 +41,7 @@
41
41
  "valibot": "^1.4.2"
42
42
  },
43
43
  "devDependencies": {
44
+ "@formatjs/icu-messageformat-parser": "^3.5.21",
44
45
  "@neocompose/manifest": "file:../packages/manifest",
45
46
  "@neocompose/neoscript-language": "file:../packages/neoscript-language",
46
47
  "esbuild": "^0.28.1",
@@ -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.68.4 -->
12
+ <!-- reviewed-through-cli: 0.69.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.68.4 -->
113
+ <!-- reviewed-through-cli: 0.69.1 -->
114
114
  ```
115
115
 
116
116
  The quoted version above is checked too, so this instruction cannot go stale
@@ -290,13 +290,26 @@ honor both variables.
290
290
  Pass explicit project/version IDs and flags in automation. Prefer `--json` for
291
291
  machine-readable output and do not depend on interactive pickers or confirms.
292
292
 
293
- ## Unity code export
294
-
295
- `neo export unity --out <UnityAssetsDir>` writes separate C# files under
296
- `Scripts/Neo/Generated/`, named after the generated C# types, plus project and localization JSON. It compares
297
- contents before writing C#, preserves unchanged `.meta` files, removes obsolete
298
- outputs listed in `NeoGeneratedFiles.json`, and removes the former
299
- `NeoGeneratedTypes.cs`. Stable identities in the manifest preserve `.meta` GUIDs when types are renamed. Keep the manifest with the generated files.
293
+ ## Unity export
294
+
295
+ `neo export` builds the Unity export from the last pull, offline, and writes it
296
+ into the directories the Unity project's `NeoComposeConfig` asset names:
297
+ `project.json` with a partition index, `Partitions/*.json` holding value rows
298
+ by storage partition, localization files, and generated C# under
299
+ `<generatedTypesDirectory>/Generated/`. It writes only files whose bytes
300
+ changed, skips codegen when only values changed since the last export into
301
+ that Unity project, and writes `Library/NeoCompose/export.json` last for
302
+ Unity to ingest. Local edits are not exported: push and pull them first.
303
+
304
+ - The Unity project comes from `unityConfigPath`. Without it, an interactive
305
+ export offers to link the one config asset naming this project; scripts get
306
+ an error with the line to add.
307
+ - `--unity-project <dir>` exports into another Unity project without linking
308
+ it. Agent rigs use it.
309
+ - An error diagnostic, or a project file whose bytes differ from the pulled
310
+ file, stops the export before anything is written.
311
+ - `NeoGeneratedFiles.json` keeps `.meta` GUIDs across type renames. Keep it
312
+ with the generated files.
300
313
 
301
314
  ## Push timing diagnostics
302
315