{"version":3,"sources":["../src/index.ts","../src/array.ts","../src/number.ts","../src/object.ts","../src/string.ts","../src/math.ts","../src/primitivetools.ts","../src/pathShim.ts","../src/primitives.ts"],"sourcesContent":["// Types are exposed via package root index.d.ts + global.d.ts; no direct reference here to avoid DTS build conflicts.\nexport * from \"./primitives.js\";\nimport \"./polyfills.js\";\nimport \"./string.js\";\nimport \"./array.js\";\nimport \"./number.js\";\nimport \"./object.js\";\n","// src/primitives/array.ts\ndeclare type arrayMethod = [string, (this: any[], ...args: any[]) => any];\ndeclare type arrayOfObjectsMethod = arrayMethod & [string, <T extends Record<string, any>>(this: T[], ...args: any[]) => any];\n\nconst assertIsObjectArray: (arr: any) => asserts arr is Record<string, any>[] = (arr: any): asserts arr is Record<string, any>[] => {\n  if (Array.isArray(arr) && arr.every((item) => typeof item === \"object\" && item !== null)) {\n    return undefined;\n  }\n  throw new Error(\"not an array of objects\");\n};\nconst assertIsArrayOfStrings: (arr: any) => asserts arr is string[] = (arr: any): asserts arr is string[] => {\n  if (arr.every((x: unknown) => typeof x === \"string\")) {\n    return undefined;\n  }\n  throw new Error(\"not an array of strings\");\n};\nconst assertIsArrayOfNumbers: (arr: any) => asserts arr is number[] = (arr: any): asserts arr is number[] => {\n  if (arr.every((x: unknown) => typeof x === \"number\")) {\n    return undefined;\n  }\n  throw new Error(\"not an array of numbers\");\n};\n\nexport const arrayMethodsTS: [string, (this: any[], ...args: any[]) => any][] = [\n  [\n    \"filterGuard\",\n    function <T, U extends T>(this: T[], pred: (x: T) => x is U) {\n      return this.filter((x): x is U => pred(x)) as U[];\n    },\n  ],\n  [\n    \"findGuard\",\n    function <T, U extends T>(this: T[], pred: (x: T) => x is U) {\n      for (const x of this) if (pred(x)) return x as U;\n      return undefined;\n    },\n  ],\n  [\n    \"assertIsStringArray\",\n    function (this: unknown[]): asserts this is string[] {\n      assertIsArrayOfStrings(this);\n    },\n  ],\n  [\n    \"assertIsNumberArray\",\n    function (this: unknown[]): asserts this is number[] {\n      assertIsArrayOfNumbers(this);\n    },\n  ],\n  [\n    \"asStrings\",\n    function (this: unknown[]): string[] | unknown[] {\n      try {\n        assertIsArrayOfStrings(this);\n        return this as string[];\n      } catch {\n        return this as unknown[];\n      }\n    },\n  ],\n  [\n    \"asNumbers\",\n    function (this: unknown[]): number[] | unknown[] {\n      try {\n        assertIsArrayOfNumbers(this);\n        return this as number[];\n      } catch {\n        return this as unknown[];\n      }\n    },\n  ],\n  [\n    \"tryAsStrings\",\n    function (this: unknown[]): string[] | null {\n      try {\n        assertIsArrayOfStrings(this);\n        return this as string[];\n      } catch {\n        return null;\n      }\n    },\n  ],\n  [\n    \"tryAsNumbers\",\n    function (this: unknown[]): number[] | null {\n      try {\n        assertIsArrayOfNumbers(this);\n        return this as number[];\n      } catch {\n        return null;\n      }\n    },\n  ],\n];\n\nexport const arrayMethods = [\n  [\n    \"first\",\n    function (this: any[], n = 1): any[] {\n      return n === 1 ? this[0] : this.slice(0, n);\n    },\n  ] as arrayMethod,\n  [\n    \"last\",\n    function (this: any[], n = 1): any[] {\n      return n === 1 ? this[this.length - 1] : this.slice(-n);\n    },\n  ] as arrayMethod,\n  [\n    \"findByKey\",\n    function <T extends Record<string, any>>(this: T[], key: string, value: any): T | null {\n      assertIsObjectArray(this);\n      for (const item of this) if (item[key] === value) return item;\n      return null;\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"groupBy\",\n    function (this: any[], fn: (item: any) => string): Record<string, any[]> {\n      return this.reduce((acc: any, item) => {\n        const key = typeof fn === \"function\" ? fn(item) : item[fn];\n        (acc[key] ||= []).push(item);\n        return acc;\n      }, {});\n    },\n  ] as arrayMethod,\n  [\n    \"sumByKey\",\n    function <T extends Record<string, any>>(this: T[], key: string): number {\n      assertIsObjectArray(this);\n      return this.reduce((acc, item) => acc + (typeof item[key] === \"number\" ? item[key] : 0), 0);\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"autoParseKeys\",\n    function <T extends Record<string, any>>(this: T[]): T[] {\n      assertIsObjectArray(this);\n      return this.map((obj) => {\n        if (obj && typeof obj === \"object\") {\n          for (const key in obj) {\n            if (typeof obj[key] === \"string\") {\n              try {\n                obj[key] = JSON.parse(obj[key]);\n              } catch {}\n            }\n          }\n        }\n        return obj;\n      });\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"unique\",\n    function <T>(this: T[]): T[] {\n      return [...new Set(this)];\n    },\n  ] as arrayMethod,\n  [\n    \"shuffle\",\n    function <T>(this: T[]): T[] {\n      const arr = [...this];\n      for (let i = arr.length - 1; i > 0; i--) {\n        const j = Math.floor(Math.random() * (i + 1));\n        [arr[i], arr[j]] = [arr[j], arr[i]];\n      }\n      return arr;\n    },\n  ] as arrayMethod,\n  [\n    \"highestByKey\",\n    function <T extends Record<string, any>>(this: T[], key: string): T | -1 {\n      try {\n        assertIsObjectArray(this);\n        assertIsArrayOfNumbers(this.map((item) => item[key]));\n\n        this.length;\n        return this.reduce((max, item) => (typeof item[key] === \"number\" && item[key] > (max?.[key] ?? -Infinity) ? item : max));\n      } catch (e) {\n        console.error(\"not an numberarray in object\", e);\n        return -1;\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"lowestByKey\",\n    function <T extends Record<string, any>>(this: T[], key: string): T | -1 {\n      try {\n        assertIsObjectArray(this);\n        assertIsArrayOfNumbers(this.map((item) => item[key]));\n        return this.reduce((min, item) => (typeof item[key] === \"number\" && item[key] < (min?.[key] ?? Infinity) ? item : min));\n      } catch (e) {\n        console.error(\"not an objectArray\", e);\n        return -1;\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"sortByKey\",\n    function <T extends Record<string, any>>(this: T[], key: string, ascending = true): T[] {\n      try {\n        assertIsObjectArray(this);\n        return [...this].sort((a, b) => {\n          const aVal = a[key] ?? 0;\n          const bVal = b[key] ?? 0;\n          return ascending ? aVal - bVal : bVal - aVal;\n        });\n      } catch (e) {\n        console.error(\"not an objectArray\", e);\n        return [];\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"sortByKeyName\",\n    function <T extends Record<string, any>>(this: T[], key: string, ascending = true): T[] {\n      try {\n        assertIsObjectArray(this);\n        return [...this].sort((a, b) => {\n          const aVal = String(a[key] ?? \"\");\n          const bVal = String(b[key] ?? \"\");\n          return ascending ? aVal.localeCompare(bVal) : bVal.localeCompare(aVal);\n        });\n      } catch (e) {\n        console.error(\"not an objectArray\", e);\n        return [];\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"mapByKey\",\n    function <T extends Record<string, any>, K extends keyof T>(this: T[], key: K): Array<T[K]> {\n      assertIsObjectArray(this);\n      return this.map((item) => (item && typeof item === \"object\" ? item[key] : undefined)) as Array<T[K]>;\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"sumKey\",\n    function <T extends Record<string, any>>(this: T[], key: string) {\n      try {\n        assertIsObjectArray(this);\n        assertIsArrayOfNumbers(this.map((item) => item[key]));\n\n        return this.reduce((acc, cur) => acc + (parseFloat(String(cur[key])) || 0), 0);\n      } catch (e) {\n        console.error(\"not an numberarray in object\", e);\n        return 0;\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"averageKey\",\n    function <T extends Record<string, any>>(this: T[], key: string) {\n      try {\n        assertIsObjectArray(this);\n        assertIsArrayOfNumbers(this.map((item) => item[key]));\n\n        let total = 0,\n          count = 0;\n        for (const cur of this) {\n          const v = parseFloat(String(cur[key]));\n          if (!Number.isNaN(v)) {\n            total += v;\n            count++;\n          }\n        }\n        return count ? total / count : 0;\n      } catch (e) {\n        console.error(\"not an numberarray in object\", e);\n        return 0;\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"filterKey\",\n    function <T extends Record<string, any>>(this: T[], key: string, pred: (v: any) => boolean) {\n      try {\n        assertIsObjectArray(this);\n        return this.filter((item) => pred(item[key]));\n      } catch (e) {\n        console.error(\"not an objectArray\", e);\n        return [];\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"distinct\",\n    function <T extends Record<string, any>>(this: T[], keyOrFn: string | ((x: T) => any)) {\n      try {\n        assertIsObjectArray(this);\n        const seen = new Set<any>();\n        const getKey = typeof keyOrFn === \"function\" ? keyOrFn : (x: T) => x[keyOrFn];\n        const out: T[] = [];\n        for (const item of this) {\n          const k = getKey(item);\n          if (!seen.has(k)) {\n            seen.add(k);\n            out.push(item);\n          }\n        }\n        return out;\n      } catch (e) {\n        console.error(\"not an objectArray\", e);\n        return [];\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"aggregate\",\n    function <T extends Record<string, any>, R>(this: T[], keyOrFn: string | ((x: T) => any), reducer: (acc: R, cur: T) => R, init: R) {\n      try {\n        assertIsObjectArray(this);\n        const getKey = typeof keyOrFn === \"function\" ? keyOrFn : (x: T) => x[keyOrFn];\n        const groups = new Map<any, R>();\n        for (const item of this) {\n          const k = getKey(item);\n          const acc = groups.has(k) ? groups.get(k)! : init;\n          groups.set(k, reducer(acc, item));\n        }\n        const out: Record<string, R> = {} as any;\n        for (const [k, v] of groups.entries()) (out as any)[k] = v;\n        return out;\n      } catch (e) {\n        console.error(\"not an objectArray\", e);\n        return {};\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"toTable\",\n    function <T extends Record<string, any>>(this: T[]) {\n      try {\n        assertIsObjectArray(this);\n        const out: Record<string, any[]> = {};\n        for (const item of this) {\n          for (const [k, v] of Object.entries(item)) {\n            (out[k] ??= []).push(v);\n          }\n        }\n        return out;\n      } catch (e) {\n        console.error(\"not an objectArray\", e);\n        return {};\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"sumBy\",\n    function <T extends Record<string, any>>(this: T[], key: string) {\n      try {\n        assertIsObjectArray(this);\n        assertIsArrayOfNumbers(this.map((item) => item[key]));\n\n        return this.reduce((acc, cur) => {\n          const v = parseFloat(String(cur[key]));\n          return acc + (Number.isNaN(v) ? 0 : v);\n        }, 0);\n      } catch (e) {\n        console.error(\"not an objectArray\", e);\n        return 0;\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"averageBy\",\n    function <T extends Record<string, any>>(this: T[], key: string) {\n      try {\n        assertIsObjectArray(this);\n        assertIsArrayOfNumbers(this.map((item) => item[key]));\n\n        let total = 0,\n          count = 0;\n        for (const cur of this) {\n          const v = parseFloat(String(cur[key]));\n          if (!Number.isNaN(v)) {\n            total += v;\n            count++;\n          }\n        }\n        return count ? total / count : 0;\n      } catch (e) {\n        console.error(\"not an objectArray\", e);\n        return 0;\n      }\n    },\n  ] as arrayOfObjectsMethod,\n  [\n    \"seededShuffle\",\n    function <T>(this: T[], seed: number) {\n      // Return a deterministic permutation index based on seed and total\n      // Linear Congruential Generator to produce pseudo-random indices\n      const thisClone = [...this];\n      const total = this.length;\n      const res: number[] = Array.from({ length: total }, (_, i) => i);\n      const rand = () => (seed = (1103515245 * seed + 12345) >>> 0) / 0xffffffff;\n      for (let i = total - 1; i > 0; i--) {\n        const j = Math.floor(rand() * (i + 1));\n        [res[i], res[j]] = [res[j], res[i]];\n      }\n      const shuffled = res.map((i) => thisClone[i]);\n      return shuffled;\n    },\n  ] as arrayMethod,\n  [\n    \"intersect\",\n    function <T>(this: T[], other: T[]) {\n      const set = new Set(other);\n      return this.filter((x) => set.has(x));\n    },\n  ] as arrayMethod,\n  [\n    \"difference\",\n    function <T>(this: T[], other: T[]) {\n      const set = new Set(other);\n      return this.filter((x) => !set.has(x));\n    },\n  ] as arrayMethod,\n  [\n    \"sum\",\n    function (this: any[]) {\n      try {\n        assertIsArrayOfNumbers(this);\n        let total = 0;\n        for (const v of this) {\n          const n = typeof v === \"number\" ? v : parseFloat(String(v));\n          if (!Number.isNaN(n)) total += n;\n          else if (v) total += 1; // count truthy when not a number\n        }\n        return total;\n      } catch (e) {\n        console.error(\"not an array of numbers\", e);\n        return 0;\n      }\n    },\n  ] as arrayMethod,\n  [\n    \"average\",\n    function (this: any[]) {\n      try {\n        assertIsArrayOfNumbers(this);\n        let total = 0;\n        let count = 0;\n        for (const v of this) {\n          const n = typeof v === \"number\" ? v : parseFloat(String(v));\n          if (!Number.isNaN(n)) {\n            total += n;\n            count++;\n          } else if (v) {\n            total += 1;\n            count++;\n          }\n        }\n        return count === 0 ? 0 : total / count;\n      } catch (e) {\n        console.error(\"not an array of numbers\", e);\n        return 0;\n      }\n    },\n  ],\n  [\n    \"validateEach\",\n    function <T>(this: (T | null)[], validatorFn: (item: T) => boolean) {\n      return this.map((item) => (item != null && validatorFn(item as T) ? item : null));\n    },\n  ],\n  [\n    \"clearNil\",\n    function <T>(this: (T | null | undefined)[]) {\n      return this.filter((x): x is T => x != null);\n    },\n  ],\n  [\n    \"indexOfHighestNumber\",\n    function (this: unknown[]) {\n      try {\n        assertIsArrayOfNumbers(this);\n        if (this.length === 0) return -1;\n        let highestIndex = 0;\n        for (let i = 1; i < this.length; i++) {\n          if (this[i] > this[highestIndex]) {\n            highestIndex = i;\n          }\n        }\n        return highestIndex;\n      } catch (e) {\n        console.error(\"not an array of numbers\", e);\n        return -1;\n      }\n    },\n  ] as arrayMethod,\n  [\n    \"indexOfLowestNumber\",\n    function (this: unknown[]) {\n      try {\n        assertIsArrayOfNumbers(this);\n        if (this.length === 0) return -1;\n        let lowestIndex = 0;\n        for (let i = 1; i < this.length; i++) {\n          if (this[i] < this[lowestIndex]) {\n            lowestIndex = i;\n          }\n        }\n        return lowestIndex;\n      } catch (e) {\n        console.error(\"not an array of numbers\", e);\n        return -1;\n      }\n    },\n  ] as arrayMethod,\n] as arrayMethod[];\n\nexport function extendArray() {\n  for (const method of arrayMethods) {\n    Object.defineProperty(Array.prototype, method[0], {\n      value: method[1],\n      writable: true,\n      configurable: true,\n      enumerable: false,\n    });\n  }\n  for (const method of arrayMethodsTS) {\n    Object.defineProperty(Array.prototype, method[0], {\n      value: method[1],\n      writable: true,\n      configurable: true,\n      enumerable: false,\n    });\n  }\n}\n","declare type numberMethod = [string, fn: (this: number, ...args: any[]) => any];\n\nexport const numberMethods: numberMethod[] = [\n  [\n    \"percentage\",\n    function (this: number, percent: number): number {\n      return (this * percent) / 100;\n    },\n  ] as numberMethod,\n  [\n    \"isEven\",\n    function (this: number): boolean {\n      return this % 2 === 0;\n    },\n  ] as numberMethod,\n  [\n    \"isOdd\",\n    function (this: number): boolean {\n      return this % 2 !== 0;\n    },\n  ] as numberMethod,\n  [\n    \"toFixedNumber\",\n    function (this: number, decimals = 2): number {\n      return parseFloat(this.toFixed(decimals));\n    },\n  ] as numberMethod,\n  [\n    \"between\",\n    function (this: number, min: number, max: number): boolean {\n      return this >= min && this <= max;\n    },\n  ] as numberMethod,\n  [\n    \"assertNrBetween\",\n    function (this: number, min: number = 0, max: number = Infinity): this is number {\n      return this >= min && this <= max;\n    },\n  ] as numberMethod,\n\n  [\n    \"clamp\",\n    function (this: number, min: number, max: number): number {\n      return Math.min(Math.max(this, min), max);\n    },\n  ] as numberMethod,\n  [\n    \"times\",\n    function (this: number, fn: (i: number) => void): void {\n      for (let i = 0; i < this; i++) fn(i);\n    },\n  ] as numberMethod,\n  [\n    \"toStringWithLeadingZeros\",\n    function (this: number, length: number): string {\n      return String(this).padStart(length, \"0\");\n    },\n  ] as numberMethod,\n  [\n    \"toTimeCode\",\n    function (this: number): string {\n      const totalSeconds = Math.floor(this);\n      const hours = Math.floor(totalSeconds / 3600);\n      const minutes = Math.floor((totalSeconds % 3600) / 60);\n      const seconds = totalSeconds % 60;\n      // gebruik je eigen toStringWithLeadingZeros\n      return `${hours}:${(minutes as any).toStringWithLeadingZeros(2)}:${(seconds as any).toStringWithLeadingZeros(2)}`;\n    },\n  ],\n  [\n    \"percentOf\",\n    function (this: number, total: number) {\n      return total === 0 ? 0 : (this / total) * 100;\n    },\n  ] as numberMethod,\n  [\n    \"ratioOf\",\n    function (this: number, total: number) {\n      return total === 0 ? 0 : this / total;\n    },\n  ] as numberMethod,\n  [\n    \"isInteger\",\n    function (this: number): this is number {\n      return Number.isInteger(this);\n    },\n  ] as numberMethod,\n  [\n    \"isFinite\",\n    function (this: number): this is number {\n      return Number.isFinite(this);\n    },\n  ] as numberMethod,\n  [\n    \"isSafeInteger\",\n    function (this: number): this is number {\n      return Number.isSafeInteger(this);\n    },\n  ] as numberMethod,\n  [\n    \"isPositive\",\n    function (this: number): this is number {\n      return this > 0;\n    },\n  ] as numberMethod,\n  [\n    \"isNegative\",\n    function (this: number): this is number {\n      return this < 0;\n    },\n  ] as numberMethod,\n  [\n    \"isNonNegative\",\n    function (this: number): this is number {\n      return this >= 0;\n    },\n  ] as numberMethod,\n  [\n    \"assertIsInteger\",\n    function (this: number): asserts this is number {\n      if (!Number.isInteger(this)) throw new Error(\"Not an integer\");\n    },\n  ] as numberMethod,\n  [\n    \"assertIsFinite\",\n    function (this: number): asserts this is number {\n      if (!Number.isFinite(this)) throw new Error(\"Not finite (NaN or Infinity)\");\n    },\n  ],\n];\n\nexport function extendNumber() {\n  for (const method of numberMethods) {\n    Object.defineProperty(Number.prototype, method[0], {\n      value: method[1],\n      writable: true,\n      configurable: true,\n    });\n  }\n}\n","// src/primitives/object.ts\ndeclare type ObjectMethod = [string, (this: Record<string, any>, ...args: any[]) => any];\ndeclare type ObjectMethodTS = ObjectMethod & [string, <T, U extends T>(this: T) => U | boolean];\nimport { Empty, NonEmpty, isEmpty, AssertError, assert, assertRoute } from \"./polyfills.js\";\n\nexport const objectMethodsTS: ObjectMethodTS[] = [\n  [\n    \"isObject\",\n    function (this: any): this is Record<string, any> | never {\n      return assertRoute(this, () => {\n        if (this !== null && typeof this === \"object\" && !Array.isArray(this)) {\n          return this;\n        }\n        throw new AssertError(\"Not an object\");\n      });\n    },\n  ],\n  [\n    \"assertHasKeys\",\n    function <K extends string>(this: Record<string, any>, ...keys: K[]): asserts this is Record<string, any> & Record<K, unknown> {\n      for (const key of keys) {\n        if (!(key in this)) {\n          throw new Error(`Missing required key: ${key}`);\n        }\n      }\n      // No return needed with asserts; TS narrows automatically after this call\n    },\n  ],\n  [\n    \"asType\", // Generic \"I know what this is\"\n\n    function <T>(this: Record<string, any>): T {\n      // You've done the validation above; now cast with confidence\n      return this as unknown as T;\n    },\n  ],\n  [\n    \"isNonEmty\",\n    function (this: Record<string, any>): this is Record<string, any> & Record<string, NonEmpty> {\n      return Object.values(this).every((value) => typeof value === \"string\" && value.trim().length > 0);\n    },\n    \"mapEmptyToFalseyKeyObje\",\n    function (this: Record<string, any>): Record<string, Boolean> {\n      return Object.fromEntries(Object.entries(this).map((a, b) => [a, isEmpty(b)]));\n    },\n    \"mapEmptyToFalseyValueArray\",\n    function (this: Record<string, any>): Record<string, Boolean> {\n      return Object.fromEntries(Object.entries(this).map((a, b) => [a, isEmpty(b)]));\n    },\n  ],\n] as ObjectMethodTS[];\n\nexport const objectMethods = [\n  [\n    \"sortKeys\",\n    function (this: Record<string, any>, sorterFn: ((a: string, b: string) => number) | null = null): Record<string, any> {\n      return Object.fromEntries(Object.entries(this).sort(([keyA], [keyB]) => (sorterFn ? sorterFn(keyA, keyB) : keyA.localeCompare(keyB))));\n    },\n  ] as ObjectMethod,\n  [\n    \"fill\",\n    function <T extends Record<string, any>, U extends Record<string, any>>(this: T, source: U): T & U {\n      for (const [key, value] of Object.entries(source)) {\n        if (!(key in this)) {\n          (this as any)[key] = value;\n        }\n      }\n      return this as T & U;\n    },\n  ] as ObjectMethod,\n  [\n    \"parseKeys\",\n    function (this: Record<string, any>, ...keys: string[]): Record<string, any> {\n      const obj = this.valueOf() as Record<string, any>;\n      const result: Record<string, any> = {};\n      for (const key of keys) {\n        try {\n          result[key] = JSON.parse(obj[key]);\n        } catch {\n          result[key] = obj[key];\n        }\n      }\n      return obj;\n    },\n  ] as ObjectMethod,\n  [\n    \"valuesMap\",\n    function (this: Record<string, any>, fn: (v: any, k: string) => any): Record<string, any> {\n      return Object.fromEntries(Object.entries(this).map(([k, v]) => [k, fn(v, k)]));\n    },\n  ] as ObjectMethod,\n  [\n    \"entriesMap\",\n    function (this: Record<string, any>, fn: ([key, value]: [string, any]) => [string, any]): Record<string, any> {\n      return Object.fromEntries(Object.entries(this).map(fn));\n    },\n  ] as ObjectMethod,\n  [\n    \"keysMap\",\n    function (this: Record<string, any>, fn: (k: string, v: any) => [string, any]): Record<string, any> {\n      return Object.fromEntries(Object.entries(this).map(([k, v]) => fn(k, v)));\n    },\n  ] as ObjectMethod,\n  [\n    \"equals\",\n    function (this: Record<string, any>, other: Record<string, any>) {\n      const keysA = Object.keys(this);\n      const keysB = Object.keys(other);\n      if (keysA.length !== keysB.length) return false;\n      return keysA.every((k) => keysB.includes(k) && typeof this[k] === typeof other[k]);\n    },\n  ] as ObjectMethod,\n  [\n    \"omit\",\n    function <T extends Record<string, any>>(this: T, ...keys: string[]) {\n      const out: Record<string, any> = {};\n      for (const k of Object.keys(this)) if (!keys.includes(k)) out[k] = this[k];\n      return out as T;\n    },\n  ] as ObjectMethod,\n  [\n    \"pick\",\n    function <T extends Record<string, any>>(this: T, ...keys: string[]) {\n      const out: Record<string, any> = {};\n      for (const k of keys) if (k in this) out[k] = this[k];\n      return out as T;\n    },\n  ] as ObjectMethod,\n  [\n    \"complement\",\n    function <T extends Record<string, any>>(this: T, src: Record<string, any>) {\n      const out: Record<string, any> = { ...this };\n      for (const k of Object.keys(src)) if (!(k in out)) out[k] = src[k];\n      return out as T;\n    },\n  ] as ObjectMethod,\n  [\n    \"clean\",\n    function <T extends Record<string, any>>(this: T) {\n      const out: Record<string, any> = {};\n      for (const [k, v] of Object.entries(this)) {\n        if (v === \"\" || v == null) continue; // remove empty, null, undefined\n        out[k] = v;\n      }\n      return out as T;\n    },\n  ] as ObjectMethod,\n  [\n    \"ensureSchema\",\n    function (this: Record<string, any>, schema: Record<string, any>, opts: { coerce?: boolean } = {}) {\n      const out: Record<string, any> = {};\n      for (const [k, def] of Object.entries(schema)) {\n        let v = this[k];\n        if (v == null) v = def;\n        if (opts.coerce) {\n          const type = typeof def;\n          if (type === \"number\") v = Number(v);\n          else if (type === \"boolean\") v = Boolean(v);\n          else if (type === \"string\") v = String(v);\n        }\n        out[k] = v;\n      }\n      return out;\n    },\n  ] as ObjectMethod,\n  [\n    \"filterEntries\",\n    function (this: Record<string, any>, predicate: (k: string, v: any) => boolean) {\n      const out: Record<string, any> = {};\n      for (const [k, v] of Object.entries(this)) if (predicate(k, v)) out[k] = v;\n      return out;\n    },\n  ] as ObjectMethod,\n  [\n    \"merge\",\n    function (this: Record<string, any>, other: Record<string, any>, opts: { arrayStrategy?: \"concat\" | \"replace\" | \"unique\" } = {}) {\n      const out: Record<string, any> = { ...this };\n      for (const [k, v] of Object.entries(other)) {\n        const cur = out[k];\n        if (Array.isArray(cur) && Array.isArray(v)) {\n          const strat = opts.arrayStrategy ?? \"concat\";\n          if (strat === \"replace\") out[k] = v;\n          else if (strat === \"unique\") out[k] = Array.from(new Set([...cur, ...v]));\n          else out[k] = [...cur, ...v];\n        } else if (cur && typeof cur === \"object\" && v && typeof v === \"object\") {\n          out[k] = { ...cur, ...v };\n        } else {\n          out[k] = v;\n        }\n      }\n      return out;\n    },\n  ],\n  [\n    \"fromTable\",\n    function (this: Record<string, any[]>) {\n      const keys = Object.keys(this);\n      const len = Math.max(0, ...keys.map((k) => this[k]?.length ?? 0));\n      const out: Record<string, any>[] = Array.from({ length: len }, () => ({}));\n      for (const k of keys) {\n        const col = this[k] || [];\n        for (let i = 0; i < len; i++) out[i][k] = col[i];\n      }\n      return out;\n    },\n  ] as ObjectMethod,\n] as ObjectMethod[];\n\nexport function extendObject() {\n  for (const method of objectMethods) {\n    Object.defineProperty(Object.prototype, method[0], {\n      value: method[1],\n      writable: true,\n      configurable: true,\n      enumerable: false,\n    });\n  }\n}\n","import { NonEmpty } from \"./polyfills.js\";\n\nimport { assert, assertRoute } from \"./polyfills.js\";\n\nfunction assertIs<T, U extends T>(value: T, guard: (v: T) => v is U, message: string = \"Type assertion failed\"): asserts value is U {\n  if (!guard(value)) {\n    throw new Error(message);\n  }\n}\n\nexport const stringMethods: [string, (...args: any[]) => any][] = [\n  [\n    \"assertNonEmptyString\",\n    function (this: string) {\n      try {\n        assertIs(this, (v): v is string => typeof v === \"string\");\n        return this as string & NonEmpty;\n      } catch {\n        return false;\n      }\n    },\n  ],\n\n  [\n    \"isNonEmty\",\n    function (this: string): this is string & NonEmpty {\n      return typeof this === \"string\" && this.trim().length > 0;\n    },\n  ],\n  [\n    \"changeExtension\",\n    function (this: string, ext: string) {\n      return this.replace(/\\.[0-9a-z]{1,5}$/i, \".\" + ext.replace(/\\W/, \"\").substring(0, 5));\n    },\n  ],\n  [\n    \"reverse\",\n    function (this: string) {\n      return this.split(\"\").reverse().join(\"\");\n    },\n  ],\n  [\n    \"toTitleCase\",\n    function (this: string) {\n      return this.replace(/\\w\\S*/g, (w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase());\n    },\n  ],\n  [\n    \"words\",\n    function (this: string) {\n      return this.match(/\\b\\w+\\b/g) || [];\n    },\n  ],\n  [\n    \"slashreverse\",\n    function (this: string, str: string) {\n      return str.replace(/[\\\\/]/g, (ch) => (ch === \"\\\\\" ? \"/\" : \"\\\\\"));\n    },\n  ],\n  [\n    \"slashwin\",\n    function (this: string) {\n      return this.replace(/[\\\\/]/g, \"\\\\\");\n    },\n  ],\n  [\n    \"slashlinux\",\n    function (this: string) {\n      return this.replace(/[\\\\/]/g, \"/\");\n    },\n  ],\n  [\n    \"strip\",\n    function (this: string) {\n      return this.toLowerCase()\n        .normalize(\"NFD\")\n        .replace(/[\\u0300-\\u036f]/g, \"\")\n        .replace(/\\s+/g, \"\")\n        .trim();\n    },\n  ],\n  [\n    \"containsAny\",\n    function (this: string, ...arr: string[]) {\n      return arr.some((sub) => this.includes(sub));\n    },\n  ],\n  [\n    \"toSlug\",\n    function (this: string) {\n      return this.toLowerCase()\n        .normalize(\"NFD\")\n        .replace(/[\\u0300-\\u036f]/g, \"\")\n        .replace(/\\s+/g, \"-\")\n        .replace(/[^\\w-]/g, \"\")\n        .replace(/--+/g, \"-\")\n        .replace(/^-+|-+$/g, \"\");\n    },\n  ],\n  [\n    \"stripCompare\",\n    function (this: string, other: string) {\n      const normalize = (str: string) =>\n        str\n          .toLowerCase()\n          .normalize(\"NFD\")\n          .replace(/[\\u0300-\\u036f]/g, \"\")\n          .replace(/[\\s_]/g, \"\")\n          .trim();\n      return normalize(this).includes(normalize(other));\n    },\n  ],\n  [\n    \"toWordCapitalized\",\n    function (this: string) {\n      return this ? this.charAt(0).toUpperCase() + this.slice(1).toLowerCase() : \"\";\n    },\n  ],\n  [\n    \"truncate\",\n    function (this: string, length: number, suffix = \"…\") {\n      return this.length > length ? this.slice(0, length) + suffix : this.toString();\n    },\n  ],\n  [\n    \"isJson\",\n    function (this: string) {\n      try {\n        JSON.parse(this);\n        return true;\n      } catch {\n        return false;\n      }\n    },\n  ],\n  [\n    \"toCamelCase\",\n    function (this: string) {\n      return this.replace(/([-_][a-z])/gi, ($1) => $1.toUpperCase().replace(\"-\", \"\").replace(\"_\", \"\"));\n    },\n  ],\n  [\n    \"safeParseJson\",\n    function (this: string) {\n      try {\n        return JSON.parse(this);\n      } catch {\n        return this.valueOf();\n      }\n    },\n  ],\n  [\n    \"nullParseJson\",\n    function (this: string) {\n      if (!this.trim()) return null;\n      try {\n        return JSON.parse(this);\n      } catch {\n        return null;\n      }\n    },\n  ],\n  [\n    \"filenameCompare\",\n    function (this: string, otherPath: string) {\n      const normalize = (p: string) => p.replace(/\\\\/g, \"/\").split(\"/\").pop()?.toLowerCase() ?? \"\";\n      return normalize(this) === normalize(otherPath);\n    },\n  ],\n  [\n    \"substringFrom\",\n    function (this: string, startStr?: string, stopStr?: string) {\n      const s = String(this);\n      if (!startStr) return s;\n      const i = s.indexOf(startStr);\n      if (i === -1) return \"\";\n      const from = i + startStr.length;\n      if (!stopStr) return s.slice(from);\n      const j = s.indexOf(stopStr, from);\n      return j === -1 ? s.slice(from) : s.slice(from, j);\n    },\n  ],\n  [\n    \"escapeHTML\",\n    function (this: string) {\n      return this.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\\\"/g, \"&quot;\").replace(/'/g, \"&#39;\");\n    },\n  ],\n  [\n    \"unescapeHTML\",\n    function (this: string) {\n      return this.replace(/&lt;/g, \"<\")\n        .replace(/&gt;/g, \">\")\n        .replace(/&quot;/g, '\"')\n        .replace(/&#39;/g, \"'\")\n        .replace(/&amp;/g, \"&\");\n    },\n  ],\n  [\n    \"humanize\",\n    function (this: string) {\n      const s = this.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\") // break camelCase\n        .replace(/[\\-_]+/g, \" \") // dash/underscore to space\n        .replace(/\\s{2,}/g, \" \") // trim double spaces\n        .trim();\n      return s.replace(/(^\\w|[.!?]\\s+\\w)/g, (m) => m.toUpperCase()); // capitalize sentences\n    },\n  ],\n  [\n    \"underscore\",\n    function (this: string) {\n      return this.replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n        .replace(/[\\s\\-]+/g, \"_\")\n        .toLowerCase();\n    },\n  ],\n  [\n    \"countOccurrence\",\n    function (this: string, str2: string, caseSens: boolean = true) {\n      const src = caseSens ? this : this.toLowerCase();\n      const needle = caseSens ? str2 : str2.toLowerCase();\n      if (!needle) return 0;\n      let i = 0,\n        pos = 0;\n      while ((pos = src.indexOf(needle, pos)) !== -1) {\n        i++;\n        pos += needle.length;\n      }\n      return i;\n    },\n  ],\n  [\n    \"isNumber\",\n    function (this: string): this is string {\n      return /^\\s*[+-]?(?:\\d+\\.?\\d*|\\.\\d+)\\s*$/.test(this);\n    },\n  ],\n  [\n    \"isFloat\",\n    function (this: string): this is string {\n      return /^\\s*[+-]?\\d*\\.\\d+\\s*$/.test(this) && !Number.isNaN(parseFloat(this));\n    },\n  ],\n  [\n    \"isAlphaNumeric\",\n    function (this: string): this is string {\n      return /^[a-z0-9]+$/i.test(this);\n    },\n  ],\n  [\n    \"isLower\",\n    function (this: string) {\n      return this === this.toLowerCase() && /[a-z]/.test(this);\n    },\n  ],\n  [\n    \"isUpper\",\n    function (this: string) {\n      return this === this.toUpperCase() && /[A-Z]/.test(this);\n    },\n  ],\n  [\n    \"hashed\",\n    function (this: string, truncate?: number) {\n      // Simple non-cryptographic hash (djb2-like)\n      let h = 5381;\n      for (let i = 0; i < this.length; i++) h = (h << 5) + h + this.charCodeAt(i);\n      let out = (h >>> 0).toString(16);\n      return typeof truncate === \"number\" ? out.slice(0, Math.max(0, truncate)) : out;\n    },\n  ],\n  [\n    \"replaceLast\",\n    function (this: string, search: string | RegExp, replacement: string) {\n      const s = String(this);\n      if (search instanceof RegExp) {\n        const m = s.match(search);\n        if (!m) return s;\n        const last = m[m.length - 1];\n        const idx = s.lastIndexOf(last);\n        return idx === -1 ? s : s.slice(0, idx) + replacement + s.slice(idx + last.length);\n      } else {\n        const idx = s.lastIndexOf(search);\n        return idx === -1 ? s : s.slice(0, idx) + replacement + s.slice(idx + search.length);\n      }\n    },\n  ],\n  [\n    \"latinise\",\n    function (this: string) {\n      return this.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n    },\n  ],\n  [\n    \"ellipsis\",\n    function (this: string, total: number) {\n      if (total <= 3) return this.slice(0, total);\n      return this.length > total ? this.slice(0, total - 3) + \"...\" : this;\n    },\n  ],\n  [\n    \"toNumber\",\n    function (this: string) {\n      const cleaned = this.replace(/[^0-9+\\-\\.eE]/g, \" \");\n      const match = cleaned.match(/[+\\-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+\\-]?\\d+)?/);\n      return match ? Number(match[0]) : NaN;\n    },\n  ],\n  [\n    \"toBoolean\",\n    function (this: string) {\n      const s = this.trim().toLowerCase();\n      if ([\"1\", \"true\", \"yes\", \"on\", \"y\"].includes(s)) return true;\n      if ([\"0\", \"false\", \"no\", \"off\", \"n\"].includes(s)) return false;\n      return Boolean(s);\n    },\n  ],\n];\nexport function extendString() {\n  for (const method of stringMethods) {\n    Object.defineProperty(String.prototype, method[0], {\n      value: method[1],\n      writable: true,\n      configurable: true,\n    });\n  }\n}\n","// src/primitives/math.ts\nexport const mathUtilsObj: MathUtils = {\n  randomRangeFloat(min: number, max: number) {\n    return Math.random() * (max - min) + min;\n  },\n  randomRangeInt(min: number, max: number) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  },\n  lerp(min: number, max: number, t: number) {\n    return min + (max - min) * t;\n  },\n  clamp(value: number, min: number, max: number) {\n    return Math.min(Math.max(value, min), max);\n  },\n  degToRad(deg: number) {\n    return deg * (Math.PI / 180);\n  },\n  radToDeg(rad: number) {\n    return rad * (180 / Math.PI);\n  },\n  distance(x1: number, y1: number, x2: number, y2: number) {\n    return Math.hypot(x2 - x1, y2 - y1);\n  },\n  roundTo(value: number, decimals = 2) {\n    return Math.round(value * 10 ** decimals) / 10 ** decimals;\n  },\n  isPowerOfTwo(value: number) {\n    return value > 0 && (value & (value - 1)) === 0;\n  },\n  nextPowerOfTwo(value: number) {\n    return 2 ** Math.ceil(Math.log2(value));\n  },\n  normalize(value: number, min: number, max: number) {\n    return (value - min) / (max - min);\n  },\n  smoothStep(edge0: number, edge1: number, x: number) {\n    const t = Math.max(0, Math.min(1, (x - edge0) / (edge1 - edge0)));\n    return t * t * (3 - 2 * t);\n  },\n  mix(x: number, y: number, a: number) {\n    return x * (1 - a) + y * a;\n  },\n  mixColors(hex1: string, hex2: string, mixPerc: number) {\n    const cleanHex = (h: string) => h.replace(\"#\", \"\").padStart(6, \"0\");\n    const [h1, h2] = [cleanHex(hex1), cleanHex(hex2)];\n    const [r1, g1, b1] = [parseInt(h1.slice(0, 2), 16), parseInt(h1.slice(2, 4), 16), parseInt(h1.slice(4, 6), 16)];\n    const [r2, g2, b2] = [parseInt(h2.slice(0, 2), 16), parseInt(h2.slice(2, 4), 16), parseInt(h2.slice(4, 6), 16)];\n    const r = Math.round(this.mix(r1, r2, mixPerc));\n    const g = Math.round(this.mix(g1, g2, mixPerc));\n    const b = Math.round(this.mix(b1, b2, mixPerc));\n    const toHex = (n: number) => n.toString(16).padStart(2, \"0\");\n    return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n  },\n};\n\nexport function extendMathUtils() {\n  if (!(globalThis as any).mathUtils) {\n    (globalThis as any).mathUtils = mathUtilsObj;\n  }\n  if (typeof (globalThis as any).window !== \"undefined\") {\n    Object.assign((globalThis as any).window, { mathUtils: mathUtilsObj } as { mathUtils: typeof mathUtilsObj });\n  }\n}\n","/* eslint-disable no-redeclare */\n// primitivetools.ts\n\nimport { objectMethods } from \"./object.js\";\nimport { stringMethods } from \"./string.js\";\nimport { numberMethods } from \"./number.js\";\nimport { arrayMethods } from \"./array.js\";\nimport { mathUtilsObj } from \"./math.js\";\nimport type { NonEmpty } from \"./polyfills.js\";\n\n// Add it to pkit\n\n// ---------- TYPES ----------\n/* eslint-disable no-redeclare */\n// primitive-tools.ts\n// ---------- TYPES ----------\n\nexport interface PrimeString {\n  /** Replace the file extension with `ext`. */\n  changeExtension(ext: string): string;\n  /** Return the string reversed. */\n  reverse(): string;\n  /** Convert the string to Title Case. */\n  toTitleCase(): string;\n  /** Split string into words. */\n  words(): string[];\n  /** Reverse slashes relative to `str`. */\n  slashreverse(str: string): string;\n  /** Convert slashes to Windows style. */\n  slashwin(): string;\n  /** Convert slashes to POSIX style. */\n  slashlinux(): string;\n  /** Trim whitespace from both ends. */\n  strip(): string;\n  /** Return true if contains any of the provided substrings. */\n  containsAny(...arr: string[]): boolean;\n  /** Create a URL/file-system safe slug. */\n  toSlug(): string;\n  /** Compare strings after stripping/normalizing. */\n  stripCompare(other: string): boolean;\n  /** Capitalize each word in the string. */\n  toWordCapitalized(): string;\n  /** Truncate to `length`, appending optional `suffix`. */\n  truncate(length: number, suffix?: string): string;\n  /** Return true if string contains valid JSON. */\n  isJson(): boolean;\n  /** Convert string to camelCase. */\n  toCamelCase(): string;\n  /** Parse JSON and return value or original on failure. */\n  safeParseJson(): any;\n  /** Parse JSON and return value or null on failure. */\n  nullParseJson(): any | null;\n  /** Compare two paths by filename only. */\n  filenameCompare(otherPath: string): boolean;\n  /** Return substring between optional start and stop markers. */\n  substringFrom(startStr?: string, stopStr?: string): string;\n  /** Escape HTML special characters. */\n  escapeHTML(): string;\n  /** Unescape HTML entities to characters. */\n  unescapeHTML(): string;\n  /** Humanize identifiers: split camelCase, replace dashes/underscores, capitalize sentences. */\n  humanize(): string;\n  /** Convert to underscore_case. */\n  underscore(): string;\n  /** True if trimmed string is empty. */\n  isEmpty(): boolean;\n  /** Count occurrences of substring; case sensitive by default. */\n  countOccurrence(str2: string, caseSens?: boolean): number;\n  /** True if string represents a number. */\n  isNumber(): boolean;\n  /** True if string represents a float. */\n  isFloat(): boolean;\n  /** True if string is alphanumeric. */\n  isAlphaNumeric(): boolean;\n  /** True if string is all lowercase (with letters present). */\n  isLower(): boolean;\n  /** True if string is all uppercase (with letters present). */\n  isUpper(): boolean;\n  /** Simple non-crypto hash (hex); optional truncate. */\n  hashed(truncate?: number): string;\n  /** Replace the last occurrence of search with replacement. */\n  replaceLast(search: string | RegExp, replacement: string): string;\n  /** Remove diacritics (latinize). */\n  latinise(): string;\n  /** Truncate with \"...\" to total width. */\n  ellipsis(total: number): string;\n  /** Extract a numeric value from the string. */\n  toNumber(): number;\n  /** Parse boolean from common truthy/falsey words. */\n  toBoolean(): boolean;\n  /** Assert this is a non-empty string; returns NonEmpty or false. */\n  assertNonEmptyString(): (string & NonEmpty) | false;\n  /** True if string is non-empty after trimming (type guard). */\n  isNonEmty(): this is string & NonEmpty;\n}\nexport interface PrimeNumber {\n  /** Assert number is between `min` and `max` (type guard style). */\n  assertNrBetween(min?: number, max?: number): this is number;\n  /** True if integer. */\n  isInteger(): this is number;\n  /** True if finite (not NaN/Infinity). */\n  isFinite(): this is number;\n  /** True if safe integer. */\n  isSafeInteger(): this is number;\n  /** True if > 0. */\n  isPositive(): this is number;\n  /** True if < 0. */\n  isNegative(): this is number;\n  /** True if >= 0. */\n  isNonNegative(): this is number;\n  /** Assert integer (throws on failure). */\n  assertIsInteger(): asserts this is number;\n  /** Assert finite (throws on failure). */\n  assertIsFinite(): asserts this is number;\n  /** Like `toFixed` but returns a number. */\n  toFixedNumber(decimals?: number): number;\n  /** Check if number is between min and max (inclusive). */\n  between(min: number, max: number): boolean;\n  /** Clamp the number between min and max. */\n  clamp(min: number, max: number): number;\n  /** Run `fn` `n` times with index. */\n  times(fn: (i: number) => void): void;\n  /** Return string with leading zeros to reach `length`. */\n  toStringWithLeadingZeros(length: number): string;\n  /** Convert seconds/number to a timecode string. */\n  toTimeCode(): string;\n  /** Calculate what percent this number is of total. */\n  percentOf(total: number): number;\n  /** Calculate what ratio this number is of total. */\n  ratioOf(total: number): number;\n}\n\nexport interface PrimeArray<T> {\n  /** Return first element or first n elements. */\n  first(n?: number): T | T[];\n  /** Return last element or last n elements. */\n  last(n?: number): T | T[];\n  /** Find an item where `key` equals `value`. */\n  findByKey<K extends keyof T & string>(key: K, value: any): T | null;\n  /** Group items using a mapping function. */\n  groupBy(fn: (item: T) => string): Record<string, T[]>;\n  /** Group items by a property key. */\n  groupBy<K extends keyof T & string>(key: K): Record<string, T[]>;\n  /** Sum numeric values at the given key. */\n  sumByKey<K extends keyof T & string>(key: K): number;\n  /** Parse item string fields where applicable. */\n  autoParseKeys(): T[];\n  /** Return array with duplicates removed. */\n  unique(): T[];\n  /** Return a shuffled copy of the array. */\n  shuffle(): T[];\n  /** Return item with highest value for key or null. */\n  highestByKey<K extends keyof T & string>(key: K): T | null;\n  /** Return item with lowest value for key or null. */\n  lowestByKey<K extends keyof T & string>(key: K): T | null;\n  /** Sort array by key; ascending by default. */\n  sortByKey<K extends keyof T & string>(key: K, ascending?: boolean): T[];\n  /** Sort array by key name (string) with optional order. */\n  sortByKeyName<K extends keyof T & string>(key: K, ascending?: boolean): T[];\n  /** Map array to values of the given key. */\n  mapByKey<K extends keyof T & string>(key: K): Array<T[K]>;\n  /** Sum numeric values at key across objects. */\n  sumKey(key: string): number;\n  /** Average numeric values at key across objects. */\n  averageKey(key: string): number;\n  /** Filter by a key using predicate. */\n  filterKey(key: string, pred: (v: any) => boolean): T[];\n  /** Unique objects by key or projection function. */\n  distinct(keyOrFn: string | ((x: T) => any)): T[];\n  /** Group-reduce objects by key or projection. */\n  aggregate<R>(keyOrFn: string | ((x: T) => any), reducer: (acc: R, cur: T) => R, init: R): Record<string, R>;\n  /** Sum numeric values by key (string). */\n  sumBy(key: string): number;\n  /** Average numeric values by key (string). */\n  averageBy(key: string): number;\n  /** Sum all numeric values in the array. */\n  sum(): number;\n  /** Average all numeric values in the array. */\n  average(): number;\n  /** Return index of the highest number in the array. */\n  indexOfHighestNumber(): number;\n  /** Return index of the lowest number in the array. */\n  indexOfLowestNumber(): number;\n  /** Return intersection with another array (items present in both). */\n  intersect(other: T[]): T[];\n  /** Return difference with another array (items present only in this). */\n  difference(other: T[]): T[];\n  /** Validate each item; replace invalids with null and keep valid items. */\n  validateEach(validatorFn: (item: T) => boolean): (T | null)[];\n  /** Remove null and undefined values, returning a narrowed array. */\n  clearNil(): T[];\n  /** Group-reduce objects by key or projection. */\n  toTable(): Record<string, any[]>;\n}\n\n// ---------- OVERLOADS VOOR pkit(...) ----------\n\n// ---------- TYPE VOOR HET CALLABLE PAKKET pkit ----------\n\nexport interface Pkit {\n  (value: undefined): null;\n  (value: null): boolean;\n  (value: string): PrimeString;\n  (value: number): PrimeNumber;\n  <T>(value: T[]): PrimeArray<T>;\n  (value: Record<string, any>): PrimeObject;\n  <T>(value: T): { unwrap(): T };\n\n  // extra namespaces:\n  math: MathUtils;\n  path: PathShim;\n}\n\n// losse implementatie-functie\nconst pkitImpl = (value: any): any => {\n  if (typeof value === \"string\") return createPrimeString(value);\n  if (typeof value === \"number\") return createPrimeNumber(value);\n  if (Array.isArray(value)) return createPrimeArray(value);\n  if (value && typeof value === \"object\") return createPrimeObject(value);\n  if (value === null) return false;\n  if (typeof value === \"undefined\") return null;\n  if (typeof value === \"function\") return pkitImpl(value());\n};\n// ---------- IMPLEMENTATIES ----------\n\n// STRING IMPLEMENTATIE (op basis van jouw eerdere methods)\n\nfunction createPrimeString(value: string): PrimeString {\n  let current = value;\n\n  return Object.fromEntries(\n    stringMethods.map(([name, fn]) => {\n      return [\n        name,\n        function (...args: any[]) {\n          current = fn.apply(current, args);\n          return current;\n        },\n      ];\n    })\n  ) as unknown as PrimeString;\n}\n\n// NUMBER IMPLEMENTATION\n\nfunction createPrimeNumber(initial: number): PrimeNumber {\n  let current = initial;\n  let result: number | void | string | boolean;\n  return Object.fromEntries(\n    numberMethods.map(([name, fn]) => {\n      return [\n        name,\n        function (...args: any[]): number | void | string | boolean {\n          result = fn.apply(current, args);\n\n          return result;\n        },\n      ];\n    })\n  ) as unknown as PrimeNumber;\n}\n\n// ARRAY IMPLEMENTATION\n\nfunction createPrimeArray<T extends any[]>(initial: T): PrimeArray<T> {\n  let current = initial;\n  let result: any = null;\n  return Object.fromEntries(\n    arrayMethods.map(([name, fn]) => {\n      return [\n        name,\n        function (...args: T[]) {\n          result = fn.apply(current, args);\n          return result;\n        },\n      ];\n    })\n  ) as unknown as PrimeArray<T>;\n}\n\nexport interface PrimeObject {\n  /** Type guard: is a plain object (not array). */\n  isObject(): this is Record<string, any>;\n  /** Assert object has provided keys. */\n  assertHasKeys<K extends string>(...keys: K[]): asserts this is Record<string, any> & Record<K, unknown>;\n  /** Cast after validation. */\n  asType<T>(): T;\n  /** True if all values are non-empty strings. */\n  isNonEmty(): this is Record<string, any> & Record<string, NonEmpty>;\n  /** Map: keys -> boolean flag if value is empty. */\n  mapEmptyToFalseyKeyObje(): Record<string, Boolean>;\n  /** Map: values -> boolean flag if value is empty. */\n  mapEmptyToFalseyValueArray(): Record<string, Boolean>;\n  /** Return a new object with keys sorted by `sorterFn`. */\n  sortKeys(sorterFn?: ((a: string, b: string) => number) | null): Record<string, any>;\n  /** Shallow structural equality by keys and types. */\n  equals(other: Record<string, any>): boolean;\n  /** Return object without specified keys. */\n  omit(...keys: string[]): Record<string, any>;\n  /** Return object containing only specified keys. */\n  pick(...keys: string[]): Record<string, any>;\n  /** Fill missing keys from source without overwriting existing. */\n  complement(src: Record<string, any>): Record<string, any>;\n  /** Remove empty string/null/undefined entries. */\n  clean(): Record<string, any>;\n  /** Ensure keys conform to schema; optional type coercion. */\n  ensureSchema(schema: Record<string, any>, opts?: { coerce?: boolean }): Record<string, any>;\n  /** Filter object entries by predicate. */\n  filterEntries(predicate: (k: string, v: any) => boolean): Record<string, any>;\n  /** Merge with another object; control array merge strategy. */\n  merge(other: Record<string, any>, opts?: { arrayStrategy?: \"concat\" | \"replace\" | \"unique\" }): Record<string, any>;\n  /** Return a new object with keys sorted by `sorterFn`. */\n  sortKeys(sorterFn?: ((a: string, b: string) => number) | null): Record<string, any>;\n  /** Shallow structural equality by keys and types. */\n  equals(other: Record<string, any>): boolean;\n  /** Return object without specified keys. */\n  omit(...keys: string[]): Record<string, any>;\n  /** Return object containing only specified keys. */\n  pick(...keys: string[]): Record<string, any>;\n  /** Fill missing keys from source without overwriting existing. */\n  complement(src: Record<string, any>): Record<string, any>;\n  /** Remove empty string/null/undefined entries. */\n  clean(): Record<string, any>;\n  /** Ensure keys conform to schema; optional type coercion. */\n  ensureSchema(schema: Record<string, any>, opts?: { coerce?: boolean }): Record<string, any>;\n  /** Filter object entries by predicate. */\n  filterEntries(predicate: (k: string, v: any) => boolean): Record<string, any>;\n  /** Merge with another object; control array merge strategy. */\n  merge(other: Record<string, any>, opts?: { arrayStrategy?: \"concat\" | \"replace\" | \"unique\" }): Record<string, any>;\n}\n\nfunction createPrimeObject<T extends Record<string, any>>(initial: T): PrimeObject {\n  let current = initial as any;\n\n  return Object.fromEntries(\n    objectMethods.map(([name, fn]) => {\n      return [\n        name,\n        function (...args: any[]) {\n          current = fn.apply(current, args);\n          return current;\n        },\n      ];\n    })\n  ) as unknown as PrimeObject;\n}\n\n//PATH KIT SIMULATES NODEJS' PATH FUNCTIONS\n\nconst normalize = (p: string) => {\n  return p.replace(/\\\\/g, \"/\").replace(/\\/{2,}/g, \"/\");\n};\nconst sep = (globalThis as any).process ? ((globalThis as any).process.platform === \"win32\" ? \"\\\\\" : \"/\") : globalThis.window?.navigator.platform.startsWith(\"Win\") ? \"\\\\\" : \"/\";\n\nconst pathkit: PathShim = {\n  sep,\n  normalize,\n  join: (...parts: string[]) => normalize(parts.filter(Boolean).join(sep)),\n  basename: (p: string) => normalize(p).split(\"/\").pop() || \"\",\n  dirname: (p: string) => {\n    const parts = normalize(p).split(\"/\");\n    parts.pop();\n    return parts.length ? parts.join(\"/\") : \".\";\n  },\n  extname: (p: string) => {\n    const b = normalize(p).split(\"/\").pop() || \"\";\n    const i = b.lastIndexOf(\".\");\n    return i > 0 ? b.slice(i) : \"\";\n  },\n};\n\nconst pkit = pkitImpl as Pkit;\npkit.math = mathUtilsObj;\npkit.path = pathkit;\n\n// eventueel named exports laten bestaan (handig als je ze los wilt importeren)\nexport { mathUtilsObj as mathkit, pathkit };\n// en dit is nu je default:\nexport default pkit;\n","// src/pathShim.ts\nfunction createBrowserPathShim() {\n  const normalize = (p: string) => {\n    return p.replace(/\\\\/g, \"/\").replace(/\\/{2,}/g, \"/\");\n  };\n  const sep = \"/\";\n\n  return {\n    sep,\n    normalize,\n    join: (...parts: string[]) => normalize(parts.filter(Boolean).join(sep)),\n    basename: (p: string) => normalize(p).split(\"/\").pop() || \"\",\n    dirname: (p: string) => {\n      const parts = normalize(p).split(\"/\");\n      parts.pop();\n      return parts.length ? parts.join(\"/\") : \".\";\n    },\n    extname: (p: string) => {\n      const b = normalize(p).split(\"/\").pop() || \"\";\n      const i = b.lastIndexOf(\".\");\n      return i > 0 ? b.slice(i) : \"\";\n    },\n  };\n}\nexport function extendPath() {\n  // Prefer attaching the shim to `globalThis.path` so it works in\n  // browsers, workers and other JS environments (not only when\n  // `window` exists). Do nothing if `path` is already defined.\n  if (typeof globalThis === \"undefined\") return;\n  if ((globalThis as any).path) return;\n  (globalThis as any).path = createBrowserPathShim();\n}\n","import { extendArray } from \"./array.js\";\nimport { extendNumber } from \"./number.js\";\nimport { extendObject } from \"./object.js\";\nimport { extendString } from \"./string.js\";\nimport pkit from \"./primitivetools.js\";\nexport type { Pkit, PrimeString, PrimeNumber, PrimeArray, PrimeObject } from \"./primitivetools.js\";\nimport { extendPath } from \"./pathShim.js\";\nimport { extendMathUtils } from \"./math.js\";\n// --- apply all prototypes ---\nexport function applyPrimitives() {\n  extendString();\n  extendArray();\n  extendNumber();\n  extendObject();\n  extendPath();\n  extendMathUtils();\n}\nexport { applyPrimitives as applyPrimitivesGlobally };\nexport { pkit };\n"],"mappings":"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","names":["src_exports","__export","applyPrimitives","primitivetools_default","__toCommonJS","assertIsObjectArray","arr","item","assertIsArrayOfStrings","x","assertIsArrayOfNumbers","arrayMethodsTS","pred","arrayMethods","n","key","value","fn","acc","obj","i","j","max","e","min","ascending","a","b","aVal","bVal","cur","total","count","v","keyOrFn","seen","getKey","out","k","reducer","init","groups","seed","thisClone","res","_","rand","other","set","validatorFn","highestIndex","lowestIndex","extendArray","method","numberMethods","percent","decimals","min","max","fn","i","length","totalSeconds","hours","minutes","seconds","total","extendNumber","method","objectMethods","sorterFn","keyA","keyB","source","key","value","keys","obj","result","fn","k","v","other","keysA","keysB","out","src","schema","opts","def","type","predicate","cur","strat","len","col","extendObject","method","assertIs","value","guard","message","stringMethods","v","ext","w","str","ch","arr","sub","other","normalize","length","suffix","$1","otherPath","p","startStr","stopStr","s","i","from","j","m","str2","caseSens","src","needle","pos","truncate","h","out","search","replacement","last","idx","total","match","extendString","method","mathUtilsObj","min","max","t","value","deg","rad","x1","y1","x2","y2","decimals","edge0","edge1","x","y","a","hex1","hex2","mixPerc","cleanHex","h","h1","h2","r1","g1","b1","r2","g2","b2","r","g","b","toHex","n","extendMathUtils","pkitImpl","value","createPrimeString","createPrimeNumber","createPrimeArray","createPrimeObject","current","stringMethods","name","fn","args","initial","result","numberMethods","arrayMethods","objectMethods","normalize","p","sep","pathkit","parts","b","i","pkit","mathUtilsObj","primitivetools_default","pkit","createBrowserPathShim","normalize","p","parts","b","i","extendPath","applyPrimitives","extendString","extendArray","extendNumber","extendObject","extendPath","extendMathUtils"]}