UNPKG

alinea

Version:

[![npm](https://img.shields.io/npm/v/alinea.svg)](https://npmjs.org/package/alinea) [![install size](https://packagephobia.com/badge?p=alinea)](https://packagephobia.com/result?p=alinea)

90 lines (88 loc) 2 kB
import "../../chunks/chunk-U5RRZUYZ.js"; // src/backend/util/DeepMap.ts var DeepMap = class { #root = /* @__PURE__ */ new Map(); #leaves = /* @__PURE__ */ new Map(); constructor(entries) { if (entries) for (const entry of entries) this.set(...entry); } get size() { return this.#leaves.size; } set(keys, value) { let branch = this.#root; for (const key of keys) { if (branch.has(key)) branch = branch.get(key); else branch.set(key, branch = /* @__PURE__ */ new Map()); } this.#leaves.set(branch, value); return this; } #clearBranch(branch) { if (this.#leaves.has(branch)) this.#leaves.delete(branch); for (let map of branch.values()) this.#clearBranch(map); return branch.clear(); } clear() { this.#clearBranch(this.#root); } delete(keys) { let branch = this.#root; for (const key of keys) { if (branch.has(key)) { branch = branch.get(key); } else { return false; } } return this.#leaves.delete(branch); } has(keys) { let branch = this.#root; for (const key of keys) { if (branch.has(key)) { branch = branch.get(key); } else { return false; } } return this.#leaves.has(branch); } get(keys) { let branch = this.#root; for (const key of keys) branch = branch.get(key); return this.#leaves.get(branch); } *values() { for (const value of this.#leaves.values()) yield value; } *#keysOfBranch(branch, keys = []) { for (const [key, map] of branch) { const current = keys.concat(key); if (this.#leaves.has(map)) yield current; yield* this.#keysOfBranch(map, current); } } *keys() { yield* this.#keysOfBranch(this.#root); } *entries() { for (const keys of this.keys()) yield [keys, this.get(keys)]; } [Symbol.iterator]() { return this.entries(); } }; export { DeepMap };