{"version":3,"sources":["../src/error.ts","../src/value.ts"],"sourcesContent":["enum StoreErrorCode {\n  // abort errors\n  ABORTED = 'ABORTED',\n\n  // input errors\n  INVALID_INPUT = 'INVALID_INPUT',\n  NOT_SUPPORTED = 'NOT_SUPPORTED',\n\n  // collection errors\n  COLLECTION_NOT_FOUND = 'COLLECTION_NOT_FOUND',\n\n  // store errors\n  INVALID_DATA = 'INVALID_DATA',\n\n  // internal errors\n  INTERNAL_ERROR = 'INTERNAL_ERROR',\n  NOT_IMPLEMENTED = 'NOT_IMPLEMENTED',\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace StoreError {\n  export type Code = StoreErrorCode;\n}\n\nexport class StoreError extends Error {\n  static Code = StoreErrorCode;\n\n  constructor(\n    public readonly code: StoreErrorCode,\n    message: string,\n  ) {\n    super(message);\n    this.name = 'StoreError';\n  }\n}\n","export type StoreScalarValue =\n  | null\n  | string\n  | number\n  | bigint\n  | boolean\n  | Buffer\n  | Date\n  | { [key in string]?: StoreScalarValue }\n  | StoreScalarValue[];\n\nexport const isStoreScalarValueEqual = (\n  a: StoreScalarValue | undefined,\n  b: StoreScalarValue | undefined,\n): boolean => {\n  if (a === b) {\n    return true;\n  }\n\n  if (typeof a !== 'object' || typeof b !== 'object') {\n    return false;\n  }\n\n  if (a === null || b === null) {\n    return false;\n  }\n\n  if (a instanceof Buffer) {\n    if (!(b instanceof Buffer)) {\n      return false;\n    }\n\n    return a.equals(b);\n  }\n\n  if (a instanceof Date) {\n    if (!(b instanceof Date)) {\n      return false;\n    }\n\n    return a.getTime() === b.getTime();\n  }\n\n  if (b instanceof Buffer || b instanceof Date) {\n    return false;\n  }\n\n  if (Array.isArray(a)) {\n    if (!Array.isArray(b)) {\n      return false;\n    }\n\n    if (a.length !== b.length) {\n      return false;\n    }\n\n    return a.every((v, i) => isStoreScalarValueEqual(v, b[i]));\n  }\n\n  if (Array.isArray(b)) {\n    return false;\n  }\n\n  const aKeys = Object.keys(a);\n  const bKeys = Object.keys(b);\n\n  if (aKeys.length !== bKeys.length) {\n    return false;\n  }\n\n  return aKeys.every((key) => isStoreScalarValueEqual(a[key], b[key]));\n};\n\nexport const uniqueStoreScalarValues = <T extends StoreScalarValue | undefined>(\n  values: T[],\n): T[] => [\n  ...new Map(\n    values.map((value) => [getStoreScalarValueKey(value), value]),\n  ).values(),\n];\n\nexport const getStoreScalarValueKey = (\n  value: StoreScalarValue | undefined,\n): string | number | bigint | boolean | null => {\n  switch (typeof value) {\n    case 'number':\n    case 'bigint':\n    case 'boolean': {\n      return value;\n    }\n\n    case 'undefined': {\n      return null;\n    }\n\n    case 'string': {\n      return JSON.stringify(value);\n    }\n\n    case 'object': {\n      if (value === null) {\n        return value;\n      }\n\n      if (value instanceof Buffer) {\n        return value.toString('base64');\n      }\n\n      if (value instanceof Date) {\n        return value.toISOString();\n      }\n\n      if (Array.isArray(value)) {\n        return `[${value.map((v) => getStoreScalarValueKey(v)).join(',')}]`;\n      }\n\n      return `{${Object.entries(value)\n        .map(([k, v]) => `${JSON.stringify(k)}:${getStoreScalarValueKey(v)}`)\n        .join(',')}}`;\n    }\n  }\n};\n"],"mappings":";;;;;UAAKA,iBAAAA;;;;;;;;GAAAA,mBAAAA,iBAAAA,CAAAA,EAAAA;AAwBE,IAAMC,aAAN,cAAyBC,MAAAA;SAAAA;;;;EAC9B,OAAOC,OAAOH;EAEdI,YACkBC,MAChBC,SACA;AACA,UAAMA,OAAAA;SAHUD,OAAAA;AAIhB,SAAKE,OAAO;EACd;AACF;;;ACvBO,IAAMC,0BAA0B,wBACrCC,GACAC,MAAAA;AAEA,MAAID,MAAMC,GAAG;AACX,WAAO;EACT;AAEA,MAAI,OAAOD,MAAM,YAAY,OAAOC,MAAM,UAAU;AAClD,WAAO;EACT;AAEA,MAAID,MAAM,QAAQC,MAAM,MAAM;AAC5B,WAAO;EACT;AAEA,MAAID,aAAaE,QAAQ;AACvB,QAAI,EAAED,aAAaC,SAAS;AAC1B,aAAO;IACT;AAEA,WAAOF,EAAEG,OAAOF,CAAAA;EAClB;AAEA,MAAID,aAAaI,MAAM;AACrB,QAAI,EAAEH,aAAaG,OAAO;AACxB,aAAO;IACT;AAEA,WAAOJ,EAAEK,QAAO,MAAOJ,EAAEI,QAAO;EAClC;AAEA,MAAIJ,aAAaC,UAAUD,aAAaG,MAAM;AAC5C,WAAO;EACT;AAEA,MAAIE,MAAMC,QAAQP,CAAAA,GAAI;AACpB,QAAI,CAACM,MAAMC,QAAQN,CAAAA,GAAI;AACrB,aAAO;IACT;AAEA,QAAID,EAAEQ,WAAWP,EAAEO,QAAQ;AACzB,aAAO;IACT;AAEA,WAAOR,EAAES,MAAM,CAACC,GAAGC,MAAMZ,wBAAwBW,GAAGT,EAAEU,CAAAA,CAAE,CAAA;EAC1D;AAEA,MAAIL,MAAMC,QAAQN,CAAAA,GAAI;AACpB,WAAO;EACT;AAEA,QAAMW,QAAQC,OAAOC,KAAKd,CAAAA;AAC1B,QAAMe,QAAQF,OAAOC,KAAKb,CAAAA;AAE1B,MAAIW,MAAMJ,WAAWO,MAAMP,QAAQ;AACjC,WAAO;EACT;AAEA,SAAOI,MAAMH,MAAM,CAACO,QAAQjB,wBAAwBC,EAAEgB,GAAAA,GAAMf,EAAEe,GAAAA,CAAI,CAAA;AACpE,GA5DuC;AA8DhC,IAAMC,0BAA0B,wBACrCC,WACQ;KACL,IAAIC,IACLD,OAAOE,IAAI,CAACC,UAAU;IAACC,uBAAuBD,KAAAA;IAAQA;GAAM,CAAA,EAC5DH,OAAM;GAL6B;AAQhC,IAAMI,yBAAyB,wBACpCD,UAAAA;AAEA,UAAQ,OAAOA,OAAAA;IACb,KAAK;IACL,KAAK;IACL,KAAK,WAAW;AACd,aAAOA;IACT;IAEA,KAAK,aAAa;AAChB,aAAO;IACT;IAEA,KAAK,UAAU;AACb,aAAOE,KAAKC,UAAUH,KAAAA;IACxB;IAEA,KAAK,UAAU;AACb,UAAIA,UAAU,MAAM;AAClB,eAAOA;MACT;AAEA,UAAIA,iBAAiBnB,QAAQ;AAC3B,eAAOmB,MAAMI,SAAS,QAAA;MACxB;AAEA,UAAIJ,iBAAiBjB,MAAM;AACzB,eAAOiB,MAAMK,YAAW;MAC1B;AAEA,UAAIpB,MAAMC,QAAQc,KAAAA,GAAQ;AACxB,eAAO,IAAIA,MAAMD,IAAI,CAACV,MAAMY,uBAAuBZ,CAAAA,CAAAA,EAAIiB,KAAK,GAAA,CAAA;MAC9D;AAEA,aAAO,IAAId,OAAOe,QAAQP,KAAAA,EACvBD,IAAI,CAAC,CAACS,GAAGnB,CAAAA,MAAO,GAAGa,KAAKC,UAAUK,CAAAA,CAAAA,IAAMP,uBAAuBZ,CAAAA,CAAAA,EAAI,EACnEiB,KAAK,GAAA,CAAA;IACV;EACF;AACF,GAxCsC;","names":["StoreErrorCode","StoreError","Error","Code","constructor","code","message","name","isStoreScalarValueEqual","a","b","Buffer","equals","Date","getTime","Array","isArray","length","every","v","i","aKeys","Object","keys","bKeys","key","uniqueStoreScalarValues","values","Map","map","value","getStoreScalarValueKey","JSON","stringify","toString","toISOString","join","entries","k"]}