@poe-platform/safe-js 0.1.293 → 0.1.295

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.
@@ -7945,16 +7945,19 @@ function trackIntrinsicState(budget, root, owner, targets) {
7945
7945
  return getSandboxPrototype(target) === parent && Object.isExtensible(value) === extensible && hasExplicitSandboxPrototype(target) === explicit && Reflect.ownKeys(current).length === descriptors2.size && Reflect.ownKeys(value).every((key) => unchanged(descriptors2.get(key), Object.getOwnPropertyDescriptor(value, key)));
7946
7946
  })
7947
7947
  );
7948
- budget.setRetainedValues(
7949
- root,
7950
- () => records.flatMap(({ target, value, descriptors: descriptors2, prototype: parent }) => [
7951
- ...getSandboxPrototype(target) === parent ? [] : [getSandboxPrototype(target)],
7952
- ...Reflect.ownKeys(value).flatMap((key) => {
7948
+ budget.setRetainedValues(root, () => {
7949
+ const retained = [];
7950
+ for (const { target, value, descriptors: descriptors2, prototype: parent } of records) {
7951
+ const currentPrototype = getSandboxPrototype(target);
7952
+ if (currentPrototype !== parent) retained.push(currentPrototype);
7953
+ for (const key of Reflect.ownKeys(value)) {
7953
7954
  const descriptor = Object.getOwnPropertyDescriptor(value, key);
7954
- return unchanged(descriptors2.get(key), descriptor) ? [] : [key, descriptor.value, ...retainedAccessorClosures(descriptor)];
7955
- })
7956
- ])
7957
- );
7955
+ if (unchanged(descriptors2.get(key), descriptor)) continue;
7956
+ retained.push(key, descriptor.value, ...retainedAccessorClosures(descriptor));
7957
+ }
7958
+ }
7959
+ return retained;
7960
+ });
7958
7961
  }
7959
7962
  function releaseObjectPrototype(budget) {
7960
7963
  releaseTemplateObjects(budget);
@@ -13056,7 +13059,18 @@ function createArrayGlobal(budget) {
13056
13059
  guest: true,
13057
13060
  sandbox: true,
13058
13061
  call: (args) => createArrayFromConstructorArgs(args, budget),
13059
- construct: (args) => createArrayFromConstructorArgs(args, budget),
13062
+ construct: async (args, context) => {
13063
+ const target = context?.newTarget;
13064
+ const parent = target === void 0 || target === constructor ? prototype : context?.getProperty === void 0 ? await readPropertyDescriptor(
13065
+ getSandboxPropertyDescriptor(target, "prototype", budget) ?? { value: void 0 },
13066
+ target,
13067
+ context
13068
+ ) : await context.getProperty(target, "prototype");
13069
+ const value = createArrayFromConstructorArgs(args, budget);
13070
+ if (parent !== prototype && typeof parent === "object" && parent !== null)
13071
+ setSandboxPrototype(value, parent, budget);
13072
+ return value;
13073
+ },
13060
13074
  name: "Array",
13061
13075
  length: 1
13062
13076
  });
@@ -13100,7 +13114,33 @@ function createArrayGlobal(budget) {
13100
13114
  const statics = {
13101
13115
  isArray: createSandboxClosure({ sandbox: true, name: "isArray", call: ([value]) => Array.isArray(value) }),
13102
13116
  from: createSandboxClosure({ sandbox: true, name: "from", call: (args, context) => arrayFromSandboxValues(args, budget, context) }),
13103
- of: createSandboxClosure({ sandbox: true, name: "of", call: (args) => budgetSandboxValue(Reflect.apply(Array.of, Array, [...args]), budget) })
13117
+ of: createSandboxClosure({
13118
+ guest: true,
13119
+ sandbox: true,
13120
+ name: "of",
13121
+ length: 0,
13122
+ call: async (args, context) => {
13123
+ const target = context?.thisValue;
13124
+ let result;
13125
+ const release = retainValues(budget, () => [...args, target, result]);
13126
+ try {
13127
+ result = isSandboxClosure(target) && target.construct !== void 0 ? await invokeBuiltinClosure(target, [args.length], budget, context, void 0, true) : createArrayFromConstructorArgs([args.length], budget);
13128
+ const checkData = createDataCheckpoint(budget, context);
13129
+ checkData(result, 0, true);
13130
+ for (let index = 0; index < args.length; index += 1) {
13131
+ budget.visitNode();
13132
+ if (Array.isArray(result)) budget.allocateArrayLength(index + 1);
13133
+ defineOwnDataProperty(objectProperties(result, true), String(index), args[index]);
13134
+ checkData(result, 0, true);
13135
+ }
13136
+ await setSandboxProperty(result, "length", args.length, budget, true, context);
13137
+ checkData(result, 0, true);
13138
+ return allocateProducedSandboxValue(result, budget);
13139
+ } finally {
13140
+ release();
13141
+ }
13142
+ }
13143
+ })
13104
13144
  };
13105
13145
  for (const [name, value] of Object.entries(statics))
13106
13146
  Object.defineProperty(properties, name, { value, writable: true, configurable: true });
@@ -13407,7 +13447,7 @@ async function arrayFromSandboxValues(args, budget, context) {
13407
13447
  }
13408
13448
  index += 1;
13409
13449
  }
