@neocompose/cli 0.9.4 → 0.10.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 +24 -1
- package/README.md +17 -2
- package/dist/neo.mjs +317 -67
- package/package.json +1 -1
- package/skills/neocompose-cli/SKILL.md +8 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,35 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
## [
|
|
3
|
+
## [0.10.1] - 2026-07-25
|
|
4
4
|
|
|
5
5
|
### Changed
|
|
6
6
|
|
|
7
|
+
- Derive a collection's hidden entry member id from the member that declares
|
|
8
|
+
it, instead of carrying it forward from the manifest cache. A workspace that
|
|
9
|
+
pushes without `neo/obj/` no longer re-mints every list and dictionary entry
|
|
10
|
+
member, and any workspace declaring the same collection reproduces the same
|
|
11
|
+
id. Every override in a collection family resolves to its declaring member's
|
|
12
|
+
one entry, which is what the hardcoded world entry-id table used to
|
|
13
|
+
approximate; an override that tries to change a collection's element type is
|
|
14
|
+
now an error rather than a silent collapse onto whichever member lowered
|
|
15
|
+
first.
|
|
7
16
|
- Document the final relation-only world layer-link contract and keep the
|
|
8
17
|
format-4 Hello World corpus free of the retired value-side binding field.
|
|
9
18
|
|
|
19
|
+
## [0.10.0] - 2026-07-25
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- Declare List indexes and column settings in source with `@index(member: ...)`
|
|
24
|
+
and `@column(member: ...)`. Both were already in the schema contract and
|
|
25
|
+
offered by the language server, but lowering carried them from the manifest
|
|
26
|
+
cache and the emitter never wrote them back, so a workspace that pushed
|
|
27
|
+
without `neo/obj/` silently lost them.
|
|
28
|
+
- Declare a class hidden from the member selector and classes tree with
|
|
29
|
+
`@hidden`, the class-level counterpart to `@locked`. It maps to
|
|
30
|
+
`NeoSchemaClassAttribute.Hidden`, which the contract already carried; absent
|
|
31
|
+
means visible.
|
|
32
|
+
|
|
10
33
|
## [0.9.4] - 2026-07-25
|
|
11
34
|
|
|
12
35
|
### Fixed
|
package/README.md
CHANGED
|
@@ -141,8 +141,23 @@ abstract class InventoryItem<
|
|
|
141
141
|
The source identifier is the persisted name. `@settings` and `@storage` are
|
|
142
142
|
typed by their declaration context; invalid fields and enum cases are
|
|
143
143
|
diagnostics. Swift-like `.EnumCase` syntax works whenever the expected enum
|
|
144
|
-
type is known. Focused annotations such as `@id`, `@locked`, `@
|
|
145
|
-
`@relations` carry cross-cutting behavior.
|
|
144
|
+
type is known. Focused annotations such as `@id`, `@locked`, `@hidden`,
|
|
145
|
+
`@system`, and `@relations` carry cross-cutting behavior. `@hidden` marks a
|
|
146
|
+
class the member selector and classes tree leave out; absent means visible.
|
|
147
|
+
|
|
148
|
+
Lists take repeatable `@index` and `@column` annotations naming a field on the
|
|
149
|
+
entry class. An index requires a non-localizable `string` or a single-select
|
|
150
|
+
enum; a column may also target the reserved `__other__` key, which carries the
|
|
151
|
+
default layout for every field a subclass adds.
|
|
152
|
+
|
|
153
|
+
```neo
|
|
154
|
+
@id("outpost-list-id")
|
|
155
|
+
@settings(kind: .Unordered)
|
|
156
|
+
@index(member: Slug, unique: true)
|
|
157
|
+
@column(member: Slug, width: 158, frozen: true)
|
|
158
|
+
@column(member: Notes, hidden: true)
|
|
159
|
+
public List<Outpost> Outposts = [];
|
|
160
|
+
```
|
|
146
161
|
|
|
147
162
|
Stable IDs preserve identity across rename, reorder, and file moves. Omit an
|
|
148
163
|
`@id` only to create something. A successful real push assigns the ID and
|
package/dist/neo.mjs
CHANGED
|
@@ -14285,6 +14285,9 @@ function validateMember(uri, member, documentKind, ownerScope, environment, diag
|
|
|
14285
14285
|
diagnostics
|
|
14286
14286
|
);
|
|
14287
14287
|
validateTypeAnnotations(uri, member.type, environment, diagnostics);
|
|
14288
|
+
if (documentKind !== "flow") {
|
|
14289
|
+
validateListAnnotations(uri, member, environment, diagnostics);
|
|
14290
|
+
}
|
|
14288
14291
|
const scope = new Map(ownerScope);
|
|
14289
14292
|
if (member.kind === "function") {
|
|
14290
14293
|
for (const parameter3 of member.parameters) {
|
|
@@ -14435,6 +14438,9 @@ function validateAnnotations(uri, annotations, context, environment, diagnostics
|
|
|
14435
14438
|
continue;
|
|
14436
14439
|
}
|
|
14437
14440
|
seen.add(field.name);
|
|
14441
|
+
if (field.name === "member" && (annotation2.name === "index" || annotation2.name === "column")) {
|
|
14442
|
+
continue;
|
|
14443
|
+
}
|
|
14438
14444
|
validateExpressionText(
|
|
14439
14445
|
uri,
|
|
14440
14446
|
argument2.text,
|
|
@@ -14458,6 +14464,7 @@ function fieldsForAnnotation(name, context, environment) {
|
|
|
14458
14464
|
if (name === "locked") {
|
|
14459
14465
|
return context.kind === "member" || context.kind === "flowBinding" ? [] : null;
|
|
14460
14466
|
}
|
|
14467
|
+
if (name === "hidden") return context.kind === "class" ? [] : null;
|
|
14461
14468
|
if (name === "settings") return settingsFields(context);
|
|
14462
14469
|
if (name === "storage") return storageFields(context);
|
|
14463
14470
|
if (name === "relations") return relationFields(context, environment);
|
|
@@ -15489,6 +15496,121 @@ function contextualAnnotationEnum(annotations, name, field) {
|
|
|
15489
15496
|
const value = annotations.find((annotation2) => annotation2.name === name)?.arguments.find((argument2) => argument2.name === field)?.text.trim();
|
|
15490
15497
|
return value?.startsWith(".") ? value.slice(1) : null;
|
|
15491
15498
|
}
|
|
15499
|
+
function validateListAnnotations(uri, member, environment, diagnostics) {
|
|
15500
|
+
const declared = member.annotations.filter(
|
|
15501
|
+
(annotation2) => annotation2.name === "index" || annotation2.name === "column"
|
|
15502
|
+
);
|
|
15503
|
+
if (declared.length === 0) return;
|
|
15504
|
+
const entryClass = listEntryClass(member.type, environment);
|
|
15505
|
+
const seen = /* @__PURE__ */ new Set();
|
|
15506
|
+
for (const annotation2 of declared) {
|
|
15507
|
+
const target = memberKeyArgument(annotation2);
|
|
15508
|
+
if (target === null) {
|
|
15509
|
+
pushDiagnostic(
|
|
15510
|
+
diagnostics,
|
|
15511
|
+
uri,
|
|
15512
|
+
annotation2.range,
|
|
15513
|
+
"missing-list-annotation-member",
|
|
15514
|
+
`@${annotation2.name} on '${member.name}' requires a member naming a field on the list entry, such as @${annotation2.name}(member: Name).`
|
|
15515
|
+
);
|
|
15516
|
+
continue;
|
|
15517
|
+
}
|
|
15518
|
+
if (target.key === null) {
|
|
15519
|
+
pushDiagnostic(
|
|
15520
|
+
diagnostics,
|
|
15521
|
+
uri,
|
|
15522
|
+
target.range,
|
|
15523
|
+
"invalid-list-annotation-member",
|
|
15524
|
+
`@${annotation2.name} on '${member.name}' must name a list entry field directly, such as @${annotation2.name}(member: Name).`
|
|
15525
|
+
);
|
|
15526
|
+
continue;
|
|
15527
|
+
}
|
|
15528
|
+
if (seen.has(`${annotation2.name} ${target.key}`)) {
|
|
15529
|
+
pushDiagnostic(
|
|
15530
|
+
diagnostics,
|
|
15531
|
+
uri,
|
|
15532
|
+
target.range,
|
|
15533
|
+
"duplicate-list-annotation",
|
|
15534
|
+
`@${annotation2.name}(member: ${target.key}) is declared more than once on '${member.name}'.`
|
|
15535
|
+
);
|
|
15536
|
+
continue;
|
|
15537
|
+
}
|
|
15538
|
+
seen.add(`${annotation2.name} ${target.key}`);
|
|
15539
|
+
if (annotation2.name === "column" && target.key === LIST_COLUMN_INHERITANCE_KEY) {
|
|
15540
|
+
continue;
|
|
15541
|
+
}
|
|
15542
|
+
if (entryClass === null) continue;
|
|
15543
|
+
const field = resolveEntryField(entryClass, target.key, environment);
|
|
15544
|
+
if (field === null) {
|
|
15545
|
+
pushDiagnostic(
|
|
15546
|
+
diagnostics,
|
|
15547
|
+
uri,
|
|
15548
|
+
target.range,
|
|
15549
|
+
"unresolved-list-annotation-member",
|
|
15550
|
+
`@${annotation2.name}(member: ${target.key}) on '${member.name}' does not resolve on list entry class '${entryClass.name}'.`
|
|
15551
|
+
);
|
|
15552
|
+
continue;
|
|
15553
|
+
}
|
|
15554
|
+
if (annotation2.name !== "index") continue;
|
|
15555
|
+
const domainError = indexKeyDomainError(field, environment);
|
|
15556
|
+
if (domainError !== null) {
|
|
15557
|
+
pushDiagnostic(
|
|
15558
|
+
diagnostics,
|
|
15559
|
+
uri,
|
|
15560
|
+
target.range,
|
|
15561
|
+
"invalid-list-index-member",
|
|
15562
|
+
`@index(member: ${target.key}) on '${member.name}' is invalid: ${domainError}.`
|
|
15563
|
+
);
|
|
15564
|
+
}
|
|
15565
|
+
}
|
|
15566
|
+
}
|
|
15567
|
+
function memberKeyArgument(annotation2) {
|
|
15568
|
+
const positional = annotation2.arguments[0];
|
|
15569
|
+
const argument2 = annotation2.arguments.find((entry) => entry.name === "member") ?? (positional !== void 0 && positional.name === void 0 ? positional : void 0);
|
|
15570
|
+
if (argument2 === void 0) return null;
|
|
15571
|
+
const text = argument2.text.trim();
|
|
15572
|
+
return {
|
|
15573
|
+
key: IDENTIFIER_PATTERN2.test(text) ? text : null,
|
|
15574
|
+
range: argument2.range
|
|
15575
|
+
};
|
|
15576
|
+
}
|
|
15577
|
+
function listEntryClass(type, environment) {
|
|
15578
|
+
if (type.name !== "List" && type.name !== "Set") return null;
|
|
15579
|
+
const entry = type.typeArguments[0];
|
|
15580
|
+
if (entry === void 0) return null;
|
|
15581
|
+
return environment.types.get(entry.name) ?? null;
|
|
15582
|
+
}
|
|
15583
|
+
function resolveEntryField(entryClass, key, environment) {
|
|
15584
|
+
const visited = /* @__PURE__ */ new Set();
|
|
15585
|
+
let current = entryClass;
|
|
15586
|
+
while (current !== void 0 && !visited.has(current.name)) {
|
|
15587
|
+
visited.add(current.name);
|
|
15588
|
+
const match = current.members.find((entry) => entry.name === key);
|
|
15589
|
+
if (match !== void 0) return match;
|
|
15590
|
+
current = current.baseTypes.map((base) => environment.types.get(base.name)).find((base) => base !== void 0);
|
|
15591
|
+
}
|
|
15592
|
+
return null;
|
|
15593
|
+
}
|
|
15594
|
+
function indexKeyDomainError(field, environment) {
|
|
15595
|
+
if (field.kind !== "field") {
|
|
15596
|
+
return `'${field.name}' is a ${field.kind}, and index keys require a stored field`;
|
|
15597
|
+
}
|
|
15598
|
+
if (field.type.name === "string") {
|
|
15599
|
+
return annotationBoolean(field.annotations, "settings", "localizable") === false ? null : `'${field.name}' is localizable, and String index keys must be non-localizable`;
|
|
15600
|
+
}
|
|
15601
|
+
if (environment.enums.has(field.type.name)) return null;
|
|
15602
|
+
const entry = field.type.typeArguments[0];
|
|
15603
|
+
if (field.type.name === "List" && entry !== void 0 && environment.enums.has(entry.name) && annotationBoolean(field.annotations, "settings", "multiselect") === true) {
|
|
15604
|
+
return `'${field.name}' is a multiselect Enum, and index keys require a single-select Enum`;
|
|
15605
|
+
}
|
|
15606
|
+
return `'${field.name}' is a ${field.type.name} field, and index keys require a non-localizable String or a single-select Enum`;
|
|
15607
|
+
}
|
|
15608
|
+
function annotationBoolean(annotations, name, field) {
|
|
15609
|
+
const value = annotations.find((annotation2) => annotation2.name === name)?.arguments.find((argument2) => argument2.name === field)?.text.trim();
|
|
15610
|
+
if (value === "true") return true;
|
|
15611
|
+
if (value === "false") return false;
|
|
15612
|
+
return null;
|
|
15613
|
+
}
|
|
15492
15614
|
function isListContext(context) {
|
|
15493
15615
|
return (context.kind === "member" || context.kind === "type") && (context.type.name === "List" || context.type.name === "Set");
|
|
15494
15616
|
}
|
|
@@ -15533,7 +15655,7 @@ function pushDiagnostic(diagnostics, uri, range2, code, message) {
|
|
|
15533
15655
|
message
|
|
15534
15656
|
});
|
|
15535
15657
|
}
|
|
15536
|
-
var primitiveType;
|
|
15658
|
+
var primitiveType, IDENTIFIER_PATTERN2, LIST_COLUMN_INHERITANCE_KEY;
|
|
15537
15659
|
var init_project_source_semantics = __esm({
|
|
15538
15660
|
"../packages/neoscript-language/src/project-source-semantics.ts"() {
|
|
15539
15661
|
"use strict";
|
|
@@ -15542,6 +15664,8 @@ var init_project_source_semantics = __esm({
|
|
|
15542
15664
|
init_strict_parser();
|
|
15543
15665
|
init_project_root();
|
|
15544
15666
|
primitiveType = (name) => ({ name });
|
|
15667
|
+
IDENTIFIER_PATTERN2 = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
15668
|
+
LIST_COLUMN_INHERITANCE_KEY = "__other__";
|
|
15545
15669
|
}
|
|
15546
15670
|
});
|
|
15547
15671
|
|
|
@@ -21308,6 +21432,16 @@ function annotationSignatureParameters(name) {
|
|
|
21308
21432
|
return ["relation descriptors"];
|
|
21309
21433
|
case "incomplete":
|
|
21310
21434
|
return ["string reason"];
|
|
21435
|
+
case "index":
|
|
21436
|
+
return ["entry member", "bool unique"];
|
|
21437
|
+
case "column":
|
|
21438
|
+
return [
|
|
21439
|
+
"entry member",
|
|
21440
|
+
"int width",
|
|
21441
|
+
"bool hidden",
|
|
21442
|
+
"bool frozen",
|
|
21443
|
+
"bool wrapContent"
|
|
21444
|
+
];
|
|
21311
21445
|
default:
|
|
21312
21446
|
return null;
|
|
21313
21447
|
}
|
|
@@ -28710,6 +28844,19 @@ var init_ui_action_source = __esm({
|
|
|
28710
28844
|
}
|
|
28711
28845
|
});
|
|
28712
28846
|
|
|
28847
|
+
// ../src/models/members/entry-member-id.ts
|
|
28848
|
+
function derivedEntryMemberId(declaringMemberId) {
|
|
28849
|
+
return v5_default(declaringMemberId, NEO_ENTRY_MEMBER_NAMESPACE);
|
|
28850
|
+
}
|
|
28851
|
+
var NEO_ENTRY_MEMBER_NAMESPACE;
|
|
28852
|
+
var init_entry_member_id = __esm({
|
|
28853
|
+
"../src/models/members/entry-member-id.ts"() {
|
|
28854
|
+
"use strict";
|
|
28855
|
+
init_dist_node();
|
|
28856
|
+
NEO_ENTRY_MEMBER_NAMESPACE = "4d1c4a2f-1a0f-5f3e-9a5c-2b7d6e8f0c31";
|
|
28857
|
+
}
|
|
28858
|
+
});
|
|
28859
|
+
|
|
28713
28860
|
// src/project-source/lower-members.ts
|
|
28714
28861
|
function lowerClass(context, declaration) {
|
|
28715
28862
|
const id2 = materializedId(declaration, "class", declaration.name);
|
|
@@ -28783,7 +28930,7 @@ function lowerClass(context, declaration) {
|
|
|
28783
28930
|
schemaKeyOrder: persistedSchemaOrder,
|
|
28784
28931
|
extendsClassId,
|
|
28785
28932
|
implementsInterfaceIds,
|
|
28786
|
-
hiddenInMemberSelector:
|
|
28933
|
+
hiddenInMemberSelector: hasAnnotation(declaration.annotations, "hidden"),
|
|
28787
28934
|
system: systemMetadata(declaration.annotations),
|
|
28788
28935
|
allowedStorage: storage ? storageValue(storage, "allowed") : null,
|
|
28789
28936
|
// Class storage keys never exist in source. Retain only the historical
|
|
@@ -28800,6 +28947,11 @@ function lowerClass(context, declaration) {
|
|
|
28800
28947
|
};
|
|
28801
28948
|
}
|
|
28802
28949
|
function lowerMember(context, ownerClass, declaration, id2, owner) {
|
|
28950
|
+
const member = lowerMemberKind(context, ownerClass, declaration, id2, owner);
|
|
28951
|
+
assertListAnnotationPlacement(ownerClass, declaration, member.kind);
|
|
28952
|
+
return member;
|
|
28953
|
+
}
|
|
28954
|
+
function lowerMemberKind(context, ownerClass, declaration, id2, owner) {
|
|
28803
28955
|
const base = context.baseMembers.get(id2);
|
|
28804
28956
|
const common = memberCommon(
|
|
28805
28957
|
context,
|
|
@@ -29132,15 +29284,17 @@ function lowerFieldMember(context, ownerClass, declaration, id2, commonInput, ba
|
|
|
29132
29284
|
multiselect: true
|
|
29133
29285
|
};
|
|
29134
29286
|
}
|
|
29135
|
-
const entryId =
|
|
29287
|
+
const entryId = derivedEntryMemberId(
|
|
29288
|
+
declaringCollectionMemberId(context, id2, common.overrideOf)
|
|
29289
|
+
);
|
|
29136
29290
|
lowerCollectionEntry(context, ownerClass, entryType, entryId, id2);
|
|
29137
29291
|
return {
|
|
29138
29292
|
...common,
|
|
29139
29293
|
kind: "list",
|
|
29140
29294
|
entryMemberId: entryId,
|
|
29141
29295
|
listKind: contextualEnumArgument(settings, "kind") === "Unordered" ? "unordered" : "ordered",
|
|
29142
|
-
indexes:
|
|
29143
|
-
columns:
|
|
29296
|
+
indexes: lowerListIndexes(ownerClass, declaration),
|
|
29297
|
+
columns: lowerListColumns(ownerClass, declaration)
|
|
29144
29298
|
};
|
|
29145
29299
|
}
|
|
29146
29300
|
if (name === "Dictionary") {
|
|
@@ -29149,7 +29303,9 @@ function lowerFieldMember(context, ownerClass, declaration, id2, commonInput, ba
|
|
|
29149
29303
|
}
|
|
29150
29304
|
const keyType = requiredTypeArgument(fieldType, 0);
|
|
29151
29305
|
const entryType = requiredTypeArgument(fieldType, 1);
|
|
29152
|
-
const entryId =
|
|
29306
|
+
const entryId = derivedEntryMemberId(
|
|
29307
|
+
declaringCollectionMemberId(context, id2, common.overrideOf)
|
|
29308
|
+
);
|
|
29153
29309
|
lowerCollectionEntry(context, ownerClass, entryType, entryId, id2);
|
|
29154
29310
|
return {
|
|
29155
29311
|
...common,
|
|
@@ -29210,7 +29366,103 @@ function lowerFieldMember(context, ownerClass, declaration, id2, commonInput, ba
|
|
|
29210
29366
|
`Unsupported field type ${JSON.stringify(name)} on ${ownerClass.name}.${declaration.name}.`
|
|
29211
29367
|
);
|
|
29212
29368
|
}
|
|
29369
|
+
function lowerListIndexes(ownerClass, declaration) {
|
|
29370
|
+
const declared = /* @__PURE__ */ new Set();
|
|
29371
|
+
return declaration.annotations.filter((entry) => entry.name === "index").map((entry) => {
|
|
29372
|
+
const schemaKey = memberKeyArgument2(entry, ownerClass, declaration);
|
|
29373
|
+
if (declared.has(schemaKey)) {
|
|
29374
|
+
throw new Error(
|
|
29375
|
+
`@index(member: ${schemaKey}) is declared more than once on ${ownerClass.name}.${declaration.name}.`
|
|
29376
|
+
);
|
|
29377
|
+
}
|
|
29378
|
+
declared.add(schemaKey);
|
|
29379
|
+
return { schemaKey, unique: booleanArgument(entry, "unique") ?? false };
|
|
29380
|
+
});
|
|
29381
|
+
}
|
|
29382
|
+
function lowerListColumns(ownerClass, declaration) {
|
|
29383
|
+
const declared = /* @__PURE__ */ new Set();
|
|
29384
|
+
return declaration.annotations.filter((entry) => entry.name === "column").map((entry) => {
|
|
29385
|
+
const memberKey = memberKeyArgument2(entry, ownerClass, declaration);
|
|
29386
|
+
if (declared.has(memberKey)) {
|
|
29387
|
+
throw new Error(
|
|
29388
|
+
`@column(member: ${memberKey}) is declared more than once on ${ownerClass.name}.${declaration.name}.`
|
|
29389
|
+
);
|
|
29390
|
+
}
|
|
29391
|
+
declared.add(memberKey);
|
|
29392
|
+
const width = numberArgument(entry, "width");
|
|
29393
|
+
return {
|
|
29394
|
+
memberKey,
|
|
29395
|
+
// `-1` is the generated C# marker's "unset" sentinel for an int
|
|
29396
|
+
// property that has no nullable form; the record spells that as null.
|
|
29397
|
+
width: width === null || width === UNSET_LIST_COLUMN_WIDTH ? null : width,
|
|
29398
|
+
hidden: booleanArgument(entry, "hidden") ?? false,
|
|
29399
|
+
frozen: booleanArgument(entry, "frozen") ?? false,
|
|
29400
|
+
wrapContent: booleanArgument(entry, "wrapContent") ?? false
|
|
29401
|
+
};
|
|
29402
|
+
});
|
|
29403
|
+
}
|
|
29404
|
+
function memberKeyArgument2(value, ownerClass, declaration) {
|
|
29405
|
+
const positional = value.arguments[0];
|
|
29406
|
+
const raw = argument(value, "member") ?? (positional !== void 0 && positional.name === void 0 ? positional.expression : null);
|
|
29407
|
+
if (raw === null) {
|
|
29408
|
+
throw new Error(
|
|
29409
|
+
`@${value.name} on ${ownerClass.name}.${declaration.name} requires a member naming a field on the list entry, such as @${value.name}(member: Name).`
|
|
29410
|
+
);
|
|
29411
|
+
}
|
|
29412
|
+
const expression = parseAnnotationExpression(raw);
|
|
29413
|
+
if (expression.kind !== "ident") {
|
|
29414
|
+
throw new Error(
|
|
29415
|
+
`@${value.name}(member: ${raw.trim()}) on ${ownerClass.name}.${declaration.name} must name a list entry field directly, such as @${value.name}(member: Name).`
|
|
29416
|
+
);
|
|
29417
|
+
}
|
|
29418
|
+
return expression.name;
|
|
29419
|
+
}
|
|
29420
|
+
function assertListAnnotationPlacement(ownerClass, declaration, loweredKind) {
|
|
29421
|
+
if (loweredKind === "list") return;
|
|
29422
|
+
if (hasAnnotation(declaration.annotations, "index")) {
|
|
29423
|
+
throw new Error(
|
|
29424
|
+
`@index on ${ownerClass.name}.${declaration.name} is only valid on a List member; this declaration lowers to a ${loweredKind} member.`
|
|
29425
|
+
);
|
|
29426
|
+
}
|
|
29427
|
+
if (hasAnnotation(declaration.annotations, "column")) {
|
|
29428
|
+
throw new Error(
|
|
29429
|
+
`@column on ${ownerClass.name}.${declaration.name} is only valid on a List member; this declaration lowers to a ${loweredKind} member.`
|
|
29430
|
+
);
|
|
29431
|
+
}
|
|
29432
|
+
}
|
|
29433
|
+
function declaringCollectionMemberId(context, memberId, overrideOf) {
|
|
29434
|
+
const visited = /* @__PURE__ */ new Set([memberId]);
|
|
29435
|
+
let declaring = memberId;
|
|
29436
|
+
let parent = overrideOf;
|
|
29437
|
+
while (parent !== null && !visited.has(parent)) {
|
|
29438
|
+
visited.add(parent);
|
|
29439
|
+
declaring = parent;
|
|
29440
|
+
parent = overrideParentMemberId(context, parent);
|
|
29441
|
+
}
|
|
29442
|
+
return declaring;
|
|
29443
|
+
}
|
|
29444
|
+
function overrideParentMemberId(context, memberId) {
|
|
29445
|
+
const lowered = context.loweredMembers.get(memberId);
|
|
29446
|
+
if (lowered !== void 0) return lowered.overrideOf;
|
|
29447
|
+
const persisted = context.baseMembers.get(memberId);
|
|
29448
|
+
if (persisted !== void 0) return persisted.overrideOf;
|
|
29449
|
+
const placement = context.sourceMembersById.get(memberId);
|
|
29450
|
+
if (placement === void 0) return null;
|
|
29451
|
+
const { ownerClass, member } = placement;
|
|
29452
|
+
const overrides = member.modifiers.includes("override") || member.modifiers.includes("sealed");
|
|
29453
|
+
return overrides ? inheritedMemberId(context, ownerClass, member.name) : null;
|
|
29454
|
+
}
|
|
29213
29455
|
function lowerCollectionEntry(context, ownerClass, entryType, entryId, parentMemberId) {
|
|
29456
|
+
const already = context.entryTypesByEntryId.get(entryId);
|
|
29457
|
+
if (already !== void 0) {
|
|
29458
|
+
if (JSON.stringify(already) !== JSON.stringify(entryType)) {
|
|
29459
|
+
throw new Error(
|
|
29460
|
+
`Collection member ${ownerClass.name}.${parentMemberId} declares entry type ${entryType.name}, but the member it overrides declares ${already.name}. An override cannot change a collection's element type.`
|
|
29461
|
+
);
|
|
29462
|
+
}
|
|
29463
|
+
return;
|
|
29464
|
+
}
|
|
29465
|
+
context.entryTypesByEntryId.set(entryId, entryType);
|
|
29214
29466
|
if (context.loweredMembers.has(entryId)) return;
|
|
29215
29467
|
const base = context.baseMembers.get(entryId);
|
|
29216
29468
|
if (base) {
|
|
@@ -29222,7 +29474,7 @@ function lowerCollectionEntry(context, ownerClass, entryType, entryId, parentMem
|
|
|
29222
29474
|
}
|
|
29223
29475
|
const declaration = {
|
|
29224
29476
|
id: entryId,
|
|
29225
|
-
state:
|
|
29477
|
+
state: "stable",
|
|
29226
29478
|
source: {
|
|
29227
29479
|
uri: ownerClass.source.uri,
|
|
29228
29480
|
range: ownerClass.source.range
|
|
@@ -30041,13 +30293,15 @@ function* zip(left, right) {
|
|
|
30041
30293
|
yield [left[index], right[index]];
|
|
30042
30294
|
}
|
|
30043
30295
|
}
|
|
30044
|
-
var primitiveMemberKinds;
|
|
30296
|
+
var UNSET_LIST_COLUMN_WIDTH, primitiveMemberKinds;
|
|
30045
30297
|
var init_lower_members = __esm({
|
|
30046
30298
|
"src/project-source/lower-members.ts"() {
|
|
30047
30299
|
"use strict";
|
|
30048
30300
|
init_src();
|
|
30049
30301
|
init_lower_support();
|
|
30050
30302
|
init_ui_action_source();
|
|
30303
|
+
init_entry_member_id();
|
|
30304
|
+
UNSET_LIST_COLUMN_WIDTH = -1;
|
|
30051
30305
|
primitiveMemberKinds = /* @__PURE__ */ new Set([
|
|
30052
30306
|
"null",
|
|
30053
30307
|
"bool",
|
|
@@ -30441,6 +30695,7 @@ function lowerProjectSchemaV4(base, analysis, options = {}) {
|
|
|
30441
30695
|
genericParametersByClass,
|
|
30442
30696
|
enumOptionsByName,
|
|
30443
30697
|
loweredMembers: /* @__PURE__ */ new Map(),
|
|
30698
|
+
entryTypesByEntryId: /* @__PURE__ */ new Map(),
|
|
30444
30699
|
placements: /* @__PURE__ */ new Map(),
|
|
30445
30700
|
staticValueIdsBySymbol: options.staticValueIdsBySymbol ?? /* @__PURE__ */ new Map(),
|
|
30446
30701
|
templateIdsByName: new Map(
|
|
@@ -30752,6 +31007,7 @@ ${namedArguments(
|
|
|
30752
31007
|
function emitClass(context, schemaClass2, memberIds) {
|
|
30753
31008
|
const annotations = [
|
|
30754
31009
|
id(schemaClass2.id).trimEnd(),
|
|
31010
|
+
...schemaClass2.hiddenInMemberSelector ? ["@hidden"] : [],
|
|
30755
31011
|
...schemaClass2.allowedStorage ? [`@storage(allowed: .${enumCase(schemaClass2.allowedStorage)})`] : [],
|
|
30756
31012
|
...schemaClass2.system ? [systemAnnotation(schemaClass2.system)] : [],
|
|
30757
31013
|
...relationsAnnotations(context, schemaClass2)
|
|
@@ -30883,6 +31139,7 @@ function emitMember(context, member) {
|
|
|
30883
31139
|
].join(", ")})`
|
|
30884
31140
|
] : [],
|
|
30885
31141
|
...memberSettings(context, member),
|
|
31142
|
+
...listAnnotations(member),
|
|
30886
31143
|
...member.system ? [systemAnnotation(member.system)] : []
|
|
30887
31144
|
];
|
|
30888
31145
|
const prefix = memberModifier3(member);
|
|
@@ -31024,6 +31281,28 @@ function memberSettings(context, member) {
|
|
|
31024
31281
|
}
|
|
31025
31282
|
return settings.length ? [`@settings(${settings.join(", ")})`] : [];
|
|
31026
31283
|
}
|
|
31284
|
+
function listAnnotations(member) {
|
|
31285
|
+
if (member.kind !== "list") return [];
|
|
31286
|
+
return [
|
|
31287
|
+
...member.indexes.map((entry) => {
|
|
31288
|
+
assertIdentifier(entry.schemaKey, "list index member");
|
|
31289
|
+
return `@index(${[
|
|
31290
|
+
`member: ${entry.schemaKey}`,
|
|
31291
|
+
...entry.unique ? ["unique: true"] : []
|
|
31292
|
+
].join(", ")})`;
|
|
31293
|
+
}),
|
|
31294
|
+
...member.columns.map((entry) => {
|
|
31295
|
+
assertIdentifier(entry.memberKey, "list column member");
|
|
31296
|
+
return `@column(${[
|
|
31297
|
+
`member: ${entry.memberKey}`,
|
|
31298
|
+
...entry.width === null ? [] : [`width: ${entry.width}`],
|
|
31299
|
+
...entry.hidden ? ["hidden: true"] : [],
|
|
31300
|
+
...entry.frozen ? ["frozen: true"] : [],
|
|
31301
|
+
...entry.wrapContent ? ["wrapContent: true"] : []
|
|
31302
|
+
].join(", ")})`;
|
|
31303
|
+
})
|
|
31304
|
+
];
|
|
31305
|
+
}
|
|
31027
31306
|
function renderMemberType(context, member) {
|
|
31028
31307
|
const nullable = !member.required;
|
|
31029
31308
|
let value;
|
|
@@ -35486,47 +35765,7 @@ function worldAnimationChildOverrideBindingMemberId(classId) {
|
|
|
35486
35765
|
WORLD_ANIMATION_CHILD_OVERRIDE_BINDING_MEMBER_NAMESPACE
|
|
35487
35766
|
);
|
|
35488
35767
|
}
|
|
35489
|
-
|
|
35490
|
-
const baseMemberId = args.extendsMemberId ?? args.id;
|
|
35491
|
-
if (baseMemberId === WORLD_GRID_CHILDREN_MEMBER_ID) {
|
|
35492
|
-
return WORLD_GRID_CHILDREN_ENTRY_MEMBER_ID;
|
|
35493
|
-
}
|
|
35494
|
-
if (baseMemberId === WORLD_OBJECT_CHILDREN_MEMBER_ID) {
|
|
35495
|
-
return WORLD_OBJECT_CHILDREN_ENTRY_MEMBER_ID;
|
|
35496
|
-
}
|
|
35497
|
-
if (baseMemberId === WORLD_OBJECT_PLACEMENT_TILES_MEMBER_ID) {
|
|
35498
|
-
return WORLD_OBJECT_PLACEMENT_TILES_ENTRY_MEMBER_ID;
|
|
35499
|
-
}
|
|
35500
|
-
if (baseMemberId === WORLD_OBJECT_LAYER_LINK_OBJECTS_MEMBER_ID) {
|
|
35501
|
-
return WORLD_OBJECT_LAYER_LINK_OBJECT_ENTRY_MEMBER_ID;
|
|
35502
|
-
}
|
|
35503
|
-
if (baseMemberId === WORLD_SMART_TILE_RULES_MEMBER_ID) {
|
|
35504
|
-
return WORLD_SMART_TILE_RULES_ENTRY_MEMBER_ID;
|
|
35505
|
-
}
|
|
35506
|
-
if (baseMemberId === WORLD_SMART_TILE_RULE_NEIGHBORS_MEMBER_ID) {
|
|
35507
|
-
return WORLD_SMART_TILE_RULE_NEIGHBORS_ENTRY_MEMBER_ID;
|
|
35508
|
-
}
|
|
35509
|
-
if (baseMemberId === WORLD_SMART_TILE_RULE_SPRITES_MEMBER_ID) {
|
|
35510
|
-
return WORLD_SMART_TILE_RULE_SPRITES_ENTRY_MEMBER_ID;
|
|
35511
|
-
}
|
|
35512
|
-
if (baseMemberId === WORLD_ANIMATION_CLIP_FRAMES_MEMBER_ID) {
|
|
35513
|
-
return WORLD_ANIMATION_CLIP_FRAMES_ENTRY_MEMBER_ID;
|
|
35514
|
-
}
|
|
35515
|
-
if (baseMemberId === WORLD_ANIMATION_CLIP_TRACKS_MEMBER_ID) {
|
|
35516
|
-
return WORLD_ANIMATION_CLIP_TRACKS_ENTRY_MEMBER_ID;
|
|
35517
|
-
}
|
|
35518
|
-
if (baseMemberId === WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_MEMBER_ID) {
|
|
35519
|
-
return WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_ENTRY_MEMBER_ID;
|
|
35520
|
-
}
|
|
35521
|
-
if (baseMemberId === WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_ENTRY_MEMBER_ID) {
|
|
35522
|
-
return WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_ENTRY_MEMBER_ID;
|
|
35523
|
-
}
|
|
35524
|
-
if (baseMemberId === WORLD_ANIMATION_FRAME_ACTIONS_MEMBER_ID) {
|
|
35525
|
-
return WORLD_ANIMATION_FRAME_ACTIONS_ENTRY_MEMBER_ID;
|
|
35526
|
-
}
|
|
35527
|
-
return args.entryMemberId;
|
|
35528
|
-
}
|
|
35529
|
-
var WORLD_SORTING_LAYERS_MEMBER_ID, WORLD_SORTING_LAYER_NAME_MEMBER_ID, WORLD_LAYER_NAME_MEMBER_ID, WORLD_LAYER_SORTING_LAYER_MEMBER_ID, WORLD_LAYER_SORTING_ORDER_MEMBER_ID, WORLD_SORTING_ORDER_MIN, WORLD_SORTING_ORDER_MAX, WORLD_GRID_CHILDREN_MEMBER_ID, WORLD_GRID_CHILDREN_ENTRY_MEMBER_ID, WORLD_ASSET_NAME_MEMBER_ID, WORLD_TILE_SPRITE_MEMBER_ID, WORLD_OBJECT_BASE_NAME_MEMBER_ID, WORLD_OBJECT_BASE_POSITION_MEMBER_ID, WORLD_OBJECT_BASE_SIZE_MEMBER_ID, WORLD_SPRITE_OBJECT_NAME_MEMBER_ID, WORLD_SPRITE_OBJECT_SPRITE_MEMBER_ID, WORLD_OBJECT_CHILDREN_MEMBER_ID, WORLD_OBJECT_CHILDREN_ENTRY_MEMBER_ID, WORLD_OBJECT_COLLIDER_MEMBER_ID, WORLD_OBJECT_PLACEMENT_TILES_MEMBER_ID, WORLD_OBJECT_PLACEMENT_TILES_ENTRY_MEMBER_ID, WORLD_OBJECT_PLACEMENT_TILE_CELL_MEMBER_ID, WORLD_TILE_INSTANCE_CELL_MEMBER_ID, WORLD_TILE_LAYER_LINK_LAYER_MEMBER_ID, WORLD_TILE_LAYER_LINK_TILES_MEMBER_ID, WORLD_TILE_LAYER_LINK_TILE_ENTRY_MEMBER_ID, WORLD_OBJECT_LAYER_LINK_LAYER_MEMBER_ID, WORLD_OBJECT_LAYER_LINK_OBJECTS_MEMBER_ID, WORLD_OBJECT_LAYER_LINK_OBJECT_ENTRY_MEMBER_ID, WORLD_TILE_SMART_TILE_SCHEMA_KEY, WORLD_TILE_SMART_TILE_MEMBER_ID, WORLD_SMART_TILE_DEFAULT_COLLIDER_SCHEMA_KEY, WORLD_SMART_TILE_DEFAULT_COLLIDER_MEMBER_ID, WORLD_SMART_TILE_RULES_SCHEMA_KEY, WORLD_SMART_TILE_RULES_MEMBER_ID, WORLD_SMART_TILE_RULES_ENTRY_MEMBER_ID, WORLD_SMART_TILE_RULE_NEIGHBORS_SCHEMA_KEY, WORLD_SMART_TILE_RULE_NEIGHBORS_MEMBER_ID, WORLD_SMART_TILE_RULE_NEIGHBORS_ENTRY_MEMBER_ID, WORLD_SMART_TILE_RULE_SPRITES_SCHEMA_KEY, WORLD_SMART_TILE_RULE_SPRITES_MEMBER_ID, WORLD_SMART_TILE_RULE_SPRITES_ENTRY_MEMBER_ID, WORLD_SMART_TILE_RULE_OUTPUT_SCHEMA_KEY, WORLD_SMART_TILE_RULE_OUTPUT_MEMBER_ID, WORLD_SMART_TILE_RULE_COLLIDER_SCHEMA_KEY, WORLD_SMART_TILE_RULE_COLLIDER_MEMBER_ID, WORLD_SMART_TILE_RULE_TRANSFORM_SCHEMA_KEY, WORLD_SMART_TILE_RULE_TRANSFORM_MEMBER_ID, WORLD_SMART_TILE_RULE_MIN_ANIMATION_SPEED_SCHEMA_KEY, WORLD_SMART_TILE_RULE_MIN_ANIMATION_SPEED_MEMBER_ID, WORLD_SMART_TILE_RULE_MAX_ANIMATION_SPEED_SCHEMA_KEY, WORLD_SMART_TILE_RULE_MAX_ANIMATION_SPEED_MEMBER_ID, WORLD_SMART_TILE_NEIGHBOR_CELL_SCHEMA_KEY, WORLD_SMART_TILE_NEIGHBOR_CELL_MEMBER_ID, WORLD_SMART_TILE_NEIGHBOR_CONDITION_SCHEMA_KEY, WORLD_SMART_TILE_NEIGHBOR_CONDITION_MEMBER_ID, WORLD_SMART_TILE_CONDITION_ENUM_ID, WORLD_SMART_TILE_OUTPUT_ENUM_ID, WORLD_SMART_TILE_COLLIDER_ENUM_ID, WORLD_SMART_TILE_TRANSFORM_ENUM_ID, WORLD_SMART_TILE_CONDITION_THIS_OPTION_ID, WORLD_SMART_TILE_OUTPUT_SINGLE_OPTION_ID, WORLD_SMART_TILE_COLLIDER_SPRITE_OPTION_ID, WORLD_SMART_TILE_TRANSFORM_FIXED_OPTION_ID, WORLD_ANIMATION_CLIP_TARGET_PARAM_ID, WORLD_ANIMATION_FRAME_TARGET_PARAM_ID, WORLD_ANIMATION_CHILD_OVERRIDE_ENTRY_PARAM_ID, WORLD_ANIMATION_CHILD_OVERRIDE_BINDING_MEMBER_NAME, WORLD_ANIMATION_CHILD_OVERRIDE_BINDING_MEMBER_NAMESPACE, WORLD_ANIMATION_CLIP_FPS_MEMBER_ID, WORLD_ANIMATION_CLIP_DURATION_MEMBER_ID, WORLD_ANIMATION_CLIP_FRAMES_MEMBER_ID, WORLD_ANIMATION_CLIP_FRAMES_ENTRY_MEMBER_ID, WORLD_ANIMATION_CLIP_TRACKS_MEMBER_ID, WORLD_ANIMATION_CLIP_TRACKS_ENTRY_MEMBER_ID, WORLD_ANIMATION_FRAME_INDEX_MEMBER_ID, WORLD_ANIMATION_FRAME_OVERRIDES_MEMBER_ID, WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_MEMBER_ID, WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_ENTRY_MEMBER_ID, WORLD_ANIMATION_FRAME_ACTIONS_MEMBER_ID, WORLD_ANIMATION_FRAME_ACTIONS_ENTRY_MEMBER_ID, WORLD_ANIMATION_CHILD_OVERRIDE_CHILD_MEMBER_ID, WORLD_ANIMATION_CHILD_OVERRIDE_OVERRIDES_MEMBER_ID, WORLD_ANIMATION_CHILD_TRACK_CHILD_MEMBER_ID, WORLD_ANIMATION_CHILD_TRACK_CLIP_KEY_MEMBER_ID, WORLD_ANIMATION_CHILD_TRACK_START_FRAME_MEMBER_ID, WORLD_ANIMATION_OBJECT_BASE_BINDING_MEMBER_ID, WORLD_SYSTEM_CLASS_DEFINITIONS, ANIMATION_WORLD_KINDS;
|
|
35768
|
+
var WORLD_SORTING_LAYERS_MEMBER_ID, WORLD_SORTING_LAYER_ENTRY_MEMBER_ID, WORLD_SORTING_LAYER_NAME_MEMBER_ID, WORLD_LAYER_NAME_MEMBER_ID, WORLD_LAYER_SORTING_LAYER_MEMBER_ID, WORLD_LAYER_SORTING_ORDER_MEMBER_ID, WORLD_SORTING_ORDER_MIN, WORLD_SORTING_ORDER_MAX, WORLD_GRID_CHILDREN_MEMBER_ID, WORLD_GRID_CHILDREN_ENTRY_MEMBER_ID, WORLD_ASSET_NAME_MEMBER_ID, WORLD_TILE_SPRITE_MEMBER_ID, WORLD_OBJECT_BASE_NAME_MEMBER_ID, WORLD_OBJECT_BASE_POSITION_MEMBER_ID, WORLD_OBJECT_BASE_SIZE_MEMBER_ID, WORLD_SPRITE_OBJECT_NAME_MEMBER_ID, WORLD_SPRITE_OBJECT_SPRITE_MEMBER_ID, WORLD_OBJECT_CHILDREN_MEMBER_ID, WORLD_OBJECT_CHILDREN_ENTRY_MEMBER_ID, WORLD_OBJECT_COLLIDER_MEMBER_ID, WORLD_OBJECT_PLACEMENT_TILES_MEMBER_ID, WORLD_OBJECT_PLACEMENT_TILES_ENTRY_MEMBER_ID, WORLD_OBJECT_PLACEMENT_TILE_CELL_MEMBER_ID, WORLD_TILE_INSTANCE_CELL_MEMBER_ID, WORLD_TILE_LAYER_LINK_LAYER_MEMBER_ID, WORLD_TILE_LAYER_LINK_TILES_MEMBER_ID, WORLD_TILE_LAYER_LINK_TILE_ENTRY_MEMBER_ID, WORLD_OBJECT_LAYER_LINK_LAYER_MEMBER_ID, WORLD_OBJECT_LAYER_LINK_OBJECTS_MEMBER_ID, WORLD_OBJECT_LAYER_LINK_OBJECT_ENTRY_MEMBER_ID, WORLD_TILE_SMART_TILE_SCHEMA_KEY, WORLD_TILE_SMART_TILE_MEMBER_ID, WORLD_SMART_TILE_DEFAULT_COLLIDER_SCHEMA_KEY, WORLD_SMART_TILE_DEFAULT_COLLIDER_MEMBER_ID, WORLD_SMART_TILE_RULES_SCHEMA_KEY, WORLD_SMART_TILE_RULES_MEMBER_ID, WORLD_SMART_TILE_RULES_ENTRY_MEMBER_ID, WORLD_SMART_TILE_RULE_NEIGHBORS_SCHEMA_KEY, WORLD_SMART_TILE_RULE_NEIGHBORS_MEMBER_ID, WORLD_SMART_TILE_RULE_NEIGHBORS_ENTRY_MEMBER_ID, WORLD_SMART_TILE_RULE_SPRITES_SCHEMA_KEY, WORLD_SMART_TILE_RULE_SPRITES_MEMBER_ID, WORLD_SMART_TILE_RULE_SPRITES_ENTRY_MEMBER_ID, WORLD_SMART_TILE_RULE_OUTPUT_SCHEMA_KEY, WORLD_SMART_TILE_RULE_OUTPUT_MEMBER_ID, WORLD_SMART_TILE_RULE_COLLIDER_SCHEMA_KEY, WORLD_SMART_TILE_RULE_COLLIDER_MEMBER_ID, WORLD_SMART_TILE_RULE_TRANSFORM_SCHEMA_KEY, WORLD_SMART_TILE_RULE_TRANSFORM_MEMBER_ID, WORLD_SMART_TILE_RULE_MIN_ANIMATION_SPEED_SCHEMA_KEY, WORLD_SMART_TILE_RULE_MIN_ANIMATION_SPEED_MEMBER_ID, WORLD_SMART_TILE_RULE_MAX_ANIMATION_SPEED_SCHEMA_KEY, WORLD_SMART_TILE_RULE_MAX_ANIMATION_SPEED_MEMBER_ID, WORLD_SMART_TILE_NEIGHBOR_CELL_SCHEMA_KEY, WORLD_SMART_TILE_NEIGHBOR_CELL_MEMBER_ID, WORLD_SMART_TILE_NEIGHBOR_CONDITION_SCHEMA_KEY, WORLD_SMART_TILE_NEIGHBOR_CONDITION_MEMBER_ID, WORLD_SMART_TILE_CONDITION_ENUM_ID, WORLD_SMART_TILE_OUTPUT_ENUM_ID, WORLD_SMART_TILE_COLLIDER_ENUM_ID, WORLD_SMART_TILE_TRANSFORM_ENUM_ID, WORLD_SMART_TILE_CONDITION_THIS_OPTION_ID, WORLD_SMART_TILE_OUTPUT_SINGLE_OPTION_ID, WORLD_SMART_TILE_COLLIDER_SPRITE_OPTION_ID, WORLD_SMART_TILE_TRANSFORM_FIXED_OPTION_ID, WORLD_ANIMATION_CLIP_TARGET_PARAM_ID, WORLD_ANIMATION_FRAME_TARGET_PARAM_ID, WORLD_ANIMATION_CHILD_OVERRIDE_ENTRY_PARAM_ID, WORLD_ANIMATION_CHILD_OVERRIDE_BINDING_MEMBER_NAME, WORLD_ANIMATION_CHILD_OVERRIDE_BINDING_MEMBER_NAMESPACE, WORLD_ANIMATION_CLIP_FPS_MEMBER_ID, WORLD_ANIMATION_CLIP_DURATION_MEMBER_ID, WORLD_ANIMATION_CLIP_FRAMES_MEMBER_ID, WORLD_ANIMATION_CLIP_FRAMES_ENTRY_MEMBER_ID, WORLD_ANIMATION_CLIP_TRACKS_MEMBER_ID, WORLD_ANIMATION_CLIP_TRACKS_ENTRY_MEMBER_ID, WORLD_ANIMATION_FRAME_INDEX_MEMBER_ID, WORLD_ANIMATION_FRAME_OVERRIDES_MEMBER_ID, WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_MEMBER_ID, WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_ENTRY_MEMBER_ID, WORLD_ANIMATION_FRAME_ACTIONS_MEMBER_ID, WORLD_ANIMATION_FRAME_ACTIONS_ENTRY_MEMBER_ID, WORLD_ANIMATION_CHILD_OVERRIDE_CHILD_MEMBER_ID, WORLD_ANIMATION_CHILD_OVERRIDE_OVERRIDES_MEMBER_ID, WORLD_ANIMATION_CHILD_TRACK_CHILD_MEMBER_ID, WORLD_ANIMATION_CHILD_TRACK_CLIP_KEY_MEMBER_ID, WORLD_ANIMATION_CHILD_TRACK_START_FRAME_MEMBER_ID, WORLD_ANIMATION_OBJECT_BASE_BINDING_MEMBER_ID, WORLD_SYSTEM_CLASS_DEFINITIONS, ANIMATION_WORLD_KINDS;
|
|
35530
35769
|
var init_world_system_classes = __esm({
|
|
35531
35770
|
"../src/models/classes/world-system-classes.ts"() {
|
|
35532
35771
|
"use strict";
|
|
@@ -35534,7 +35773,11 @@ var init_world_system_classes = __esm({
|
|
|
35534
35773
|
init_member_storage();
|
|
35535
35774
|
init_core();
|
|
35536
35775
|
init_dist_node();
|
|
35776
|
+
init_entry_member_id();
|
|
35537
35777
|
WORLD_SORTING_LAYERS_MEMBER_ID = "7ec79ef8-a216-407f-8886-9f770bc9895b";
|
|
35778
|
+
WORLD_SORTING_LAYER_ENTRY_MEMBER_ID = derivedEntryMemberId(
|
|
35779
|
+
WORLD_SORTING_LAYERS_MEMBER_ID
|
|
35780
|
+
);
|
|
35538
35781
|
WORLD_SORTING_LAYER_NAME_MEMBER_ID = "e963862e-6228-4594-8220-8ef06098c253";
|
|
35539
35782
|
WORLD_LAYER_NAME_MEMBER_ID = "788a3dbc-6167-4320-83aa-1e884924f776";
|
|
35540
35783
|
WORLD_LAYER_SORTING_LAYER_MEMBER_ID = "89dbb12e-1d7c-42ad-b872-63fc7fe8bd5b";
|
|
@@ -35542,7 +35785,9 @@ var init_world_system_classes = __esm({
|
|
|
35542
35785
|
WORLD_SORTING_ORDER_MIN = -32768;
|
|
35543
35786
|
WORLD_SORTING_ORDER_MAX = 32767;
|
|
35544
35787
|
WORLD_GRID_CHILDREN_MEMBER_ID = "98578ba3-a70e-4397-9283-996a898d44c8";
|
|
35545
|
-
WORLD_GRID_CHILDREN_ENTRY_MEMBER_ID =
|
|
35788
|
+
WORLD_GRID_CHILDREN_ENTRY_MEMBER_ID = derivedEntryMemberId(
|
|
35789
|
+
WORLD_GRID_CHILDREN_MEMBER_ID
|
|
35790
|
+
);
|
|
35546
35791
|
WORLD_ASSET_NAME_MEMBER_ID = "3b02422f-1ef2-4a50-8386-155d5001082b";
|
|
35547
35792
|
WORLD_TILE_SPRITE_MEMBER_ID = "cbd6db9a-f473-44b5-b913-7cdc06452f35";
|
|
35548
35793
|
WORLD_OBJECT_BASE_NAME_MEMBER_ID = "b21bfd01-1234-4f49-ab6b-889f829cb148";
|
|
@@ -35551,31 +35796,37 @@ var init_world_system_classes = __esm({
|
|
|
35551
35796
|
WORLD_SPRITE_OBJECT_NAME_MEMBER_ID = "441cb790-a45f-4488-a5a9-6f375af6c369";
|
|
35552
35797
|
WORLD_SPRITE_OBJECT_SPRITE_MEMBER_ID = "e9288ba9-f5a2-4485-8443-6afb155b31e0";
|
|
35553
35798
|
WORLD_OBJECT_CHILDREN_MEMBER_ID = "bb5d2cf1-a0dd-4eba-a62e-0e1bf0177071";
|
|
35554
|
-
WORLD_OBJECT_CHILDREN_ENTRY_MEMBER_ID =
|
|
35799
|
+
WORLD_OBJECT_CHILDREN_ENTRY_MEMBER_ID = derivedEntryMemberId(
|
|
35800
|
+
WORLD_OBJECT_CHILDREN_MEMBER_ID
|
|
35801
|
+
);
|
|
35555
35802
|
WORLD_OBJECT_COLLIDER_MEMBER_ID = "a0083c92-72f7-405f-8863-ff86f995d36d";
|
|
35556
35803
|
WORLD_OBJECT_PLACEMENT_TILES_MEMBER_ID = "5a9ca1f5-a21b-4d4e-8c55-00341af594b4";
|
|
35557
|
-
WORLD_OBJECT_PLACEMENT_TILES_ENTRY_MEMBER_ID =
|
|
35804
|
+
WORLD_OBJECT_PLACEMENT_TILES_ENTRY_MEMBER_ID = derivedEntryMemberId(WORLD_OBJECT_PLACEMENT_TILES_MEMBER_ID);
|
|
35558
35805
|
WORLD_OBJECT_PLACEMENT_TILE_CELL_MEMBER_ID = "b0b3c45c-a87d-4218-b056-7418ef46aac5";
|
|
35559
35806
|
WORLD_TILE_INSTANCE_CELL_MEMBER_ID = "f4be2707-74f5-4833-9784-e81bb2474330";
|
|
35560
35807
|
WORLD_TILE_LAYER_LINK_LAYER_MEMBER_ID = "325dba0e-5967-4e18-937e-5c6800b68abc";
|
|
35561
35808
|
WORLD_TILE_LAYER_LINK_TILES_MEMBER_ID = "98655d2b-ad0b-45e2-a901-62600b4d3a22";
|
|
35562
|
-
WORLD_TILE_LAYER_LINK_TILE_ENTRY_MEMBER_ID =
|
|
35809
|
+
WORLD_TILE_LAYER_LINK_TILE_ENTRY_MEMBER_ID = derivedEntryMemberId(
|
|
35810
|
+
WORLD_TILE_LAYER_LINK_TILES_MEMBER_ID
|
|
35811
|
+
);
|
|
35563
35812
|
WORLD_OBJECT_LAYER_LINK_LAYER_MEMBER_ID = "9cc0ab67-e138-4d11-8011-fab7d7a75b13";
|
|
35564
35813
|
WORLD_OBJECT_LAYER_LINK_OBJECTS_MEMBER_ID = "f8e217b1-da89-4819-9c8d-e9c9da2bdfb2";
|
|
35565
|
-
WORLD_OBJECT_LAYER_LINK_OBJECT_ENTRY_MEMBER_ID =
|
|
35814
|
+
WORLD_OBJECT_LAYER_LINK_OBJECT_ENTRY_MEMBER_ID = derivedEntryMemberId(WORLD_OBJECT_LAYER_LINK_OBJECTS_MEMBER_ID);
|
|
35566
35815
|
WORLD_TILE_SMART_TILE_SCHEMA_KEY = "SmartTile";
|
|
35567
35816
|
WORLD_TILE_SMART_TILE_MEMBER_ID = "96cda8f5-3100-45b5-adcb-0552d21504dd";
|
|
35568
35817
|
WORLD_SMART_TILE_DEFAULT_COLLIDER_SCHEMA_KEY = "DefaultCollider";
|
|
35569
35818
|
WORLD_SMART_TILE_DEFAULT_COLLIDER_MEMBER_ID = "0a51bdef-4b3e-49d6-913b-11cbea98bced";
|
|
35570
35819
|
WORLD_SMART_TILE_RULES_SCHEMA_KEY = "Rules";
|
|
35571
35820
|
WORLD_SMART_TILE_RULES_MEMBER_ID = "97cb9d95-2d54-4809-ae88-0b0ba7859248";
|
|
35572
|
-
WORLD_SMART_TILE_RULES_ENTRY_MEMBER_ID =
|
|
35821
|
+
WORLD_SMART_TILE_RULES_ENTRY_MEMBER_ID = derivedEntryMemberId(
|
|
35822
|
+
WORLD_SMART_TILE_RULES_MEMBER_ID
|
|
35823
|
+
);
|
|
35573
35824
|
WORLD_SMART_TILE_RULE_NEIGHBORS_SCHEMA_KEY = "Neighbors";
|
|
35574
35825
|
WORLD_SMART_TILE_RULE_NEIGHBORS_MEMBER_ID = "8bfadaa8-14e9-4488-a103-ee688c1cc9c4";
|
|
35575
|
-
WORLD_SMART_TILE_RULE_NEIGHBORS_ENTRY_MEMBER_ID =
|
|
35826
|
+
WORLD_SMART_TILE_RULE_NEIGHBORS_ENTRY_MEMBER_ID = derivedEntryMemberId(WORLD_SMART_TILE_RULE_NEIGHBORS_MEMBER_ID);
|
|
35576
35827
|
WORLD_SMART_TILE_RULE_SPRITES_SCHEMA_KEY = "Sprites";
|
|
35577
35828
|
WORLD_SMART_TILE_RULE_SPRITES_MEMBER_ID = "fd3a7f0f-cff8-4069-9b19-004015a6aca1";
|
|
35578
|
-
WORLD_SMART_TILE_RULE_SPRITES_ENTRY_MEMBER_ID =
|
|
35829
|
+
WORLD_SMART_TILE_RULE_SPRITES_ENTRY_MEMBER_ID = derivedEntryMemberId(WORLD_SMART_TILE_RULE_SPRITES_MEMBER_ID);
|
|
35579
35830
|
WORLD_SMART_TILE_RULE_OUTPUT_SCHEMA_KEY = "Output";
|
|
35580
35831
|
WORLD_SMART_TILE_RULE_OUTPUT_MEMBER_ID = "9b22d8df-ea41-4c76-9d2e-a6c64c95a64a";
|
|
35581
35832
|
WORLD_SMART_TILE_RULE_COLLIDER_SCHEMA_KEY = "Collider";
|
|
@@ -35606,15 +35857,19 @@ var init_world_system_classes = __esm({
|
|
|
35606
35857
|
WORLD_ANIMATION_CLIP_FPS_MEMBER_ID = "af2d8db8-817b-46f0-adbe-cf9113b77155";
|
|
35607
35858
|
WORLD_ANIMATION_CLIP_DURATION_MEMBER_ID = "e1a1ba86-2599-43dc-a19a-46d08a2e4256";
|
|
35608
35859
|
WORLD_ANIMATION_CLIP_FRAMES_MEMBER_ID = "485b0f05-ec7b-4e61-ba80-9a5d7d262b39";
|
|
35609
|
-
WORLD_ANIMATION_CLIP_FRAMES_ENTRY_MEMBER_ID =
|
|
35860
|
+
WORLD_ANIMATION_CLIP_FRAMES_ENTRY_MEMBER_ID = derivedEntryMemberId(
|
|
35861
|
+
WORLD_ANIMATION_CLIP_FRAMES_MEMBER_ID
|
|
35862
|
+
);
|
|
35610
35863
|
WORLD_ANIMATION_CLIP_TRACKS_MEMBER_ID = "eb602654-04a9-4766-860f-300b443be86e";
|
|
35611
|
-
WORLD_ANIMATION_CLIP_TRACKS_ENTRY_MEMBER_ID =
|
|
35864
|
+
WORLD_ANIMATION_CLIP_TRACKS_ENTRY_MEMBER_ID = derivedEntryMemberId(
|
|
35865
|
+
WORLD_ANIMATION_CLIP_TRACKS_MEMBER_ID
|
|
35866
|
+
);
|
|
35612
35867
|
WORLD_ANIMATION_FRAME_INDEX_MEMBER_ID = "0dbdd0f9-9dd2-4b4b-9403-50180c1500dd";
|
|
35613
35868
|
WORLD_ANIMATION_FRAME_OVERRIDES_MEMBER_ID = "8ab7bb00-a475-43f0-8579-1b08f133d658";
|
|
35614
35869
|
WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_MEMBER_ID = "a5905750-c472-46a8-89e9-f04f0bf66696";
|
|
35615
|
-
WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_ENTRY_MEMBER_ID =
|
|
35870
|
+
WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_ENTRY_MEMBER_ID = derivedEntryMemberId(WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_MEMBER_ID);
|
|
35616
35871
|
WORLD_ANIMATION_FRAME_ACTIONS_MEMBER_ID = "23e05410-6428-4bd1-b085-c0390ed7fcb7";
|
|
35617
|
-
WORLD_ANIMATION_FRAME_ACTIONS_ENTRY_MEMBER_ID =
|
|
35872
|
+
WORLD_ANIMATION_FRAME_ACTIONS_ENTRY_MEMBER_ID = derivedEntryMemberId(WORLD_ANIMATION_FRAME_ACTIONS_MEMBER_ID);
|
|
35618
35873
|
WORLD_ANIMATION_CHILD_OVERRIDE_CHILD_MEMBER_ID = "6e15db41-a6f2-43fd-9793-c52fe4f3d0f8";
|
|
35619
35874
|
WORLD_ANIMATION_CHILD_OVERRIDE_OVERRIDES_MEMBER_ID = "819b3743-0c3d-4896-b679-9aeeb73255f4";
|
|
35620
35875
|
WORLD_ANIMATION_CHILD_TRACK_CHILD_MEMBER_ID = "29abc85e-2d38-4cef-a200-88915d176d06";
|
|
@@ -36916,12 +37171,7 @@ function isAnimationChildOverrideEntrySlot(slotMember, members) {
|
|
|
36916
37171
|
const id2 = getOptionalString(current, "id");
|
|
36917
37172
|
if (id2 === void 0 || visited.has(id2)) return false;
|
|
36918
37173
|
visited.add(id2);
|
|
36919
|
-
|
|
36920
|
-
entryMemberId: id2,
|
|
36921
|
-
extendsMemberId: current.extendsMemberId,
|
|
36922
|
-
id: id2
|
|
36923
|
-
});
|
|
36924
|
-
if (canonicalId === WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_ENTRY_MEMBER_ID) {
|
|
37174
|
+
if (id2 === WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_MEMBER_ID || id2 === WORLD_ANIMATION_FRAME_CHILD_OVERRIDES_ENTRY_MEMBER_ID) {
|
|
36925
37175
|
return true;
|
|
36926
37176
|
}
|
|
36927
37177
|
current = typeof current.extendsMemberId === "string" ? membersById.get(current.extendsMemberId) : void 0;
|
package/package.json
CHANGED
|
@@ -196,8 +196,14 @@ abstract class InventoryItem<
|
|
|
196
196
|
- `@settings(...)` and `@storage(...)` are context-aware typed contracts.
|
|
197
197
|
Numeric limits are numeric literals. A class supports only
|
|
198
198
|
`@storage(allowed: ...)`; storage keys are member-only.
|
|
199
|
-
- Keep focused annotations such as `@locked`, `@system`, and
|
|
200
|
-
separate from contextual settings.
|
|
199
|
+
- Keep focused annotations such as `@locked`, `@hidden`, `@system`, and
|
|
200
|
+
`@relations` separate from contextual settings. `@hidden` is class-only and
|
|
201
|
+
hides the class from the member selector and classes tree; absent is visible.
|
|
202
|
+
- `@index(member: Field, unique: ...)` and
|
|
203
|
+
`@column(member: Field, width: ..., hidden: ..., frozen: ..., wrapContent: ...)`
|
|
204
|
+
are repeatable List annotations. `member:` is a bare field name on the entry
|
|
205
|
+
class — an index needs a non-localizable `string` or a single-select enum,
|
|
206
|
+
and a column may also target the reserved `__other__` key.
|
|
201
207
|
- `.EnumCase` works only when one expected enum type is known. Use explicit
|
|
202
208
|
`EnumType.Case` when context is ambiguous.
|
|
203
209
|
- Defaults and settings must be statically analyzable. Project source is parsed
|