@neocompose/cli 0.60.0 → 0.60.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,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.60.2] - 2026-09-29
|
|
4
|
+
|
|
5
|
+
- A List field that overrides an abstract List getter can be pushed. List overrides no longer redeclare indexes in their records.
|
|
6
|
+
- `@index` on a List override reports an error at the member's source location. Declare indexes on the original List member.
|
|
7
|
+
|
|
8
|
+
## [0.60.1] - 2026-09-28
|
|
9
|
+
|
|
10
|
+
- When push checks which classes a variant reference or a class-typed default may select, it finds the class's subclasses from one parent-to-children index. Before, it rescanned every class once per level of inheritance.
|
|
11
|
+
|
|
3
12
|
## [0.60.0] - 2026-09-27
|
|
4
13
|
|
|
5
14
|
- **Behavior change:** A command that reads or writes a project opens one live connection to the server and uses it for every query, write, and subscription until it exits. Push no longer posts its commit to an HTTP route. The connection runs on its own thread, so it finishes opening while push prepares the commit.
|
package/dist/neo.mjs
CHANGED
|
@@ -39446,12 +39446,14 @@ function memberToDocumentFields(member, baseData3) {
|
|
|
39446
39446
|
if (member.listKind === "unordered" || isOverride) {
|
|
39447
39447
|
fields.listKind = member.listKind === "unordered" ? 1 : 0;
|
|
39448
39448
|
}
|
|
39449
|
-
|
|
39450
|
-
|
|
39451
|
-
|
|
39452
|
-
|
|
39453
|
-
|
|
39454
|
-
|
|
39449
|
+
if (!isOverride) {
|
|
39450
|
+
fields.indexes = member.indexes.map(
|
|
39451
|
+
(index) => omitUndefined({
|
|
39452
|
+
schemaKey: index.schemaKey,
|
|
39453
|
+
kind: index.unique ? 1 : void 0
|
|
39454
|
+
})
|
|
39455
|
+
);
|
|
39456
|
+
}
|
|
39455
39457
|
fields.columnSettings = member.columns.map(
|
|
39456
39458
|
(column) => omitUndefined({
|
|
39457
39459
|
memberKey: column.memberKey,
|
|
@@ -40465,7 +40467,6 @@ var init_codecs = __esm({
|
|
|
40465
40467
|
"minValue",
|
|
40466
40468
|
"maxValue",
|
|
40467
40469
|
"decimalPoints",
|
|
40468
|
-
"indexes",
|
|
40469
40470
|
"columnSettings",
|
|
40470
40471
|
"schemaKeyOrder",
|
|
40471
40472
|
"classArguments",
|
|
@@ -49516,17 +49517,25 @@ function resolveMemberWithIndex(member, memberIndex) {
|
|
|
49516
49517
|
return Object.freeze(merged);
|
|
49517
49518
|
}
|
|
49518
49519
|
function descendantClassIds(classId, allClasses) {
|
|
49520
|
+
const childrenByClassId = /* @__PURE__ */ new Map();
|
|
49521
|
+
for (const schemaClass2 of allClasses) {
|
|
49522
|
+
if (!schemaClass2.extendsClassId) continue;
|
|
49523
|
+
const children = childrenByClassId.get(schemaClass2.extendsClassId);
|
|
49524
|
+
if (children === void 0) {
|
|
49525
|
+
childrenByClassId.set(schemaClass2.extendsClassId, [schemaClass2]);
|
|
49526
|
+
} else children.push(schemaClass2);
|
|
49527
|
+
}
|
|
49528
|
+
return descendantClassIdsInChildIndex(classId, childrenByClassId);
|
|
49529
|
+
}
|
|
49530
|
+
function descendantClassIdsInChildIndex(classId, childrenByClassId) {
|
|
49519
49531
|
const result = /* @__PURE__ */ new Set();
|
|
49520
|
-
|
|
49521
|
-
|
|
49522
|
-
|
|
49523
|
-
|
|
49524
|
-
if (
|
|
49525
|
-
|
|
49526
|
-
|
|
49527
|
-
result.add(t.id);
|
|
49528
|
-
added = true;
|
|
49529
|
-
}
|
|
49532
|
+
const pending = [classId];
|
|
49533
|
+
for (let id2 = pending.pop(); id2 !== void 0; id2 = pending.pop()) {
|
|
49534
|
+
for (const child of childrenByClassId.get(id2) ?? []) {
|
|
49535
|
+
if (child.id === classId) continue;
|
|
49536
|
+
if (result.has(child.id)) continue;
|
|
49537
|
+
result.add(child.id);
|
|
49538
|
+
pending.push(child.id);
|
|
49530
49539
|
}
|
|
49531
49540
|
}
|
|
49532
49541
|
return result;
|
|
@@ -111538,7 +111547,7 @@ function lowerClass(context, declaration) {
|
|
|
111538
111547
|
}
|
|
111539
111548
|
function lowerMember(context, ownerClass, declaration, id2, owner) {
|
|
111540
111549
|
const member = lowerMemberKind(context, ownerClass, declaration, id2, owner);
|
|
111541
|
-
assertListAnnotationPlacement(ownerClass, declaration, member
|
|
111550
|
+
assertListAnnotationPlacement(ownerClass, declaration, member);
|
|
111542
111551
|
return member;
|
|
111543
111552
|
}
|
|
111544
111553
|
function lowerMemberKind(context, ownerClass, declaration, id2, owner) {
|
|
@@ -112200,8 +112209,16 @@ function memberKeyArgument(value, ownerClass, declaration) {
|
|
|
112200
112209
|
}
|
|
112201
112210
|
return expression.name;
|
|
112202
112211
|
}
|
|
112203
|
-
function assertListAnnotationPlacement(ownerClass, declaration,
|
|
112204
|
-
|
|
112212
|
+
function assertListAnnotationPlacement(ownerClass, declaration, member) {
|
|
112213
|
+
const loweredKind = member.kind;
|
|
112214
|
+
if (loweredKind === "list") {
|
|
112215
|
+
if (member.overrideOf !== null && hasAnnotation2(declaration.annotations, "index")) {
|
|
112216
|
+
throw new Error(
|
|
112217
|
+
`@index on ${ownerClass.name}.${declaration.name} cannot be declared on an override; indexes are inherited from the declaring List.`
|
|
112218
|
+
);
|
|
112219
|
+
}
|
|
112220
|
+
return;
|
|
112221
|
+
}
|
|
112205
112222
|
if (hasAnnotation2(declaration.annotations, "index")) {
|
|
112206
112223
|
throw new Error(
|
|
112207
112224
|
`@index on ${ownerClass.name}.${declaration.name} is only valid on a List member; this declaration lowers to a ${loweredKind} member.`
|
|
@@ -142443,7 +142460,7 @@ var init_registry2 = __esm({
|
|
|
142443
142460
|
"schema-contract/registry.mjs"() {
|
|
142444
142461
|
"use strict";
|
|
142445
142462
|
PROJECT_SCHEMA_CONTRACT = Object.freeze({
|
|
142446
|
-
cliVersion: "0.60.
|
|
142463
|
+
cliVersion: "0.60.2",
|
|
142447
142464
|
projectFileUploadBatchSize: 32,
|
|
142448
142465
|
documentRecords: {
|
|
142449
142466
|
member: {
|
|
@@ -151095,7 +151112,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
|
|
|
151095
151112
|
async function main() {
|
|
151096
151113
|
const args = parseArgs(process.argv.slice(2));
|
|
151097
151114
|
if (args.command === "--version") {
|
|
151098
|
-
console.log("0.60.
|
|
151115
|
+
console.log("0.60.2");
|
|
151099
151116
|
return;
|
|
151100
151117
|
}
|
|
151101
151118
|
if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
|
package/package.json
CHANGED
|
@@ -101,7 +101,7 @@ wrappers.
|
|
|
101
101
|
The marker near the top of `SKILL.md` must exactly match the package version:
|
|
102
102
|
|
|
103
103
|
```html
|
|
104
|
-
<!-- reviewed-through-cli: 0.60.
|
|
104
|
+
<!-- reviewed-through-cli: 0.60.2 -->
|
|
105
105
|
```
|
|
106
106
|
|
|
107
107
|
The quoted version above is checked too, so this instruction cannot go stale
|
|
@@ -140,7 +140,10 @@ undeclared static member of such a class is Session.
|
|
|
140
140
|
`@column(member: Field, width: ..., visibility: ..., pin: ..., overflow: ...)`
|
|
141
141
|
are repeatable List annotations. `member:` is a bare field name on the entry
|
|
142
142
|
class. An index accepts a non-localizable string or single-select enum. A column
|
|
143
|
-
may target `__other__` for the default layout of subclass-added fields.
|
|
143
|
+
may target `__other__` for the default layout of subclass-added fields. Declare
|
|
144
|
+
indexes only on the original List member. Overrides inherit its indexes, and
|
|
145
|
+
`@index` on an override is a source error. A List field may override an abstract
|
|
146
|
+
List getter.
|
|
144
147
|
|
|
145
148
|
Use `.EnumCase` only when context fixes one enum type; otherwise write
|
|
146
149
|
`EnumType.Case`. Defaults and settings must be statically analyzable.
|