13410
- setSandboxProperty(result, "length", index, budget);
13450
+ await setSandboxProperty(result, "length", index, budget, true, context);
13411
13451
  checkData(result, 0, true);
13412
13452
  return allocateProducedSandboxValue(result, budget);
13413
13453
  } finally {
@@ -13416,11 +13456,11 @@ async function arrayFromSandboxValues(args, budget, context) {
13416
13456
  }
13417
13457
  function createArrayFromConstructorArgs(args, budget) {
13418
13458
  if (args.length !== 1) {
13419
- return budgetSandboxValue(Reflect.apply(Array, Array, [...args]), budget);
13459
+ return allocateProducedSandboxValue([...args], budget);
13420
13460
  }
13421
13461
  const [lengthOrValue] = args;
13422
13462
  if (typeof lengthOrValue !== "number") {
13423
- return budgetSandboxValue([lengthOrValue], budget);
13463
+ return allocateProducedSandboxValue([lengthOrValue], budget);
13424
13464
  }
13425
13465
  if (!Number.isInteger(lengthOrValue) || lengthOrValue < 0 || lengthOrValue > 4294967295) {
13426
13466
  throw new RangeError("Invalid array length.");
@@ -25788,7 +25828,8 @@ function measureSandboxData(values, options = {}) {
25788
25828
  seen.add(value);
25789
25829
  usage += 1;
25790
25830
  if (!isGuestHostObject(value)) {
25791
- const descriptors3 = Object.getOwnPropertySymbols(value).filter((key) => !internalSymbols.has(key)).map((key) => [key, Object.getOwnPropertyDescriptor(value, key)]);
25831
+ const symbols = Object.getOwnPropertySymbols(value);
25832
+ const descriptors3 = symbols.length === 0 ? [] : symbols.filter((key) => !internalSymbols.has(key)).map((key) => [key, Object.getOwnPropertyDescriptor(value, key)]);
25792
25833
  for (const [key, descriptor] of descriptors3) {
25793
25834
  usage += 1;
25794
25835
  visit(key, depth + 1);
@@ -25943,18 +25984,15 @@ function measureSandboxData(values, options = {}) {
25943
25984
  }
25944
25985
  return;
25945
25986
  }
25946
- const descriptors2 = Object.getOwnPropertyDescriptors(value);
25947
- const keys = Object.keys(descriptors2);
25948
- const includeNonEnumerable = isSandboxDate(value) || hasManagedDescriptors(value);
25949
- let entryCount = 0;
25950
- for (const key of keys) {
25951
- if (descriptors2[key].enumerable || includeNonEnumerable) entryCount += 1;
25987
+ const descriptors2 = [];
25988
+ for (const key of Object.getOwnPropertyNames(value)) {
25989
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
25990
+ if (descriptor !== void 0) descriptors2.push([key, descriptor]);
25952
25991
  }
25953
- usage += entryCount;
25954
- for (const key of keys) {
25955
- const descriptor = descriptors2[key];
25992
+ const includeNonEnumerable = isSandboxDate(value) || hasManagedDescriptors(value);
25993
+ for (const [key, descriptor] of descriptors2) {
25956
25994
  if (!descriptor.enumerable && !includeNonEnumerable) continue;
25957
- usage += key.length;
25995
+ usage += 1 + key.length;
25958
25996
  if ("value" in descriptor) visit(descriptor.value, depth + 1);
25959
25997
  else for (const closure of retainedAccessorClosures(descriptor)) visit(closure, depth + 1);
25960
25998
  }
@@ -40727,4 +40765,4 @@ export {
40727
40765
  FileSnapshotBackend,
40728
40766
  run
40729
40767
  };
40730
- //# sourceMappingURL=chunk-SZZFUQKW.js.map
40768
+ //# sourceMappingURL=chunk-CL6E5SM7.js.map