@neocompose/cli 0.83.0 → 0.84.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.
@@ -8152,6 +8152,35 @@ var init_world_system_classes_generated = __esm({
8152
8152
  ],
8153
8153
  dispatch: 0 /* Synchronous */,
8154
8154
  schemaKey: "TryConvert"
8155
+ },
8156
+ {
8157
+ memberId: "system_a92b0911-8e7e-48ef-a12e-f3c55c33f64b",
8158
+ memberKind: "function",
8159
+ docsText: "The nearest tile grid that owns this tile, or null when no grid owns it or that grid is not a T. A tile in an object's tile layer answers with the object's grid.",
8160
+ returnTypeInfo: {
8161
+ type: 21,
8162
+ required: false,
8163
+ ownerMemberId: "system_a92b0911-8e7e-48ef-a12e-f3c55c33f64b",
8164
+ index: 0
8165
+ },
8166
+ argumentTypes: [],
8167
+ genericParams: [
8168
+ {
8169
+ name: "T",
8170
+ constraint: {
8171
+ type: 7,
8172
+ required: true,
8173
+ classId: "system_b78f7f1d-f63c-4abb-ae65-852e69246534"
8174
+ },
8175
+ defaultType: {
8176
+ type: 7,
8177
+ required: true,
8178
+ classId: "system_b78f7f1d-f63c-4abb-ae65-852e69246534"
8179
+ }
8180
+ }
8181
+ ],
8182
+ dispatch: 0 /* Synchronous */,
8183
+ schemaKey: "GetArea"
8155
8184
  }
8156
8185
  ],
8157
8186
  worldKind: "tile"
@@ -8199,6 +8228,35 @@ var init_world_system_classes_generated = __esm({
8199
8228
  docsText: "The object's box collider, or null for none. Any world object can carry one: placed objects, nested children, and sprites alike.",
8200
8229
  schemaClassWorldKind: "objectCollider",
8201
8230
  schemaKey: "Collider"
8231
+ },
8232
+ {
8233
+ memberId: "system_7ad477e2-be5b-4892-b9ba-2a2f2476988d",
8234
+ memberKind: "function",
8235
+ docsText: "The nearest tile grid that owns this value, or null when no grid owns it or that grid is not a T. Nested children answer with their placed root's grid.",
8236
+ returnTypeInfo: {
8237
+ type: 21,
8238
+ required: false,
8239
+ ownerMemberId: "system_7ad477e2-be5b-4892-b9ba-2a2f2476988d",
8240
+ index: 0
8241
+ },
8242
+ argumentTypes: [],
8243
+ genericParams: [
8244
+ {
8245
+ name: "T",
8246
+ constraint: {
8247
+ type: 7,
8248
+ required: true,
8249
+ classId: "system_b78f7f1d-f63c-4abb-ae65-852e69246534"
8250
+ },
8251
+ defaultType: {
8252
+ type: 7,
8253
+ required: true,
8254
+ classId: "system_b78f7f1d-f63c-4abb-ae65-852e69246534"
8255
+ }
8256
+ }
8257
+ ],
8258
+ dispatch: 0 /* Synchronous */,
8259
+ schemaKey: "GetArea"
8202
8260
  }
8203
8261
  ],
8204
8262
  worldKind: "objectBase"
