{"version":3,"file":"utils.mjs","sources":["../../src/utils.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n  getDeps: () => [...TDeps],\n  fn: (...args: NoInfer<[...TDeps]>) => TResult,\n  opts: {\n    key: false | string\n    debug?: () => any\n    onChange?: (result: TResult) => void\n    initialDeps?: TDeps\n  },\n) {\n  let deps = opts.initialDeps ?? []\n  let result: TResult | undefined\n\n  return (): TResult => {\n    let depTime: number\n    if (opts.key && opts.debug?.()) depTime = Date.now()\n\n    const newDeps = getDeps()\n\n    const depsChanged =\n      newDeps.length !== deps.length ||\n      newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n    if (!depsChanged) {\n      return result!\n    }\n\n    deps = newDeps\n\n    let resultTime: number\n    if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n    result = fn(...newDeps)\n\n    if (opts.key && opts.debug?.()) {\n      const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n      const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n      const resultFpsPercentage = resultEndTime / 16\n\n      const pad = (str: number | string, num: number) => {\n        str = String(str)\n        while (str.length < num) {\n          str = ' ' + str\n        }\n        return str\n      }\n\n      console.info(\n        `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n        `\n            font-size: .6rem;\n            font-weight: bold;\n            color: hsl(${Math.max(\n              0,\n              Math.min(120 - 120 * resultFpsPercentage, 120),\n            )}deg 100% 31%);`,\n        opts?.key,\n      )\n    }\n\n    opts?.onChange?.(result)\n\n    return result!\n  }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n  if (value === undefined) {\n    throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n  } else {\n    return value\n  }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n"],"names":["memo","getDeps","fn","opts","_opts$initialDeps","deps","initialDeps","result","depTime","key","debug","Date","now","newDeps","depsChanged","length","some","dep","index","resultTime","apply","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs"],"mappings":"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"}