summaryrefslogtreecommitdiff
path: root/node_modules/@jridgewell/set-array/src
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:54:57 +0100
committerPhilipp Tanlak <philipp.tanlak@gmail.com>2025-11-24 20:57:48 +0100
commitb1e2c8fd5cb5dfa46bc440a12eafaf56cd844b1c (patch)
tree49d360fd6cbc6a2754efe93524ac47ff0fbe0f7d /node_modules/@jridgewell/set-array/src
Docs
Diffstat (limited to 'node_modules/@jridgewell/set-array/src')
-rw-r--r--node_modules/@jridgewell/set-array/src/set-array.ts55
1 files changed, 55 insertions, 0 deletions
diff --git a/node_modules/@jridgewell/set-array/src/set-array.ts b/node_modules/@jridgewell/set-array/src/set-array.ts
new file mode 100644
index 0000000..f9ff604
--- /dev/null
+++ b/node_modules/@jridgewell/set-array/src/set-array.ts
@@ -0,0 +1,55 @@
+/**
+ * Gets the index associated with `key` in the backing array, if it is already present.
+ */
+export let get: (strarr: SetArray, key: string) => number | undefined;
+
+/**
+ * Puts `key` into the backing array, if it is not already present. Returns
+ * the index of the `key` in the backing array.
+ */
+export let put: (strarr: SetArray, key: string) => number;
+
+/**
+ * Pops the last added item out of the SetArray.
+ */
+export let pop: (strarr: SetArray) => void;
+
+/**
+ * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the
+ * index of the `key` in the backing array.
+ *
+ * This is designed to allow synchronizing a second array with the contents of the backing array,
+ * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,
+ * and there are never duplicates.
+ */
+export class SetArray {
+ private declare _indexes: { [key: string]: number | undefined };
+ declare array: readonly string[];
+
+ constructor() {
+ this._indexes = { __proto__: null } as any;
+ this.array = [];
+ }
+
+ static {
+ get = (strarr, key) => strarr._indexes[key];
+
+ put = (strarr, key) => {
+ // The key may or may not be present. If it is present, it's a number.
+ const index = get(strarr, key);
+ if (index !== undefined) return index;
+
+ const { array, _indexes: indexes } = strarr;
+
+ return (indexes[key] = (array as string[]).push(key) - 1);
+ };
+
+ pop = (strarr) => {
+ const { array, _indexes: indexes } = strarr;
+ if (array.length === 0) return;
+
+ const last = (array as string[]).pop()!;
+ indexes[last] = undefined;
+ };
+ }
+}