{"version":3,"file":"ngxtension-collections.mjs","sources":["../../../../libs/ngxtension/collections/src/signal-map.ts","../../../../libs/ngxtension/collections/src/signal-set.ts","../../../../libs/ngxtension/collections/src/ngxtension-collections.ts"],"sourcesContent":["import { signal, WritableSignal } from '@angular/core';\nimport { createNotifier } from 'ngxtension/create-notifier';\n\n// Internal symbol to track deletion notifications safely\n// We use this instead of 'undefined' so we can support maps that actually store 'undefined' as a value.\nconst REMOVED = Symbol('REMOVED');\n\nexport class SignalMap<K, V> {\n\t// Storage now holds V | REMOVED\n\tprivate _storage = new Map<K, WritableSignal<V | typeof REMOVED>>();\n\n\tprivate _structure = createNotifier();\n\n\tconstructor(entries?: readonly (readonly [K, V])[] | null) {\n\t\tif (entries) {\n\t\t\tfor (const [key, value] of entries) {\n\t\t\t\tthis._storage.set(key, signal(value));\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tget(key: K): V | undefined {\n\t\tconst valueSignal = this._storage.get(key);\n\n\t\tif (valueSignal) {\n\t\t\t// 1. Key exists: We listen ONLY to this signal.\n\t\t\t// If this key is deleted later, 'delete()' will fire this signal with REMOVED.\n\t\t\tconst value = valueSignal();\n\n\t\t\t// Safety check: if we are in a computed chain where the map was just mutated\n\t\t\t// but the signal is still lingering.\n\t\t\tif (value === REMOVED) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn value as V;\n\t\t} else {\n\t\t\t// 2. Key missing: We must listen to _structure.\n\t\t\t// If we don't do this, we won't know when the key is added.\n\t\t\tthis._structure.listen();\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tset(key: K, value: V): this {\n\t\tconst existingSignal = this._storage.get(key);\n\n\t\tif (existingSignal) {\n\t\t\t// Key exists: Update value only.\n\t\t\t// Observers of this key update. Observers of 'structure' (keys/size) do NOT.\n\t\t\texistingSignal.set(value);\n\t\t} else {\n\t\t\t// New key: Add to storage and update structure.\n\t\t\tthis._storage.set(key, signal(value));\n\t\t\tthis._structure.notify();\n\t\t}\n\t\treturn this;\n\t}\n\n\tdelete(key: K): boolean {\n\t\tconst existingSignal = this._storage.get(key);\n\n\t\tif (existingSignal) {\n\t\t\t// STEP 1: Notify the specific signal listeners that this value is \"changed\" (to removed).\n\t\t\t// This forces effects relying on get(key) to re-run.\n\t\t\texistingSignal.set(REMOVED);\n\n\t\t\t// STEP 2: Remove from storage\n\t\t\tthis._storage.delete(key);\n\n\t\t\t// STEP 3: Notify structure listeners (keys/size/iterators)\n\t\t\tthis._structure.notify();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\thas(key: K): boolean {\n\t\tthis._structure.listen();\n\t\treturn this._storage.has(key);\n\t}\n\n\tclear(): void {\n\t\tif (this._storage.size > 0) {\n\t\t\t// Notify ALL value signals that they are removed\n\t\t\tfor (const s of this._storage.values()) {\n\t\t\t\ts.set(REMOVED);\n\t\t\t}\n\t\t\tthis._storage.clear();\n\t\t\tthis._structure.notify();\n\t\t}\n\t}\n\n\tget size(): number {\n\t\tthis._structure.listen();\n\t\treturn this._storage.size;\n\t}\n\n\t*keys(): IterableIterator<K> {\n\t\tthis._structure.listen();\n\t\tyield* this._storage.keys();\n\t}\n\n\t*values(): IterableIterator<V> {\n\t\tthis._structure.listen();\n\t\tfor (const s of this._storage.values()) {\n\t\t\tconst val = s();\n\t\t\tif (val !== REMOVED) yield val as V;\n\t\t}\n\t}\n\n\t*entries(): IterableIterator<[K, V]> {\n\t\tthis._structure.listen();\n\t\tfor (const [key, s] of this._storage.entries()) {\n\t\t\tconst val = s();\n\t\t\tif (val !== REMOVED) yield [key, val as V];\n\t\t}\n\t}\n\n\tforEach(callback: (value: V, key: K, map: SignalMap<K, V>) => void): void {\n\t\tthis._structure.listen();\n\t\tthis._storage.forEach((s, key) => {\n\t\t\tconst val = s();\n\t\t\tif (val !== REMOVED) callback(val as V, key, this);\n\t\t});\n\t}\n\n\t[Symbol.iterator](): IterableIterator<[K, V]> {\n\t\treturn this.entries();\n\t}\n}\n","import { SignalMap } from './signal-map';\n\n// A unique symbol to use as the map value (since Sets only care about keys)\nconst PRESENT = Symbol('PRESENT');\n\nexport class SignalSet<T> implements Set<T> {\n\tprivate _map = new SignalMap<T, typeof PRESENT>();\n\n\tconstructor(values?: readonly T[] | null) {\n\t\tif (values) {\n\t\t\tfor (const value of values) {\n\t\t\t\tthis._map.set(value, PRESENT);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\thas(value: T): boolean {\n\t\treturn this._map.has(value);\n\t}\n\n\tadd(value: T): this {\n\t\tthis._map.set(value, PRESENT);\n\t\treturn this;\n\t}\n\n\tdelete(value: T): boolean {\n\t\treturn this._map.delete(value);\n\t}\n\n\tclear(): void {\n\t\tthis._map.clear();\n\t}\n\n\tget size(): number {\n\t\treturn this._map.size;\n\t}\n\n\tkeys(): IterableIterator<T> {\n\t\treturn this._map.keys();\n\t}\n\n\tvalues(): IterableIterator<T> {\n\t\treturn this._map.keys();\n\t}\n\n\t*entries(): IterableIterator<[T, T]> {\n\t\tfor (const value of this._map.keys()) {\n\t\t\tyield [value, value];\n\t\t}\n\t}\n\n\tforEach(\n\t\tcallbackfn: (value: T, value2: T, set: Set<T>) => void,\n\t\tthisArg?: any,\n\t): void {\n\t\tthis._map.forEach((_, value) => {\n\t\t\tcallbackfn.call(thisArg, value, value, this);\n\t\t});\n\t}\n\n\t[Symbol.iterator](): IterableIterator<T> {\n\t\treturn this.values();\n\t}\n\n\tget [Symbol.toStringTag](): string {\n\t\treturn 'SignalSet';\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAGA;AACA;AACA,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;MAErB,SAAS,CAAA;AAMrB,IAAA,WAAA,CAAY,OAA6C,EAAA;;AAJjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAyC,CAAC;QAE5D,IAAU,CAAA,UAAA,GAAG,cAAc,EAAE,CAAC;QAGrC,IAAI,OAAO,EAAE;YACZ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE;AACnC,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aACtC;SACD;AAED,QAAA,OAAO,IAAI,CAAC;KACZ;AAED,IAAA,GAAG,CAAC,GAAM,EAAA;QACT,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE3C,IAAI,WAAW,EAAE;;;AAGhB,YAAA,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;;;AAI5B,YAAA,IAAI,KAAK,KAAK,OAAO,EAAE;AACtB,gBAAA,OAAO,SAAS,CAAC;aACjB;AACD,YAAA,OAAO,KAAU,CAAC;SAClB;aAAM;;;AAGN,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACzB,YAAA,OAAO,SAAS,CAAC;SACjB;KACD;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ,EAAA;QACnB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,cAAc,EAAE;;;AAGnB,YAAA,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC1B;aAAM;;AAEN,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;SACzB;AACD,QAAA,OAAO,IAAI,CAAC;KACZ;AAED,IAAA,MAAM,CAAC,GAAM,EAAA;QACZ,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,cAAc,EAAE;;;AAGnB,YAAA,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;;AAG5B,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;AAG1B,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACzB,YAAA,OAAO,IAAI,CAAC;SACZ;AACD,QAAA,OAAO,KAAK,CAAC;KACb;AAED,IAAA,GAAG,CAAC,GAAM,EAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KAC9B;IAED,KAAK,GAAA;QACJ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;;YAE3B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AACvC,gBAAA,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aACf;AACD,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;SACzB;KACD;AAED,IAAA,IAAI,IAAI,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC1B;AAED,IAAA,CAAC,IAAI,GAAA;AACJ,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KAC5B;AAED,IAAA,CAAC,MAAM,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE;AACvC,YAAA,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,GAAG,KAAK,OAAO;AAAE,gBAAA,MAAM,GAAQ,CAAC;SACpC;KACD;AAED,IAAA,CAAC,OAAO,GAAA;AACP,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;AACzB,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;AAC/C,YAAA,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,GAAG,KAAK,OAAO;AAAE,gBAAA,MAAM,CAAC,GAAG,EAAE,GAAQ,CAAC,CAAC;SAC3C;KACD;AAED,IAAA,OAAO,CAAC,QAA0D,EAAA;AACjE,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,KAAI;AAChC,YAAA,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;YAChB,IAAI,GAAG,KAAK,OAAO;AAAE,gBAAA,QAAQ,CAAC,GAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACpD,SAAC,CAAC,CAAC;KACH;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;KACtB;AACD;;ACjID;AACA,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;MAErB,SAAS,CAAA;AAGrB,IAAA,WAAA,CAAY,MAA4B,EAAA;AAFhC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,SAAS,EAAqB,CAAC;QAGjD,IAAI,MAAM,EAAE;AACX,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aAC9B;SACD;AACD,QAAA,OAAO,IAAI,CAAC;KACZ;AAED,IAAA,GAAG,CAAC,KAAQ,EAAA;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC5B;AAED,IAAA,GAAG,CAAC,KAAQ,EAAA;QACX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC9B,QAAA,OAAO,IAAI,CAAC;KACZ;AAED,IAAA,MAAM,CAAC,KAAQ,EAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,KAAK,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;KAClB;AAED,IAAA,IAAI,IAAI,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;KACtB;IAED,IAAI,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,MAAM,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KACxB;AAED,IAAA,CAAC,OAAO,GAAA;QACP,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE;AACrC,YAAA,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACrB;KACD;IAED,OAAO,CACN,UAAsD,EACtD,OAAa,EAAA;QAEb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;YAC9B,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,SAAC,CAAC,CAAC;KACH;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;KACrB;AAED,IAAA,KAAK,MAAM,CAAC,WAAW,CAAC,GAAA;AACvB,QAAA,OAAO,WAAW,CAAC;KACnB;AACD;;ACpED;;AAEG;;;;"}