{"version":3,"sources":["../../src/core/internet-object.ts"],"sourcesContent":["/**\r\n * IOObject is an ordered key-value collection that supports both keyed and positional access.\r\n *\r\n * Features:\r\n * - Maintains insertion order of key-value pairs\r\n * - Supports mixed keyed and positional (keyless) entries\r\n * - Provides O(1) key-based lookups via internal Map\r\n * - Implements Iterable for for..of loops\r\n * - Supports sparse deletions with optional compaction\r\n * - Synchronizes with object properties for dot-notation access\r\n *\r\n * @template T The type of values stored in the object\r\n *\r\n * @example\r\n * ```typescript\r\n * const obj = new IOObject<number>();\r\n * obj.set('a', 1);\r\n * obj.push(2);           // positional entry (no key)\r\n * obj.set('b', 3);\r\n * console.log(obj.a);    // 1 (dot notation)\r\n * console.log(obj.getAt(1)); // 2\r\n * ```\r\n */\r\nclass IOObject<T = any> implements Iterable<[string | undefined, T]> {\r\n  [key: string]: any;\r\n  private items!: ([string | undefined, T] | undefined)[];\r\n  private keyMap!: Map<string, number>;\r\n  public errors: Error[] = [];\r\n\r\n  constructor(o?: Record<string, T>) {\r\n    // Initialize private properties as non-enumerable to prevent conflicts with user keys\r\n    Object.defineProperty(this, 'items', {\r\n      value: [],\r\n      writable: true,\r\n      enumerable: false,\r\n      configurable: false\r\n    });\r\n    Object.defineProperty(this, 'keyMap', {\r\n      value: new Map(),\r\n      writable: true,\r\n      enumerable: false,\r\n      configurable: false\r\n    });\r\n    Object.defineProperty(this, 'errors', {\r\n      value: [],\r\n      writable: true,\r\n      enumerable: false,\r\n      configurable: false\r\n    });\r\n\r\n    if (o) {\r\n      for (const [key, value] of Object.entries(o)) {\r\n        this.set(key, value);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Adds or updates a key-value pair in the IOObject.\r\n   * If the key exists, updates the value at its index.\r\n   * @param key The key to add or update.\r\n   * @param value The value associated with the key.\r\n   * @returns The IOObject instance.\r\n   */\r\n  set(key: string, value: T): this {\r\n    if (this.keyMap.has(key)) {\r\n      const index = this.keyMap.get(key)!;\r\n      this.items[index] = [key, value];\r\n    } else {\r\n      const index = this.items.length;\r\n      this.items.push([key, value]);\r\n      this.keyMap.set(key, index);\r\n    }\r\n    // Synchronize instance property (but skip if it's a reserved internal property)\r\n    if (key !== 'items' && key !== 'keyMap') {\r\n      Object.defineProperty(this, key, {\r\n        value,\r\n        writable: true,\r\n        enumerable: true,\r\n        configurable: true\r\n      });\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Appends values to the IOObject.\r\n   * Values can be with or without keys.\r\n   * @param items Variadic arguments of values or [key, value] pairs.\r\n   */\r\n  push(...items: ([string, T] | T)[]): void {\r\n    for (const item of items) {\r\n      if (Array.isArray(item)) {\r\n        const [key, value] = item;\r\n        if (this.has(key)) {\r\n          throw new Error(`Key '${key}' already exists`);\r\n        }\r\n        const index = this.items.length;\r\n        this.items.push([key, value]);\r\n        this.keyMap.set(key, index);\r\n      } else {\r\n  this.items.push([undefined, item]);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Retrieves the value associated with the given key.\r\n   * @param key The key to look up.\r\n   * @returns The value if found, otherwise undefined.\r\n   */\r\n  get(key: string): T | undefined {\r\n    const index = this.keyMap.get(key);\r\n    if (index !== undefined) {\r\n      const entry = this.items[index];\r\n      return entry ? entry[1] : undefined;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Retrieves the value at the specified index.\r\n   * @param index The index to access.\r\n   * @returns The value if index is valid and entry exists, otherwise undefined.\r\n   */\r\n  getAt(index: number): T | undefined {\r\n    if (index < 0 || index >= this.items.length) {\r\n      return undefined;\r\n    }\r\n    const entry = this.items[index];\r\n    return entry ? entry[1] : undefined;\r\n  }\r\n\r\n  /**\r\n   * Retrieves the key at the specified index.\r\n   * @param index The index to access.\r\n   * @returns The key if index is valid and exists, otherwise undefined.\r\n   */\r\n  keyAt(index: number): string | undefined {\r\n    if (index < 0 || index >= this.items.length) {\r\n      return undefined;\r\n    }\r\n    const entry = this.items[index];\r\n    return entry ? entry[0] : undefined;\r\n  }\r\n\r\n  /**\r\n   * Checks if the IOObject contains a given key.\r\n   * @param key The key to check.\r\n   * @returns True if the key exists, otherwise false.\r\n   */\r\n  has(key: string): boolean {\r\n    return this.keyMap.has(key);\r\n  }\r\n\r\n  /**\r\n   * Deletes a key-value pair from the IOObject by key.\r\n   * @param key The key to delete.\r\n   * @returns True if the key was found and deleted, otherwise false.\r\n   */\r\n  delete(key: string): boolean {\r\n    const index = this.keyMap.get(key);\r\n    if (index !== undefined && this.items[index]) {\r\n      this.items[index] = undefined;\r\n      this.keyMap.delete(key);\r\n      // Remove instance property\r\n      delete this[key];\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Deletes a value at a specific index.\r\n   * Throws an error if the index is out of range.\r\n   * @param index The index to delete.\r\n   * @returns True if the value was deleted, otherwise false.\r\n   * @throws Error if the index is invalid.\r\n   */\r\n  deleteAt(index: number): boolean {\r\n    if (index < 0 || index >= this.items.length) {\r\n      throw new Error('Index out of range');\r\n    }\r\n\r\n    const entry = this.items[index];\r\n    if (entry) {\r\n      const key = entry[0];\r\n      if (key !== undefined) {\r\n        this.keyMap.delete(key);\r\n      }\r\n      this.items[index] = undefined;\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Updates the value at the specified index.\r\n   * Throws an error if the index is out of range.\r\n   * @param index The index to set.\r\n   * @param value The value to set.\r\n   * @returns True if the value was updated, otherwise false.\r\n   * @throws Error if the index is invalid.\r\n   */\r\n  setAt(index: number, value: T): boolean {\r\n    if (index < 0 || index >= this.items.length) {\r\n      throw new Error('Index out of range');\r\n    }\r\n    const entry = this.items[index];\r\n    if (entry) {\r\n      this.items[index] = [entry[0], value];\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /**\r\n   * Returns the index of the given key.\r\n   * @param key The key to find.\r\n   * @returns The index if found, otherwise -1.\r\n   */\r\n  indexOfKey(key: string): number {\r\n    return this.keyMap.get(key) ?? -1;\r\n  }\r\n\r\n  /**\r\n   * Returns the index of the given value.\r\n   * @param value The value to find.\r\n   * @returns The index if found, otherwise -1.\r\n   */\r\n  indexOf(value: T): number {\r\n    return this.items.findIndex(\r\n      (entry) => entry !== undefined && Object.is(entry[1], value)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Checks if the IOObject is empty.\r\n   * @returns True if empty, otherwise false.\r\n   */\r\n  isEmpty(): boolean {\r\n  return this.length === 0;\r\n  }\r\n\r\n  /**\r\n   * Creates an IOObject from an array of values or [key, value] pairs.\r\n   * @param array The array to create from.\r\n   * @returns A new IOObject instance.\r\n   */\r\n  static fromArray<T>(array: (T | [string, T])[]): IOObject<T> {\r\n    const io = new IOObject<T>();\r\n    for (const item of array) {\r\n      if (Array.isArray(item)) {\r\n        io.set(item[0], item[1]);\r\n      } else {\r\n        io.push(item);\r\n      }\r\n    }\r\n    return io;\r\n  }\r\n\r\n  /**\r\n   * Returns the number of entries in the IOObject, including undefined entries.\r\n   */\r\n  get length(): number {\r\n    return this.items.length;\r\n  }\r\n\r\n  /**\r\n   * Clears all key-value pairs from the IOObject.\r\n   */\r\n  clear(): void {\r\n    // Remove all instance properties for keys\r\n    for (const key of this.keysArray()) {\r\n      delete this[key];\r\n    }\r\n    this.items = [];\r\n    this.keyMap.clear();\r\n  }\r\n\r\n  /**\r\n   * Compacts the items array by removing undefined entries and updating the keyMap.\r\n   * Note: This operation is O(n) and may affect performance on large datasets.\r\n   * Use this method when you need to reduce memory usage or after multiple deletions.\r\n   */\r\n  compact(): void {\r\n    const newItems: ([string | undefined, T])[] = [];\r\n    const newKeyMap = new Map<string, number>();\r\n\r\n    for (const entry of this.items) {\r\n      if (entry !== undefined) {\r\n        newItems.push(entry);\r\n        const key = entry[0];\r\n        if (key !== undefined) {\r\n          newKeyMap.set(key, newItems.length - 1);\r\n        }\r\n      }\r\n    }\r\n\r\n  this.items = newItems;\r\n  this.keyMap = newKeyMap;\r\n  }\r\n\r\n  /**\r\n   * Executes a provided function once for each key-value pair.\r\n   * @param callbackfn Function to execute for each element.\r\n   * @param thisArg Value to use as `this` when executing callback.\r\n   */\r\n  forEach(\r\n    callbackfn: (value: T, key: string | undefined, index: number) => void,\r\n    thisArg?: any\r\n  ): void {\r\n    for (let index = 0; index < this.items.length; index++) {\r\n      const entry = this.items[index];\r\n      if (entry !== undefined) {\r\n        callbackfn.call(thisArg, entry[1], entry[0], index);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns an iterable of key, value pairs for every entry in the IOObject.\r\n   */\r\n  entries(): IterableIterator<[string | undefined, T]> {\r\n    return this._createIterator((entry) => entry);\r\n  }\r\n\r\n  /**\r\n   * Returns an array of keys in the IOObject.\r\n   * Excludes entries without keys (i.e., where key is undefined).\r\n   * @returns An array of keys.\r\n   */\r\n  keysArray(): string[] {\r\n    return this.items\r\n      .filter((entry): entry is [string, T] => entry !== undefined && entry[0] !== undefined)\r\n      .map((entry) => entry[0]);\r\n  }\r\n\r\n  /**\r\n   * Returns an iterable of keys in the IOObject.\r\n   * Excludes entries without keys (i.e., where key is undefined).\r\n   */\r\n  keys(): IterableIterator<string> {\r\n    return (function* (items) {\r\n      for (const entry of items) {\r\n        if (entry !== undefined && entry[0] !== undefined) {\r\n          yield entry[0];\r\n        }\r\n      }\r\n    })(this.items);\r\n  }\r\n\r\n  /**\r\n   * Returns an iterable of values in the IOObject.\r\n   */\r\n  values(): IterableIterator<T> {\r\n    return (function* (items) {\r\n      for (const entry of items) {\r\n        if (entry !== undefined) {\r\n          yield entry[1];\r\n        }\r\n      }\r\n    })(this.items);\r\n  }\r\n\r\n  /**\r\n   * Returns an array of values in the IOObject.\r\n   * Includes all entries, even those without keys.\r\n   * @returns An array of values.\r\n   */\r\n  valuesArray(): T[] {\r\n    return this.items\r\n      .filter((entry): entry is [string | undefined, T] => entry !== undefined)\r\n      .map((entry) => entry[1]);\r\n  }\r\n\r\n  /**\r\n   * Creates an iterator based on a selector function.\r\n   * @param selector Function to select the output of the iterator.\r\n   */\r\n  private *_createIterator<U>(\r\n    selector: (entry: [string | undefined, T]) => U\r\n  ): IterableIterator<U> {\r\n    for (const entry of this.items) {\r\n      if (entry !== undefined) {\r\n        yield selector(entry);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns an iterator over the entries in insertion order.\r\n   */\r\n  [Symbol.iterator](): IterableIterator<[string | undefined, T]> {\r\n    return this.entries();\r\n  }\r\n\r\n  /**\r\n   * Returns the default string representation of the object.\r\n   */\r\n  get [Symbol.toStringTag](): string {\r\n    return 'IOObject';\r\n  }\r\n\r\n  /**\r\n   * Finds a value based on a predicate function.\r\n   * @param predicate Function to test each element.\r\n   * @returns The value if found, otherwise undefined.\r\n   */\r\n  find(\r\n    predicate: (value: T, key: string | undefined, index: number) => boolean\r\n  ): T | undefined {\r\n    let index = 0;\r\n    for (const entry of this.items) {\r\n      if (entry !== undefined && predicate(entry[1], entry[0], index)) {\r\n        return entry[1];\r\n      }\r\n      index++;\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  /**\r\n   * Finds the index of a value based on a predicate function.\r\n   * @param predicate Function to test each element.\r\n   * @returns The index if found, otherwise -1.\r\n   */\r\n  findIndex(\r\n    predicate: (value: T, key: string | undefined, index: number) => boolean\r\n  ): number {\r\n    let index = 0;\r\n    for (const entry of this.items) {\r\n      if (entry !== undefined && predicate(entry[1], entry[0], index)) {\r\n        return index;\r\n      }\r\n      index++;\r\n    }\r\n    return -1;\r\n  }\r\n\r\n  /**\r\n   * Creates a new array populated with the results of calling a provided function on every element.\r\n   * @param callbackfn Function that produces an element of the new Array.\r\n   * @param thisArg Value to use as `this` when executing callback.\r\n   * @returns A new array with each element being the result of the callback function.\r\n   */\r\n  map<U>(\r\n    callbackfn: (value: T, key: string | undefined, index: number) => U,\r\n    thisArg?: any\r\n  ): U[] {\r\n    const result: U[] = [];\r\n    let index = 0;\r\n    for (const entry of this.items) {\r\n      if (entry !== undefined) {\r\n        result.push(callbackfn.call(thisArg, entry[1], entry[0], index));\r\n      }\r\n      index++;\r\n    }\r\n    return result;\r\n  }\r\n\r\n  /**\r\n   * Converts the InternetObject to a plain JavaScript object.\r\n   *\r\n   * Logic:\r\n   * - Recursively calls `toObject()` on child values if they exist.\r\n   * - Uses keys where available; otherwise uses numeric indices.\r\n   *\r\n   * @returns A plain JavaScript object.\r\n   */\r\n  toObject(): any {\r\n    const obj:any = {}\r\n    this.forEach((value:any, key:string | undefined, index:number) => {\r\n      if (typeof value === \"undefined\") return\r\n\r\n      if (typeof value === 'object') {\r\n        if (typeof value?.toObject === 'function') {\r\n           obj[key || index] = value.toObject();\r\n        } else if (typeof value?.toJSON === 'function') {\r\n           obj[key || index] = value.toJSON();\r\n        } else {\r\n           obj[key || index] = value;\r\n        }\r\n      } else {\r\n        obj[key || index] = value;\r\n      }\r\n    });\r\n\r\n    return obj;\r\n  }\r\n\r\n  /**\r\n   * Alias for toObject().\r\n   * Used when calling JSON.stringify.\r\n   */\r\n  toJSON(): any {\r\n    return this.toObject();\r\n  }\r\n\r\n  /**\r\n   * Custom inspector for Node.js `console.log`.\r\n   * Returns the plain object representation for better readability.\r\n   */\r\n  [Symbol.for('nodejs.util.inspect.custom')]() {\r\n    return this.toObject();\r\n  }\r\n}\r\n\r\nexport default IOObject;\r\n"],"mappings":"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","names":[]}