@neocompose/cli 0.10.7 → 0.11.0

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,16 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.11.0] - 2026-07-27
4
+
5
+ ### Added
6
+
7
+ - Accept `sortingGroup` as a world system class kind. P40 adds
8
+ `NeoSortingGroup` as a nested class member on `NeoObject`, so every project
9
+ on the migrated schema now carries a class whose `@system` metadata names a
10
+ kind this CLI's manifest validator did not know. Without the release, a
11
+ `neo pull` of any project after the P40 rollout fails validation on the new
12
+ class rather than writing source for it.
13
+
3
14
  ## [0.10.7] - 2026-07-26
4
15
 
5
16
  ### Fixed
package/dist/neo.mjs CHANGED
@@ -12101,6 +12101,7 @@ var init_project_schema_contract_generated = __esm({
12101
12101
  "ObjectPlacementTile",
12102
12102
  "TileInstance",
12103
12103
  "ObjectCollider",
12104
+ "SortingGroup",
12104
12105
  "SortingLayer",
12105
12106
  "SmartTile",
12106
12107
  "SmartTileRule",
@@ -23439,6 +23440,7 @@ function isSchemaSystemMetadata(value) {
23439
23440
  "objectPlacementTile",
23440
23441
  "tileInstance",
23441
23442
  "objectCollider",
23443
+ "sortingGroup",
23442
23444
  "sortingLayer",
23443
23445
  "smartTile",
23444
23446
  "smartTileRule",
@@ -26740,6 +26742,7 @@ var init_validate = __esm({
26740
26742
  "objectPlacementTile",
26741
26743
  "tileInstance",
26742
26744
  "objectCollider",
26745
+ "sortingGroup",
26743
26746
  "sortingLayer",
26744
26747
  "smartTile",
26745
26748
  "smartTileRule",
@@ -29633,7 +29636,6 @@ function lowerInterface(context, declaration) {
29633
29636
  function lowerEnum(context, declaration) {
29634
29637
  const id2 = materializedId(declaration, "enum", declaration.name);
29635
29638
  const base = context.baseEnums.get(id2);
29636
- const baseOptions = new Map(base?.options.map((entry) => [entry.id, entry]));
29637
29639
  return {
29638
29640
  id: id2,
29639
29641
  source: sourceIdentity2(declaration, "enum", declaration.name),
@@ -29641,13 +29643,15 @@ function lowerEnum(context, declaration) {
29641
29643
  ...declaration.docsText === void 0 ? {} : { docsText: declaration.docsText },
29642
29644
  options: declaration.options.map((option) => {
29643
29645
  const optionId = materializedId(option, "enum-option", option.name);
29644
- const baseOption = baseOptions.get(optionId);
29645
29646
  return {
29646
29647
  id: optionId,
29647
29648
  key: optionId,
29648
29649
  name: option.name,
29649
29650
  ...option.docsText === void 0 ? {} : { docsText: option.docsText },
29650
- text: option.textExpression === null ? baseOption?.text ?? option.name : stringExpression(option.textExpression),
29651
+ // An option with no `= "..."` is labelled by its own name. Preserving
29652
+ // the pulled record's text existed to carry a localized-text id
29653
+ // through a lowering; P39 section 1.3 removed that shape.
29654
+ text: option.textExpression === null ? option.name : stringExpression(option.textExpression),
29651
29655
  source: sourceIdentity2(option, "enumOption", option.name)
29652
29656
  };
29653
29657
  }),
@@ -31185,7 +31189,7 @@ ${members.map((member) => indentNeoSourceNonEmptyLines(member, 2)).join("\n\n")}
31185
31189
  }
31186
31190
  function emitEnum(value) {
31187
31191
  const options = value.options.map(
31188
- (option) => `${emitDocsText(option.docsText)}${id(option.id)}${option.name}${option.text !== option.name && !looksLikeId(option.text) ? ` = ${quote(option.text)}` : ""},`
31192
+ (option) => `${emitDocsText(option.docsText)}${id(option.id)}${option.name}${option.text === option.name ? "" : ` = ${quote(option.text)}`},`
31189
31193
  );
31190
31194
  return `${emitDocsText(value.docsText)}${id(value.id)}enum ${value.name} {
31191
31195
  ${options.map((option) => indentNeoSourceNonEmptyLines(option, 2)).join("\n")}
@@ -31989,11 +31993,6 @@ function assertUniqueEmittedPaths(files) {
31989
31993
  paths.set(key, file);
31990
31994
  }
31991
31995
  }
31992
- function looksLikeId(value) {
31993
- return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
31994
- value
31995
- );
31996
- }
31997
31996
  function assertIdentifier(value, kind) {
31998
31997
  if (!isValidNeoIdentifier(value)) {
31999
31998
  throw new Error(
@@ -33730,6 +33729,7 @@ var init_world_system_kinds_generated = __esm({
33730
33729
  Tile: "tile",
33731
33730
  ObjectBase: "objectBase",
33732
33731
  ObjectCollider: "objectCollider",
33732
+ SortingGroup: "sortingGroup",
33733
33733
  LayerGroupBase: "layerGroupBase",
33734
33734
  SpriteObject: "spriteObject",
33735
33735
  ObjectPlacementTile: "objectPlacementTile",
@@ -36085,6 +36085,22 @@ var init_world_system_classes_generated = __esm({
36085
36085
  ],
36086
36086
  worldKind: "objectCollider"
36087
36087
  },
36088
+ {
36089
+ classId: "system_69150540-b653-4bd0-a4fa-43a9f39da72b",
36090
+ name: "NeoSortingGroup",
36091
+ isAbstract: false,
36092
+ schemaFields: [
36093
+ {
36094
+ memberId: "system_fb90f48f-fcc0-4c98-bc22-70a8ea01170e",
36095
+ memberKind: "bool",
36096
+ defaultValue: false,
36097
+ docsText: "Sort this group against the scene root, ignoring any enclosing sorting group. Maps to SortingGroup.sortAtRoot.",
36098
+ required: true,
36099
+ schemaKey: "SortAtRoot"
36100
+ }
36101
+ ],
36102
+ worldKind: "sortingGroup"
36103
+ },
36088
36104
  {
36089
36105
  classId: "system_bf076e9b-c8da-47dc-bae3-7527d0c307a8",
36090
36106
  name: "NeoLayerGroupBase",
@@ -36111,6 +36127,42 @@ var init_world_system_classes_generated = __esm({
36111
36127
  memberKind: "sprite",
36112
36128
  required: true,
36113
36129
  schemaKey: "Sprite"
36130
+ },
36131
+ {
36132
+ memberId: "system_9fcab37a-9743-4e35-8eee-80cb560f1433",
36133
+ memberKind: "bool",
36134
+ defaultValue: false,
36135
+ docsText: "Mirrors the sprite horizontally about its own centre. Maps to SpriteRenderer.flipX.",
36136
+ required: true,
36137
+ schemaKey: "FlipX"
36138
+ },
36139
+ {
36140
+ memberId: "system_ddd09f08-1656-4404-b36b-5570a4c01fcf",
36141
+ memberKind: "bool",
36142
+ defaultValue: false,
36143
+ docsText: "Mirrors the sprite vertically about its own centre. Maps to SpriteRenderer.flipY.",
36144
+ required: true,
36145
+ schemaKey: "FlipY"
36146
+ },
36147
+ {
36148
+ memberId: "system_f2a8c86d-ace5-421b-9475-0f3f6f97b2a6",
36149
+ memberKind: "enum",
36150
+ defaultValue: ["system_9d607a4f-60c3-4347-94fc-f24b538bf468"],
36151
+ docsText: "How this sprite reacts to sprite masks. Maps to SpriteRenderer.maskInteraction. The web canvas has no real sprite mask, so anything other than None previews as a distinguishable treatment rather than as the mask itself \u2014 only Unity renders the real thing.",
36152
+ enumId: "system_4e6c4d6f-1d0b-402a-ad3a-be92242dceec",
36153
+ multiselect: false,
36154
+ required: true,
36155
+ schemaKey: "MaskInteraction"
36156
+ },
36157
+ {
36158
+ memberId: "system_6f32f1f2-83ea-42fc-8647-34ed0946b7f1",
36159
+ memberKind: "int",
36160
+ defaultValue: null,
36161
+ docsText: "Nudges this sprite's draw order within its object. Added to the order derived from the object's layer group \u2014 it does not replace it. Leave unset for the default order.",
36162
+ minValue: -32768,
36163
+ maxValue: 32767,
36164
+ required: false,
36165
+ schemaKey: "SortingOrder"
36114
36166
  }
36115
36167
  ],
36116
36168
  worldKind: "spriteObject"
@@ -49650,7 +49702,6 @@ var init_localization_types = __esm({
49650
49702
  LOCALIZED_TEXT_LINK_KINDS = [
49651
49703
  "member-value",
49652
49704
  "member-default-value",
49653
- "member-enum-option",
49654
49705
  "dialogue-description",
49655
49706
  "dialogue-node-text",
49656
49707
  "dialogue-choice-text",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.10.7",
3
+ "version": "0.11.0",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",