{"version":3,"file":"utils.mjs","sources":["../../../src/vanilla/utils.ts"],"sourcesContent":["import { QueryInfoOptions } from './queryInfo'\nimport { DataUpdateFunction, Updater } from './typeUtils'\n\nexport * from './utils/generateKey'\n\nexport const getFullKey = (key: string, variables?: any) => {\n  return (isUndefined(variables) ? [key] : [key, variables]) as [string, any]\n}\n\nexport const hashKeyByOptions = (\n  fullKey: [string, any],\n  options: { queryKeyHashFn?: (key: [string, any]) => string }\n): string => {\n  return (options.queryKeyHashFn || hashKey)(fullKey)\n}\n\nexport const hashKey = (fullKey: [string, any]): string => {\n  return JSON.stringify(fullKey, (_, val) =>\n    isPlainObject(val)\n      ? Object.keys(val)\n          .sort()\n          .reduce((result, key) => {\n            result[key] = val[key]\n            return result\n          }, {} as any)\n      : val\n  )\n}\n\nconst hasObjectPrototype = (o: any): boolean => {\n  return Object.prototype.toString.call(o) === '[object Object]'\n}\n\n// Copied from: https://github.com/jonschlinkert/is-plain-object\nexport const isPlainObject = (o: any): boolean => {\n  if (!hasObjectPrototype(o)) {\n    return false\n  }\n\n  // If has modified constructor\n  const ctor = o.constructor\n  if (isUndefined(ctor)) {\n    return true\n  }\n\n  // If has modified prototype\n  const prot = ctor.prototype\n  if (!hasObjectPrototype(prot)) {\n    return false\n  }\n\n  // If constructor does not have an Object-specific method\n  if (!prot.hasOwnProperty('isPrototypeOf')) {\n    return false\n  }\n\n  // Most likely a plain Object\n  return true\n}\n\n/**\n * Checks if key `b` partially matches with key `a`.\n */\nexport const partialMatchKey = (a: any, b: any): boolean => {\n  if (a === b) {\n    return true\n  }\n\n  if (typeof a !== typeof b) {\n    return false\n  }\n\n  if (a && b && typeof a === 'object' && typeof b === 'object') {\n    return !Object.keys(b).some(key => !partialMatchKey(a[key], b[key]))\n  }\n\n  return false\n}\n\nexport const isValidTimeout = (value: unknown): value is number => {\n  return isNumber(value) && value >= 0 && value !== Infinity\n}\n\nexport const sleep = (timeout: number): Promise<void> => {\n  return new Promise(resolve => {\n    setTimeout(resolve, timeout)\n  })\n}\n\nexport const isPlainArray = (value: unknown) => {\n  return Array.isArray(value) && value.length === Object.keys(value).length\n}\n\n/**\n * This function returns `a` if `b` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between JSON values for example.\n */\nexport function replaceEqualDeep<T>(a: unknown, b: T): T\nexport function replaceEqualDeep(a: any, b: any): any {\n  if (a === b) {\n    return a\n  }\n\n  const array = isPlainArray(a) && isPlainArray(b)\n\n  if (array || (isPlainObject(a) && isPlainObject(b))) {\n    const aSize = array ? a.length : Object.keys(a).length\n    const bItems = array ? b : Object.keys(b)\n    const bSize = bItems.length\n    const copy: any = array ? [] : {}\n\n    let equalItems = 0\n\n    for (let i = 0; i < bSize; i++) {\n      const key = array ? i : bItems[i]\n      copy[key] = replaceEqualDeep(a[key], b[key])\n      if (copy[key] === a[key]) {\n        equalItems++\n      }\n    }\n\n    return aSize === bSize && equalItems === aSize ? a : copy\n  }\n\n  return b\n}\n\nexport const replaceData = <\n  TData,\n  TOptions extends QueryInfoOptions<any, any, any>\n>(\n  prevData: TData | undefined,\n  data: TData,\n  options: TOptions\n): TData => {\n  if (isFunction(options.structuralSharing)) {\n    return options.structuralSharing(prevData, data)\n  } else if (options.structuralSharing !== false) {\n    // Structurally share data between prev and new data if needed\n    return replaceEqualDeep(prevData, data)\n  }\n  return data\n}\n\nexport const isPromiseLike = (x: unknown): x is PromiseLike<unknown> => {\n  return isFunction((x as any)?.then)\n}\n\nexport const noop: () => undefined = () => {}\n\nexport const UNDEFINED = /*#__NOINLINE__*/ noop() as undefined\n\nexport const isUndefined = (v: any): v is undefined => {\n  return v === UNDEFINED\n}\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in window\n\nexport const isFunction = (v: any): v is (...args: any[]) => any => {\n  return typeof v === 'function'\n}\n\nexport const isBoolean = (value?: any): value is boolean => {\n  return typeof value === 'boolean'\n}\n\nexport const isNumber = (value?: any): value is number => {\n  return typeof value === 'number'\n}\n\nexport const timeUntilStale = (\n  updatedAt: number,\n  staleTime?: number\n): number => {\n  return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0)\n}\n\nexport const addToEnd = <T>(items: T[], item: T, max = 0): T[] => {\n  const newItems = [...items, item]\n  return max && newItems.length > max ? newItems.slice(1) : newItems\n}\n\nexport const addToStart = <T>(items: T[], item: T, max = 0): T[] => {\n  const newItems = [item, ...items]\n  return max && newItems.length > max ? newItems.slice(0, -1) : newItems\n}\n\nexport const functionalUpdate = <TInput, TOutput>(\n  updater: Updater<TInput, TOutput>,\n  input: TInput\n): TOutput => {\n  return (\n    isFunction(updater)\n      ? (updater as DataUpdateFunction<TInput, TOutput>)(input)\n      : updater\n  ) as TOutput\n}\n\nexport const findSet = <T>(\n  listeners: Set<T>,\n  predicate: (listener: T) => boolean | undefined\n): T | undefined => {\n  for (const listener of listeners) {\n    if (predicate(listener)) {\n      return listener\n    }\n  }\n}\n\n/**\n * Shallow compare objects. Only works with objects that always have the same properties.\n */\nexport const shallowEqualObjects = <T>(a: T, b: T): boolean => {\n  if ((a && !b) || (b && !a)) {\n    return false\n  }\n\n  for (const key in a) {\n    if (a[key] !== b[key]) {\n      return false\n    }\n  }\n\n  return true\n}\n"],"names":["getFullKey","key","variables","isUndefined","hashKeyByOptions","fullKey","options","queryKeyHashFn","hashKey","JSON","stringify","_","val","isPlainObject","Object","keys","sort","reduce","result","hasObjectPrototype","o","prototype","toString","call","ctor","constructor","prot","hasOwnProperty","partialMatchKey","a","b","some","isValidTimeout","value","isNumber","Infinity","sleep","timeout","Promise","resolve","setTimeout","isPlainArray","Array","isArray","length","replaceEqualDeep","array","aSize","bItems","bSize","copy","equalItems","i","replaceData","prevData","data","isFunction","structuralSharing","noop","UNDEFINED","v","isServer","window","isBoolean","timeUntilStale","updatedAt","staleTime","Math","max","Date","now","addToEnd","items","item","newItems","slice","addToStart","functionalUpdate","updater","input","findSet","listeners","predicate","listener","shallowEqualObjects"],"mappings":"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"}