@@ -17529,7 +17587,7 @@ var init_registry = __esm({
17529
17587
  "../packages/manifest/schema-contract/registry.mjs"() {
17530
17588
  "use strict";
17531
17589
  PROJECT_SCHEMA_CONTRACT = Object.freeze({
17532
- cliVersion: "0.83.0",
17590
+ cliVersion: "0.84.0",
17533
17591
  projectFileUploadBatchSize: 32,
17534
17592
  documentRecords: {
17535
17593
  member: {
@@ -32956,7 +33014,7 @@ var init_collection_query = __esm({
32956
33014
  });
32957
33015
 
32958
33016
  // ../packages/neoscript-language/src/cell-pattern.ts
32959
- var NEO_CELL_PATTERN_CLASS_ID, NEO_CELL_PATTERN_CONSTRUCTOR_ID, NEO_CELL_PATTERN_MEMBER_IDS, NEO_OBJECT_GRID_MEMBER_IDS, NEO_CELL_PATTERN_PURE_NATIVE_MEMBER_IDS, NEO_OBJECT_CLASS_ID;
33017
+ var NEO_CELL_PATTERN_CLASS_ID, NEO_CELL_PATTERN_CONSTRUCTOR_ID, NEO_CELL_PATTERN_MEMBER_IDS, NEO_OBJECT_GRID_MEMBER_IDS, NEO_GET_AREA_MEMBER_IDS, NEO_CELL_PATTERN_PURE_NATIVE_MEMBER_IDS, NEO_OBJECT_CLASS_ID, NEO_TILE_GRID_CLASS_ID;
32960
33018
  var init_cell_pattern = __esm({
32961
33019
  "../packages/neoscript-language/src/cell-pattern.ts"() {
32962
33020
  "use strict";
@@ -32987,6 +33045,10 @@ var init_cell_pattern = __esm({
32987
33045
  GetTile: "system_593e6208-e2ca-505e-9933-04b17102b6d2",
32988
33046
  GetTiles: "system_5a41d36a-bcd9-4867-9e46-d743f6e09582"
32989
33047
  };
33048
+ NEO_GET_AREA_MEMBER_IDS = {
33049
+ NeoObjectBase: "system_7ad477e2-be5b-4892-b9ba-2a2f2476988d",
33050
+ NeoTile: "system_a92b0911-8e7e-48ef-a12e-f3c55c33f64b"
33051
+ };
32990
33052
  NEO_CELL_PATTERN_PURE_NATIVE_MEMBER_IDS = /* @__PURE__ */ new Set([
32991
33053
  NEO_CELL_PATTERN_MEMBER_IDS.Contains,
32992
33054
  NEO_CELL_PATTERN_MEMBER_IDS.Cells,
@@ -32996,6 +33058,7 @@ var init_cell_pattern = __esm({
32996
33058
  NEO_CELL_PATTERN_MEMBER_IDS.Union
32997
33059
  ]);
32998
33060
  NEO_OBJECT_CLASS_ID = "system_f671535d-0eb6-4139-9caf-5c5276febd31";
33061
+ NEO_TILE_GRID_CLASS_ID = "system_b78f7f1d-f63c-4abb-ae65-852e69246534";
32999
33062
  }
33000
33063
  });
33001
33064
 
@@ -80192,39 +80255,26 @@ function isCenter(offset) {
80192
80255
  return offset.x === 0 && offset.y === 0;
80193
80256
  }
80194
80257
  function evaluateCellPatternNative(memberId, receiver, args, ctx) {
80195
- if (!NEO_CELL_PATTERN_PURE_NATIVE_MEMBER_IDS.has(memberId)) {
80196
- return { handled: false };
80197
- }
80198
- const pattern = (offsets2) => ({
80199
- handled: true,
80200
- value: ctx.constructPattern(offsets2)
80201
- });
80202
80258
  const offsets = ctx.readPattern(receiver);
80203
80259
  switch (memberId) {
80204
80260
  case NEO_CELL_PATTERN_MEMBER_IDS.Contains: {
80205
80261
  const offset = vector(args[0], "Contains offset");
80206
- return {
80207
- handled: true,
80208
- value: offsets.some(
80209
- (cell) => cell.x === offset.x && cell.y === offset.y
80210
- )
80211
- };
80262
+ return offsets.some((cell) => cell.x === offset.x && cell.y === offset.y);
80212
80263
  }
80213
80264
  case NEO_CELL_PATTERN_MEMBER_IDS.Cells:
80214
- return {
80215
- handled: true,
80216
- value: translated(offsets, vector(args[0], "Cells origin"))
80217
- };
80265
+ return translated(offsets, vector(args[0], "Cells origin"));
80218
80266
  case NEO_CELL_PATTERN_MEMBER_IDS.WithCenter:
80219
- if (offsets.some(isCenter)) return { handled: true, value: receiver };
80220
- return pattern([{ x: 0, y: 0 }, ...offsets]);
80267
+ if (offsets.some(isCenter)) return receiver;
80268
+ return ctx.constructPattern([{ x: 0, y: 0 }, ...offsets]);
80221
80269
  case NEO_CELL_PATTERN_MEMBER_IDS.WithoutCenter:
80222
- if (!offsets.some(isCenter)) return { handled: true, value: receiver };
80223
- return pattern(offsets.filter((offset) => !isCenter(offset)));
80270
+ if (!offsets.some(isCenter)) return receiver;
80271
+ return ctx.constructPattern(
80272
+ offsets.filter((offset) => !isCenter(offset))
80273
+ );
80224
80274
  case NEO_CELL_PATTERN_MEMBER_IDS.Translate: {
80225
80275
  const offset = vector(args[0], "Translate offset");
80226
- if (isCenter(offset)) return { handled: true, value: receiver };
80227
- return pattern(translated(offsets, offset));
80276
+ if (isCenter(offset)) return receiver;
80277
+ return ctx.constructPattern(translated(offsets, offset));
80228
80278
  }
80229
80279
  case NEO_CELL_PATTERN_MEMBER_IDS.Union: {
80230
80280
  const other = ctx.readPattern(args[0]);
@@ -80238,7 +80288,7 @@ function evaluateCellPatternNative(memberId, receiver, args, ctx) {
80238
80288
  result.push(offset);
80239
80289
  }
80240
80290
  }
80241
- return pattern(result);
80291
+ return ctx.constructPattern(result);
80242
80292
  }
80243
80293
  default:
80244
80294
  throw new Error(
@@ -85846,6 +85896,21 @@ function evalCollectionMutationInstruction(ins, scope, ctx, options) {
85846
85896
  ctx
85847
85897
  );
85848
85898
  }
85899
+ if (unorderedContainerValueId !== null && Array.isArray(targetValue)) {
85900
+ const cache = unorderedListProjectionCache(ctx);
85901
+ const appended = ins.mutation === "Add" /* Add */ && cache.writtenContainerIds.has(unorderedContainerValueId);
85902
+ releaseWrittenUnorderedEntries(
85903
+ unorderedContainerValueId,
85904
+ unorderedEntriesBeforeMutation ?? [],
85905
+ cache
85906
+ );
85907
+ trackWrittenUnorderedEntries(
85908
+ unorderedContainerValueId,
85909
+ targetValue,
85910
+ appended ? targetValue.length - 1 : 0,
85911
+ cache
85912
+ );
85913
+ }
85849
85914
  invalidateEvaluatorIndexes(ctx, targetValue);
85850
85915
  switch (ins.mutation) {
85851
85916
  case "Insert" /* Insert */:
@@ -86851,10 +86916,8 @@ function evalPointerCore(pointer, scope, ctx, resultUsage = "value") {
86851
86916
  if (member.kind === 13 /* Function */) {
86852
86917
  const systemResult = evaluateSystemNative(
86853
86918
  member.id,
86854
- innerThis,
86855
- args,
86856
- ctx,
86857
- typeArguments
86919
+ { receiver: innerThis, args, typeArguments },
86920
+ ctx
86858
86921
  );
86859
86922
  if (systemResult.handled) return systemResult.value;
86860
86923
  const hosted = ctx.unavailableNativeHandler?.({
@@ -87196,8 +87259,11 @@ function invokeDelegateValue(value, args, ctx, callSiteId, ownerReceiver, result
87196
87259
  if (member.kind === 13 /* Function */) {
87197
87260
  const systemResult = evaluateSystemNative(
87198
87261
  member.id,
87199
- receiver,
87200
- args,
87262
+ {
87263
+ receiver,
87264
+ args,
87265
+ typeArguments: calleeTypeArguments(void 0, member, ctx)
87266
+ },
87201
87267
  ctx
87202
87268
  );
87203
87269
  if (systemResult.handled) return systemResult.value;
@@ -88704,6 +88770,8 @@ function createUnorderedListProjectionCache() {
88704
88770
  return {
88705
88771
  byContainerId: /* @__PURE__ */ new Map(),
88706
88772
  containerIdByArray: /* @__PURE__ */ new WeakMap(),
88773
+ writtenContainerIds: /* @__PURE__ */ new Set(),
88774
+ writtenEntryParents: /* @__PURE__ */ new Map(),
88707
88775
  scalarEntryIds: /* @__PURE__ */ new Set(),
88708
88776
  referenceEntryIndexesByArray: /* @__PURE__ */ new WeakMap(),
88709
88777
  referenceEntryKeysByRecord: /* @__PURE__ */ new WeakMap()
@@ -88764,9 +88832,27 @@ function invalidateUnorderedListProjection(containerValueId, ctx) {
88764
88832
  const projection = cache.byContainerId.get(containerValueId);
88765
88833
  if (projection === void 0) return;
88766
88834
  detachRemovedUnorderedScalarEntries(projection, [], ctx);
88835
+ releaseWrittenUnorderedEntries(containerValueId, projection, cache);
88767
88836
  cache.byContainerId.delete(containerValueId);
88837
+ cache.writtenContainerIds.delete(containerValueId);
88768
88838
  cache.containerIdByArray.delete(projection);
88769
88839
  }
88840
+ function trackWrittenUnorderedEntries(containerValueId, projection, start, cache, references = cache.referenceEntryIndexesByArray.get(projection)) {
88841
+ cache.writtenContainerIds.add(containerValueId);
88842
+ for (let index = start; index < projection.length; index++) {
88843
+ const entry = projection[index];
88844
+ if (typeof entry === "string" && references?.has(index) !== true) {
88845
+ cache.writtenEntryParents.set(entry, containerValueId);
88846
+ }
88847
+ }
88848
+ }
88849
+ function releaseWrittenUnorderedEntries(containerValueId, entries, cache) {
88850
+ for (const entry of entries) {
88851
+ if (typeof entry === "string" && cache.writtenEntryParents.get(entry) === containerValueId) {
88852
+ cache.writtenEntryParents.delete(entry);
88853
+ }
88854
+ }
88855
+ }
88770
88856
  function updateUnorderedListProjectionAfterAssignment(row, value, ctx) {
88771
88857
  invalidateUnorderedListProjection(row.id, ctx);
88772
88858
  const member = memberForValueRow(row, ctx);
@@ -88785,6 +88871,7 @@ function updateUnorderedListProjectionAfterAssignment(row, value, ctx) {
88785
88871
  }
88786
88872
  cache.byContainerId.set(row.id, projection);
88787
88873
  cache.containerIdByArray.set(projection, row.id);
88874
+ trackWrittenUnorderedEntries(row.id, projection, 0, cache, referenceIndexes);
88788
88875
  }
88789
88876
  function evaluatorUnorderedListEntryIds(containerValueId, ctx) {
88790
88877
  ctx.containerDependencies?.add(containerValueId);
@@ -88937,7 +89024,8 @@ function resolveMemberForValueRow(row, ctx, visited) {
88937
89024
  ctx.onUnattributableValueRead?.(
88938
89025
  ownershipChainRead("member-owner-resolution", row.id)
88939
89026
  );
88940
- for (const link of evaluatorParentLinks(indexes4, row.id)) {
89027
+ for (const link of evaluatorParentEdges(row, ctx, indexes4)) {
89028
+ if ("memberId" in link) return evalMemberById(ctx.vm, link.memberId);
88941
89029
  const parent = evalValueById(
88942
89030
  ctx,
88943
89031
  link.parentId,
@@ -88960,6 +89048,93 @@ function resolveMemberForValueRow(row, ctx, visited) {
88960
89048
  }
88961
89049
  return null;
88962
89050
  }
89051
+ function* evaluatorParentEdges(row, ctx, indexes4) {
89052
+ const cache = ctx.__unorderedListProjections;
89053
+ const writtenParentId = cache?.writtenEntryParents.get(row.id);
89054
+ if (writtenParentId !== void 0) {
89055
+ yield { parentId: writtenParentId, key: "" };
89056
+ }
89057
+ const written = cache?.writtenContainerIds;
89058
+ for (const link of indexes4.parentLinksByChildId.get(row.id) ?? []) {
89059
+ if (written?.has(link.parentId) !== true) yield link;
89060
+ }
89061
+ const database = ctx.vm.databaseVM;
89062
+ const documentContainerId = database?.evaluatorIndexes?.valueById.get(
89063
+ row.id
89064
+ )?.containerId;
89065
+ const rewritten = indexes4.shadowedBaseRowIds.has(row.id);
89066
+ const stale = (parentId) => written?.has(parentId) === true || indexes4.shadowedBaseRowIds.has(parentId) || row.containerId !== parentId && (documentContainerId === parentId || rewritten && database?.valueById(row.id)?.containerId === parentId);
89067
+ const placement = database?.storedValuePlacementForValueId?.(row.id);
89068
+ const placedParentId = placement?.parentValueId;
89069
+ if (placement !== null && placement !== void 0 && typeof placedParentId === "string" && !stale(placedParentId)) {
89070
+ yield { parentId: placedParentId, memberId: placement.memberId };
89071
+ }
89072
+ for (const link of indexes4.baseParentLinksByChildId?.get(row.id) ?? []) {
89073
+ if (!stale(link.parentId)) yield link;
89074
+ }
89075
+ }
89076
+ function currentUnorderedContainerId(row, ctx) {
89077
+ const cache = ctx.__unorderedListProjections;
89078
+ const writtenParentId = cache?.writtenEntryParents.get(row.id);
89079
+ if (writtenParentId !== void 0) return writtenParentId;
89080
+ const containerId = row.containerId;
89081
+ if (typeof containerId !== "string") return void 0;
89082
+ const released = cache?.writtenContainerIds.has(containerId) === true;
89083
+ return released ? void 0 : containerId;
89084
+ }
89085
+ function firstOwnerEdge(row, ctx) {
89086
+ const indexes4 = evaluatorIndexes(ctx);
89087
+ const edge = evaluatorParentEdges(row, ctx, indexes4).next().value;
89088
+ if (edge !== void 0) return edge;
89089
+ const rows = ctx.vm.databaseVM?.virtualInstanceRowsForValue(row.id);
89090
+ if (rows === void 0 || rows.length === 0) return void 0;
89091
+ ensureVirtualExpansionIndexed(rows, ctx, indexes4);
89092
+ return evaluatorParentEdges(row, ctx, indexes4).next().value;
89093
+ }
89094
+ function untrackedValueById(id2, ctx) {
89095
+ if (ctx.__removedValueIds?.has(id2)) return null;
89096
+ const local = ctx.__runtimeSessionValues?.get(id2) ?? ctx.__valueOverlay?.get(id2);
89097
+ if (local !== void 0) return local;
89098
+ const database = ctx.vm.databaseVM;
89099
+ if (database !== void 0) return database.valueById(id2);
89100
+ return ctx.vm.values.find((value) => value.id === id2) ?? null;
89101
+ }
89102
+ function placingMemberBinding(row, ctx) {
89103
+ const direct = evaluatorIndexes(ctx).memberByValueId.get(row.id);
89104
+ if (direct !== void 0) return direct;
89105
+ const root = rootMemberForValueRow(row, ctx);
89106
+ if (root !== null) return root;
89107
+ const staticRoot = activeStaticBindingRoot(row.id, ctx);
89108
+ if (staticRoot !== null) return staticRoot.member;
89109
+ const placement = ctx.vm.databaseVM?.storedValuePlacementForValueId?.(row.id);
89110
+ if (placement !== null && placement !== void 0) {
89111
+ if (placement.parentValueId === null) {
89112
+ return evalMemberById(ctx.vm, placement.memberId);
89113
+ }
89114
+ }
89115
+ const syntheticMemberId = memberIdFromSyntheticDefaultValueId(row.id);
89116
+ return syntheticMemberId === null ? null : evalMemberById(ctx.vm, syntheticMemberId);
89117
+ }
89118
+ function placingMember(row, ctx, ownerEdge, depth = 0) {
89119
+ const bound = placingMemberBinding(row, ctx);
89120
+ if (bound !== null) return bound;
89121
+ const edge = ownerEdge ?? firstOwnerEdge(row, ctx);
89122
+ if (edge === void 0) return null;
89123
+ if ("memberId" in edge) return evalMemberById(ctx.vm, edge.memberId);
89124
+ if (depth >= MAX_AREA_DEPTH) return null;
89125
+ const parent = untrackedValueById(edge.parentId, ctx);
89126
+ if (parent === null) return null;
89127
+ const parentMember = parent.classId === void 0 ? placingMember(parent, ctx, void 0, depth + 1) : null;
89128
+ if (parentMember !== null && isMemberWithEntries(parentMember)) {
89129
+ return evalMemberById(ctx.vm, parentMember.entryMemberId);
89130
+ }
89131
+ const classId = parent.classId ?? (parentMember !== null && isClassTypedMember(parentMember) ? parentMember.classId : void 0);
89132
+ return classId === void 0 ? null : memberForCustomSchemaValue(classId, edge.key, ctx);
89133
+ }
89134
+ function placedClassId(row, ctx, ownerEdge) {
89135
+ const member = placingMember(row, ctx, ownerEdge);
89136
+ return member !== null && isClassTypedMember(member) ? member.classId : void 0;
89137
+ }
88963
89138
  function worldGridQueryIndexForContext(context) {
88964
89139
  const ctx = withEvaluationRuntime(context, []);
88965
89140
  const vm = ctx.vm;
@@ -89176,107 +89351,74 @@ function gridQueryClassFilter(typeArgument, ctx) {
89176
89351
  );
89177
89352
  }
89178
89353
  const classId = typeArgument.classId;
89179
- if (classId === NEO_OBJECT_CLASS_ID || classId === NEO_TILE_CLASS_ID) {
89354
+ if (classId === NEO_OBJECT_CLASS_ID || classId === NEO_TILE_CLASS_ID || classId === NEO_TILE_GRID_CLASS_ID) {
89180
89355
  return void 0;
89181
89356
  }
89182
89357
  const schema = evaluatorSchemaIndex(ctx);
89183
89358
  return (candidate) => schema.classIsOrExtends(candidate, classId);
89184
89359
  }
89185
- function evaluateSystemNative(memberId, receiver, args, ctx, typeArguments) {
89186
- try {
89187
- if (memberId === NEO_OBJECT_GRID_MEMBER_IDS.GetCell || memberId === NEO_OBJECT_GRID_MEMBER_IDS.GetObjects || memberId === NEO_OBJECT_GRID_MEMBER_IDS.GetTile || memberId === NEO_OBJECT_GRID_MEMBER_IDS.GetTiles) {
89188
- const receiverRow = trackedRowForValueReference(receiver, ctx);
89189
- if (receiverRow === null) {
89190
- throw new NSGetterRuntimeError(
89191
- "Grid queries require a placed NeoObject receiver."
89192
- );
89193
- }
89194
- const index = worldGridQueryIndexForContext(ctx);
89195
- const placement = index.placement(
89196
- receiverRow.id,
89197
- ctx.worldQueryDependencies
89198
- );
89199
- if (memberId === NEO_OBJECT_GRID_MEMBER_IDS.GetCell)
89200
- return { handled: true, value: { ...placement.cell } };
89201
- const offsets = readCellPattern(args[0], ctx);
89202
- const shift = readGridQueryOffset(args[1]);
89203
- const accepts = gridQueryClassFilter(typeArguments?.[0], ctx);
89204
- if (memberId === NEO_OBJECT_GRID_MEMBER_IDS.GetObjects) {
89205
- const value = index.objects(
89206
- placement,
89207
- offsets,
89208
- ctx.worldQueryDependencies,
89209
- shift,
89210
- accepts
89211
- );
89212
- return { handled: true, value: referenceEntryList(value, ctx) };
89213
- }
89214
- if (memberId === NEO_OBJECT_GRID_MEMBER_IDS.GetTiles) {
89215
- const value = index.tiles(
89216
- placement,
89217
- offsets,
89218
- ctx.worldQueryDependencies,
89219
- shift,
89220
- accepts
89221
- );
89222
- return { handled: true, value: referenceEntryList(value, ctx) };
89223
- }
89224
- const tile = index.tile(
89225
- placement,
89226
- offsets,
89227
- ctx.worldQueryDependencies,
89228
- shift,
89229
- accepts
89230
- );
89231
- if (tile === null) return { handled: true, value: null };
89232
- const row = evalValueById(
89233
- ctx,
89234
- tile.placementValueId,
89235
- ctx.__runtimeSessionValues,
89236
- ctx.__valueOverlay
89237
- );
89238
- if (row === null) {
89239
- throw new NSGetterRuntimeError(
89240
- `Tile placement '${tile.placementValueId}' is missing.`
89241
- );
89242
- }
89243
- return { handled: true, value: readRowValue(row, ctx) };
89244
- }
89245
- return evaluateCellPatternNative(memberId, receiver, args, {
89246
- readPattern: (value) => readCellPattern(value, ctx),
89247
- constructPattern: (offsets) => constructDeclaredClassValue(
89248
- {
89249
- schemaClassInfo: {
89250
- type: 7 /* Class */,
89251
- required: true,
89252
- classId: NEO_CELL_PATTERN_CLASS_ID
89253
- },
89254
- constructorId: NEO_CELL_PATTERN_CONSTRUCTOR_ID,
89255
- args: [
89256
- {
89257
- name: "offsets",
89258
- valuePointer: {
89259
- type: "value" /* value */,
89260
- value: {
89261
- typeInfo: {
89262
- type: 6 /* List */,
89263
- required: true,
89264
- entryTypeInfo: {
89265
- type: 15 /* Vector2Int */,
89266
- required: true
89267
- }
89268
- },
89269
- value: offsets
89270
- }
89360
+ function gridQueryPlacement(receiver, ctx) {
89361
+ const receiverRow = trackedRowForValueReference(receiver, ctx);
89362
+ if (receiverRow === null) {
89363
+ throw new NSGetterRuntimeError(
89364
+ "Grid queries require a placed NeoObject receiver."
89365
+ );
89366
+ }
89367
+ const index = worldGridQueryIndexForContext(ctx);
89368
+ return {
89369
+ index,
89370
+ placement: index.placement(receiverRow.id, ctx.worldQueryDependencies)
89371
+ };
89372
+ }
89373
+ function gridQueryArguments(call, ctx) {
89374
+ return {
89375
+ offsets: readCellPattern(call.args[0], ctx),
89376
+ shift: readGridQueryOffset(call.args[1]),
89377
+ accepts: gridQueryClassFilter(call.typeArguments?.[0], ctx)
89378
+ };
89379
+ }
89380
+ function cellPatternNative(memberId) {
89381
+ return (call, ctx) => evaluateCellPatternNative(memberId, call.receiver, call.args, {
89382
+ readPattern: (value) => readCellPattern(value, ctx),
89383
+ constructPattern: (offsets) => constructDeclaredClassValue(
89384
+ {
89385
+ schemaClassInfo: {
89386
+ type: 7 /* Class */,
89387
+ required: true,
89388
+ classId: NEO_CELL_PATTERN_CLASS_ID
89389
+ },
89390
+ constructorId: NEO_CELL_PATTERN_CONSTRUCTOR_ID,
89391
+ args: [
89392
+ {
89393
+ name: "offsets",
89394
+ valuePointer: {
89395
+ type: "value" /* value */,
89396
+ value: {
89397
+ typeInfo: {
89398
+ type: 6 /* List */,
89399
+ required: true,
89400
+ entryTypeInfo: {
89401
+ type: 15 /* Vector2Int */,
89402
+ required: true
89403
+ }
89404
+ },
89405
+ value: offsets
89271
89406
  }
89272
89407
  }
89273
- ],
89274
- fields: []
89275
- },
89276
- createTopLevelScope(ctx),
89277
- ctx
89278
- )
89279
- });
89408
+ }
89409
+ ],
89410
+ fields: []
89411
+ },
89412
+ createTopLevelScope(ctx),
89413
+ ctx
89414
+ )
89415
+ });
89416
+ }
89417
+ function evaluateSystemNative(memberId, call, ctx) {
89418
+ const handler = SYSTEM_NATIVE_HANDLERS.get(memberId);
89419
+ if (handler === void 0) return { handled: false };
89420
+ try {
89421
+ return { handled: true, value: handler(call, ctx) };
89280
89422
  } catch (error) {
89281
89423
  if (error instanceof RangeError || error instanceof TypeError || error instanceof WorldGridQueryError) {
89282
89424
  throw new NSGetterRuntimeError(error.message, { cause: error });
@@ -93506,10 +93648,11 @@ function currentOwnedValueAttachments(valueId, ctx) {
93506
93648
  ctx.__runtimeSessionValues,
93507
93649
  ctx.__valueOverlay
93508
93650
  );
93509
- if (typeof row?.containerId === "string") {
93651
+ const containerId = row === null ? void 0 : currentUnorderedContainerId(row, ctx);
93652
+ if (containerId !== void 0) {
93510
93653
  add({
93511
- identity: `value:${row.containerId}:unordered-entry:${valueId}`,
93512
- label: row.containerId
93654
+ identity: `value:${containerId}:unordered-entry:${valueId}`,
93655
+ label: containerId
93513
93656
  });
93514
93657
  }
93515
93658
  const activeStaticRoot = activeStaticBindingRoot(valueId, ctx);
@@ -94889,7 +95032,7 @@ function recordWrittenEntry(collection, key, reference2, ctx) {
94889
95032
  if (reference2) keys.add(String(key));
94890
95033
  else keys.delete(String(key));
94891
95034
  }
94892
- var DELEGATE_LEXICAL_THIS, DELEGATE_LEXICAL_ROOT, DELEGATE_LEXICAL_TYPE_ARGUMENTS, NonCatchableNSGetterRuntimeError, NativeFunctionDelegateUnavailableError, CorruptNeoScriptIRError, NeoScriptWallClockTimeoutError, liveListIndexesByProject, evaluatorOwnershipCachesByBase, MAX_CONSTRUCTION_DEPTH, resolutionCacheByMembers, NO_SCHEMA_REVISION, NO_INTERFACES2, LazyValueOverlay, READONLY_FOREACH_BINDING_ERROR, READONLY_CATCH_BINDING_ERROR, DIALOGUE_CONTEXT_PARAMETER_ID, STRING_TYPE_INFO, INT_TYPE_INFO, STORE_LIFETIME, STORE_NAMES, FORWARDING_TYPE_ARGUMENTS, constantDeclarationRoots, UNKNOWN_LOOKUP_TARGET, NS_MATH_OP_NAMES, DOUBLE_INTEGRAL_MAGNITUDE, EMPTY_SUPPLIED_CONSTRUCTOR_FIELDS, variantResolutionCopiesByOverlay, NO_BOUND_MEMBERS, NO_GENERIC_ENV;
95035
+ var DELEGATE_LEXICAL_THIS, DELEGATE_LEXICAL_ROOT, DELEGATE_LEXICAL_TYPE_ARGUMENTS, NonCatchableNSGetterRuntimeError, NativeFunctionDelegateUnavailableError, CorruptNeoScriptIRError, NeoScriptWallClockTimeoutError, liveListIndexesByProject, evaluatorOwnershipCachesByBase, MAX_CONSTRUCTION_DEPTH, resolutionCacheByMembers, NO_SCHEMA_REVISION, NO_INTERFACES2, LazyValueOverlay, READONLY_FOREACH_BINDING_ERROR, READONLY_CATCH_BINDING_ERROR, DIALOGUE_CONTEXT_PARAMETER_ID, STRING_TYPE_INFO, INT_TYPE_INFO, STORE_LIFETIME, STORE_NAMES, FORWARDING_TYPE_ARGUMENTS, constantDeclarationRoots, UNKNOWN_LOOKUP_TARGET, MAX_AREA_DEPTH, getAreaNative, SYSTEM_NATIVE_HANDLERS, NS_MATH_OP_NAMES, DOUBLE_INTEGRAL_MAGNITUDE, EMPTY_SUPPLIED_CONSTRUCTOR_FIELDS, variantResolutionCopiesByOverlay, NO_BOUND_MEMBERS, NO_GENERIC_ENV;
94893
95036
  var init_evaluateNSGetter = __esm({
94894
95037
  "../packages/neoscript-runtime/src/neoscript/evaluateNSGetter.ts"() {
94895
95038
  "use strict";
@@ -95112,6 +95255,121 @@ var init_evaluateNSGetter = __esm({
95112
95255
  type: NS_TYPE_UNKNOWN,
95113
95256
  required: true
95114
95257
  };
95258
+ MAX_AREA_DEPTH = 256;
95259
+ getAreaNative = (call, ctx) => {
95260
+ const receiver = trackedRowForValueReference(call.receiver, ctx);
95261
+ let row = receiver === null ? null : evalValueById(
95262
+ ctx,
95263
+ receiver.id,
95264
+ ctx.__runtimeSessionValues,
95265
+ ctx.__valueOverlay
95266
+ );
95267
+ const schema = evaluatorSchemaIndex(ctx);
95268
+ for (let depth = 0; row !== null && depth < MAX_AREA_DEPTH; depth++) {
95269
+ let edge;
95270
+ if (!Array.isArray(row.value)) {
95271
+ let classId = row.classId ?? void 0;
95272
+ if (classId === void 0) {
95273
+ edge = firstOwnerEdge(row, ctx);
95274
+ classId = placedClassId(row, ctx, edge);
95275
+ }
95276
+ if (classId !== void 0 && schema.classIsOrExtends(classId, NEO_TILE_GRID_CLASS_ID)) {
95277
+ const accepts = gridQueryClassFilter(call.typeArguments?.[0], ctx);
95278
+ return accepts === void 0 || accepts(classId) ? readRowValue(row, ctx) : null;
95279
+ }
95280
+ }
95281
+ const parentId = (edge ?? firstOwnerEdge(row, ctx))?.parentId;
95282
+ if (parentId === void 0) {
95283
+ if (placingMemberBinding(row, ctx) === null) {
95284
+ ctx.onUnattributableValueRead?.(
95285
+ ownershipChainRead("owned-value-parents", row.id)
95286
+ );
95287
+ }
95288
+ return null;
95289
+ }
95290
+ row = currentUnorderedContainerId(row, ctx) === parentId ? untrackedValueById(parentId, ctx) : evalValueById(
95291
+ ctx,
95292
+ parentId,
95293
+ ctx.__runtimeSessionValues,
95294
+ ctx.__valueOverlay
95295
+ );
95296
+ }
95297
+ return null;
95298
+ };
95299
+ SYSTEM_NATIVE_HANDLERS = new Map([
95300
+ [
95301
+ NEO_OBJECT_GRID_MEMBER_IDS.GetCell,
95302
+ (call, ctx) => ({
95303
+ ...gridQueryPlacement(call.receiver, ctx).placement.cell
95304
+ })
95305
+ ],
95306
+ [
95307
+ NEO_OBJECT_GRID_MEMBER_IDS.GetObjects,
95308
+ (call, ctx) => {
95309
+ const { index, placement } = gridQueryPlacement(call.receiver, ctx);
95310
+ const { offsets, shift, accepts } = gridQueryArguments(call, ctx);
95311
+ return referenceEntryList(
95312
+ index.objects(
95313
+ placement,
95314
+ offsets,
95315
+ ctx.worldQueryDependencies,
95316
+ shift,
95317
+ accepts
95318
+ ),
95319
+ ctx
95320
+ );
95321
+ }
95322
+ ],
95323
+ [
95324
+ NEO_OBJECT_GRID_MEMBER_IDS.GetTiles,
95325
+ (call, ctx) => {
95326
+ const { index, placement } = gridQueryPlacement(call.receiver, ctx);
95327
+ const { offsets, shift, accepts } = gridQueryArguments(call, ctx);
95328
+ return referenceEntryList(
95329
+ index.tiles(
95330
+ placement,
95331
+ offsets,
95332
+ ctx.worldQueryDependencies,
95333
+ shift,
95334
+ accepts
95335
+ ),
95336
+ ctx
95337
+ );
95338
+ }
95339
+ ],
95340
+ [
95341
+ NEO_OBJECT_GRID_MEMBER_IDS.GetTile,
95342
+ (call, ctx) => {
95343
+ const { index, placement } = gridQueryPlacement(call.receiver, ctx);
95344
+ const { offsets, shift, accepts } = gridQueryArguments(call, ctx);
95345
+ const tile = index.tile(
95346
+ placement,
95347
+ offsets,
95348
+ ctx.worldQueryDependencies,
95349
+ shift,
95350
+ accepts
95351
+ );
95352
+ if (tile === null) return null;
95353
+ const row = evalValueById(
95354
+ ctx,
95355
+ tile.placementValueId,
95356
+ ctx.__runtimeSessionValues,
95357
+ ctx.__valueOverlay
95358
+ );
95359
+ if (row === null) {
95360
+ throw new NSGetterRuntimeError(
95361
+ `Tile placement '${tile.placementValueId}' is missing.`
95362
+ );
95363
+ }
95364
+ return readRowValue(row, ctx);
95365
+ }
95366
+ ],
95367
+ [NEO_GET_AREA_MEMBER_IDS.NeoObjectBase, getAreaNative],
95368
+ [NEO_GET_AREA_MEMBER_IDS.NeoTile, getAreaNative],
95369
+ ...[...NEO_CELL_PATTERN_PURE_NATIVE_MEMBER_IDS].map(
95370
+ (id2) => [id2, cellPatternNative(id2)]
95371
+ )
95372
+ ]);
95115
95373
  NS_MATH_OP_NAMES = {
95116
95374
  min: "Min",
95117
95375
  max: "Max",
@@ -182644,8 +182902,8 @@ function emitsStaticMember(ctx, member) {
182644
182902
  if (!isStaticMember(member)) return false;
182645
182903
  return ctx.singleton || requiresUnitySingleton(member);
182646
182904
  }
182647
- function isPlatformNativeMemberId(memberId) {
182648
- return memberId === NEO_TILE_CONVERT_MEMBER_ID || NEO_CELL_PATTERN_PURE_NATIVE_MEMBER_IDS.has(memberId) || Object.values(NEO_OBJECT_GRID_MEMBER_IDS).some((id2) => id2 === memberId);
182905
+ function isPlatformNative(memberId, member) {
182906
+ return member.kind === 13 /* Function */ && memberId.startsWith("system_");
182649
182907
  }
182650
182908
  function collectFunctionInvokers(ctx) {
182651
182909
  const invokers = [];
@@ -182656,13 +182914,13 @@ function collectFunctionInvokers(ctx) {
182656
182914
  for (const [schemaKey, memberId] of Object.entries(classDef.schema)) {
182657
182915
  if (memberId === null) continue;
182658
182916
  if (seen.has(memberId)) continue;
182659
- if (isPlatformNativeMemberId(memberId)) continue;
182660
182917
  const member = resolveMemberById(
182661
182918
  ctx,
182662
182919
  memberId,
182663
182920
  `classes.${classDef.id}.schema.${schemaKey}`
182664
182921
  );
182665
182922
  if (member === null || !isMemberFunctionBase(member)) continue;
182923
+ if (isPlatformNative(memberId, member)) continue;
182666
182924
  seen.add(memberId);
182667
182925
  if (isStaticMember(member) === true) {
182668
182926
  if (!emitsStaticMember(ctx, ctx.exportData.members[memberId])) continue;
@@ -184469,12 +184727,12 @@ function generateNeoSchemaClassLines(ctx, classId, constructions) {
184469
184727
  });
184470
184728
  const ownNativeFunctionEntries = ownCallableEntries.filter(([, memberId]) => {
184471
184729
  const member = resolveMemberById(ctx, memberId, `members.${memberId}`);
184472
- return member !== null && isMemberFunctionBase(member) && !isPlatformNativeMemberId(memberId);
184730
+ return member !== null && isMemberFunctionBase(member) && !isPlatformNative(memberId, member);
184473
184731
  });
184474
184732
  const ownStaticNativeFunctionEntries = ownStaticMemberEntries.filter(
184475
184733
  ([, memberId]) => {
184476
184734
  const member = resolveMemberById(ctx, memberId, `members.${memberId}`);
184477
- return member !== null && isMemberFunctionBase(member) && !isPlatformNativeMemberId(memberId);
184735
+ return member !== null && isMemberFunctionBase(member) && !isPlatformNative(memberId, member);
184478
184736
  }
184479
184737
  );
184480
184738
  const inheritedSchemaKeys = inheritedSchemaKeySet(ctx, classDef);
@@ -185996,9 +186254,9 @@ function classEmitsFunctionHandlerInterface(ctx, classId) {
185996
186254
  const classDef = ctx.exportData.classes[classId];
185997
186255
  if (classDef === void 0 || !ctx.typeNames.has(classId)) return false;
185998
186256
  return Object.values(classDef.schema).some((memberId) => {
185999
- if (memberId === null || isPlatformNativeMemberId(memberId)) return false;
186257
+ if (memberId === null) return false;
186000
186258
  const member = ctx.exportData.members[memberId];
186001
- return isMemberFunctionBase(member) && isStaticMember(member) !== true;
186259
+ return isMemberFunctionBase(member) && !isPlatformNative(memberId, member) && isStaticMember(member) !== true;
186002
186260
  });
186003
186261
  }
186004
186262
  function nearestFunctionHandlerAncestor(ctx, classDef) {
@@ -189164,7 +189422,7 @@ function generateFunctionMethod(ctx, member, schemaKey, modifier = "", emitBody
189164
189422
  "}"
189165
189423
  ];
189166
189424
  }
189167
- if (isPlatformNativeMemberId(member.id) && !isFunctionVoidTypeInfo(member.returnTypeInfo)) {
189425
+ if (isPlatformNative(member.id, member) && !isFunctionVoidTypeInfo(member.returnTypeInfo)) {
189168
189426
  return [
189169
189427
  ...docs,
189170
189428
  ...stamp,
@@ -190925,7 +191183,6 @@ var NEO_MEMORY_SCHEMA_KEYS, NEO_MEMORY_CLASS_NAMES, CELL_PATTERN_VALUE_BASE, DET
190925
191183
  var init_generate_unity_classes = __esm({
190926
191184
  "../src/models/exports/unity-codegen/generate-unity-classes.ts"() {
190927
191185
  "use strict";
190928
- init_cell_pattern();
190929
191186
  init_tile_conversion();
190930
191187
  init_project2();
190931
191188
  init_animation_clips();
@@ -194338,7 +194595,7 @@ var UNITY_CODEGEN_REVISION;
194338
194595
  var init_unity_codegen_revision = __esm({
194339
194596
  "../src/models/exports/unity-codegen-revision.ts"() {
194340
194597
  "use strict";
194341
- UNITY_CODEGEN_REVISION = "90421033eb03f03fcfab25a35784fa8890ae4377edbeee0b925a985754c15d42";
194598
+ UNITY_CODEGEN_REVISION = "231557c5a40a20ab9e630415d45556845d7561d54e335a4d92c1cdbc1024a705";
194342
194599
  }
194343
194600
  });
194344
194601
 
@@ -215446,7 +215703,7 @@ var releaseWorkspaceLock = () => void 0;
215446
215703
  async function main() {
215447
215704
  const args = parseArgs(process.argv.slice(2));
215448
215705
  if (args.command === "--version") {
215449
- console.log("0.83.0");
215706
+ console.log("0.84.0");
215450
215707
  return;
215451
215708
  }
215452
215709
  if (args.command === null || args.command === "help" || args.command === "--help" || args.command === "-h") {