{"version":3,"file":"data.cjs","names":[],"sources":["../src/data/flat-map-deep.ts","../src/data/has-enumerable-keys.ts","../src/data/is-shallow-equal.ts","../src/data/is-unsafe-property.ts","../src/data/safe-json-parse.ts","../src/data/to-array.ts"],"sourcesContent":["type DeepArray<TValue> = TValue | Array<DeepArray<TValue>>;\n\n/**\n * Recursively flattens a nested array and maps the collected values.\n *\n * @example\n * ```ts\n * flatMapDeep([1, [2, [3]]], (value) => value * 2); // [2, 4, 6]\n * ```\n */\nexport const flatMapDeep = <TSource, TNewValue>(\n  arr: DeepArray<TSource>,\n  fn: (value: TSource, i: number, arr: TSource[]) => TNewValue,\n): TNewValue[] => {\n  const source: TSource[] = [];\n\n  const collect = (value: DeepArray<TSource>): void => {\n    if (!Array.isArray(value)) {\n      source.push(value);\n      return;\n    }\n\n    for (const item of value) {\n      collect(item);\n    }\n  };\n\n  collect(arr);\n\n  return source.map((value, i) => fn(value, i, source));\n};\n","import type { AnyObject } from 'yummies/types';\n\n/**\n * Checks whether an object has at least one enumerable key.\n *\n * @example\n * ```ts\n * hasEnumerableKeys({ id: 1 }); // true\n * hasEnumerableKeys({}); // false\n * ```\n */\nexport const hasEnumerableKeys = (input: AnyObject): boolean => {\n  for (const _key in input) {\n    return true;\n  }\n  return false;\n};\n","import type { AnyObject } from 'yummies/types';\n\n/**\n * Performs a shallow comparison for arrays, plain objects, dates and regular expressions.\n *\n * @example\n * ```ts\n * isShallowEqual({ id: 1 }, { id: 1 }); // true\n * ```\n */\nexport const isShallowEqual = (a: unknown, b: unknown): boolean => {\n  if (a === b) return true;\n\n  if (\n    typeof a !== 'object' ||\n    typeof b !== 'object' ||\n    a === null ||\n    b === null\n  ) {\n    return false;\n  }\n\n  if (a.constructor !== b.constructor) return false;\n\n  const isArrayA = Array.isArray(a);\n\n  if (isArrayA !== Array.isArray(b)) return false;\n\n  if (isArrayA) {\n    const arrA = a as unknown[];\n    const arrB = b as unknown[];\n    if (arrA.length !== arrB.length) return false;\n\n    for (const [i, element] of arrA.entries()) {\n      if (element !== arrB[i]) return false;\n    }\n    return true;\n  }\n\n  if (a instanceof Date) return a.getTime() === (b as Date).getTime();\n\n  if (a instanceof RegExp) return a.toString() === (b as RegExp).toString();\n\n  const aKeys = Object.keys(a);\n  const bKeys = Object.keys(b);\n\n  if (aKeys.length !== bKeys.length) return false;\n\n  const bObj = b as AnyObject;\n  for (const key of aKeys) {\n    if (!Object.hasOwn(bObj, key) || (a as AnyObject)[key] !== bObj[key]) {\n      return false;\n    }\n  }\n\n  return true;\n};\n","const UNSAFE_PROPERTY_KEYS = new Set(['__proto__', 'prototype', 'constructor']);\n\n/**\n * Checks whether a property key is unsafe and can lead to prototype pollution.\n *\n * @example\n * isUnsafeProperty('__proto__'); // true\n * isUnsafeProperty('name'); // false\n */\nexport const isUnsafeProperty = (key: any) => UNSAFE_PROPERTY_KEYS.has(key);\n","import type { Maybe } from 'yummies/types';\n\n/**\n * Parses JSON safely and returns a fallback value when parsing fails.\n *\n * @example\n * ```ts\n * safeJsonParse('{\"enabled\":true}', {}); // { enabled: true }\n * ```\n */\nexport const safeJsonParse = <TValue = any, TFallback = null>(\n  json: Maybe<string>,\n  fallback: TFallback = null as TFallback,\n): TValue | TFallback => {\n  if (json == null) return fallback;\n\n  try {\n    return JSON.parse(json);\n  } catch {\n    return fallback;\n  }\n};\n","/**\n * Wraps a value in an array when it is not already an array.\n *\n * @example\n * ```ts\n * toArray('item'); // ['item']\n * ```\n */\nexport const toArray = <TValue>(value: TValue | TValue[]): TValue[] => {\n  return Array.isArray(value) ? value : [value];\n};\n"],"mappings":";;;;;;;;;;AAUA,IAAa,eACX,KACA,OACgB;CAChB,MAAM,SAAoB,CAAC;CAE3B,MAAM,WAAW,UAAoC;EACnD,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;GACzB,OAAO,KAAK,KAAK;GACjB;EACF;EAEA,KAAK,MAAM,QAAQ,OACjB,QAAQ,IAAI;CAEhB;CAEA,QAAQ,GAAG;CAEX,OAAO,OAAO,KAAK,OAAO,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AACtD;;;;;;;;;;;;ACnBA,IAAa,qBAAqB,UAA8B;CAC9D,KAAK,MAAM,QAAQ,OACjB,OAAO;CAET,OAAO;AACT;;;;;;;;;;;ACNA,IAAa,kBAAkB,GAAY,MAAwB;CACjE,IAAI,MAAM,GAAG,OAAO;CAEpB,IACE,OAAO,MAAM,YACb,OAAO,MAAM,YACb,MAAM,QACN,MAAM,MAEN,OAAO;CAGT,IAAI,EAAE,gBAAgB,EAAE,aAAa,OAAO;CAE5C,MAAM,WAAW,MAAM,QAAQ,CAAC;CAEhC,IAAI,aAAa,MAAM,QAAQ,CAAC,GAAG,OAAO;CAE1C,IAAI,UAAU;EACZ,MAAM,OAAO;EACb,MAAM,OAAO;EACb,IAAI,KAAK,WAAW,KAAK,QAAQ,OAAO;EAExC,KAAK,MAAM,CAAC,GAAG,YAAY,KAAK,QAAQ,GACtC,IAAI,YAAY,KAAK,IAAI,OAAO;EAElC,OAAO;CACT;CAEA,IAAI,aAAa,MAAM,OAAO,EAAE,QAAQ,MAAO,EAAW,QAAQ;CAElE,IAAI,aAAa,QAAQ,OAAO,EAAE,SAAS,MAAO,EAAa,SAAS;CAExE,MAAM,QAAQ,OAAO,KAAK,CAAC;CAC3B,MAAM,QAAQ,OAAO,KAAK,CAAC;CAE3B,IAAI,MAAM,WAAW,MAAM,QAAQ,OAAO;CAE1C,MAAM,OAAO;CACb,KAAK,MAAM,OAAO,OAChB,IAAI,CAAC,OAAO,OAAO,MAAM,GAAG,KAAM,EAAgB,SAAS,KAAK,MAC9D,OAAO;CAIX,OAAO;AACT;;;ACxDA,IAAM,uBAAuB,IAAI,IAAI;CAAC;CAAa;CAAa;AAAa,CAAC;;;;;;;;AAS9E,IAAa,oBAAoB,QAAa,qBAAqB,IAAI,GAAG;;;;;;;;;;;ACC1E,IAAa,iBACX,MACA,WAAsB,SACC;CACvB,IAAI,QAAQ,MAAM,OAAO;CAEzB,IAAI;EACF,OAAO,KAAK,MAAM,IAAI;CACxB,QAAQ;EACN,OAAO;CACT;AACF;;;;;;;;;;;ACbA,IAAa,WAAmB,UAAuC;CACrE,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAC9C"}