@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.
- package/CHANGELOG.md +14 -0
- package/README.md +9 -2
- package/dist/neo.mjs +17709 -1843
- package/dist/test-worker.mjs +48 -1
- package/package.json +2 -1
- package/skills/neocompose-cli/SKILL.md +1 -1
- package/skills/neocompose-cli/references/cli-development.md +1 -1
- package/skills/neocompose-cli/references/commands-and-sync.md +20 -7
package/dist/test-worker.mjs
CHANGED
|
@@ -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.
|
|
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",
|
|
@@ -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.
|
|
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
|
|
294
|
-
|
|
295
|
-
`neo export
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
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
|
|