@poe-platform/safe-js 0.1.254 → 0.1.255

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.
@@ -22103,6 +22103,76 @@ function defineDataProperty2(target, key, value) {
22103
22103
  });
22104
22104
  }
22105
22105
 
22106
+ // packages/safe-js/src/interp/globals/math-sum-precise.ts
22107
+ async function sumPrecise(source, budget, context) {
22108
+ let iterator;
22109
+ let current;
22110
+ let recordValue;
22111
+ let sum = 0n;
22112
+ let sumSize = 1;
22113
+ let special;
22114
+ let minusZero = true;
22115
+ let count = 0;
22116
+ const storage = new DataView(new ArrayBuffer(8));
22117
+ const checkData = createDataCheckpoint(budget, context);
22118
+ const release = retainValues(budget, () => [source, iterator?.retainedValue, recordValue, current, sum]);
22119
+ try {
22120
+ if (source === void 0 || source === null) throw new TypeError("Math.sumPrecise requires an iterable.");
22121
+ iterator = context === void 0 ? getSandboxIterator(source, budget) : await acquireSandboxIterator(source, budget, context);
22122
+ if (iterator === void 0) throw new TypeError("Math.sumPrecise requires an iterable.");
22123
+ checkData(source, 0, true);
22124
+ while (true) {
22125
+ budget.visitNode();
22126
+ const next = iterator.next();
22127
+ const result = iterator.asynchronous || iterator.generator ? await next : next;
22128
+ if (typeof result !== "object" && typeof result !== "function" || result === null)
22129
+ throw new TypeError("Iterator result must be an object.");
22130
+ recordValue = result;
22131
+ const record3 = result;
22132
+ if ((await readIteratorResult(iterator, record3, "done")).value) break;
22133
+ current = (await readIteratorResult(iterator, record3, "value")).value;
22134
+ if (count >= Number.MAX_SAFE_INTEGER || typeof current !== "number") {
22135
+ const error = count >= Number.MAX_SAFE_INTEGER ? new RangeError("Math.sumPrecise received too many elements.") : new TypeError("Math.sumPrecise requires number elements.");
22136
+ await closeIterator(iterator, true);
22137
+ throw error;
22138
+ }
22139
+ count++;
22140
+ if (!Object.is(current, -0)) minusZero = false;
22141
+ if (Number.isNaN(current)) special = NaN;
22142
+ else if (!Number.isFinite(current)) {
22143
+ special = special === void 0 || special === current ? current : NaN;
22144
+ } else if (special === void 0) {
22145
+ storage.setFloat64(0, current);
22146
+ const bits = storage.getBigUint64(0);
22147
+ const exponent = Number(bits >> 52n & 2047n);
22148
+ const fraction = bits & (1n << 52n) - 1n;
22149
+ const significand = exponent === 0 ? fraction : 1n << 52n | fraction;
22150
+ const units = significand << BigInt(Math.max(0, exponent - 1));
22151
+ sum += bits >> 63n ? -units : units;
22152
+ }
22153
+ current = void 0;
22154
+ recordValue = void 0;
22155
+ const size = sum.toString(16).length;
22156
+ checkData(source, Math.max(0, size - sumSize));
22157
+ sumSize = size;
22158
+ }
22159
+ if (special !== void 0) return special;
22160
+ if (minusZero) return -0;
22161
+ const sign = sum < 0n ? -1 : 1;
22162
+ if (sum < 0n) sum = -sum;
22163
+ const shift = Math.max(0, sum.toString(2).length - 53);
22164
+ let rounded = sum >> BigInt(shift);
22165
+ if (shift > 0) {
22166
+ const remainder = sum - (rounded << BigInt(shift));
22167
+ const half = 1n << BigInt(shift - 1);
22168
+ if (remainder > half || remainder === half && (rounded & 1n) === 1n) rounded++;
22169
+ }
22170
+ return sign * Number(rounded) * 2 ** (shift - 1074);
22171
+ } finally {
22172
+ release();
22173
+ }
22174
+ }
22175
+
22106
22176
  // packages/safe-js/src/interp/globals/math.ts
22107
22177
  var mathMethods = {
22108
22178
  abs: Math.abs,
@@ -22174,7 +22244,14 @@ function createMathGlobals(options = {}) {
22174
22244
  PI: Math.PI,
22175
22245
  SQRT1_2: Math.SQRT1_2,
22176
22246
  SQRT2: Math.SQRT2,
22177
- random: createSandboxClosure({ sandbox: true, guest: true, call: () => random(), name: "random", length: 0 })
22247
+ random: createSandboxClosure({ sandbox: true, guest: true, call: () => random(), name: "random", length: 0 }),
22248
+ sumPrecise: createSandboxClosure({
22249
+ sandbox: true,
22250
+ guest: true,
22251
+ name: "sumPrecise",
22252
+ length: 1,
22253
+ call: ([source], context) => sumPrecise(source, budget, context)
22254
+ })
22178
22255
  };
22179
22256
  for (const [name, method] of Object.entries(mathMethods)) {
22180
22257
  const variadic = method === Math.max || method === Math.min || method === Math.hypot;
@@ -39620,4 +39697,4 @@ export {
39620
39697
  FileSnapshotBackend,
39621
39698
  run
39622
39699
  };
39623
- //# sourceMappingURL=chunk-VFXTEJXR.js.map
39700
+ //# sourceMappingURL=chunk-PRWJXI5K.js.map