@neocompose/cli 0.33.0 → 0.33.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 CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.33.1] - 2026-08-19
4
+
5
+ ### Fixed
6
+
7
+ - Preserve an authored non-null `T` member while recompiling an open generic
8
+ Class from its lowered project records, so `neo test` no longer rejects
9
+ valid generic getters as returning `T?` during animation declaration replay.
10
+ - Identify the actual NeoScript property and getter or setter position when
11
+ prospective replay compilation fails, instead of reporting only the
12
+ unrelated animation value that triggered whole-document validation.
13
+
3
14
  ## [0.33.0] - 2026-08-19
4
15
 
5
16
  ### Added
package/dist/neo.mjs CHANGED
@@ -61279,7 +61279,14 @@ function memberRuntimeType(record3, context, seen = /* @__PURE__ */ new Set(), g
61279
61279
  }
61280
61280
  return genericParameterLanguageType(
61281
61281
  genericParamId,
61282
- required2,
61282
+ // A Generic schema member is a value-less placeholder, so its stored
61283
+ // `required` is always false even when the authored slot is spelled
61284
+ // `T`. Project-source declarations forbid `T?` member slots because
61285
+ // the concrete binding owns storage nullability. While compiling the
61286
+ // open declaring Class, preserve the authored `T` surface instead of
61287
+ // turning every read into `T?`; closed receivers still take the
61288
+ // concrete binding branch above and retain its real nullability.
61289
+ true,
61283
61290
  context,
61284
61291
  genericEnvironment
61285
61292
  );
@@ -94844,7 +94851,7 @@ function replayAnimationDeclarationInitializersV4(records2, document, fallbackDo
94844
94851
  documentBodiesCompiled = true;
94845
94852
  } catch (error) {
94846
94853
  throw new Error(
94847
- `Animation declaration replay failed for value "${row.id}": ${error instanceof Error ? error.message : String(error)}`,
94854
+ `Animation declaration replay failed for value "${row.id}": ${describePulledProjectBodyCompileError(error)}`,
94848
94855
  { cause: error }
94849
94856
  );
94850
94857
  }
@@ -96098,6 +96105,16 @@ var init_server_preparation_preflight = __esm({
96098
96105
  });
96099
96106
 
96100
96107
  // src/project-source/initializer-replay.ts
96108
+ function describePulledProjectBodyCompileError(error) {
96109
+ const fallback = error instanceof Error ? error.message : String(error);
96110
+ if (!(error instanceof CompileError)) return fallback;
96111
+ const site = pulledBodyCompileSites.get(error);
96112
+ if (site === void 0) return fallback;
96113
+ const position = `${error.line}:${error.column}`;
96114
+ const detailPrefix = `${position}: `;
96115
+ const detail = error.message.startsWith(detailPrefix) ? error.message.slice(detailPrefix.length) : error.message;
96116
+ return `Member "${site.memberName}" (${site.memberId}) ${error.unit ?? "body"} failed at ${position}: ${detail}`;
96117
+ }
96101
96118
  function replayStoredConstructionV4(args) {
96102
96119
  const document = args.document ?? readPulledProjectDocumentV4(args.records);
96103
96120
  const compilationProject = args.compilationProject ?? (args.compileDocumentBodies === true ? createNeoScriptCompilationProject({
@@ -96343,11 +96360,21 @@ function compilePulledProjectDocumentForEvaluationV4(document, compilationProjec
96343
96360
  )
96344
96361
  );
96345
96362
  for (const member of compileArgs.members) {
96346
- compileAuthoredMemberBodies({
96347
- ...compileArgs,
96348
- member,
96349
- thisClass: ownerClassByMemberId.get(member.id) ?? null
96350
- });
96363
+ try {
96364
+ compileAuthoredMemberBodies({
96365
+ ...compileArgs,
96366
+ member,
96367
+ thisClass: ownerClassByMemberId.get(member.id) ?? null
96368
+ });
96369
+ } catch (error) {
96370
+ if (error instanceof CompileError) {
96371
+ pulledBodyCompileSites.set(error, {
96372
+ memberId: member.id,
96373
+ memberName: member.name
96374
+ });
96375
+ }
96376
+ throw error;
96377
+ }
96351
96378
  }
96352
96379
  for (const site of valueInitializerCompilationSites(document).values()) {
96353
96380
  if (isInitValueContent(site.row) && site.row.init.compiled !== void 0) {
@@ -96509,7 +96536,7 @@ function replayWorkspace(records2) {
96509
96536
  state: { records: stateRecords }
96510
96537
  };
96511
96538
  }
96512
- var pulledValueInitializerCompilationSites;
96539
+ var pulledBodyCompileSites, pulledValueInitializerCompilationSites;
96513
96540
  var init_initializer_replay = __esm({
96514
96541
  "src/project-source/initializer-replay.ts"() {
96515
96542
  "use strict";
@@ -96524,6 +96551,7 @@ var init_initializer_replay = __esm({
96524
96551
  init_constructors2();
96525
96552
  init_neoscript_evaluator();
96526
96553
  init_compiler_adapter();
96554
+ pulledBodyCompileSites = /* @__PURE__ */ new WeakMap();
96527
96555
  pulledValueInitializerCompilationSites = /* @__PURE__ */ new WeakMap();
96528
96556
  }
96529
96557
  });
@@ -112911,7 +112939,7 @@ var init_registry2 = __esm({
112911
112939
  PROJECT_SCHEMA_CONTRACT = Object.freeze({
112912
112940
  formatVersion: 3,
112913
112941
  contractVersion: "3.13",
112914
- cliVersion: "0.33.0",
112942
+ cliVersion: "0.33.1",
112915
112943
  projectFileUploadBatchSize: 32,
112916
112944
  documentRecords: {
112917
112945
  member: {
@@ -119506,7 +119534,7 @@ There is no --keep-current: preserving current semantic state defines flatten.
119506
119534
  async function main() {
119507
119535
  const args = parseArgs(process.argv.slice(2));
119508
119536
  if (args.command === "--version") {
119509
- console.log("0.33.0");
119537
+ console.log("0.33.1");
119510
119538
  return;
119511
119539
  }
119512
119540
  if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neocompose/cli",
3
- "version": "0.33.0",
3
+ "version": "0.33.1",
4
4
  "description": "Neo Compose native project-source CLI with bidirectional sync.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,7 +9,7 @@ description: >-
9
9
  `@neocompose/cli` or `node cli/bin/neo.mjs` in the neo-compose repository.
10
10
  ---
11
11
 
12
- <!-- reviewed-through-cli: 0.33.0 -->
12
+ <!-- reviewed-through-cli: 0.33.1 -->
13
13
 
14
14
  # Neo Compose CLI
15
15
 
@@ -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.33.0 -->
86
+ <!-- reviewed-through-cli: 0.33.1 -->
87
87
  ```
88
88
 
89
89
  The quoted version above is checked too, so this instruction cannot go stale