@neocompose/cli 0.31.0 → 0.31.2
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,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.31.2] - 2026-08-14
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Allow newly authored `@relations` entries to create internal record
|
|
8
|
+
relations without requiring server-owned project and timestamp fields in
|
|
9
|
+
source, for both pending and explicit relation IDs.
|
|
10
|
+
|
|
11
|
+
## [0.31.1] - 2026-08-14
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- `neo script check` now preserves inline Class-body context and callable
|
|
16
|
+
delegate/action member types, so inherited generic selectors, unqualified
|
|
17
|
+
instance/static fields, and action invocation statements compile as authored.
|
|
18
|
+
|
|
3
19
|
## [0.31.0] - 2026-08-13
|
|
4
20
|
|
|
5
21
|
### Added
|
package/dist/neo.mjs
CHANGED
|
@@ -31333,6 +31333,29 @@ function memberType(member, environment, visiting, field) {
|
|
|
31333
31333
|
`${field}.returnType`
|
|
31334
31334
|
);
|
|
31335
31335
|
}
|
|
31336
|
+
if (kind === "delegate") {
|
|
31337
|
+
return {
|
|
31338
|
+
kind: "delegate",
|
|
31339
|
+
returnType: manifestReturnType(
|
|
31340
|
+
member.returnType,
|
|
31341
|
+
environment,
|
|
31342
|
+
`${field}.returnType`
|
|
31343
|
+
),
|
|
31344
|
+
parameterTypes: argumentsList(member.arguments, environment, field).map(
|
|
31345
|
+
(argument2) => argument2.type
|
|
31346
|
+
),
|
|
31347
|
+
nullable
|
|
31348
|
+
};
|
|
31349
|
+
}
|
|
31350
|
+
if (kind === "action") {
|
|
31351
|
+
return {
|
|
31352
|
+
kind: "action",
|
|
31353
|
+
parameterTypes: argumentsList(member.arguments, environment, field).map(
|
|
31354
|
+
(argument2) => argument2.type
|
|
31355
|
+
),
|
|
31356
|
+
nullable: false
|
|
31357
|
+
};
|
|
31358
|
+
}
|
|
31336
31359
|
if (kind === "generic") {
|
|
31337
31360
|
return typeParameter(
|
|
31338
31361
|
string2(member.genericParamId, `${field}.genericParamId`),
|
|
@@ -31478,10 +31501,14 @@ function scriptContexts(members, environment) {
|
|
|
31478
31501
|
const classId = owner?.kind === "classMember" && typeof owner.classId === "string" ? owner.classId : void 0;
|
|
31479
31502
|
const memberId = string2(member.id, "member.id");
|
|
31480
31503
|
const isStatic = boolean(member.isStatic, `member ${memberId}.isStatic`);
|
|
31504
|
+
const declaringType = classId ? { kind: "named", typeId: classId } : void 0;
|
|
31481
31505
|
const context = {
|
|
31482
31506
|
kind: member.kind === "computed" ? "property" : "function",
|
|
31483
31507
|
memberId,
|
|
31484
|
-
|
|
31508
|
+
...declaringType ? { declaringType } : {},
|
|
31509
|
+
...!isStatic && declaringType ? { thisClass: declaringType } : {},
|
|
31510
|
+
implicitMemberAccess: true,
|
|
31511
|
+
staticMember: isStatic,
|
|
31485
31512
|
returnType: manifestReturnType(
|
|
31486
31513
|
member.returnType,
|
|
31487
31514
|
environment,
|
|
@@ -31798,6 +31825,9 @@ function contextFromManifestScript(project, context) {
|
|
|
31798
31825
|
kind: context.kind,
|
|
31799
31826
|
project,
|
|
31800
31827
|
...context.thisClass ? { thisClass: context.thisClass } : {},
|
|
31828
|
+
...context.declaringType ? { declaringType: context.declaringType } : {},
|
|
31829
|
+
...context.implicitMemberAccess !== void 0 ? { implicitMemberAccess: context.implicitMemberAccess } : {},
|
|
31830
|
+
...context.staticMember !== void 0 ? { staticMember: context.staticMember } : {},
|
|
31801
31831
|
...context.returnType ? { returnType: context.returnType } : {},
|
|
31802
31832
|
...context.parameters ? { parameters: context.parameters } : {},
|
|
31803
31833
|
...context.deferred !== void 0 ? { deferred: context.deferred } : {},
|
|
@@ -79495,7 +79525,7 @@ function createNeoCliPushIntent(change) {
|
|
|
79495
79525
|
return createProjectVersionIntent(intentType, { source: "neo-cli" });
|
|
79496
79526
|
}
|
|
79497
79527
|
const relationData = change.kind === "delete" ? change.baseData : change.nextData;
|
|
79498
|
-
if (!
|
|
79528
|
+
if (!isPushIntentInternalRecordRelation(relationData, change.kind)) {
|
|
79499
79529
|
throw new Error(
|
|
79500
79530
|
`Cannot push internal record relation "${change.recordId}": ${change.kind} change has invalid relation data.`
|
|
79501
79531
|
);
|
|
@@ -79505,6 +79535,29 @@ function createNeoCliPushIntent(change) {
|
|
|
79505
79535
|
relationKind: relationData.relationKind
|
|
79506
79536
|
});
|
|
79507
79537
|
}
|
|
79538
|
+
function isPushIntentInternalRecordRelation(value, operation) {
|
|
79539
|
+
if (operation === "create") {
|
|
79540
|
+
return isAuthoredInternalRecordRelation(value);
|
|
79541
|
+
}
|
|
79542
|
+
return isInternalRecordRelation(value);
|
|
79543
|
+
}
|
|
79544
|
+
function isAuthoredInternalRecordRelation(value) {
|
|
79545
|
+
if (!isObjectRecord5(value)) return false;
|
|
79546
|
+
if (!isNonEmptyString3(value.id)) return false;
|
|
79547
|
+
if (!isNonEmptyString3(value.relationKind)) return false;
|
|
79548
|
+
if (!isProjectRecordKind(value.sourceRecordKind)) return false;
|
|
79549
|
+
if (!isNonEmptyString3(value.sourceRecordId)) return false;
|
|
79550
|
+
if (!isProjectRecordKind(value.targetRecordKind)) return false;
|
|
79551
|
+
if (!isNonEmptyString3(value.targetRecordId)) return false;
|
|
79552
|
+
if (value.orderKey === void 0) return true;
|
|
79553
|
+
return isNonEmptyString3(value.orderKey);
|
|
79554
|
+
}
|
|
79555
|
+
function isObjectRecord5(value) {
|
|
79556
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
79557
|
+
}
|
|
79558
|
+
function isNonEmptyString3(value) {
|
|
79559
|
+
return typeof value === "string" && value.length > 0;
|
|
79560
|
+
}
|
|
79508
79561
|
var init_push_change_intent = __esm({
|
|
79509
79562
|
"src/commands/push-change-intent.ts"() {
|
|
79510
79563
|
"use strict";
|
|
@@ -106471,11 +106524,11 @@ function assertProjectFileAuthoringRecordIdentifiers(recordKind, data) {
|
|
|
106471
106524
|
if (recordKind !== "unity-texture-template" && recordKind !== "unity-audio-clip-template") {
|
|
106472
106525
|
return;
|
|
106473
106526
|
}
|
|
106474
|
-
if (!
|
|
106527
|
+
if (!isObjectRecord6(data) || typeof data.name !== "string") return;
|
|
106475
106528
|
const label = recordKind === "unity-texture-template" ? "Unity texture template name" : "Unity audio clip template name";
|
|
106476
106529
|
assertProjectFileAuthoringIdentifier(data.name, label);
|
|
106477
106530
|
}
|
|
106478
|
-
function
|
|
106531
|
+
function isObjectRecord6(value) {
|
|
106479
106532
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
106480
106533
|
}
|
|
106481
106534
|
var init_project_file_authoring_identifiers = __esm({
|
|
@@ -109424,7 +109477,7 @@ var init_registry2 = __esm({
|
|
|
109424
109477
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
109425
109478
|
formatVersion: 3,
|
|
109426
109479
|
contractVersion: "3.12",
|
|
109427
|
-
cliVersion: "0.31.
|
|
109480
|
+
cliVersion: "0.31.2",
|
|
109428
109481
|
projectFileUploadBatchSize: 32,
|
|
109429
109482
|
documentRecords: {
|
|
109430
109483
|
member: {
|
|
@@ -116016,7 +116069,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
|
|
|
116016
116069
|
async function main() {
|
|
116017
116070
|
const args = parseArgs(process.argv.slice(2));
|
|
116018
116071
|
if (args.command === "--version") {
|
|
116019
|
-
console.log("0.31.
|
|
116072
|
+
console.log("0.31.2");
|
|
116020
116073
|
return;
|
|
116021
116074
|
}
|
|
116022
116075
|
if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
|
package/package.json
CHANGED
|
@@ -83,7 +83,7 @@ wrappers.
|
|
|
83
83
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
84
84
|
|
|
85
85
|
```html
|
|
86
|
-
<!-- reviewed-through-cli: 0.31.
|
|
86
|
+
<!-- reviewed-through-cli: 0.31.2 -->
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
The quoted version above is checked too, so this instruction cannot go stale
|
|
@@ -33,6 +33,9 @@ neo script eval --function Outpost.RefreshUnlock --this-value <id> --args '[3]'
|
|
|
33
33
|
|
|
34
34
|
Prefer `--json` for automation.
|
|
35
35
|
|
|
36
|
+
Inside an inline Class body, unqualified names resolve against that Class;
|
|
37
|
+
invoke delegate and action members directly with `Selector()` or `OnChanged()`.
|
|
38
|
+
|
|
36
39
|
## Nullability and ownership
|
|
37
40
|
|
|
38
41
|
Do not access a nullable receiver directly. First narrow it with a condition, or
|