eigent/package/@stackframe/stack-shared/dist/utils/maps.js

209 lines
6.3 KiB
JavaScript

"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/utils/maps.tsx
var maps_exports = {};
__export(maps_exports, {
DependenciesMap: () => DependenciesMap,
IterableWeakMap: () => IterableWeakMap,
MaybeWeakMap: () => MaybeWeakMap,
WeakRefIfAvailable: () => WeakRefIfAvailable
});
module.exports = __toCommonJS(maps_exports);
var import_results = require("./results");
var WeakRefIfAvailable = class {
constructor(value) {
if (typeof WeakRef === "undefined") {
this._ref = { deref: () => value };
} else {
this._ref = new WeakRef(value);
}
}
deref() {
return this._ref.deref();
}
};
var _a, _b;
var IterableWeakMap = class {
constructor(entries) {
this[_a] = "IterableWeakMap";
const mappedEntries = entries?.map((e) => [e[0], { value: e[1], keyRef: new WeakRefIfAvailable(e[0]) }]);
this._weakMap = new WeakMap(mappedEntries ?? []);
this._keyRefs = new Set(mappedEntries?.map((e) => e[1].keyRef) ?? []);
}
get(key) {
return this._weakMap.get(key)?.value;
}
set(key, value) {
const existing = this._weakMap.get(key);
const updated = { value, keyRef: existing?.keyRef ?? new WeakRefIfAvailable(key) };
this._weakMap.set(key, updated);
this._keyRefs.add(updated.keyRef);
return this;
}
delete(key) {
const res = this._weakMap.get(key);
if (res) {
this._weakMap.delete(key);
this._keyRefs.delete(res.keyRef);
return true;
}
return false;
}
has(key) {
return this._weakMap.has(key) && this._keyRefs.has(this._weakMap.get(key).keyRef);
}
*[(_b = Symbol.iterator, _a = Symbol.toStringTag, _b)]() {
for (const keyRef of this._keyRefs) {
const key = keyRef.deref();
const existing = key ? this._weakMap.get(key) : void 0;
if (!key) {
this._keyRefs.delete(keyRef);
} else if (existing) {
yield [key, existing.value];
}
}
}
};
var _a2, _b2;
var MaybeWeakMap = class {
constructor(entries) {
this[_a2] = "MaybeWeakMap";
const entriesArray = [...entries ?? []];
this._primitiveMap = new Map(entriesArray.filter((e) => !this._isAllowedInWeakMap(e[0])));
this._weakMap = new IterableWeakMap(entriesArray.filter((e) => this._isAllowedInWeakMap(e[0])));
}
_isAllowedInWeakMap(key) {
return typeof key === "object" && key !== null || typeof key === "symbol" && Symbol.keyFor(key) === void 0;
}
get(key) {
if (this._isAllowedInWeakMap(key)) {
return this._weakMap.get(key);
} else {
return this._primitiveMap.get(key);
}
}
set(key, value) {
if (this._isAllowedInWeakMap(key)) {
this._weakMap.set(key, value);
} else {
this._primitiveMap.set(key, value);
}
return this;
}
delete(key) {
if (this._isAllowedInWeakMap(key)) {
return this._weakMap.delete(key);
} else {
return this._primitiveMap.delete(key);
}
}
has(key) {
if (this._isAllowedInWeakMap(key)) {
return this._weakMap.has(key);
} else {
return this._primitiveMap.has(key);
}
}
*[(_b2 = Symbol.iterator, _a2 = Symbol.toStringTag, _b2)]() {
yield* this._primitiveMap;
yield* this._weakMap;
}
};
var _a3, _b3;
var DependenciesMap = class {
constructor() {
this._inner = { map: new MaybeWeakMap(), hasValue: false, value: void 0 };
this[_a3] = "DependenciesMap";
}
_valueToResult(inner) {
if (inner.hasValue) {
return import_results.Result.ok(inner.value);
} else {
return import_results.Result.error(void 0);
}
}
_unwrapFromInner(dependencies, inner) {
if (dependencies.length === 0) {
return this._valueToResult(inner);
} else {
const [key, ...rest] = dependencies;
const newInner = inner.map.get(key);
if (!newInner) {
return import_results.Result.error(void 0);
}
return this._unwrapFromInner(rest, newInner);
}
}
_setInInner(dependencies, value, inner) {
if (dependencies.length === 0) {
const res = this._valueToResult(inner);
if (value.status === "ok") {
inner.hasValue = true;
inner.value = value.data;
} else {
inner.hasValue = false;
inner.value = void 0;
}
return res;
} else {
const [key, ...rest] = dependencies;
let newInner = inner.map.get(key);
if (!newInner) {
inner.map.set(key, newInner = { map: new MaybeWeakMap(), hasValue: false, value: void 0 });
}
return this._setInInner(rest, value, newInner);
}
}
*_iterateInner(dependencies, inner) {
if (inner.hasValue) {
yield [dependencies, inner.value];
}
for (const [key, value] of inner.map) {
yield* this._iterateInner([...dependencies, key], value);
}
}
get(dependencies) {
return import_results.Result.or(this._unwrapFromInner(dependencies, this._inner), void 0);
}
set(dependencies, value) {
this._setInInner(dependencies, import_results.Result.ok(value), this._inner);
return this;
}
delete(dependencies) {
return this._setInInner(dependencies, import_results.Result.error(void 0), this._inner).status === "ok";
}
has(dependencies) {
return this._unwrapFromInner(dependencies, this._inner).status === "ok";
}
clear() {
this._inner = { map: new MaybeWeakMap(), hasValue: false, value: void 0 };
}
*[(_b3 = Symbol.iterator, _a3 = Symbol.toStringTag, _b3)]() {
yield* this._iterateInner([], this._inner);
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
DependenciesMap,
IterableWeakMap,
MaybeWeakMap,
WeakRefIfAvailable
});
//# sourceMappingURL=maps.js.map