koota-kit 0.8.6 → 0.8.7

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,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.8.7 (2026-10-14)
4
+
5
+ <!-- Release notes generated using configuration in .github/release.yml at main -->
6
+
7
+ ## What's Changed
8
+ * fix(spatial): reject inherited values in sparse snapshot and query arrays by @jbdevprimary in https://github.com/jbcom/koota-kit/pull/71
9
+
10
+
11
+ **Full Changelog**: https://github.com/jbcom/koota-kit/compare/v0.8.6...v0.8.7
12
+
3
13
  ## 0.8.6 (2026-10-14)
4
14
 
5
15
  <!-- Release notes generated using configuration in .github/release.yml at main -->
@@ -123,6 +123,17 @@ function copyTopology(value, label) {
123
123
  enclosesSurface: true,
124
124
  });
125
125
  }
126
+ function copyDenseArray(array, mapper, label) {
127
+ const hasOwn = Object.prototype.hasOwnProperty;
128
+ const result = new Array(array.length);
129
+ for (let i = 0; i < array.length; i++) {
130
+ if (!hasOwn.call(array, i)) {
131
+ throw new TypeError(`spatial: ${label}[${i}] is sparse.`);
132
+ }
133
+ result[i] = mapper(array[i], i);
134
+ }
135
+ return result;
136
+ }
126
137
  function copyRecord(value, label) {
127
138
  if (typeof value !== "object" || value === null)
128
139
  throw new TypeError(`spatial: ${label} must be a part record.`);
@@ -131,7 +142,7 @@ function copyRecord(value, label) {
131
142
  throw new TypeError(`spatial: ${label}.topology must be an object.`);
132
143
  if (!Array.isArray(record.capabilities))
133
144
  throw new TypeError(`spatial: ${label}.capabilities must be an array.`);
134
- const capabilities = Array.from(record.capabilities);
145
+ const capabilities = copyDenseArray(record.capabilities, (capability) => capability, `${label}.capabilities`);
135
146
  if (capabilities.some((capability) => capability !== "nearest-surface") ||
136
147
  new Set(capabilities).size !== capabilities.length) {
137
148
  throw new TypeError(`spatial: ${label}.capabilities may only contain nearest-surface.`);
@@ -235,11 +246,11 @@ function queryPointClearance(provider, oracle, query) {
235
246
  throw new TypeError("spatial: query.exclusions must be an array.");
236
247
  if (query.expected !== undefined && !Array.isArray(query.expected))
237
248
  throw new TypeError("spatial: query.expected must be an array.");
238
- const exclusions = Array.from(query.exclusions ?? [], (value, index) => copyIdentity(value, `query.exclusions[${index}]`)).sort(compareIdentity);
249
+ const exclusions = copyDenseArray(query.exclusions ?? [], (value, index) => copyIdentity(value, `query.exclusions[${index}]`), "query.exclusions").sort(compareIdentity);
239
250
  const exclusionKeys = new Set(exclusions.map(identityKey));
240
251
  if (exclusionKeys.size !== exclusions.length)
241
252
  throw new TypeError("spatial: query.exclusions must not contain duplicates.");
242
- const expected = Array.from(query.expected ?? [], (value, index) => copyStamp(value, `query.expected[${index}]`));
253
+ const expected = copyDenseArray(query.expected ?? [], (value, index) => copyStamp(value, `query.expected[${index}]`), "query.expected");
243
254
  const expectedKeys = new Set(expected.map((stamp) => identityKey(stamp.identity)));
244
255
  if (expectedKeys.size !== expected.length)
245
256
  throw new TypeError("spatial: query.expected must not contain duplicate identities.");
@@ -248,7 +259,7 @@ function queryPointClearance(provider, oracle, query) {
248
259
  throw new TypeError("spatial: provider.snapshot() must return an array.");
249
260
  let records;
250
261
  try {
251
- records = Array.from(snapshot, (record, index) => copyRecord(record, `provider.snapshot()[${index}]`));
262
+ records = copyDenseArray(snapshot, (record, index) => copyRecord(record, `provider.snapshot()[${index}]`), "provider.snapshot()");
252
263
  }
253
264
  catch {
254
265
  return result("unsupported", "provider-contract-invalid", "none", topology, [], exclusions, []);
@@ -1 +1 @@
1
- {"version":3,"file":"spatial.d.ts","sourceRoot":"","sources":["../../src/spatial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spatial.d.ts","sourceRoot":"","sources":["../../src/spatial.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"spatial.d.ts","sourceRoot":"","sources":["../../src/spatial.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEzE,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC;AAE7E,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,CAAC;CACrB,CAAC,CAAC;AAEH,2FAA2F;AAC3F,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEvF,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,2BAA2B,CAAC;CAC3C,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,6FAA6F;IAC7F,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,IAAI,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,eAAe,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,EAAE,QAAQ,CAAC;QAAE,IAAI,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IACxE,YAAY,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,SAAS,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;QAAE,SAAS,EAAE,wBAAwB,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,SAAS,EAAE,eAAe,CAAC;CAC5B,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,kBAAkB,CAAC;CAC9B,CAAC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,qBAAqB,CAAA;CAAE,CAAC,GAC7D,QAAQ,CAAC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,CAAC,GAC1D,QAAQ,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAAC;AAEhF,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IACjD,OAAO,EAAE,CACP,OAAO,EAAE,QAAQ,CAAC;QAChB,MAAM,EAAE,iBAAiB,CAAC;QAC1B,QAAQ,EAAE,wBAAwB,CAAC;QACnC,KAAK,EAAE,YAAY,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC,KACC,kBAAkB,GAAG,SAAS,CAAC;CACrC,CAAC,CAAC;AAEH,kFAAkF;AAClF,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IAAE,QAAQ,EAAE,MAAM,SAAS,iBAAiB,EAAE,CAAA;CAAE,CAAC,CAAC;AAEzF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;IACpB,iFAAiF;IACjF,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,wBAAwB,CAAC;IACpC,UAAU,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACxC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC;AAEhG,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAC;AAEtE,MAAM,MAAM,kBAAkB,GAC1B,qBAAqB,GACrB,oBAAoB,GACpB,gBAAgB,GAChB,6BAA6B,GAC7B,2BAA2B,GAC3B,2BAA2B,GAC3B,mBAAmB,GACnB,cAAc,CAAC;AAEnB,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,qBAAqB,CAAC;IACjC,QAAQ,EAAE,wBAAwB,CAAC;IACnC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;IACvC,SAAS,EAAE,SAAS,qBAAqB,EAAE,CAAC;CAC7C,CAAC,CAAC;AA+PH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,2BAA2B,EACnC,KAAK,EAAE,qBAAqB,GAC3B,sBAAsB,CAkNxB"}
1
+ {"version":3,"file":"spatial.d.ts","sourceRoot":"","sources":["../../src/spatial.ts"],"names":[],"mappings":"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"}
@@ -120,6 +120,17 @@ function copyTopology(value, label) {
120
120
  enclosesSurface: true,
121
121
  });
122
122
  }
123
+ function copyDenseArray(array, mapper, label) {
124
+ const hasOwn = Object.prototype.hasOwnProperty;
125
+ const result = new Array(array.length);
126
+ for (let i = 0; i < array.length; i++) {
127
+ if (!hasOwn.call(array, i)) {
128
+ throw new TypeError(`spatial: ${label}[${i}] is sparse.`);
129
+ }
130
+ result[i] = mapper(array[i], i);
131
+ }
132
+ return result;
133
+ }
123
134
  function copyRecord(value, label) {
124
135
  if (typeof value !== "object" || value === null)
125
136
  throw new TypeError(`spatial: ${label} must be a part record.`);
@@ -128,7 +139,7 @@ function copyRecord(value, label) {
128
139
  throw new TypeError(`spatial: ${label}.topology must be an object.`);
129
140
  if (!Array.isArray(record.capabilities))
130
141
  throw new TypeError(`spatial: ${label}.capabilities must be an array.`);
131
- const capabilities = Array.from(record.capabilities);
142
+ const capabilities = copyDenseArray(record.capabilities, (capability) => capability, `${label}.capabilities`);
132
143
  if (capabilities.some((capability) => capability !== "nearest-surface") ||
133
144
  new Set(capabilities).size !== capabilities.length) {
134
145
  throw new TypeError(`spatial: ${label}.capabilities may only contain nearest-surface.`);
@@ -232,11 +243,11 @@ export function queryPointClearance(provider, oracle, query) {
232
243
  throw new TypeError("spatial: query.exclusions must be an array.");
233
244
  if (query.expected !== undefined && !Array.isArray(query.expected))
234
245
  throw new TypeError("spatial: query.expected must be an array.");
235
- const exclusions = Array.from(query.exclusions ?? [], (value, index) => copyIdentity(value, `query.exclusions[${index}]`)).sort(compareIdentity);
246
+ const exclusions = copyDenseArray(query.exclusions ?? [], (value, index) => copyIdentity(value, `query.exclusions[${index}]`), "query.exclusions").sort(compareIdentity);
236
247
  const exclusionKeys = new Set(exclusions.map(identityKey));
237
248
  if (exclusionKeys.size !== exclusions.length)
238
249
  throw new TypeError("spatial: query.exclusions must not contain duplicates.");
239
- const expected = Array.from(query.expected ?? [], (value, index) => copyStamp(value, `query.expected[${index}]`));
250
+ const expected = copyDenseArray(query.expected ?? [], (value, index) => copyStamp(value, `query.expected[${index}]`), "query.expected");
240
251
  const expectedKeys = new Set(expected.map((stamp) => identityKey(stamp.identity)));
241
252
  if (expectedKeys.size !== expected.length)
242
253
  throw new TypeError("spatial: query.expected must not contain duplicate identities.");
@@ -245,7 +256,7 @@ export function queryPointClearance(provider, oracle, query) {
245
256
  throw new TypeError("spatial: provider.snapshot() must return an array.");
246
257
  let records;
247
258
  try {
248
- records = Array.from(snapshot, (record, index) => copyRecord(record, `provider.snapshot()[${index}]`));
259
+ records = copyDenseArray(snapshot, (record, index) => copyRecord(record, `provider.snapshot()[${index}]`), "provider.snapshot()");
249
260
  }
250
261
  catch {
251
262
  return result("unsupported", "provider-contract-invalid", "none", topology, [], exclusions, []);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "koota-kit",
3
- "version": "0.8.6",
3
+ "version": "0.8.7",
4
4
  "description": "Deterministic Koota simulation conventions: world lifecycle, dual RNG streams, safe object traits, and world-scoped event logs.",
5
5
  "type": "module",
6
6
  "license": "MIT",