{"version":3,"file":"areEqualWithDeepComparison.mjs","names":["key","oldValue: StoreLink","newValue: StoreLink","oldValue","newValue"],"sources":["../../src/core/areEqualWithDeepComparison.ts"],"sourcesContent":["import type { StoreLink } from './IsographEnvironment';\nimport type { ReaderAst, ReaderLinkedField, ReaderScalarField } from './reader';\n\nfunction mergeUsingReaderAst(\n  field: ReaderScalarField | ReaderLinkedField,\n  oldItem: unknown,\n  newItem: unknown,\n): unknown {\n  if (newItem == null || oldItem == null) {\n    return newItem;\n  }\n\n  if (Array.isArray(newItem)) {\n    if (!Array.isArray(oldItem)) {\n      return newItem;\n    }\n\n    return mergeArraysUsingReaderAst(field, oldItem, newItem);\n  }\n\n  switch (field.kind) {\n    case 'Scalar':\n      return oldItem === newItem ? oldItem : newItem;\n    case 'Linked':\n      if (oldItem == null) {\n        return newItem;\n      }\n\n      return mergeObjectsUsingReaderAst(field.selections, oldItem, newItem);\n  }\n}\n\nfunction mergeArraysUsingReaderAst(\n  field: ReaderScalarField | ReaderLinkedField,\n  oldItems: ReadonlyArray<unknown>,\n  newItems: Array<unknown>,\n): ReadonlyArray<unknown> {\n  if (newItems.length !== oldItems.length) {\n    return newItems;\n  }\n\n  let canRecycle = true;\n  for (let i = 0; i < newItems.length; i++) {\n    const mergedItem = mergeUsingReaderAst(field, oldItems[i], newItems[i]);\n    if (mergedItem !== oldItems[i]) {\n      canRecycle = false;\n    } else {\n      newItems[i] = mergedItem;\n    }\n  }\n\n  return canRecycle ? oldItems : newItems;\n}\n\nexport function mergeObjectsUsingReaderAst(\n  ast: ReaderAst<object>,\n  oldItemObject: object,\n  newItemObject: object,\n): object {\n  let canRecycle = true;\n  for (const field of ast) {\n    switch (field.kind) {\n      case 'Scalar':\n      case 'Linked':\n        if (field.kind === 'Linked' && field.refetchQueryIndex != null) {\n          // client pointers are functions, so we can't merge them\n          canRecycle = false;\n          break;\n        }\n        const key = field.alias ?? field.fieldName;\n        // @ts-expect-error\n        const oldValue = oldItemObject[key];\n        // @ts-expect-error\n        const newValue = newItemObject[key];\n\n        const mergedValue = mergeUsingReaderAst(field, oldValue, newValue);\n        if (mergedValue !== oldValue) {\n          canRecycle = false;\n        } else {\n          // @ts-expect-error\n          newItemObject[key] = mergedValue;\n        }\n        break;\n      case 'Resolver': {\n        const key = field.alias;\n        // @ts-expect-error\n        const oldValue = oldItemObject[key];\n        // @ts-expect-error\n        const newValue = newItemObject[key];\n\n        if (oldValue !== newValue) {\n          canRecycle = false;\n        }\n        break;\n      }\n      case 'Link': {\n        const key = field.alias;\n        // @ts-expect-error\n        const oldValue: StoreLink = oldItemObject[key];\n        // @ts-expect-error\n        const newValue: StoreLink = newItemObject[key];\n\n        if (\n          oldValue.__link !== newValue.__link ||\n          oldValue.__typename !== newValue.__typename\n        ) {\n          canRecycle = false;\n        } else {\n          // @ts-expect-error\n          newItemObject[key] = oldValue;\n        }\n        break;\n      }\n      case 'ImperativelyLoadedField':\n      case 'LoadablySelectedField':\n        break;\n    }\n  }\n\n  return canRecycle ? oldItemObject : newItemObject;\n}\n"],"mappings":";AAGA,SAAS,oBACP,OACA,SACA,SACS;AACT,KAAI,WAAW,QAAQ,WAAW,KAChC,QAAO;AAGT,KAAI,MAAM,QAAQ,QAAQ,EAAE;AAC1B,MAAI,CAAC,MAAM,QAAQ,QAAQ,CACzB,QAAO;AAGT,SAAO,0BAA0B,OAAO,SAAS,QAAQ;;AAG3D,SAAQ,MAAM,MAAd;EACE,KAAK,SACH,QAAO,YAAY,UAAU,UAAU;EACzC,KAAK;AACH,OAAI,WAAW,KACb,QAAO;AAGT,UAAO,2BAA2B,MAAM,YAAY,SAAS,QAAQ;;;AAI3E,SAAS,0BACP,OACA,UACA,UACwB;AACxB,KAAI,SAAS,WAAW,SAAS,OAC/B,QAAO;CAGT,IAAI,aAAa;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACxC,MAAM,aAAa,oBAAoB,OAAO,SAAS,IAAI,SAAS,GAAG;AACvE,MAAI,eAAe,SAAS,GAC1B,cAAa;MAEb,UAAS,KAAK;;AAIlB,QAAO,aAAa,WAAW;;AAGjC,SAAgB,2BACd,KACA,eACA,eACQ;CACR,IAAI,aAAa;AACjB,MAAK,MAAM,SAAS,IAClB,SAAQ,MAAM,MAAd;EACE,KAAK;EACL,KAAK;AACH,OAAI,MAAM,SAAS,YAAY,MAAM,qBAAqB,MAAM;AAE9D,iBAAa;AACb;;GAEF,MAAM,MAAM,MAAM,SAAS,MAAM;GAEjC,MAAM,WAAW,cAAc;GAE/B,MAAM,WAAW,cAAc;GAE/B,MAAM,cAAc,oBAAoB,OAAO,UAAU,SAAS;AAClE,OAAI,gBAAgB,SAClB,cAAa;OAGb,eAAc,OAAO;AAEvB;EACF,KAAK,YAAY;GACf,MAAMA,QAAM,MAAM;AAMlB,OAJiB,cAAcA,WAEd,cAAcA,OAG7B,cAAa;AAEf;;EAEF,KAAK,QAAQ;GACX,MAAMA,QAAM,MAAM;GAElB,MAAMC,aAAsB,cAAcD;GAE1C,MAAME,aAAsB,cAAcF;AAE1C,OACEG,WAAS,WAAWC,WAAS,UAC7BD,WAAS,eAAeC,WAAS,WAEjC,cAAa;OAGb,eAAcJ,SAAOG;AAEvB;;EAEF,KAAK;EACL,KAAK,wBACH;;AAIN,QAAO,aAAa,gBAAgB"}