@pol-studios/db 1.0.53 → 1.0.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DataLayerContext-DND_nO5a.d.ts → DataLayerContext-C7cJtiO8.d.ts} +1 -1
- package/dist/auth/context.js +4 -4
- package/dist/auth/hooks.js +5 -5
- package/dist/auth/index.js +5 -5
- package/dist/{chunk-FIAXWEBK.js → chunk-7YGDT46S.js} +4 -4
- package/dist/{chunk-D55QGM4P.js → chunk-AA3VUWTP.js} +113 -17
- package/dist/chunk-AA3VUWTP.js.map +1 -0
- package/dist/{chunk-3Q74DK5K.js → chunk-AKCNWHXV.js} +2 -2
- package/dist/{chunk-UJWETW36.js → chunk-AKIRHA4Q.js} +527 -418
- package/dist/chunk-AKIRHA4Q.js.map +1 -0
- package/dist/{chunk-FMYXG4VN.js → chunk-BRFFTGVJ.js} +2 -2
- package/dist/{chunk-YA6MUTA7.js → chunk-FI6JAD5G.js} +3 -3
- package/dist/chunk-JOULSXOI.js +415 -0
- package/dist/chunk-JOULSXOI.js.map +1 -0
- package/dist/{chunk-OKYHI6JG.js → chunk-LF3V3ERS.js} +3 -3
- package/dist/{chunk-FZJX2FZS.js → chunk-OC6S4XFL.js} +10 -18
- package/dist/chunk-OC6S4XFL.js.map +1 -0
- package/dist/{chunk-DP3YEVSX.js → chunk-WILXD5X3.js} +3 -3
- package/dist/{chunk-ZGQ7Q4ZU.js → chunk-WM25QE7E.js} +2 -2
- package/dist/{chunk-WQLIGVQR.js → chunk-WSKBZIEI.js} +4 -1
- package/dist/chunk-WSKBZIEI.js.map +1 -0
- package/dist/chunk-YUX6RGLZ.js +1858 -0
- package/dist/chunk-YUX6RGLZ.js.map +1 -0
- package/dist/{chunk-Z3EJX3VG.js → chunk-Z456IHCB.js} +3 -3
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +2 -2
- package/dist/{index-bMBDRkMF.d.ts → index-jVYdTeWx.d.ts} +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +13 -13
- package/dist/index.native.d.ts +61 -7
- package/dist/index.native.js +13 -13
- package/dist/index.web.d.ts +6 -6
- package/dist/index.web.js +13 -13
- package/dist/mutation/index.js +3 -3
- package/dist/parser/index.js +3 -3
- package/dist/query/index.js +4 -4
- package/dist/realtime/index.js +3 -3
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +4 -4
- package/dist/{useDbCount-BGSlyv-F.d.ts → useDbCount-DHLJzmkO.d.ts} +1 -1
- package/dist/{useResolveFeedback-DLvQD0Wl.d.ts → useResolveFeedback-B0UcYWVI.d.ts} +3 -3
- package/dist/with-auth/index.js +7 -7
- package/package.json +5 -3
- package/dist/chunk-CTRY7JDP.js +0 -4112
- package/dist/chunk-CTRY7JDP.js.map +0 -1
- package/dist/chunk-D55QGM4P.js.map +0 -1
- package/dist/chunk-FZJX2FZS.js.map +0 -1
- package/dist/chunk-INEUG6MC.js +0 -521
- package/dist/chunk-INEUG6MC.js.map +0 -1
- package/dist/chunk-UJWETW36.js.map +0 -1
- package/dist/chunk-WQLIGVQR.js.map +0 -1
- /package/dist/{chunk-FIAXWEBK.js.map → chunk-7YGDT46S.js.map} +0 -0
- /package/dist/{chunk-3Q74DK5K.js.map → chunk-AKCNWHXV.js.map} +0 -0
- /package/dist/{chunk-FMYXG4VN.js.map → chunk-BRFFTGVJ.js.map} +0 -0
- /package/dist/{chunk-YA6MUTA7.js.map → chunk-FI6JAD5G.js.map} +0 -0
- /package/dist/{chunk-OKYHI6JG.js.map → chunk-LF3V3ERS.js.map} +0 -0
- /package/dist/{chunk-DP3YEVSX.js.map → chunk-WILXD5X3.js.map} +0 -0
- /package/dist/{chunk-ZGQ7Q4ZU.js.map → chunk-WM25QE7E.js.map} +0 -0
- /package/dist/{chunk-Z3EJX3VG.js.map → chunk-Z456IHCB.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/.pnpm/is-what@4.1.16/node_modules/is-what/dist/index.js","../../../../node_modules/.pnpm/merge-anything@5.1.7/node_modules/merge-anything/dist/index.js","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/query-types.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/extract-paths-from-filter.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/remove-first-path-element.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/group-paths-recursive.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/parse-select-param.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/remove-alias-from-declaration.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetch/build-select-statement.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetch/dedupe.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetch/build-normalized-query.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetch/build-mutation-fetcher-response.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/get.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-plain-object.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/get-table-from-url.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/like-query-builder.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/get-table.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/cache-data-types.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/response-types.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/encode-object.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/sort-search-param.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-postgrest-builder.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-postgrest-transform-builder.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/set-filter-value.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-iso-date-string.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/parse-value.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/parse-order-by-key.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/parse-order-by.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/find-filters.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/cursor-pagination-fetcher.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/delete-fetcher.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/mutate/should-revalidate-relation.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/mutate/should-revalidate-table.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/mutate/transformers.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/delete-item.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetcher.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/insert-fetcher.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/binary-search.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/if-date-get-time.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/sorted-comparator.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/find-index-ordered.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/mutate-item.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/offset-pagination-fetcher.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/filter/denormalize.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/filter-filter-definitions-by-paths.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-object.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/like-postgrest-builder.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/operators.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/find-last-index.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-not-null.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/postgrest-query-parser.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/postgrest-filter.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/postgrest-parser.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/update-fetcher.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/upsert-fetcher.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/upsert-item.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/revalidate-tables.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/cache/use-delete-item.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/lib/use-postgrest-filter-cache.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/lib/key.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/lib/use-queries-for-table-loader.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/cache/use-mutate-item.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/cache/use-revalidate-tables.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/cache/use-upsert-item.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-delete-many-mutation.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-delete-mutation.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-insert-mutation.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/get-user-response.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-update-mutation.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-upsert-mutation.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/query/build-query-opts.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/query/fetch.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/query/prefetch.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/query/use-query.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/subscribe/use-subscription-query.ts","../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_yc5q7qvczk7zvppefoodrwog4i/node_modules/@supabase-cache-helpers/postgrest-react-query/src/subscribe/use-subscription.ts"],"sourcesContent":["function getType(payload) {\n return Object.prototype.toString.call(payload).slice(8, -1);\n}\n\nfunction isAnyObject(payload) {\n return getType(payload) === \"Object\";\n}\n\nfunction isArray(payload) {\n return getType(payload) === \"Array\";\n}\n\nfunction isBlob(payload) {\n return getType(payload) === \"Blob\";\n}\n\nfunction isBoolean(payload) {\n return getType(payload) === \"Boolean\";\n}\n\nfunction isDate(payload) {\n return getType(payload) === \"Date\" && !isNaN(payload);\n}\n\nfunction isEmptyArray(payload) {\n return isArray(payload) && payload.length === 0;\n}\n\nfunction isPlainObject(payload) {\n if (getType(payload) !== \"Object\")\n return false;\n const prototype = Object.getPrototypeOf(payload);\n return !!prototype && prototype.constructor === Object && prototype === Object.prototype;\n}\n\nfunction isEmptyObject(payload) {\n return isPlainObject(payload) && Object.keys(payload).length === 0;\n}\n\nfunction isEmptyString(payload) {\n return payload === \"\";\n}\n\nfunction isError(payload) {\n return getType(payload) === \"Error\" || payload instanceof Error;\n}\n\nfunction isFile(payload) {\n return getType(payload) === \"File\";\n}\n\nfunction isFullArray(payload) {\n return isArray(payload) && payload.length > 0;\n}\n\nfunction isFullObject(payload) {\n return isPlainObject(payload) && Object.keys(payload).length > 0;\n}\n\nfunction isString(payload) {\n return getType(payload) === \"String\";\n}\n\nfunction isFullString(payload) {\n return isString(payload) && payload !== \"\";\n}\n\nfunction isFunction(payload) {\n return typeof payload === \"function\";\n}\n\nfunction isType(payload, type) {\n if (!(type instanceof Function)) {\n throw new TypeError(\"Type must be a function\");\n }\n if (!Object.prototype.hasOwnProperty.call(type, \"prototype\")) {\n throw new TypeError(\"Type is not a class\");\n }\n const name = type.name;\n return getType(payload) === name || Boolean(payload && payload.constructor === type);\n}\n\nfunction isInstanceOf(value, classOrClassName) {\n if (typeof classOrClassName === \"function\") {\n for (let p = value; p; p = Object.getPrototypeOf(p)) {\n if (isType(p, classOrClassName)) {\n return true;\n }\n }\n return false;\n } else {\n for (let p = value; p; p = Object.getPrototypeOf(p)) {\n if (getType(p) === classOrClassName) {\n return true;\n }\n }\n return false;\n }\n}\n\nfunction isMap(payload) {\n return getType(payload) === \"Map\";\n}\n\nfunction isNaNValue(payload) {\n return getType(payload) === \"Number\" && isNaN(payload);\n}\n\nfunction isNumber(payload) {\n return getType(payload) === \"Number\" && !isNaN(payload);\n}\n\nfunction isNegativeNumber(payload) {\n return isNumber(payload) && payload < 0;\n}\n\nfunction isNull(payload) {\n return getType(payload) === \"Null\";\n}\n\nfunction isOneOf(a, b, c, d, e) {\n return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);\n}\n\nfunction isUndefined(payload) {\n return getType(payload) === \"Undefined\";\n}\n\nconst isNullOrUndefined = isOneOf(isNull, isUndefined);\n\nfunction isObject(payload) {\n return isPlainObject(payload);\n}\n\nfunction isObjectLike(payload) {\n return isAnyObject(payload);\n}\n\nfunction isPositiveNumber(payload) {\n return isNumber(payload) && payload > 0;\n}\n\nfunction isSymbol(payload) {\n return getType(payload) === \"Symbol\";\n}\n\nfunction isPrimitive(payload) {\n return isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);\n}\n\nfunction isPromise(payload) {\n return getType(payload) === \"Promise\";\n}\n\nfunction isRegExp(payload) {\n return getType(payload) === \"RegExp\";\n}\n\nfunction isSet(payload) {\n return getType(payload) === \"Set\";\n}\n\nfunction isWeakMap(payload) {\n return getType(payload) === \"WeakMap\";\n}\n\nfunction isWeakSet(payload) {\n return getType(payload) === \"WeakSet\";\n}\n\nexport { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isInstanceOf, isMap, isNaNValue, isNegativeNumber, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPositiveNumber, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };\n","import { isArray, isPlainObject, isSymbol } from 'is-what';\n\nfunction concatArrays(originVal, newVal) {\n if (isArray(originVal) && isArray(newVal)) {\n return originVal.concat(newVal);\n }\n return newVal;\n}\n\nfunction assignProp(carry, key, newVal, originalObject) {\n const propType = {}.propertyIsEnumerable.call(originalObject, key) ? \"enumerable\" : \"nonenumerable\";\n if (propType === \"enumerable\")\n carry[key] = newVal;\n if (propType === \"nonenumerable\") {\n Object.defineProperty(carry, key, {\n value: newVal,\n enumerable: false,\n writable: true,\n configurable: true\n });\n }\n}\nfunction mergeRecursively(origin, newComer, compareFn) {\n if (!isPlainObject(newComer))\n return newComer;\n let newObject = {};\n if (isPlainObject(origin)) {\n const props2 = Object.getOwnPropertyNames(origin);\n const symbols2 = Object.getOwnPropertySymbols(origin);\n newObject = [...props2, ...symbols2].reduce((carry, key) => {\n const targetVal = origin[key];\n if (!isSymbol(key) && !Object.getOwnPropertyNames(newComer).includes(key) || isSymbol(key) && !Object.getOwnPropertySymbols(newComer).includes(key)) {\n assignProp(\n carry,\n key,\n targetVal,\n origin\n );\n }\n return carry;\n }, {});\n }\n const props = Object.getOwnPropertyNames(newComer);\n const symbols = Object.getOwnPropertySymbols(newComer);\n const result = [...props, ...symbols].reduce((carry, key) => {\n let newVal = newComer[key];\n const targetVal = isPlainObject(origin) ? origin[key] : void 0;\n if (targetVal !== void 0 && isPlainObject(newVal)) {\n newVal = mergeRecursively(targetVal, newVal, compareFn);\n }\n const propToAssign = compareFn ? compareFn(targetVal, newVal, key) : newVal;\n assignProp(\n carry,\n key,\n propToAssign,\n newComer\n );\n return carry;\n }, newObject);\n return result;\n}\nfunction merge(object, ...otherObjects) {\n return otherObjects.reduce((result, newComer) => {\n return mergeRecursively(result, newComer);\n }, object);\n}\nfunction mergeAndCompare(compareFn, object, ...otherObjects) {\n return otherObjects.reduce((result, newComer) => {\n return mergeRecursively(result, newComer, compareFn);\n }, object);\n}\nfunction mergeAndConcat(object, ...otherObjects) {\n return otherObjects.reduce((result, newComer) => {\n return mergeRecursively(result, newComer, concatArrays);\n }, object);\n}\n\nexport { concatArrays, merge, mergeAndCompare, mergeAndConcat };\n","/**\n * A function that validates whether the given input is an object of type Type\n * @returns true if obj is of type Type, false if not\n */\nexport type FilterFn<Type extends Record<string, unknown>> = (\n obj: unknown,\n) => obj is Type;\n\n/**\n * The supported value types\n */\nexport type ValueType = number | string | boolean | null | Date | object;\n\n/**\n * A function implementing a FilterOperators\n * @param columnValue the value of the input object to test the filter against\n * @param filterValue the value of the filter, e.g. in .eq('colname', 'filterValue'), 'filterValue' would be the filterValue\n * @returns true if the filter applies, false if not\n */\nexport type OperatorFn = (columnValue: any, filterValue: any) => boolean;\n\n/**\n * All supported operators of PostgREST\n */\nexport type FilterOperator =\n | 'or'\n | 'eq'\n | 'neq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is'\n | 'in'\n | 'cs'\n | 'cd'\n | 'fts'\n | 'plfts';\n\n/**\n * An object describing a selected path of a query\n *\n */\nexport type Path = {\n /**\n * The aliased path if a column or relation name mapping is used within the path\n */\n alias?: string;\n /**\n * The \"real\" path of a column\n */\n path: string;\n /**\n * The full declaration of a column that includes alias, hints and inner joins\n */\n declaration: string;\n /**\n * The aggregate function applied to the path\n */\n aggregate?: string;\n};\n\n/**\n * A decomposed filter applied to a query\n */\nexport type FilterDefinition = {\n /**\n * The path to which the filter is applied\n */\n path: string;\n /**\n * The aliased path if a column or relation name mapping is used\n */\n alias?: string;\n /**\n * The operator that is applied\n */\n operator: FilterOperator;\n /**\n * Whether or not to negate the results of the filter, e.g. when .not('name', 'eq', 'Paris') is applied\n */\n negate: boolean;\n /**\n * The value of the filter\n */\n value: ValueType;\n};\n\n/**\n * A json representation of PostgREST filters that are applied to a query\n */\nexport type FilterDefinitions = (\n | { or: FilterDefinitions }\n | { and: FilterDefinitions }\n | FilterDefinition\n)[];\n\ntype ArrayElement<ArrayType extends readonly unknown[]> =\n ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\n\nexport const isAndFilter = (\n f: ArrayElement<FilterDefinitions>,\n): f is { and: FilterDefinitions } =>\n Array.isArray((f as { and: FilterDefinitions }).and);\n\nexport const isOrFilter = (\n f: ArrayElement<FilterDefinitions>,\n): f is { or: FilterDefinitions } =>\n Array.isArray((f as { or: FilterDefinitions }).or);\n\nexport const isFilterDefinition = (\n f: ArrayElement<FilterDefinitions>,\n): f is FilterDefinition => !isAndFilter(f) && !isOrFilter(f);\n\nexport type OrderDefinition = {\n column: string;\n ascending: boolean;\n nullsFirst: boolean;\n foreignTable?: string;\n};\n","import {\n type FilterDefinitions,\n type Path,\n isAndFilter,\n isFilterDefinition,\n isOrFilter,\n} from './query-types';\n\nexport const extractPathsFromFilters = (f: FilterDefinitions, p: Path[]) => {\n return f.reduce<Path[]>((prev, filter) => {\n if (isAndFilter(filter)) {\n prev.push(...extractPathsFromFilters(filter.and, p));\n } else if (isOrFilter(filter)) {\n prev.push(...extractPathsFromFilters(filter.or, p));\n } else if (isFilterDefinition(filter)) {\n const relatedPath = p.find((p) => p.path === filter.path);\n const pathElements = filter.path.split('.');\n const aliasElements = filter.alias?.split('.');\n const declaration = pathElements\n .map(\n (el, idx) =>\n `${aliasElements && aliasElements[idx] !== el ? `${aliasElements[idx]}:` : ''}${el}`,\n )\n .join('.');\n prev.push({\n path: filter.path,\n alias: filter.alias,\n declaration: relatedPath ? relatedPath.declaration : declaration,\n });\n }\n return prev;\n }, []);\n};\n","import type { Path } from './query-types';\n\nexport const removeFirstPathElement = (p: Path): Path => {\n const aliasWithoutFirstElement = p.alias\n ? p.alias.split('.').slice(1).join('.')\n : undefined;\n const pathWithoutFirstEelment = p.path.split('.').slice(1).join('.');\n\n return {\n declaration: p.declaration.split('.').slice(1).join('.'),\n path: pathWithoutFirstEelment,\n alias:\n aliasWithoutFirstElement &&\n (aliasWithoutFirstElement.split('.').length > 1 ||\n aliasWithoutFirstElement !== pathWithoutFirstEelment)\n ? aliasWithoutFirstElement\n : undefined,\n };\n};\n","import type { Path } from './query-types';\nimport { removeFirstPathElement } from './remove-first-path-element';\n\nexport type NestedPath = {\n alias?: string;\n path: string;\n declaration: string;\n paths: (Path | NestedPath)[];\n};\n\nexport const isNestedPath = (p: Path | NestedPath): p is NestedPath =>\n Array.isArray((p as NestedPath).paths);\n\n// group paths by first path elements declaration\n// returns [Path, Path, NestedPath, NestedPath, Path]\nexport const groupPathsRecursive = (paths: Path[]): (Path | NestedPath)[] => {\n const grouped = paths.reduce<(Path | NestedPath)[]>((prev, curr) => {\n const levels = curr.path.split('.').length;\n if (levels === 1) {\n prev.push(curr);\n return prev;\n }\n\n // if has more than one level left,\n const firstLevelDeclaration = curr.declaration.split('.')[0];\n const indexOfNested = prev.findIndex(\n (p) => isNestedPath(p) && p.declaration === firstLevelDeclaration,\n );\n const pathWithoutCurrentLevel = removeFirstPathElement(curr);\n if (indexOfNested !== -1) {\n // add to nested\n (prev[indexOfNested] as NestedPath).paths.push(pathWithoutCurrentLevel);\n return prev;\n }\n // create nested\n prev.push({\n declaration: firstLevelDeclaration,\n path: curr.path.split('.')[0],\n paths: [pathWithoutCurrentLevel],\n ...(curr.alias ? { alias: curr.alias.split('.')[0] } : {}),\n });\n return prev;\n }, []);\n\n return grouped.map((p) =>\n isNestedPath(p) ? { ...p, paths: groupPathsRecursive(p.paths) } : p,\n );\n};\n","import XRegExp from 'xregexp';\n\nimport type { Path } from './query-types';\n\nexport const parseSelectParam = (s: string, currentPath?: Path): Path[] => {\n s = s.replace(/\\s/g, '');\n\n let result;\n try {\n result = XRegExp.matchRecursive(`,${s}`, '([^,\\\\(]+)\\\\(', '\\\\)', 'g', {\n valueNames: {\n '0': null,\n '1': 'tableName',\n '2': 'selectedColumns',\n '3': null,\n },\n }).map((item) => {\n if (\n item.name === 'tableName' &&\n item.value &&\n !item.value.startsWith(',')\n ) {\n item.value = ',' + item.value;\n }\n return item;\n });\n } catch (e) {\n const path = currentPath?.path\n ? `${currentPath?.declaration} with alias ${currentPath?.alias} at path ${currentPath?.path}`\n : 'root';\n throw new Error(`Unable to parse ${s} at ${path}`, {\n cause: e,\n });\n }\n\n const foreignTables = result.reduce((prev, curr, idx, matches) => {\n if (curr.name === 'selectedColumns' && curr.value.length > 0) {\n const name = matches[idx - 1].value.slice(1, -1);\n prev = { ...prev, [name]: curr.value };\n }\n return prev;\n }, {});\n\n const columns = s\n .replace(\n new RegExp(\n `${Object.entries(foreignTables)\n .map(([table, selectedColumns]) =>\n `${table}(${selectedColumns})`\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/\\*/g, '\\\\*'),\n )\n .join('|')}`,\n 'g',\n ),\n '',\n )\n .replace(/(,)\\1+/g, ',')\n .split(',')\n .filter((c) => c.length > 0)\n .map((c) => {\n const split = c.split(':');\n const hasAlias = split.length > 1;\n\n const aggregateSplit = split[hasAlias ? 1 : 0].split('.');\n const hasAggregate =\n aggregateSplit.length > 1 && aggregateSplit[1].endsWith('()');\n\n return {\n declaration: [currentPath?.declaration, c].filter(Boolean).join('.'),\n alias:\n hasAlias || currentPath?.alias\n ? [currentPath?.alias ?? currentPath?.path, split[0]]\n .filter(Boolean)\n .join('.')\n : undefined,\n path: [\n currentPath?.path,\n hasAggregate ? aggregateSplit[0] : split[hasAlias ? 1 : 0],\n ]\n .filter(Boolean)\n .join('.'),\n ...(hasAggregate ? { aggregate: aggregateSplit[1].slice(0, -2) } : {}),\n };\n });\n\n return [\n ...columns,\n ...Object.entries(foreignTables).flatMap(\n ([currentDeclaration, selectedColumns]) => {\n // example for declaration\n // alias:organisation!contact_organisation_id_fkey!inner\n const aliasSplit = currentDeclaration.split(':');\n\n const currentAliasElem =\n aliasSplit.length > 1 ? aliasSplit[0] : undefined;\n\n const currentPathDeclaration = aliasSplit[aliasSplit.length - 1];\n const currentPathElem = currentPathDeclaration.split('!')[0];\n\n const path = [currentPath?.path, currentPathElem]\n .filter(Boolean)\n .join('.');\n\n const alias = [\n currentPath?.alias ?? currentPath?.path,\n currentAliasElem ?? currentPathElem,\n ]\n .filter(Boolean)\n .join('.');\n\n const declaration = [currentPath?.declaration, currentDeclaration]\n .filter(Boolean)\n .join('.');\n\n return parseSelectParam(`${selectedColumns}`, {\n path,\n alias: currentPath?.alias || currentAliasElem ? alias : undefined,\n declaration,\n });\n },\n ),\n ];\n};\n","// removes alias from every level of declaration\nexport const removeAliasFromDeclaration = (d: string) =>\n d\n .split('.')\n .map((el) => el.split(':').pop() as string)\n .join('.');\n","import {\n type NestedPath,\n groupPathsRecursive,\n isNestedPath,\n} from '../lib/group-paths-recursive';\nimport type { Path } from '../lib/query-types';\n\n// Transforms a list of Path[] into a select statement\nexport const buildSelectStatement = (paths: Path[]): string => {\n return buildSelectStatementFromGroupedPaths(groupPathsRecursive(paths));\n};\n\n// Transforms a list of (Path | NestedPath)[] grouped statements into a select statement\nexport const buildSelectStatementFromGroupedPaths = (\n paths: (Path | NestedPath)[],\n): string =>\n paths\n .map((i) => {\n if (isNestedPath(i)) {\n return `${i.declaration}(${buildSelectStatement(i.paths)})`;\n }\n return `${i.alias ? `${i.alias}:` : ''}${i.path}`;\n })\n .join(',');\n","import { type NestedPath, isNestedPath } from '../lib/group-paths-recursive';\nimport type { Path } from '../lib/query-types';\n\nexport const DEDUPE_ALIAS_PREFIX = 'd';\n\nexport const dedupeGroupedPathsRecursive = (\n grouped: (Path | NestedPath)[],\n): (Path | NestedPath)[] => {\n const dedupeCounters = new Map<string, number>();\n\n return grouped.map((p, idx, a) => {\n // never dedupe non-nested paths because even if there is a duplicate we always want to dedupe the nested path instead\n // e.g. inbox_id,inbox_id(name) should be deduped to inbox_id,d_0_inbox_id:inbox_id(name)\n if (!isNestedPath(p)) return p;\n\n // dedupe current nested path if there is another path with the same `path`\n if (a.some((i, itemIdx) => i.path === p.path && idx !== itemIdx)) {\n const counter = dedupeCounters.get(p.path) || 0;\n dedupeCounters.set(p.path, counter + 1);\n const alias = [DEDUPE_ALIAS_PREFIX, counter, p.path].join('_');\n return {\n ...p,\n alias,\n declaration: `${alias}:${p.declaration}`,\n paths: dedupeGroupedPathsRecursive(p.paths),\n };\n }\n\n return {\n ...p,\n paths: dedupeGroupedPathsRecursive(p.paths),\n };\n });\n};\n","import { extractPathsFromFilters } from '../lib/extract-paths-from-filter';\nimport {\n type NestedPath,\n groupPathsRecursive,\n} from '../lib/group-paths-recursive';\nimport { parseSelectParam } from '../lib/parse-select-param';\nimport type { FilterDefinitions, Path } from '../lib/query-types';\nimport { removeAliasFromDeclaration } from '../lib/remove-alias-from-declaration';\nimport { buildSelectStatementFromGroupedPaths } from './build-select-statement';\nimport { dedupeGroupedPathsRecursive } from './dedupe';\n\nexport type BuildNormalizedQueryOps<Q extends string = '*'> = {\n query?: Q | null;\n // if true, will not add any paths from the cache to the query\n disabled?: boolean;\n queriesForTable: () => { paths: Path[]; filters: FilterDefinitions }[];\n};\n\nexport type BuildNormalizedQueryReturn = {\n // The joint select query\n selectQuery: string;\n // All paths the user is querying for\n groupedUserQueryPaths: (NestedPath | Path)[] | null;\n // All paths the user is querying for + all paths that are currently loaded into the cache\n groupedPaths: (NestedPath | Path)[];\n};\n\n/**\n * returns select statement that includes the users query + all paths currently loaded into cache to later perform a \"smart update\"\n *\n * the select statement does not contain any user-defined aliases. only custom ones to dedupe.\n * without deduping, we would not be able to query inbox_id,inbox:inbox_id(name),\n * because it will result in a select of inbox_id,inbox_id(name), which does not work.\n * to dedupe, we add a custom alias to the query, e.g. dedupe_0:inbox_id,inbox_id(name)\n * we then later remove them when normalizing the data\n **/\nexport const buildNormalizedQuery = <Q extends string = '*'>({\n query,\n disabled,\n queriesForTable,\n}: BuildNormalizedQueryOps<Q>): BuildNormalizedQueryReturn | null => {\n // parse user query\n const userQueryPaths = query ? parseSelectParam(query) : null;\n\n // unique set of declaration without paths.\n // alias not needed for paths\n // declaration without alias!\n const paths: Path[] = userQueryPaths\n ? userQueryPaths.map((q) => ({\n declaration: removeAliasFromDeclaration(q.declaration),\n path: q.path,\n }))\n : [];\n\n if (!disabled) {\n for (const tableQuery of queriesForTable()) {\n for (const filterPath of extractPathsFromFilters(\n tableQuery.filters,\n tableQuery.paths,\n )) {\n // add paths used in filter\n const path = tableQuery.paths.find(\n (p) => p.path === filterPath.path && p.alias === filterPath.alias,\n ) ?? {\n path: filterPath.path,\n declaration: filterPath.path,\n };\n // add unique\n if (\n paths.every(\n (p) =>\n removeAliasFromDeclaration(p.declaration) !==\n removeAliasFromDeclaration(path.declaration),\n )\n ) {\n // do not use alias\n paths.push({\n path: path.path,\n declaration: removeAliasFromDeclaration(path.declaration),\n });\n }\n }\n // add paths used in query\n for (const path of tableQuery.paths) {\n if (\n paths.every(\n (p) =>\n removeAliasFromDeclaration(p.declaration) !==\n removeAliasFromDeclaration(path.declaration),\n ) &&\n // do not add agg functions\n !path.declaration.endsWith('.count') &&\n // do not add wildcard queries\n !path.declaration.endsWith('*')\n ) {\n paths.push({\n path: path.path,\n declaration: removeAliasFromDeclaration(path.declaration),\n });\n }\n }\n }\n }\n\n const groupedPaths = groupPathsRecursive(paths);\n const groupedDedupedPaths = dedupeGroupedPathsRecursive(groupedPaths);\n\n const selectQuery = buildSelectStatementFromGroupedPaths(groupedDedupedPaths);\n if (selectQuery.length === 0) return null;\n return {\n selectQuery,\n groupedUserQueryPaths: userQueryPaths\n ? groupPathsRecursive(userQueryPaths)\n : null,\n groupedPaths: groupedDedupedPaths,\n };\n};\n","import { flatten } from 'flat';\n\nimport { get } from '../lib/get';\nimport { type NestedPath, isNestedPath } from '../lib/group-paths-recursive';\nimport { isPlainObject } from '../lib/is-plain-object';\nimport type { Path } from '../lib/query-types';\nimport type { BuildNormalizedQueryReturn } from './build-normalized-query';\n\n/**\n * The parsed response of the mutation fetcher\n **/\nexport type MutationFetcherResponse<R> = {\n /**\n * Normalized response. A flat json object with a depth of 1, where the keys are the full json paths.\n **/\n normalizedData: R;\n /**\n * Result of the query passed by the user\n **/\n userQueryData?: R;\n};\n\nexport const buildMutationFetcherResponse = <R>(\n /**\n * response of the select query built by `buildNormalizedQuery`. contains dedupe aliases.\n **/\n input: R,\n {\n groupedPaths,\n groupedUserQueryPaths,\n }: Pick<BuildNormalizedQueryReturn, 'groupedPaths' | 'groupedUserQueryPaths'>,\n): MutationFetcherResponse<R> => {\n return {\n normalizedData: normalizeResponse<R>(groupedPaths, input),\n userQueryData: groupedUserQueryPaths\n ? buildUserQueryData<R>(groupedUserQueryPaths, groupedPaths, input)\n : undefined,\n };\n};\n\n/**\n * Normalize the response by removing the dedupe alias and flattening it\n **/\nexport const normalizeResponse = <R>(\n groups: (Path | NestedPath)[],\n obj: R,\n): R => {\n if (groups.some((p) => p.path === '*')) {\n // if wildcard, add every non nested value\n // for every nested value, check if groups contains a nested path for it. if not, also add it.\n // reason is that the wildcard does not select relations\n\n Object.entries(obj as Record<string, unknown>).forEach(([k, v]) => {\n if (typeof v === 'object' || Array.isArray(v)) {\n if (!groups.some((g) => isNestedPath(g) && g.path === k)) {\n groups.push({\n path: k,\n declaration: k,\n });\n }\n } else if (!groups.some((g) => g.path === k)) {\n groups.push({\n path: k,\n declaration: k,\n });\n }\n });\n }\n\n return groups.reduce<R>((prev, curr) => {\n // prefer alias over path because of dedupe alias\n const value = get(obj, curr.alias || curr.path);\n\n if (typeof value === 'undefined') return prev;\n if (value === null) {\n return {\n ...prev,\n // add hint to path if it has dedupe alias\n // can happen if the same relation is queried multiple times via different fkeys\n [`${curr.path}${\n curr.alias?.startsWith('d_') && curr.declaration.split('!').length > 1\n ? `!${curr.declaration.split('!')[1]}`\n : ''\n }`]: value,\n };\n }\n if (!isNestedPath(curr)) {\n return {\n ...prev,\n ...flatten({\n [curr.path]:\n value !== null &&\n (isPlainObject(value) || (Array.isArray(value) && value.length > 0))\n ? flatten(value)\n : value,\n }),\n };\n }\n if (Array.isArray(value)) {\n return {\n ...prev,\n ...(flatten({\n [curr.path]: value.map((v) => normalizeResponse(curr.paths, v)),\n }) as R),\n };\n }\n return {\n ...prev,\n ...flatten({\n // add hint to path if it has dedupe alias\n // can happen if the same relation is queried multiple times via different fkeys\n [`${curr.path}${\n curr.alias?.startsWith('d_') && curr.declaration.split('!').length > 1\n ? `!${curr.declaration.split('!')[1]}`\n : ''\n }`]: normalizeResponse(curr.paths, value as Record<string, unknown>),\n }),\n };\n }, {} as R);\n};\n\n/**\n * Build userQueryData from response\n *\n * note that `paths` is reflecting `obj`, not `userQueryPaths`.\n * iterate over `userQueryPaths` and find the corresponding path in `paths`.\n * Then, get value using the found alias and path from `obj`.\n **/\nconst buildUserQueryData = <R>(\n userQueryGroups: (Path | NestedPath)[],\n pathGroups: (Path | NestedPath)[],\n obj: R,\n): R => {\n if (pathGroups.some((p) => p.path === '*')) {\n // if wildcard, add every non nested value\n // for every nested value, check if pathGroups contains a nested path for it. if not, also add it.\n // reason is that the wildcard does not select relations\n\n Object.entries(obj as Record<string, unknown>).forEach(([k, v]) => {\n if (typeof v === 'object' || Array.isArray(v)) {\n if (!pathGroups.some((g) => isNestedPath(g) && g.path === k)) {\n pathGroups.push({\n path: k,\n declaration: k,\n });\n }\n } else if (!pathGroups.some((g) => g.path === k)) {\n pathGroups.push({\n path: k,\n declaration: k,\n });\n }\n });\n }\n\n if (userQueryGroups.some((p) => p.path === '*')) {\n // if wildcard, add every non nested value\n // for every nested value, check if pathGroups contains a nested path for it. if not, also add it.\n // reason is that the wildcard does not select relations\n\n Object.entries(obj as Record<string, unknown>).forEach(([k, v]) => {\n if (typeof v === 'object' || Array.isArray(v)) {\n if (!pathGroups.some((g) => isNestedPath(g) && g.path === k)) {\n userQueryGroups.push({\n path: k,\n declaration: k,\n });\n }\n } else if (!userQueryGroups.some((g) => g.path === k)) {\n userQueryGroups.push({\n path: k,\n declaration: k,\n });\n }\n });\n }\n\n return userQueryGroups.reduce<R>((prev, curr) => {\n if (curr.path === '*') return prev;\n // paths is reflecting the obj\n const inputPath = pathGroups.find(\n (p) => p.path === curr.path && isNestedPath(p) === isNestedPath(curr),\n );\n if (!inputPath) {\n // should never happen though since userQueryPaths is a subset of paths\n throw new Error(`Path ${curr.path} not found in response paths`);\n }\n const value = get(obj, inputPath.alias || inputPath.path);\n\n if (typeof value === 'undefined') return prev;\n if (value === null || !isNestedPath(curr) || !isNestedPath(inputPath)) {\n (prev as Record<string, unknown>)[curr.alias ? curr.alias : curr.path] =\n value;\n } else if (Array.isArray(value)) {\n (prev as Record<string, unknown>)[curr.alias ? curr.alias : curr.path] =\n value.map((v) => buildUserQueryData(curr.paths, inputPath.paths, v));\n } else {\n (prev as Record<string, unknown>)[curr.alias ? curr.alias : curr.path] =\n buildUserQueryData(\n curr.paths,\n inputPath.paths,\n value as Record<string, unknown>,\n );\n }\n return prev;\n }, {} as R);\n};\n","export const get = (obj: any, path: string, defaultValue: any = undefined) => {\n const split = path.split(/((?:\\.|,|\\[|\\]|->>|->)+)/g);\n let result: any = obj;\n for (let i = -1; i < split.length; i += 2) {\n const separator = split[i];\n let key: string | number = split[i + 1];\n if (!key) {\n continue;\n }\n if (separator?.endsWith('->') || separator?.endsWith('->>')) {\n if (/^\\d+$/.test(key)) {\n key = Number.parseInt(key, 10);\n }\n }\n if (separator?.endsWith('->>')) {\n result = `${result ? result[key] : result}`;\n } else {\n result = result ? result[key] : result;\n }\n }\n return result === undefined || result === obj ? defaultValue : result;\n};\n","export function isPlainObject(\n value: unknown,\n): value is Record<string, unknown> {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n","/**\n * Parses a url and returns the table name the url is interacting with.\n *\n * For mutations, the .split('?') goes unused.\n *\n * @param url The url we are pulling the table name from\n * @returns Table name\n */\nexport const getTableFromUrl = (url: string): string => {\n // Split the url\n const split = url.toString().split('/');\n // Pop the last part of the path off and remove any params if they exist\n const table = split.pop()?.split('?').shift() as string;\n // Pop an additional position to check for rpc\n const maybeRpc = split.pop() as string;\n // Rejoin the result to include rpc otherwise just table name\n return [maybeRpc === 'rpc' ? maybeRpc : null, table]\n .filter(Boolean)\n .join('/');\n};\n","export type MaybeLikeQueryBuilder<Result> = unknown;\n\nexport type LikeQueryBuilder<Result> = {\n url: URL;\n};\n\nexport const isLikeQueryBuilder = <Result>(\n v: MaybeLikeQueryBuilder<Result>,\n): v is LikeQueryBuilder<Result> => {\n if (typeof v !== 'object' || v === null) return false;\n const obj = v as LikeQueryBuilder<Result>;\n\n return typeof obj['url'] === 'object';\n};\n","import { getTableFromUrl } from './get-table-from-url';\nimport { MaybeLikePostgrestBuilder } from './like-postgrest-builder';\nimport { isLikeQueryBuilder } from './like-query-builder';\n\nexport const getTable = <Result>(\n query: MaybeLikePostgrestBuilder<Result>,\n): string => {\n if (!isLikeQueryBuilder(query)) {\n throw new Error('Invalid PostgrestBuilder');\n }\n\n return getTableFromUrl(query['url'].pathname);\n};\n","import type { PostgrestHasMorePaginationResponse } from './response-types';\n\nexport type PostgrestPaginationCacheData<Result> = Result[][];\n\nexport const isPostgrestPaginationCacheData = <Result>(\n q: unknown,\n): q is PostgrestPaginationCacheData<Result> => {\n if (!Array.isArray(q)) return false;\n return q.length === 0 || Array.isArray(q[0]);\n};\n\nexport type PostgrestHasMorePaginationCacheData<Result> =\n PostgrestHasMorePaginationResponse<Result>[];\n\nexport const isPostgrestHasMorePaginationCacheData = <Result>(\n q: unknown,\n): q is PostgrestHasMorePaginationCacheData<Result> => {\n if (!Array.isArray(q)) return false;\n if (q.length === 0) return true;\n const firstPage = q[0];\n return (\n Array.isArray(\n (firstPage as PostgrestHasMorePaginationResponse<Result>).data,\n ) &&\n typeof (firstPage as PostgrestHasMorePaginationResponse<Result>).hasMore ===\n 'boolean'\n );\n};\n","import type {\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\n\n// Convencience type to not bloat up implementation\nexport type AnyPostgrestResponse<Result> =\n | PostgrestSingleResponse<Result>\n | PostgrestMaybeSingleResponse<Result>\n | PostgrestResponse<Result>;\n\nexport const isAnyPostgrestResponse = <Result>(\n q: unknown,\n): q is AnyPostgrestResponse<Result> => {\n if (!q) return false;\n return (\n typeof (q as AnyPostgrestResponse<Result>).data === 'object' ||\n Array.isArray((q as AnyPostgrestResponse<Result>).data)\n );\n};\n\nexport type PostgrestPaginationResponse<Result> = Result[];\n\nexport const isPostgrestPaginationResponse = <Result>(\n q: unknown,\n): q is PostgrestPaginationResponse<Result> => {\n return Array.isArray(q);\n};\n\nexport type PostgrestHasMorePaginationResponse<Result> = {\n data: Result[];\n hasMore: boolean;\n};\n\nexport const isPostgrestHasMorePaginationResponse = <Result>(\n q: unknown,\n): q is PostgrestHasMorePaginationResponse<Result> => {\n if (!q) return false;\n return (\n Array.isArray((q as PostgrestHasMorePaginationResponse<Result>).data) &&\n typeof (q as PostgrestHasMorePaginationResponse<Result>).hasMore ===\n 'boolean'\n );\n};\n","import { flatten, unflatten } from 'flat';\n\nimport { sortSearchParams } from './sort-search-param';\n\n/**\n * Encodes an object by url-encoding an ordered lists of all paths and their values.\n */\nexport const encodeObject = (obj: Record<string, unknown>): string => {\n const sortedEntries = Object.entries(\n flatten(obj) as Record<string, unknown>,\n ).sort(([a], [b]) => a.length - b.length);\n const bodyParams = new URLSearchParams();\n sortedEntries.forEach(([key, value]) => {\n bodyParams.append(key, String(value));\n });\n return sortSearchParams(bodyParams).toString();\n};\n\n/**\n * Decodes a URL-encoded string back into a nested object.\n * This is the reverse operation of encodeObject.\n */\nexport const decodeObject = (\n encodedString: string,\n): Record<string, unknown> => {\n const params = new URLSearchParams(encodedString);\n const flatObject: Record<string, unknown> = {};\n\n // Convert URLSearchParams back to a flat object\n params.forEach((value, key) => {\n // Try to convert string values to appropriate types\n let parsedValue: unknown = value;\n\n // Try to parse numbers\n if (/^-?\\d+$/.test(value)) {\n parsedValue = parseInt(value, 10);\n } else if (/^-?\\d+\\.\\d+$/.test(value)) {\n parsedValue = parseFloat(value);\n } else if (value === 'true') {\n parsedValue = true;\n } else if (value === 'false') {\n parsedValue = false;\n } else if (value === 'null') {\n parsedValue = null;\n }\n\n flatObject[key] = parsedValue;\n });\n\n // Unflatten the object to restore nested structure\n return unflatten(flatObject);\n};\n","export const sortSearchParams = (params: URLSearchParams) =>\n new URLSearchParams(\n Array.from(params.entries()).sort((a, b) => {\n const x = `${a[0]}${a[1]}`;\n const y = `${b[0]}${b[1]}`;\n return x > y ? 1 : -1;\n }),\n );\n","import type {\n PostgrestBuilder,\n PostgrestClientOptions,\n} from '@supabase/postgrest-js';\n\nexport const isPostgrestBuilder = <Result>(\n q: unknown,\n): q is PostgrestBuilder<PostgrestClientOptions, Result> => {\n return (\n typeof (q as PostgrestBuilder<PostgrestClientOptions, Result>)\n .throwOnError === 'function'\n );\n};\n","import type {\n PostgrestClientOptions,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport type { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\n\nexport const isPostgrestTransformBuilder = <\n ClientOptions extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n q: unknown,\n): q is PostgrestTransformBuilder<\n ClientOptions,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n> => {\n return (\n typeof (\n q as PostgrestTransformBuilder<\n ClientOptions,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >\n ).abortSignal === 'function'\n );\n};\n","export const setFilterValue = (\n searchParams: URLSearchParams,\n path: string,\n op: string,\n value: string,\n) => {\n const filters = searchParams.getAll(path);\n // delete all\n searchParams.delete(path);\n\n // re-create\n for (const f of filters) {\n if (f.startsWith(`${op}.`)) {\n continue;\n }\n searchParams.append(path, f);\n }\n\n searchParams.append(path, `${op}.${value}`);\n};\n","/**\n * Check if a value is a valid ISO DateTime string\n * @param v\n * @returns\n */\nexport const isISODateString = (v: unknown): boolean =>\n typeof v === 'string' &&\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/.test(\n v,\n );\n","import { isISODateString } from './is-iso-date-string';\nimport type { ValueType } from './query-types';\n\n/**\n * Safely parse any value to a ValueType\n * @param v Any value\n * @returns a ValueType\n */\nexport const parseValue = (v: any): ValueType => {\n if (isISODateString(v)) return new Date(v);\n try {\n return JSON.parse(v);\n } catch {\n return v;\n }\n};\n","import type { OrderDefinition } from './query-types';\n\n/**\n * Parses orderByKey back to OrderDefinition\n * @param key generated by PostgrestParser\n * @returns The parsed OrderDefinition\n */\nexport const parseOrderByKey = (v: string): OrderDefinition[] => {\n return v.split('|').map((orderBy) => {\n const [tableDef, orderDef] = orderBy.split(':');\n const [foreignTableOrCol, maybeCol] = tableDef.split('.');\n const [dir, nulls] = orderDef.split('.');\n return {\n ascending: dir === 'asc',\n nullsFirst: nulls === 'nullsFirst',\n foreignTable: maybeCol ? foreignTableOrCol : undefined,\n column: maybeCol ? maybeCol : foreignTableOrCol,\n };\n });\n};\n","import { OrderDefinition } from './query-types';\n\nexport const parseOrderBy = (searchParams: URLSearchParams) => {\n const orderBy: OrderDefinition[] = [];\n searchParams.forEach((value, key) => {\n const split = key.split('.');\n if (split[split.length === 2 ? 1 : 0] === 'order') {\n // separated by ,\n const orderByDefs = value.split(',');\n orderByDefs.forEach((def) => {\n const [column, ascending, nullsFirst] = def.split('.');\n orderBy.push({\n ascending: ascending === 'asc',\n column,\n nullsFirst: nullsFirst === 'nullsfirst',\n foreignTable: split.length === 2 ? split[0] : undefined,\n });\n });\n }\n });\n\n return orderBy;\n};\n","import {\n type FilterDefinition,\n type FilterDefinitions,\n isAndFilter,\n isFilterDefinition,\n isOrFilter,\n} from './query-types';\n\n// Helper to search for filters in a filter definition\nexport const findFilters = (\n f: FilterDefinitions,\n by: Partial<FilterDefinition>,\n) => {\n const filters: FilterDefinition[] = [];\n f.forEach((filter) => {\n if (isAndFilter(filter)) {\n filters.push(...findFilters(filter.and, by));\n }\n if (isOrFilter(filter)) {\n filters.push(...findFilters(filter.or, by));\n }\n if (isFilterDefinition(filter)) {\n if (\n (typeof by.path === 'undefined' || filter.path === by.path) &&\n (typeof by.alias === 'undefined' || filter.alias === by.alias) &&\n (typeof by.value === 'undefined' || filter.value === by.value) &&\n (typeof by.negate === 'undefined' || filter.negate === by.negate) &&\n (typeof by.operator === 'undefined' || filter.operator === by.operator)\n ) {\n filters.push(filter);\n }\n }\n });\n return filters;\n};\n","import type {\n PostgrestClientOptions,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\n\nimport { isPlainObject } from './lib/is-plain-object';\nimport { parseOrderBy } from './lib/parse-order-by';\nimport type { PostgrestPaginationResponse } from './lib/response-types';\n\nexport type PostgrestCursorPaginationFetcher<Type, Args> = (\n args: Args,\n) => Promise<Type>;\n\nexport type PostgrestCursorPaginationKeyDecoder<Args> = (args: Args) => {\n orderBy?: string;\n uqOrderBy?: string;\n};\n\nexport const createCursorPaginationFetcher = <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n Args,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n Relationships\n >)\n | null,\n config: {\n decode: PostgrestCursorPaginationKeyDecoder<Args>;\n orderBy: string;\n uqOrderBy?: string;\n rpcArgs?: { orderBy: string; uqOrderBy?: string };\n },\n): PostgrestCursorPaginationFetcher<\n PostgrestPaginationResponse<Result>,\n Args\n> | null => {\n if (!queryFactory) return null;\n return async (args) => {\n const cursor = config.decode(args);\n\n const query = queryFactory();\n\n if (config.rpcArgs) {\n if (query['method'] === 'GET') {\n if (cursor.orderBy) {\n query['url'].searchParams.set(config.rpcArgs.orderBy, cursor.orderBy);\n }\n if (config.rpcArgs.uqOrderBy && cursor.uqOrderBy) {\n query['url'].searchParams.set(\n config.rpcArgs.uqOrderBy,\n cursor.uqOrderBy,\n );\n }\n } else {\n query['body'] = {\n ...(isPlainObject(query['body']) ? query['body'] : {}),\n [config.rpcArgs.orderBy]: cursor.orderBy,\n ...(cursor.uqOrderBy && config.rpcArgs.uqOrderBy\n ? { [config.rpcArgs.uqOrderBy]: cursor.uqOrderBy }\n : {}),\n };\n }\n\n const { data } = await query.throwOnError();\n\n // cannot be null because of .throwOnError()\n return data as Result[];\n }\n\n const orderByDef = parseOrderBy(query['url'].searchParams);\n const orderBy = orderByDef.find((o) => o.column === config.orderBy);\n\n if (!orderBy) {\n throw new Error(`No ordering key found for path ${config.orderBy}`);\n }\n\n const uqOrderBy = config.uqOrderBy\n ? orderByDef.find((o) => o.column === config.uqOrderBy)\n : null;\n\n if (cursor.orderBy && config.uqOrderBy && cursor.uqOrderBy && uqOrderBy) {\n const operator = orderBy.ascending ? 'gt' : 'lt';\n const uqOperator = uqOrderBy.ascending ? 'gt' : 'lt';\n\n query['url'].searchParams.append(\n 'or',\n `(${config.orderBy}.${operator}.\"${cursor.orderBy}\",and(${config.orderBy}.eq.\"${cursor.orderBy}\",${config.uqOrderBy}.${uqOperator}.\"${cursor.uqOrderBy}\"))`,\n );\n } else if (cursor.orderBy) {\n const operator = orderBy.ascending ? 'gt' : 'lt';\n query['url'].searchParams.append(\n config.orderBy,\n `${operator}.${cursor.orderBy}`,\n );\n }\n\n const { data, error } = await query;\n\n if (error) throw error;\n\n // cannot be null because of .throwOnError()\n return data as Result[];\n };\n};\n","import type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\n\nimport {\n type MutationFetcherResponse,\n buildMutationFetcherResponse,\n} from './fetch/build-mutation-fetcher-response';\nimport {\n type BuildNormalizedQueryOps,\n buildNormalizedQuery,\n} from './fetch/build-normalized-query';\n\nexport type DeleteFetcher<T extends GenericTable, R> = (\n input: Partial<T['Row']>[],\n) => Promise<MutationFetcherResponse<R>[] | null>;\n\nexport type DeleteFetcherOptions<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n Re = T extends { Relationships: infer R } ? R : unknown,\n> = Parameters<PostgrestQueryBuilder<O, S, T, Re>['delete']>[0];\n\nexport const buildDeleteFetcher =\n <\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n >(\n qb: PostgrestQueryBuilder<O, S, T, R>,\n primaryKeys: (keyof T['Row'])[],\n opts: BuildNormalizedQueryOps<Q> &\n DeleteFetcherOptions<O, S, T, RelationName>,\n ): DeleteFetcher<T, R> =>\n async (\n input: Partial<T['Row']>[],\n ): Promise<MutationFetcherResponse<R>[] | null> => {\n let filterBuilder = qb.delete(opts);\n\n if (primaryKeys.length === 1) {\n const primaryKey = primaryKeys[0] as string;\n filterBuilder.in(\n primaryKey,\n input.map((i) => {\n const v = i[primaryKey];\n if (!v) {\n throw new Error(\n `Missing value for primary key ${primaryKey as string}`,\n );\n }\n return v;\n // TODO i wont bother with this, but maybe i can nerdsnipe somone else into it\n }) as any[],\n );\n } else {\n filterBuilder = filterBuilder.or(\n input\n .map(\n (i) =>\n `and(${primaryKeys.map((c) => {\n const v = i[c];\n if (!v) {\n throw new Error(\n `Missing value for primary key ${c as string}`,\n );\n }\n return `${c as string}.eq.${v}`;\n })})`,\n )\n .join(','),\n );\n }\n\n const primaryKeysData = input.map((i) =>\n primaryKeys.reduce<R>((prev, key) => {\n return {\n ...prev,\n [key]: i[key],\n };\n }, {} as R),\n );\n\n const query = buildNormalizedQuery<Q>(opts);\n if (query) {\n const { selectQuery, groupedUserQueryPaths, groupedPaths } = query;\n // make sure that primary keys are included in the select query\n const groupedPathsWithPrimaryKeys = groupedPaths;\n const addKeys: string[] = [];\n primaryKeys.forEach((key) => {\n if (!groupedPathsWithPrimaryKeys.find((p) => p.path === key)) {\n groupedPathsWithPrimaryKeys.push({\n declaration: key as string,\n path: key as string,\n });\n addKeys.push(key as string);\n }\n });\n const { data } = await filterBuilder\n .select([selectQuery, ...addKeys].join(','))\n .throwOnError();\n return (data as R[]).map((d) =>\n buildMutationFetcherResponse(d, {\n groupedPaths: groupedPathsWithPrimaryKeys,\n groupedUserQueryPaths,\n }),\n );\n }\n\n await filterBuilder.throwOnError();\n\n if (opts.queriesForTable().length > 0) {\n // if there is at least one query on the table we are deleting from, return primary keys\n return primaryKeysData.map((pk) => ({ normalizedData: pk }));\n }\n\n return null;\n };\n","import type { PostgrestFilter } from '../postgrest-filter';\nimport type { PostgrestQueryParserOptions } from '../postgrest-query-parser';\nimport type { DecodedKey } from './types';\n\nexport type RevalidateRelationOpt<Type> = {\n schema?: string;\n relation: string;\n relationIdColumn: string;\n fKeyColumn: keyof Type;\n};\n\nexport type RevalidateRelations<Type extends Record<string, unknown>> =\n RevalidateRelationOpt<Type>[];\n\nexport type RevalidateRelationsProps<Type extends Record<string, unknown>> = {\n input: Partial<Type>;\n decodedKey: Pick<DecodedKey, 'schema' | 'table' | 'queryKey'>;\n getPostgrestFilter: (\n query: string,\n opts?: PostgrestQueryParserOptions,\n ) => Pick<PostgrestFilter<Type>, 'applyFilters'>;\n};\n\nexport const shouldRevalidateRelation = <Type extends Record<string, unknown>>(\n relations: RevalidateRelations<Type>,\n {\n input,\n getPostgrestFilter,\n decodedKey: { schema, table, queryKey },\n }: RevalidateRelationsProps<Type>,\n): boolean =>\n Boolean(\n relations.find(\n (r) =>\n (!r.schema || r.schema === schema) &&\n r.relation === table &&\n typeof input[r.fKeyColumn] !== 'undefined' &&\n getPostgrestFilter(queryKey, {\n exclusivePaths: [r.relationIdColumn],\n }).applyFilters({\n [r.relationIdColumn]: input[r.fKeyColumn],\n }),\n ),\n );\n","import type { DecodedKey } from './types';\n\nexport type RevalidateTableOpt = { schema?: string; table: string };\n\nexport type RevalidateTables = RevalidateTableOpt[];\n\nexport type RevalidateTablesProps = {\n decodedKey: Pick<DecodedKey, 'schema' | 'table'>;\n};\n\nexport const shouldRevalidateTable = (\n tables: RevalidateTables,\n { decodedKey: { schema, table } }: RevalidateTablesProps,\n): boolean =>\n Boolean(\n tables.find((t) => (!t.schema || t.schema === schema) && t.table === table),\n );\n","import type {\n PostgrestHasMorePaginationCacheData,\n PostgrestPaginationCacheData,\n} from '../lib/cache-data-types';\n\nexport const toHasMorePaginationCacheData = <\n Type extends Record<string, unknown>,\n>(\n a: Type[],\n currentData: PostgrestHasMorePaginationCacheData<Type>,\n chunkSize: number,\n) => {\n // return array in chunks\n const hasMoreCache = currentData.map((p) => p.hasMore);\n return a.reduce<PostgrestHasMorePaginationCacheData<Type>>(\n (resultArray, item, index) => {\n // default limit is 1000\n // ref: https://github.com/supabase/supabase/discussions/3765#discussioncomment-1581021\n const chunkIndex = Math.floor(index / chunkSize);\n\n if (!resultArray[chunkIndex]) {\n let hasMore = hasMoreCache[chunkIndex];\n if (!hasMore) {\n // if new page, set to hasMore of last page\n hasMore = hasMoreCache[hasMoreCache.length - 1];\n }\n if (chunkIndex > 0) {\n // if not first page, set prev has more to true\n resultArray[chunkIndex - 1].hasMore = true;\n }\n resultArray[chunkIndex] = {\n data: [],\n hasMore:\n hasMoreCache[chunkIndex] ??\n hasMoreCache[hasMoreCache.length - 1] ??\n false,\n }; // start a new chunk\n }\n\n resultArray[chunkIndex].data.push(item);\n\n return resultArray;\n },\n [],\n );\n};\n\nexport const toPaginationCacheData = <Type extends Record<string, unknown>>(\n a: Type[],\n chunkSize: number,\n) => {\n return a.reduce<PostgrestPaginationCacheData<Type>>(\n (resultArray, item, index) => {\n // default limit is 1000\n // ref: https://github.com/supabase/supabase/discussions/3765#discussioncomment-1581021\n const chunkIndex = Math.floor(index / chunkSize);\n\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = []; // start a new chunk\n }\n\n resultArray[chunkIndex].push(item);\n\n return resultArray;\n },\n [],\n );\n};\n","import {\n isPostgrestHasMorePaginationCacheData,\n isPostgrestPaginationCacheData,\n} from './lib/cache-data-types';\nimport { isAnyPostgrestResponse } from './lib/response-types';\nimport { shouldRevalidateRelation } from './mutate/should-revalidate-relation';\nimport { shouldRevalidateTable } from './mutate/should-revalidate-table';\nimport {\n toHasMorePaginationCacheData,\n toPaginationCacheData,\n} from './mutate/transformers';\nimport type { DecodedKey, MutatorFn, RevalidateOpts } from './mutate/types';\nimport type { PostgrestFilter } from './postgrest-filter';\nimport type { PostgrestQueryParserOptions } from './postgrest-query-parser';\n\nconst filterByPks = <Type extends Record<string, unknown>>(\n input: Type,\n currentData: Type[],\n primaryKeys: (keyof Type)[],\n) => {\n return currentData.filter((i) =>\n primaryKeys.some((pk) => i[pk] !== input[pk]),\n );\n};\n\nexport type DeleteItemOperation<Type extends Record<string, unknown>> = {\n table: string;\n schema: string;\n input: Type;\n primaryKeys: (keyof Type)[];\n} & RevalidateOpts<Type>;\n\nexport type DeleteItemCache<KeyType, Type extends Record<string, unknown>> = {\n /**\n * The keys currently present in the cache\n */\n cacheKeys: KeyType[];\n /**\n * Should return a PostgrestFilter for the given query.\n * This is exposed as a function so results can be cached by the cache library.\n */\n getPostgrestFilter: (\n query: string,\n opts?: PostgrestQueryParserOptions,\n ) => Pick<PostgrestFilter<Type>, 'applyFilters' | 'denormalize'>;\n /**\n * Decode a key. Should return null if not a PostgREST key.\n */\n decode: (k: KeyType) => DecodedKey | null;\n /**\n * The mutation function from the cache library\n */\n mutate: (key: KeyType, fn: MutatorFn<Type>) => Promise<void> | void;\n /**\n * The revalidation function from the cache library\n */\n revalidate: (key: KeyType) => Promise<void> | void;\n};\n\nexport const deleteItem = async <KeyType, Type extends Record<string, unknown>>(\n op: DeleteItemOperation<Type>,\n cache: DeleteItemCache<KeyType, Type>,\n) => {\n const {\n revalidateRelations: revalidateRelationsOpt,\n revalidateTables: revalidateTablesOpt,\n schema,\n table,\n } = op;\n const { cacheKeys, decode, getPostgrestFilter, mutate, revalidate } = cache;\n\n const mutations = [];\n for (const k of cacheKeys) {\n const key = decode(k);\n\n // Exit early if not a postgrest key\n if (!key) continue;\n const filter = getPostgrestFilter(key.queryKey);\n // parse input into expected target format\n if (key.schema === schema && key.table === table) {\n if (key.isHead === true) {\n mutations.push(revalidate(k));\n } else {\n const transformedInput = filter.denormalize(op.input);\n if (\n // For delete, the input has to have a value for all primary keys\n op.primaryKeys.every(\n (pk) => typeof transformedInput[pk as string] !== 'undefined',\n )\n ) {\n const limit = key.limit ?? 1000;\n mutations.push(\n mutate(k, (currentData) => {\n // Return early if undefined or null\n if (!currentData) return currentData;\n\n if (isPostgrestHasMorePaginationCacheData<Type>(currentData)) {\n return toHasMorePaginationCacheData(\n filterByPks<Type>(\n transformedInput,\n currentData.flatMap((p) => p.data),\n op.primaryKeys,\n ),\n currentData,\n limit,\n );\n } else if (isPostgrestPaginationCacheData<Type>(currentData)) {\n return toPaginationCacheData(\n filterByPks<Type>(\n transformedInput,\n currentData.flat(),\n op.primaryKeys,\n ),\n limit,\n );\n } else if (isAnyPostgrestResponse<Type>(currentData)) {\n const { data } = currentData;\n if (!Array.isArray(data)) {\n if (\n data &&\n op.primaryKeys.some(\n (pk) => transformedInput[pk] !== data[pk],\n )\n ) {\n return currentData;\n } else {\n return { data: null };\n }\n }\n\n const newData = filterByPks(\n transformedInput,\n data,\n op.primaryKeys,\n );\n\n return {\n data: newData,\n count: newData.length,\n };\n }\n }),\n );\n }\n }\n }\n\n if (\n revalidateTablesOpt &&\n shouldRevalidateTable(revalidateTablesOpt, { decodedKey: key })\n ) {\n mutations.push(revalidate(k));\n }\n\n if (\n revalidateRelationsOpt &&\n shouldRevalidateRelation(revalidateRelationsOpt, {\n input: op.input,\n getPostgrestFilter,\n decodedKey: key,\n })\n ) {\n mutations.push(revalidate(k));\n }\n }\n\n await Promise.all(mutations);\n};\n","import { isPostgrestBuilder } from './lib/is-postgrest-builder';\nimport type { AnyPostgrestResponse } from './lib/response-types';\n\nexport const fetcher = async <Result>(\n q: PromiseLike<AnyPostgrestResponse<Result>>,\n) => {\n if (isPostgrestBuilder(q)) {\n q = q.throwOnError();\n }\n return await q;\n};\n","import type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\n\nimport {\n type MutationFetcherResponse,\n buildMutationFetcherResponse,\n} from './fetch/build-mutation-fetcher-response';\nimport {\n type BuildNormalizedQueryOps,\n buildNormalizedQuery,\n} from './fetch/build-normalized-query';\n\nexport type InsertFetcher<T extends GenericTable, R> = (\n input: T['Insert'][],\n) => Promise<MutationFetcherResponse<R>[] | null>;\n\nexport type InsertFetcherOptions<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n Re = T extends { Relationships: infer R } ? R : unknown,\n> = Parameters<PostgrestQueryBuilder<O, S, T, Re>['insert']>[1];\n\nfunction buildInsertFetcher<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, Re>,\n opts: BuildNormalizedQueryOps<Q> & InsertFetcherOptions<O, S, T, Re>,\n): InsertFetcher<T, R> {\n return async (\n input: T['Insert'][],\n ): Promise<MutationFetcherResponse<R>[] | null> => {\n const query = buildNormalizedQuery<Q>(opts);\n if (query) {\n const { selectQuery, groupedUserQueryPaths, groupedPaths } = query;\n const { data } = await qb\n .insert(input as any, opts)\n .select(selectQuery)\n .throwOnError();\n // data cannot be null because of throwOnError()\n return (data as R[]).map((d) =>\n buildMutationFetcherResponse(d, {\n groupedUserQueryPaths,\n groupedPaths,\n }),\n );\n }\n await qb.insert(input as any).throwOnError();\n return input.map((d) => ({ normalizedData: d as R }));\n };\n}\n\nexport { buildInsertFetcher };\n","/*\n * Binary search in JavaScript.\n * Returns the index of of the element in a sorted array or (-n-1) where n is the insertion point for the new element.\n * Parameters:\n * ar - A sorted array\n * el - An element to search for\n * compare - A comparator function. The function takes two arguments: (a, b) and returns:\n * a negative number if a is less than b;\n * 0 if a is equal to b;\n * a positive number of a is greater than b.\n * The array may contain duplicate elements. If there are more than one equal elements in the array,\n * the returned value can be the index of any one of the equal elements.\n */\nexport function binarySearch<Type>(\n arr: Type[],\n el: Type,\n compare: (a: Type, b: Type) => number,\n) {\n let m = 0;\n let n = arr.length - 1;\n while (m <= n) {\n const k = (n + m) >> 1;\n const cmp = compare(el, arr[k]);\n if (cmp > 0) {\n m = k + 1;\n } else if (cmp < 0) {\n n = k - 1;\n } else {\n return k;\n }\n }\n return m;\n}\n","export const ifDateGetTime = (v: unknown) => {\n if (v instanceof Date) return v.getTime();\n if (typeof v === 'string') {\n const t = new Date(v).getTime();\n if (!isNaN(t)) return t;\n }\n return v;\n};\n","import { get as defaultGet } from './get';\nimport { ifDateGetTime } from './if-date-get-time';\nimport type { OrderDefinition } from './query-types';\n\nexport const buildSortedComparator = <Type extends Record<string, unknown>>(\n orderBy: OrderDefinition[],\n) => {\n return (a: Type, b: Type) => {\n for (const { column, ascending, nullsFirst, foreignTable } of orderBy) {\n const aValue = ifDateGetTime(\n defaultGet(\n a,\n `${foreignTable ? `${foreignTable}.` : ''}${column}`,\n null,\n ),\n );\n\n const bValue = ifDateGetTime(\n defaultGet(\n b,\n `${foreignTable ? `${foreignTable}.` : ''}${column}`,\n null,\n ),\n );\n\n // go to next if value is equals\n if (aValue === bValue) continue;\n\n // nullsFirst / nullsLast\n if (aValue === null || aValue === undefined) {\n return nullsFirst ? -1 : 1;\n }\n\n if (bValue === null || bValue === undefined) {\n return nullsFirst ? 1 : -1;\n }\n\n // otherwise, if we're ascending, lowest sorts first\n if (ascending) {\n return aValue < bValue ? -1 : 1;\n }\n\n // if descending, highest sorts first\n return aValue < bValue ? 1 : -1;\n }\n\n return 0;\n };\n};\n","import { binarySearch } from './binary-search';\nimport type { OrderDefinition } from './query-types';\nimport { buildSortedComparator } from './sorted-comparator';\n\nexport const findIndexOrdered = <Type extends Record<string, unknown>>(\n input: Type,\n currentData: Type[],\n orderBy: OrderDefinition[],\n): number => binarySearch(currentData, input, buildSortedComparator(orderBy));\n","import {\n isPostgrestHasMorePaginationCacheData,\n isPostgrestPaginationCacheData,\n} from './lib/cache-data-types';\nimport { findIndexOrdered } from './lib/find-index-ordered';\nimport { parseOrderByKey } from './lib/parse-order-by-key';\nimport type { OrderDefinition } from './lib/query-types';\nimport { isAnyPostgrestResponse } from './lib/response-types';\nimport { shouldRevalidateRelation } from './mutate/should-revalidate-relation';\nimport { shouldRevalidateTable } from './mutate/should-revalidate-table';\nimport {\n toHasMorePaginationCacheData,\n toPaginationCacheData,\n} from './mutate/transformers';\nimport type { DecodedKey, MutatorFn, RevalidateOpts } from './mutate/types';\nimport type { PostgrestFilter } from './postgrest-filter';\nimport type { PostgrestQueryParserOptions } from './postgrest-query-parser';\n\nexport const mutateOperation = <Type extends Record<string, unknown>>(\n input: Partial<Type>,\n mutate: (current: Type) => Type,\n currentData: Type[],\n primaryKeys: (keyof Type)[],\n filter: Pick<PostgrestFilter<Type>, 'apply'>,\n orderBy?: OrderDefinition[],\n) => {\n // find item\n const itemIdx = currentData.findIndex((oldItem) =>\n primaryKeys.every((pk) => oldItem[pk] === input[pk]),\n );\n\n if (itemIdx === -1) {\n // if not exists, do nothing\n return currentData;\n }\n\n let newItemIdx = itemIdx;\n const newItem = mutate(currentData[newItemIdx]);\n\n // if exists, remove\n currentData.splice(itemIdx, 1);\n\n if (orderBy && Array.isArray(orderBy) && orderBy.length > 0) {\n // if ordered, find new idx\n newItemIdx = findIndexOrdered(newItem, currentData, orderBy);\n }\n\n if (newItemIdx === -1) {\n // default to prepend\n newItemIdx = 0;\n }\n\n // check that new item is still a valid member of the list and has all required paths\n if (filter.apply(newItem)) {\n currentData.splice(newItemIdx, 0, newItem);\n }\n\n return currentData;\n};\n\nexport type MutateItemOperation<Type extends Record<string, unknown>> = {\n table: string;\n schema: string;\n input: Partial<Type>;\n mutate: (current: Type) => Type;\n primaryKeys: (keyof Type)[];\n} & RevalidateOpts<Type>;\n\nexport type MutateItemCache<KeyType, Type extends Record<string, unknown>> = {\n /**\n * The keys currently present in the cache\n */\n cacheKeys: KeyType[];\n /**\n * Should return a PostgrestFilter for the given query.\n * This is exposed as a function so results can be cached by the cache library.\n */\n getPostgrestFilter: (\n query: string,\n opts?: PostgrestQueryParserOptions,\n ) => Pick<\n PostgrestFilter<Type>,\n | 'applyFilters'\n | 'denormalize'\n | 'hasFiltersOnPaths'\n | 'applyFiltersOnPaths'\n | 'apply'\n | 'hasWildcardPath'\n | 'hasAggregatePath'\n >;\n /**\n * Decode a key. Should return null if not a PostgREST key.\n */\n decode: (k: KeyType) => DecodedKey | null;\n /**\n * The mutation function from the cache library\n */\n mutate: (key: KeyType, fn: MutatorFn<Type>) => Promise<void> | void;\n /**\n * The revalidation function from the cache library\n */\n revalidate: (key: KeyType) => Promise<void> | void;\n};\n\nexport const mutateItem = async <KeyType, Type extends Record<string, unknown>>(\n op: MutateItemOperation<Type>,\n cache: MutateItemCache<KeyType, Type>,\n) => {\n const {\n mutate: mutateInput,\n revalidateRelations: revalidateRelationsOpt,\n revalidateTables: revalidateTablesOpt,\n schema,\n table,\n primaryKeys,\n } = op;\n const { cacheKeys, decode, getPostgrestFilter, mutate, revalidate } = cache;\n\n const mutations = [];\n for (const k of cacheKeys) {\n const key = decode(k);\n\n // Exit early if not a postgrest key\n if (!key) continue;\n const filter = getPostgrestFilter(key.queryKey);\n if (key.schema === schema && key.table === table) {\n // parse input into expected target format\n const transformedInput = filter.denormalize(op.input);\n if (\n // For mutate, the input has to have a value for all primary keys\n op.primaryKeys.every(\n (pk) => typeof transformedInput[pk as string] !== 'undefined',\n ) && // allow mutate if either the filter does not apply eq filters on any pk\n (!filter.hasFiltersOnPaths(op.primaryKeys as string[]) ||\n // or input matches all pk filters\n filter.applyFiltersOnPaths(\n transformedInput,\n op.primaryKeys as string[],\n ))\n ) {\n const limit = key.limit ?? 1000;\n const orderBy = key.orderByKey\n ? parseOrderByKey(key.orderByKey)\n : undefined;\n if (\n key.isHead === true ||\n filter.hasWildcardPath ||\n filter.hasAggregatePath\n ) {\n // we cannot know whether the new item after mutating still has all paths required for a query if it contains a wildcard,\n // because we do not know what columns a table has. we must always revalidate then.\n mutations.push(revalidate(k));\n } else {\n mutations.push(\n mutate(k, (currentData) => {\n // Return early if undefined or null\n if (!currentData) return currentData;\n\n if (isPostgrestHasMorePaginationCacheData<Type>(currentData)) {\n return toHasMorePaginationCacheData(\n mutateOperation<Type>(\n transformedInput,\n mutateInput,\n currentData.flatMap((p) => p.data),\n primaryKeys,\n filter,\n orderBy,\n ),\n currentData,\n limit,\n );\n } else if (isPostgrestPaginationCacheData<Type>(currentData)) {\n return toPaginationCacheData(\n mutateOperation<Type>(\n transformedInput,\n mutateInput,\n currentData.flat(),\n primaryKeys,\n filter,\n orderBy,\n ),\n limit,\n );\n } else if (isAnyPostgrestResponse<Type>(currentData)) {\n const { data } = currentData;\n\n if (!Array.isArray(data)) {\n if (data === null) {\n return {\n data,\n count: currentData.count,\n };\n }\n const newData = mutateInput(data);\n return {\n // Check if the new data is still valid given the key\n data: filter.apply(newData) ? newData : null,\n count: currentData.count,\n };\n }\n\n const newData = mutateOperation<Type>(\n transformedInput,\n mutateInput,\n // deep copy data to avoid mutating the original\n JSON.parse(JSON.stringify(data)),\n primaryKeys,\n filter,\n orderBy,\n );\n\n return {\n data: newData,\n count: newData.length,\n };\n }\n return currentData;\n }),\n );\n }\n }\n }\n\n if (\n revalidateTablesOpt &&\n shouldRevalidateTable(revalidateTablesOpt, { decodedKey: key })\n ) {\n mutations.push(revalidate(k));\n }\n\n if (\n revalidateRelationsOpt &&\n shouldRevalidateRelation(revalidateRelationsOpt, {\n input: op.input,\n getPostgrestFilter,\n decodedKey: key,\n })\n ) {\n mutations.push(revalidate(k));\n }\n }\n await Promise.all(mutations);\n};\n","import type {\n PostgrestClientOptions,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\n\nimport { isPlainObject } from './lib/is-plain-object';\nimport type {\n PostgrestHasMorePaginationResponse,\n PostgrestPaginationResponse,\n} from './lib/response-types';\n\nexport type PostgrestOffsetPaginationFetcher<Type, Args> = (\n args: Args,\n) => Promise<Type>;\n\nexport type PostgrestOffsetPaginationKeyDecoder<Args> = (args: Args) => {\n limit?: number;\n offset?: number;\n};\n\nexport const createOffsetPaginationFetcher = <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n Args,\n RelationName = unknown,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n Relationships\n >)\n | null,\n {\n decode,\n pageSize,\n rpcArgs,\n }: {\n decode: PostgrestOffsetPaginationKeyDecoder<Args>;\n pageSize: number;\n rpcArgs?: { limit: string; offset: string };\n },\n): PostgrestOffsetPaginationFetcher<\n PostgrestPaginationResponse<Result>,\n Args\n> | null => {\n if (!queryFactory) return null;\n\n return async (args) => {\n const decodedKey = decode(args);\n const limit = decodedKey.limit ? decodedKey.limit : pageSize;\n const offset = decodedKey.offset ?? 0;\n\n const query = queryFactory();\n\n return rpcArgs\n ? await rpcOffsetPaginationFetcher<\n Options,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >(query, { limit, offset, rpcArgs })\n : await offsetPaginationFetcher<\n Options,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >(query, { limit, offset });\n };\n};\n\nexport const offsetPaginationFetcher = async <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >,\n { limit, offset }: { limit: number; offset: number },\n) => {\n const { data } = await query.range(offset, offset + limit - 1).throwOnError();\n // cannot be null because of .throwOnError()\n return data as Result[];\n};\n\nexport const rpcOffsetPaginationFetcher = async <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >,\n {\n limit,\n offset,\n rpcArgs,\n }: {\n limit: number;\n offset: number;\n rpcArgs: { limit: string; offset: string };\n },\n) => {\n if (query['method'] === 'GET') {\n query['url'].searchParams.set(rpcArgs.limit, String(limit));\n query['url'].searchParams.set(rpcArgs.offset, String(offset));\n } else {\n query['body'] = {\n ...(isPlainObject(query['body']) ? query['body'] : {}),\n [rpcArgs.limit]: limit,\n [rpcArgs.offset]: offset,\n };\n }\n\n const { data } = await query.throwOnError();\n\n // cannot be null because of .throwOnError()\n return data as Result[];\n};\n\nexport const createOffsetPaginationHasMoreFetcher = <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n Args,\n RelationName = unknown,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >)\n | null,\n {\n decode,\n pageSize,\n rpcArgs,\n }: {\n decode: PostgrestOffsetPaginationKeyDecoder<Args>;\n pageSize: number;\n rpcArgs?: { limit: string; offset: string };\n },\n): PostgrestOffsetPaginationFetcher<\n PostgrestHasMorePaginationResponse<Result>,\n Args\n> | null => {\n if (!queryFactory) return null;\n return async (args) => {\n const decodedKey = decode(args);\n const limit = decodedKey.limit ? decodedKey.limit : pageSize;\n const offset = decodedKey.offset ?? 0;\n const query = queryFactory();\n return rpcArgs\n ? await rpcOffsetPaginationHasMoreFetcher<\n Options,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >(query, {\n limit,\n offset,\n pageSize,\n rpcArgs,\n })\n : await offsetPaginationHasMoreFetcher<\n Options,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >(query, {\n limit,\n offset,\n pageSize,\n });\n };\n};\n\nexport const offsetPaginationHasMoreFetcher = async <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >,\n {\n limit,\n offset,\n pageSize,\n }: { limit: number; offset: number; pageSize: number },\n) => {\n const { data } = await query.range(offset, offset + limit).throwOnError();\n\n let hasMore = false;\n if (data && data.length === pageSize + 1) {\n hasMore = true;\n data.pop();\n }\n return {\n // cannot be null because of .throwOnError()\n data: data as Result[],\n hasMore,\n };\n};\n\nexport const rpcOffsetPaginationHasMoreFetcher = async <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >,\n {\n limit,\n offset,\n pageSize,\n rpcArgs,\n }: {\n limit: number;\n offset: number;\n pageSize: number;\n rpcArgs: { limit: string; offset: string };\n },\n) => {\n if (query['method'] === 'GET') {\n query['url'].searchParams.set(rpcArgs.limit, String(limit + 1));\n query['url'].searchParams.set(rpcArgs.offset, String(offset));\n } else {\n query['body'] = {\n ...(isPlainObject(query['body']) ? query['body'] : {}),\n [rpcArgs.limit]: limit + 1,\n [rpcArgs.offset]: offset,\n };\n }\n\n const { data } = await query.throwOnError();\n\n let hasMore = false;\n if (data && data.length === pageSize + 1) {\n hasMore = true;\n data.pop();\n }\n return {\n // cannot be null because of .throwOnError()\n data: data as Result[],\n hasMore,\n };\n};\n","import { unflatten } from 'flat';\n\nimport {\n groupPathsRecursive,\n isNestedPath,\n} from '../lib/group-paths-recursive';\nimport type { Path } from '../lib/query-types';\n\n/**\n * Denormalize a normalized response object using the paths of the target query\n **/\nexport const denormalize = <R extends Record<string, unknown>>(\n // the paths into which we need to transform\n paths: Path[],\n // the normalized response data\n obj: R,\n): R => {\n const groups = groupPathsRecursive(paths);\n\n if (groups.some((g) => g.path === '*')) {\n // if a wildcard path is present, we expand the groups with all values from the object that are not part of a nested path from `paths`.\n // This will include also unwanted values, e.g. from a join on another relation because its impossible for us to distinguish between json columns and joins.\n Object.keys(obj).forEach((k) => {\n const keyParts = k.split('.');\n if (\n keyParts.length > 1 &&\n groups.some((g) => isNestedPath(g) && g.path === keyParts[0])\n ) {\n // skip if key is actually part of a nested path from the groups\n return;\n }\n if (groups.some((g) => g.path === keyParts[0])) {\n // skip if key is already part of the groups\n return;\n }\n\n groups.push({\n declaration: keyParts[0],\n path: keyParts[0],\n });\n });\n }\n\n return groups.reduce<R>((prev, curr) => {\n // skip the wildcard since we already handled it above\n if (curr.path === '*') return prev;\n let value = obj[curr.path];\n\n if (!isNestedPath(curr)) {\n if (typeof value === 'undefined') {\n // if simple array, e.g. ['a', 'b', 'c'], unflatten\n const array = Object.entries(obj).reduce<any[]>((prev, [k, v]) => {\n // test if key is curr_path.0, curr_path.1 etc.\n if (new RegExp(`^${curr.path}.\\\\d+$`).test(k)) {\n prev.push(v);\n }\n return prev;\n }, []);\n if (array.length > 0) {\n value = array;\n }\n }\n if (typeof value === 'undefined') {\n // if json(b) column, unflatten\n let isArray = false;\n const jsonValue = Object.entries(obj).reduce<Record<string, unknown>>(\n (prev, [k, v]) => {\n if (k.startsWith(`${curr.path}.`)) {\n const key = k.slice(curr.path.length + 1);\n const maybeIdx = key.match(/^\\b\\d+\\b/);\n if (maybeIdx && isFlatNestedArray(prev)) {\n isArray = true;\n prev = {\n ...prev,\n [maybeIdx[0]]: {\n ...(prev[maybeIdx[0]] ? prev[maybeIdx[0]] : {}),\n [key.slice(maybeIdx[0].length + 1)]: v,\n },\n };\n } else {\n prev[maybeIdx ? maybeIdx[0] : key] = v;\n }\n }\n return prev;\n },\n {},\n );\n if (Object.keys(jsonValue).length > 0) {\n if (isArray) {\n value = Object.values(jsonValue).map((v) => unflatten(v));\n } else {\n value = unflatten(jsonValue);\n }\n }\n }\n if (typeof value === 'undefined') {\n return prev;\n }\n return {\n ...prev,\n [curr.alias || curr.path]: value,\n };\n }\n\n // if value is null or an empty array, the relation is not set and we can return the \"empty\" value\n if (value === null || (Array.isArray(value) && value.length === 0)) {\n return {\n ...prev,\n [curr.alias || curr.path]: value,\n };\n }\n\n let isArray = false;\n const flatNestedObjectOrArray = Object.entries(obj).reduce<\n Record<string, Record<string, unknown>> | Record<string, unknown>\n >((prev, [k, v]) => {\n const isNested =\n k.startsWith(`${curr.path}.`) ||\n (k.includes('!') &&\n k.startsWith(`${removeFirstAlias(curr.declaration)}.`));\n\n if (!isNested) return prev;\n // either set to key, or to idx.key\n // is either path.key or path!hint.key\n const flatKey = k.slice(\n (k.includes('!') ? removeFirstAlias(curr.declaration) : curr.path)\n .length + 1,\n );\n const maybeIdx = flatKey.match(/^\\b\\d+\\b/);\n if (maybeIdx && isFlatNestedArray(prev)) {\n isArray = true;\n const key = flatKey.slice(maybeIdx[0].length + 1);\n return {\n ...prev,\n [maybeIdx[0]]: {\n ...(prev[maybeIdx[0]] ? prev[maybeIdx[0]] : {}),\n [key]: v,\n },\n };\n }\n return {\n ...prev,\n [flatKey]: v,\n };\n }, {});\n\n if (Object.keys(flatNestedObjectOrArray).length === 0) return prev;\n if (isArray && isFlatNestedArray(flatNestedObjectOrArray)) {\n return {\n ...prev,\n [curr.alias || curr.path]: Object.values(flatNestedObjectOrArray).map(\n (v) => denormalize(curr.paths, v),\n ),\n };\n }\n return {\n ...prev,\n [curr.alias || curr.path]: denormalize(\n curr.paths,\n flatNestedObjectOrArray,\n ),\n };\n }, {} as R);\n};\n\n// just to make ts happy\nconst isFlatNestedArray = (\n obj: Record<string, Record<string, unknown>> | Record<string, unknown>,\n): obj is Record<string, Record<string, unknown>> => true;\n\nconst removeFirstAlias = (key: string): string => {\n const split = key.split(':');\n if (split.length === 1) return key;\n split.shift();\n return split.join(':');\n};\n","import {\n type FilterDefinitions,\n isAndFilter,\n isFilterDefinition,\n isOrFilter,\n} from './query-types';\n\nexport const filterFilterDefinitionsByPaths = (\n f: FilterDefinitions,\n paths: string[],\n) => {\n return f.reduce<FilterDefinitions>((prev, filter) => {\n if (isAndFilter(filter)) {\n const filters = filterFilterDefinitionsByPaths(filter.and, paths);\n if (filters.length > 0) {\n prev.push({ and: filters });\n }\n } else if (isOrFilter(filter)) {\n const filters = filterFilterDefinitionsByPaths(filter.or, paths);\n if (filters.length > 0) {\n prev.push({ or: filters });\n }\n } else if (isFilterDefinition(filter) && paths.includes(filter.path)) {\n prev.push(filter);\n }\n return prev;\n }, []);\n};\n","export const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && !Array.isArray(v) && v !== null;\n","export type MaybeLikePostgrestBuilder<Result> = unknown;\n\nexport type LikePostgrestBuilder<Result> = {\n url: URL;\n method: 'GET' | 'HEAD' | 'POST' | 'PATCH' | 'DELETE';\n headers: Headers;\n schema?: string;\n body?: unknown;\n};\n\nexport const isLikePostgrestBuilder = <Result>(\n v: MaybeLikePostgrestBuilder<Result>,\n): v is LikePostgrestBuilder<Result> => {\n if (typeof v !== 'object' || v === null) return false;\n const obj = v as LikePostgrestBuilder<Result>;\n\n return (\n typeof obj['url'] === 'object' &&\n typeof obj['headers'] === 'object' &&\n typeof obj['method'] === 'string'\n );\n};\n","import { deepEqual } from 'fast-equals';\n\nimport type { FilterOperator, OperatorFn } from './query-types';\n\n/**\n * Builds a regex for a (i)like postgres operator by replacing the \"%\" with a regex wildcard \".*\"\n * @param search The search value\n * @returns A RegExp representing the (i)like operation\n */\nconst buildLikeRegex = (search: string) =>\n new RegExp(`^${search.replace(/%/g, '.*')}$`);\n\n/**\n * A poor humans attempt to implement postgres text search in javascript.\n * Converts the search string into a regex before testing it against all tokens.\n */\nconst textSearch: OperatorFn = (c, v) => {\n const regExp = `^${v\n .split('&')\n .map((v: string) => v.trim().toLowerCase())\n .join('|')\n .replace(/:\\*/g, '.*')}$`;\n const tokens = c\n .match(/'(.*?)'/g)\n .map((t: string) => t.replace(/'/g, '').toLowerCase());\n return tokens.some((t: string) => new RegExp(regExp).test(t));\n};\n\n/**\n * Date instances do not work with equality operators, which is why their times are compared instead.\n *\n * ref: https://stackoverflow.com/questions/492994/compare-two-dates-with-javascript\n * @param v The input value\n * @returns If the input value is an instanceof Date, return v.getTime(), else the input value\n */\nconst ifDateGetTime = (v: any) => (v instanceof Date ? v.getTime() : v);\n\nconst enclose = (v: string, char: string) => {\n if (!v.startsWith(char)) v = `${char}${v}`;\n if (!v.endsWith(char)) v = `${v}${char}`;\n return v;\n};\n\n/**\n * An object containing all FilterOperator implementations\n */\nexport const OPERATOR_MAP: { [Key in FilterOperator]?: OperatorFn } = {\n eq: (c, v) => ifDateGetTime(c) === ifDateGetTime(v),\n neq: (c, v) => ifDateGetTime(c) !== ifDateGetTime(v),\n gt: (c, v) => c > v,\n gte: (c, v) => c >= v,\n lt: (c, v) => c < v,\n lte: (c, v) => c <= v,\n like: (c, v) => buildLikeRegex(v).test(c.toString()),\n ilike: (c, v) =>\n buildLikeRegex(v.toLowerCase()).test(c.toString().toLowerCase()),\n is: (c, v) => c === v,\n in: (c, v) => {\n const parsedValue = v.slice(1, -1).split(',');\n return parsedValue.some((i: string) => i === c);\n },\n // contains\n cs: (c, v) => {\n if (!Array.isArray(c)) return false;\n if (!Array.isArray(v)) v = v.slice(1, -1).split(',');\n return v.every((i: string) => c.some((colVal) => deepEqual(colVal, i)));\n },\n // containedBy\n cd: (c, v) => {\n if (!Array.isArray(c)) return false;\n if (!Array.isArray(v)) v = v.slice(1, -1).split(',');\n return c.every((i: string) =>\n v.some((cmpVal: any) => deepEqual(cmpVal, i)),\n );\n },\n fts: textSearch,\n plfts: (c, v) =>\n buildLikeRegex(enclose(v.toLowerCase(), '%')).test(\n c.toString().toLowerCase(),\n ),\n};\n","/**\n * Returns the index of the last element in the array where predicate is true, and -1\n * otherwise.\n * @param array The source array to search in\n * @param predicate find calls predicate once for each element of the array, in descending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n */\nexport function findLastIndex<T>(\n array: T[],\n predicate: (value: T, index: number, obj: T[]) => boolean,\n): number {\n let l = array.length;\n while (l--) {\n if (predicate(array[l], l, array)) return l;\n }\n return -1;\n}\n","/**\n *\n * @param i Ahhh gotta love typescript\n * @returns\n */\nexport const isNotNull = <I>(i: I | null): i is I => i !== null;\n","import { findLastIndex } from './lib/find-last-index';\nimport { isNotNull } from './lib/is-not-null';\nimport { OPERATOR_MAP } from './lib/operators';\nimport { parseSelectParam } from './lib/parse-select-param';\nimport { parseValue } from './lib/parse-value';\nimport type {\n FilterDefinition,\n FilterDefinitions,\n FilterOperator,\n Path,\n} from './lib/query-types';\n\nexport const SUPPORTED_OPERATORS = ['or', ...Object.keys(OPERATOR_MAP)];\n\nexport type PostgrestQueryParserOptions = {\n /**\n * If defined, will use only filters that apply to the given paths\n */\n exclusivePaths?: string[];\n};\n\nexport class PostgrestQueryParser {\n private readonly _params: URLSearchParams;\n\n private _filters: FilterDefinitions | undefined;\n private _paths: Path[] | undefined;\n\n constructor(\n query: string,\n public readonly opts?: PostgrestQueryParserOptions,\n ) {\n this._params = new URLSearchParams(query);\n }\n\n /**\n * Getter that returns the paths and their aliases that the query selects. Will do the computation only once.\n *\n * ```js\n * const p = new PostgrestParser(\n * supabaseClient.from(\"test\")\n * .select(\n * `name,\n * city:cities (\n * test:name\n * ),\n * countries (\n * capital,\n * population,\n * some_ref (\n * test:first,\n * second\n * )\n * )`\n * );\n * console.log(p.paths);\n * // [\n * // { alias: undefined, path: \"name\" },\n * // { alias: \"city.test\", path: \"cities.name\" },\n * // { alias: undefined, path: \"countries.capital\" },\n * // { alias: undefined, path: \"countries.population\" },\n * // {\n * // alias: \"countries.some_ref.test\",\n * // path: \"countries.some_ref.first\",\n * // },\n * // { alias: undefined, path: \"countries.some_ref.second\" },\n * // ];\n * ```\n *\n * @returns an array of paths that the query selects, containing the columns and aliases\n */\n get paths(): Path[] {\n if (!this._paths) {\n const select = this._params.get('select');\n this._paths = select ? parseSelectParam(select) : [];\n }\n return this._paths;\n }\n\n /**\n * Getter that returns the filters that this query applies in a json object.\n *\n * ```js\n * const p = new PostgrestParser(\n * supabaseClient.from(\"test\").select('*')\n * .or(\"full_name.eq.20,test.neq.true,and(full_name.eq.Test Name,email.eq.test@mail.com)\")\n * .eq(\"id\", \"123\")\n * .contains(\"id\", \"456\")\n * );\n *\n * console.log(p.filters);\n *\n * // [\n * // {\n * // or: [\n * // {\n * // path: \"full_name\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: 20,\n * // },\n * // {\n * // path: \"test\",\n * // negate: false,\n * // operator: \"neq\",\n * // value: true,\n * // },\n * // {\n * // and: [\n * // {\n * // path: \"full_name\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: \"Test Name\",\n * // },\n * // {\n * // path: \"email\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: \"test@mail.com\",\n * // },\n * // ],\n * // },\n * // ],\n * // },\n * // {\n * // path: \"id\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: 123,\n * // },\n * // {\n * // path: \"id\",\n * // negate: false,\n * // operator: \"cs\",\n * // value: 456,\n * // },\n * // ];\n * ```\n *\n * @returns a FilterDefinitions object\n */\n get filters(): FilterDefinitions {\n if (!this._filters) {\n const filters: FilterDefinitions = [];\n this._params.forEach((value, key) => {\n if (\n SUPPORTED_OPERATORS.some(\n (f) => key === f || value.split('.').includes(f),\n )\n ) {\n const filter = this.parseFilterString(`${key}.${value}`, undefined);\n if (filter !== null) filters.push(filter);\n }\n });\n this._filters = filters;\n }\n return this._filters;\n }\n\n private parseFilterString(\n filter: string,\n prefix?: string,\n ):\n | FilterDefinition\n | { or: FilterDefinitions }\n | { and: FilterDefinitions }\n | null {\n if (filter.startsWith('and(') && filter.endsWith(')')) {\n // nested and\n const andFilters = filter\n .slice(4, -1)\n .split(',')\n .map((s) => this.parseFilterString(s, prefix))\n .filter(isNotNull);\n if (andFilters.length === 0) return null;\n else return { and: andFilters };\n }\n\n const split = filter.split('.');\n\n // or\n if ([split[0], split[1]].includes('or')) {\n let foreignTable: string | undefined;\n if (split[1] === 'or') {\n // with foreign table\n foreignTable = split[0];\n }\n\n const orFilters = filter\n .slice(4 + (foreignTable ? foreignTable.length + 1 : 0), -1)\n .split(',')\n .reduce<string[]>((prev, curr, idx, filters) => {\n if (curr.startsWith('and(')) {\n // nested and\n prev = [...prev, [curr, filters[idx + 1]].join()];\n } else if (!curr.endsWith(')')) {\n prev = [...prev, curr];\n }\n return prev;\n }, [])\n .map((s) => this.parseFilterString(s, foreignTable))\n .filter(isNotNull);\n if (orFilters.length === 0) return null;\n else return { or: orFilters };\n }\n\n const operatorIdx = findLastIndex(split, (s) =>\n SUPPORTED_OPERATORS.includes(s),\n );\n if (operatorIdx === -1)\n throw new Error(\n `Could not find a valid operator in ${split.join('.')}. Supported are ${SUPPORTED_OPERATORS.join(',')}.`,\n );\n const negate = split[operatorIdx - 1] === 'not';\n\n const pathOrAlias = [\n prefix,\n ...split.slice(0, negate ? operatorIdx - 1 : operatorIdx),\n ]\n .filter(Boolean)\n .join('.')\n .replace(/\\s/g, '');\n\n let path = pathOrAlias;\n let alias;\n // filter paths can use either the real path or the alias\n // search for alias and path in paths of query\n // if none is found, its a path because the alias would need to be defined\n // in the query\n for (const p of this.paths) {\n if (p.path === pathOrAlias) {\n alias = p.alias;\n break;\n }\n if (p.alias === pathOrAlias) {\n path = p.path;\n alias = p.alias;\n break;\n }\n }\n\n if (\n this.opts &&\n Array.isArray(this.opts.exclusivePaths) &&\n !this.opts.exclusivePaths.includes(path)\n ) {\n return null;\n }\n\n const operator = split[operatorIdx] as FilterOperator;\n const value = split.slice(operatorIdx + 1).join('.');\n return {\n path,\n alias,\n negate,\n operator,\n value: parseValue(value),\n };\n }\n}\n","import { denormalize } from './filter/denormalize';\nimport { extractPathsFromFilters } from './lib/extract-paths-from-filter';\nimport { filterFilterDefinitionsByPaths } from './lib/filter-filter-definitions-by-paths';\nimport { get } from './lib/get';\nimport { isObject } from './lib/is-object';\nimport {\n MaybeLikePostgrestBuilder,\n isLikePostgrestBuilder,\n} from './lib/like-postgrest-builder';\nimport { OPERATOR_MAP } from './lib/operators';\nimport { parseValue } from './lib/parse-value';\nimport type {\n FilterDefinition,\n FilterDefinitions,\n FilterFn,\n OperatorFn,\n Path,\n ValueType,\n} from './lib/query-types';\nimport {\n PostgrestQueryParser,\n type PostgrestQueryParserOptions,\n} from './postgrest-query-parser';\n\nexport class PostgrestFilter<Result extends Record<string, unknown>> {\n private _fn: FilterFn<Result> | undefined;\n private _selectFn: FilterFn<Result> | undefined;\n private _filtersFn: FilterFn<Result> | undefined;\n private _filterPaths: Path[];\n public hasWildcardPath: boolean | undefined;\n public hasAggregatePath: boolean | undefined;\n\n constructor(\n public readonly params: { filters: FilterDefinitions; paths: Path[] },\n ) {\n this._filterPaths = extractPathsFromFilters(\n this.params.filters,\n this.params.paths,\n );\n this.hasWildcardPath = this.params.paths.some((p) =>\n p.declaration.endsWith('*'),\n );\n this.hasAggregatePath = this.params.paths.some((p) => Boolean(p.aggregate));\n }\n\n public static fromQuery(query: string, opts?: PostgrestQueryParserOptions) {\n const parser = new PostgrestQueryParser(query, opts);\n return new PostgrestFilter({\n filters: parser.filters,\n paths: parser.paths,\n });\n }\n\n public static fromBuilder<\n Result extends Record<string, unknown> = Record<string, unknown>,\n >(\n fb: MaybeLikePostgrestBuilder<Result>,\n opts?: PostgrestQueryParserOptions,\n ): PostgrestFilter<Result> {\n if (!isLikePostgrestBuilder(fb)) {\n throw new Error('Invalid PostgrestBuilder');\n }\n\n const parser = new PostgrestQueryParser(\n fb['url'].searchParams.toString(),\n opts,\n );\n return new PostgrestFilter<Result>({\n filters: parser.filters,\n paths: parser.paths,\n });\n }\n\n denormalize<Type extends Record<string, unknown>>(obj: Type): Type {\n return denormalize([...this.params.paths, ...this._filterPaths], obj);\n }\n\n apply(obj: unknown): obj is Result {\n if (!this._fn) {\n this._fn = (obj): obj is Result =>\n this.applyFilters(obj) && this.hasPaths(obj);\n }\n return this._fn(obj);\n }\n\n applyFilters(obj: unknown): obj is Result {\n if (!this._filtersFn) {\n const filterFns = this.params.filters.map((d) => this.buildFilterFn(d));\n this._filtersFn = (obj): obj is Result =>\n filterFns.every((fn) => isObject(obj) && fn(obj));\n }\n return this._filtersFn(obj);\n }\n\n hasFiltersOnPaths(paths: string[]): boolean {\n return (\n filterFilterDefinitionsByPaths(this.params.filters, paths).length > 0\n );\n }\n\n applyFiltersOnPaths(obj: unknown, paths: string[]): obj is Result {\n const filterFns = filterFilterDefinitionsByPaths(\n this.params.filters,\n paths,\n ).map((d) => this.buildFilterFn(d));\n const filtersFn = (obj: unknown): obj is Result =>\n filterFns.every((fn) => isObject(obj) && fn(obj));\n return filtersFn(obj);\n }\n\n hasPaths(obj: unknown): obj is Result {\n if (!this._selectFn) {\n this._selectFn = (obj): obj is Result =>\n this.params.paths.every((p) =>\n this.hasPathRecursive(obj, p.alias ?? p.path),\n );\n }\n return this._selectFn(obj);\n }\n\n private hasPathRecursive(obj: unknown, path: string): boolean {\n // obj is valid if v is null, because the foreign key relation can be null\n if (obj === null) return true;\n\n // normalise json operators \"->\" and \"->>\" to \".\"\n const pathElements = path.replace(/->>|->/g, '.').split('.');\n\n // we are at the deepest level\n if (pathElements.length === 1) {\n // else check if the path exists\n return typeof get(obj, pathElements[0]) !== 'undefined';\n }\n\n // go deeper\n const currentPathElement = pathElements.shift();\n const v = get(obj, currentPathElement!);\n\n // undefined means the path does not exist\n if (typeof v === 'undefined') return false;\n\n // if we have an array, check if all elements have the path\n if (Array.isArray(v)) {\n return v.every((i) => this.hasPathRecursive(i, pathElements.join('.')));\n }\n\n // if we dont have an array, continue recursively\n return this.hasPathRecursive(v, pathElements.join('.'));\n }\n\n private applyFilterFn(\n obj: object | any[],\n path: string,\n {\n filterFn,\n value,\n negate,\n }: { filterFn: OperatorFn; value: ValueType; negate: boolean },\n ): boolean {\n // parse json operators \"->\" and \"->>\" to \".\"\n const pathElements = path.replace(/->>|->/g, '.').split('.');\n\n const v = get(obj, pathElements[0]);\n\n if (typeof v === 'undefined') {\n // if obj is an array, we should apply the filter to all elements of the array\n if (Array.isArray(obj)) {\n return obj.every((o) =>\n this.applyFilterFn(o, path, { filterFn, value, negate }),\n );\n }\n return false;\n }\n\n if (pathElements.length > 1) {\n // recursively resolve json path\n return this.applyFilterFn(\n v as Record<string, unknown>,\n pathElements.slice(1).join('.'),\n {\n filterFn,\n value,\n negate,\n },\n );\n }\n\n const res = filterFn(parseValue(v), value);\n if (negate) return !res;\n return res;\n }\n\n private buildFilterFn(\n def:\n | FilterDefinition\n | { or: FilterDefinitions }\n | { and: FilterDefinitions },\n ): (obj: object) => boolean {\n if ('or' in def) {\n return (obj: object) => def.or.some((d) => this.buildFilterFn(d)(obj));\n }\n if ('and' in def) {\n return (obj: object) => def.and.every((d) => this.buildFilterFn(d)(obj));\n }\n const { operator, path, value, negate, alias } = def;\n const filterFn = OPERATOR_MAP[operator];\n if (!filterFn)\n throw new Error(\n `Unable to build filter function for ${JSON.stringify(\n def,\n )}. Operator ${operator} is not supported.`,\n );\n\n return (obj: object) =>\n this.applyFilterFn(obj, alias ?? path, { filterFn, value, negate });\n }\n}\n","import { encodeObject } from './lib/encode-object';\nimport { getTableFromUrl } from './lib/get-table-from-url';\nimport { isObject } from './lib/is-object';\nimport {\n MaybeLikePostgrestBuilder,\n isLikePostgrestBuilder,\n} from './lib/like-postgrest-builder';\nimport { parseOrderBy } from './lib/parse-order-by';\nimport type { OrderDefinition } from './lib/query-types';\nimport { sortSearchParams } from './lib/sort-search-param';\nimport {\n PostgrestQueryParser,\n type PostgrestQueryParserOptions,\n} from './postgrest-query-parser';\n\nexport class PostgrestParser<Result> extends PostgrestQueryParser {\n private readonly _url: URL;\n private readonly _headers: Headers;\n private readonly _body: object | undefined;\n private readonly _method: 'GET' | 'HEAD' | 'POST' | 'PATCH' | 'DELETE';\n\n public readonly queryKey: string;\n public readonly bodyKey: string | undefined;\n public readonly count: string | null;\n public readonly schema: string;\n public readonly table: string;\n public readonly isHead: boolean | undefined;\n public readonly limit: number | undefined;\n public readonly offset: number | undefined;\n public readonly orderBy: OrderDefinition[] = [];\n public readonly orderByKey: string;\n\n constructor(\n fb: MaybeLikePostgrestBuilder<Result>,\n public readonly opts?: PostgrestQueryParserOptions,\n ) {\n if (!isLikePostgrestBuilder(fb)) {\n throw new Error('Invalid PostgrestBuilder');\n }\n\n super(new URL(fb['url']).searchParams.toString(), opts);\n\n this._url = new URL(fb['url']);\n this._headers = fb['headers'];\n this._body = isObject(fb['body']) ? { ...fb['body'] } : undefined;\n this._method = fb['method'];\n\n this.queryKey = sortSearchParams(this._url.searchParams).toString();\n\n this.table = getTableFromUrl(this._url.toString());\n\n if (this._body) {\n this.bodyKey = encodeObject(this._body as Record<string, unknown>);\n }\n\n // 'Prefer': return=minimal|representation,count=exact|planned|estimated\n const preferHeaders: Record<string, string> = (\n this._headers.get('Prefer') || ''\n )\n .split(',')\n .reduce<Record<string, string>>((prev, curr) => {\n const s = curr.split('=');\n return {\n ...prev,\n [s[0]]: s[1],\n };\n }, {});\n this.count = preferHeaders['count'] ?? null;\n\n this.schema = fb['schema'] as string;\n\n this.isHead = this._method === 'HEAD';\n\n const limit = this._url.searchParams.get('limit');\n this.limit = limit ? Number(limit) : undefined;\n const offset = this._url.searchParams.get('offset');\n this.offset = offset ? Number(offset) : undefined;\n\n this.orderBy = parseOrderBy(this._url.searchParams);\n this.orderByKey = this.orderBy\n .map(\n ({ column, ascending, nullsFirst, foreignTable }) =>\n `${foreignTable ? `${foreignTable}.` : ''}${column}:${\n ascending ? 'asc' : 'desc'\n }.${nullsFirst ? 'nullsFirst' : 'nullsLast'}`,\n )\n .join('|');\n }\n}\n","import type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\n\nimport {\n type MutationFetcherResponse,\n buildMutationFetcherResponse,\n} from './fetch/build-mutation-fetcher-response';\nimport {\n type BuildNormalizedQueryOps,\n buildNormalizedQuery,\n} from './fetch/build-normalized-query';\n\nexport type UpdateFetcher<T extends GenericTable, R> = (\n input: Partial<T['Row']>,\n) => Promise<MutationFetcherResponse<R> | null>;\n\nexport type UpdateFetcherOptions<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n Re = T extends { Relationships: infer R } ? R : unknown,\n> = Parameters<PostgrestQueryBuilder<O, S, T, Re>['update']>[1] & {\n stripPrimaryKeys?: boolean;\n};\n\nexport const buildUpdateFetcher =\n <\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n >(\n qb: PostgrestQueryBuilder<O, S, T, Re>,\n primaryKeys: (keyof T['Row'])[],\n {\n stripPrimaryKeys = true,\n ...opts\n }: BuildNormalizedQueryOps<Q> & UpdateFetcherOptions<O, S, T>,\n ): UpdateFetcher<T, R> =>\n async (\n input: Partial<T['Row']>,\n ): Promise<MutationFetcherResponse<R> | null> => {\n const payload = stripPrimaryKeys\n ? primaryKeys.reduce<typeof input>(\n (acc, key) => {\n delete acc[key];\n return acc;\n },\n { ...input },\n )\n : input;\n let filterBuilder = qb.update(payload as any, opts); // todo fix type;\n for (const key of primaryKeys) {\n const value = input[key];\n // The value can be 0 or false, so we need to check if it's null or undefined instead of falsy\n if (value === null || value === undefined)\n throw new Error(`Missing value for primary key ${String(key)}`);\n // todo fix type\n filterBuilder = filterBuilder.eq(key as string, value as any);\n }\n\n const query = buildNormalizedQuery<Q>(opts);\n if (query) {\n const { selectQuery, groupedUserQueryPaths, groupedPaths } = query;\n const { data } = await filterBuilder\n .select(selectQuery)\n .throwOnError()\n .single();\n return buildMutationFetcherResponse(data as R, {\n groupedPaths,\n groupedUserQueryPaths,\n });\n }\n await filterBuilder.throwOnError().single();\n return { normalizedData: input as R };\n };\n","import type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\n\nimport {\n type MutationFetcherResponse,\n buildMutationFetcherResponse,\n} from './fetch/build-mutation-fetcher-response';\nimport {\n type BuildNormalizedQueryOps,\n buildNormalizedQuery,\n} from './fetch/build-normalized-query';\n\nexport type UpsertFetcher<T extends GenericTable, R> = (\n input: T['Insert'][],\n) => Promise<MutationFetcherResponse<R>[] | null>;\n\nexport type UpsertFetcherOptions<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n Re = T extends { Relationships: infer R } ? R : unknown,\n> = Parameters<PostgrestQueryBuilder<O, S, T, Re>['upsert']>[1];\n\nexport const buildUpsertFetcher =\n <\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n >(\n qb: PostgrestQueryBuilder<O, S, T, Re>,\n opts: BuildNormalizedQueryOps<Q> & UpsertFetcherOptions<O, S, T>,\n ): UpsertFetcher<T, R> =>\n async (\n input: T['Insert'][],\n ): Promise<MutationFetcherResponse<R>[] | null> => {\n const query = buildNormalizedQuery<Q>(opts);\n if (query) {\n const { selectQuery, groupedUserQueryPaths, groupedPaths } = query;\n const { data } = await qb\n .upsert(input as any, opts) // todo fix type\n .throwOnError()\n .select(selectQuery);\n return (data as R[]).map((d) =>\n buildMutationFetcherResponse(d, {\n groupedPaths,\n groupedUserQueryPaths,\n }),\n );\n }\n await qb\n .upsert(input as any) // todo fix type\n .throwOnError();\n return input.map((d) => ({\n normalizedData: d as R,\n }));\n };\n","import { merge as mergeAnything } from 'merge-anything';\n\nimport {\n isPostgrestHasMorePaginationCacheData,\n isPostgrestPaginationCacheData,\n} from './lib/cache-data-types';\nimport { findIndexOrdered } from './lib/find-index-ordered';\nimport { parseOrderByKey } from './lib/parse-order-by-key';\nimport type { OrderDefinition } from './lib/query-types';\nimport { isAnyPostgrestResponse } from './lib/response-types';\nimport { shouldRevalidateRelation } from './mutate/should-revalidate-relation';\nimport { shouldRevalidateTable } from './mutate/should-revalidate-table';\nimport {\n toHasMorePaginationCacheData,\n toPaginationCacheData,\n} from './mutate/transformers';\nimport type { DecodedKey, MutatorFn, RevalidateOpts } from './mutate/types';\nimport type { PostgrestFilter } from './postgrest-filter';\nimport type { PostgrestQueryParserOptions } from './postgrest-query-parser';\n\ntype MergeFn<Type extends Record<string, unknown>> = (\n current: Type,\n input: Type,\n) => Type;\n\nexport const upsert = <Type extends Record<string, unknown>>(\n input: Type,\n currentData: Type[],\n primaryKeys: (keyof Type)[],\n filter: Pick<PostgrestFilter<Type>, 'apply'>,\n mergeFn?: MergeFn<Type>,\n orderBy?: OrderDefinition[],\n) => {\n const merge = mergeFn ?? (mergeAnything as MergeFn<Type>);\n\n // find item\n const itemIdx = currentData.findIndex((oldItem) =>\n primaryKeys.every((pk) => oldItem[pk] === input[pk]),\n );\n\n let newItem = input;\n let newItemIdx = itemIdx;\n\n if (itemIdx !== -1) {\n // if exists, merge and remove\n newItem = merge(currentData[itemIdx], input) as Type;\n currentData.splice(itemIdx, 1);\n }\n\n if (orderBy && Array.isArray(orderBy) && orderBy.length > 0) {\n // if ordered, find new idx\n newItemIdx = findIndexOrdered(newItem, currentData, orderBy);\n }\n\n if (newItemIdx === -1) {\n // default to prepend\n newItemIdx = 0;\n }\n\n // check that new item is still a valid member of the list and has all required paths\n if (filter.apply(newItem)) {\n currentData.splice(newItemIdx, 0, newItem);\n }\n\n return currentData;\n};\n\nexport type UpsertItemOperation<Type extends Record<string, unknown>> = {\n table: string;\n schema: string;\n input: Type;\n primaryKeys: (keyof Type)[];\n merge?: (current: Type, input: Type) => Type;\n} & RevalidateOpts<Type>;\n\nexport type UpsertItemCache<KeyType, Type extends Record<string, unknown>> = {\n /**\n * The keys currently present in the cache\n */\n cacheKeys: KeyType[];\n /**\n * Should return a PostgrestFilter for the given query.\n * This is exposed as a function so results can be cached by the cache library.\n */\n getPostgrestFilter: (\n query: string,\n opts?: PostgrestQueryParserOptions,\n ) => Pick<\n PostgrestFilter<Type>,\n | 'applyFilters'\n | 'denormalize'\n | 'hasFiltersOnPaths'\n | 'applyFiltersOnPaths'\n | 'apply'\n | 'hasWildcardPath'\n | 'hasAggregatePath'\n >;\n /**\n * Decode a key. Should return null if not a PostgREST key.\n */\n decode: (k: KeyType) => DecodedKey | null;\n /**\n * The mutation function from the cache library\n */\n mutate: (key: KeyType, fn: MutatorFn<Type>) => Promise<void> | void;\n /**\n * The revalidation function from the cache library\n */\n revalidate: (key: KeyType) => Promise<void> | void;\n};\nexport const upsertItem = async <KeyType, Type extends Record<string, unknown>>(\n op: UpsertItemOperation<Type>,\n cache: UpsertItemCache<KeyType, Type>,\n) => {\n const {\n revalidateRelations: revalidateRelationsOpt,\n revalidateTables: revalidateTablesOpt,\n schema,\n table,\n primaryKeys,\n } = op;\n const { cacheKeys, decode, getPostgrestFilter, mutate, revalidate } = cache;\n\n const mutations = [];\n for (const k of cacheKeys) {\n const key = decode(k);\n\n // Exit early if not a postgrest key\n if (!key) continue;\n const filter = getPostgrestFilter(key.queryKey);\n if (key.schema === schema && key.table === table) {\n // parse input into expected target format\n const transformedInput = filter.denormalize(op.input);\n if (\n filter.applyFilters(transformedInput) ||\n // also allow upsert if either the filter does not apply eq filters on any pk\n !filter.hasFiltersOnPaths(op.primaryKeys as string[]) ||\n // or input matches all pk filters\n filter.applyFiltersOnPaths(transformedInput, op.primaryKeys as string[])\n ) {\n const merge = op.merge ?? (mergeAnything as MergeFn<Type>);\n const limit = key.limit ?? 1000;\n const orderBy = key.orderByKey\n ? parseOrderByKey(key.orderByKey)\n : undefined;\n\n if (\n key.isHead === true ||\n filter.hasWildcardPath ||\n filter.hasAggregatePath\n ) {\n // we cannot know whether the new item after merging still has all paths required for a query if it contains a wildcard,\n // because we do not know what columns a table has. we must always revalidate then.\n mutations.push(revalidate(k));\n } else {\n mutations.push(\n mutate(k, (currentData) => {\n // Return early if undefined or null\n if (!currentData) return currentData;\n\n if (isPostgrestHasMorePaginationCacheData<Type>(currentData)) {\n return toHasMorePaginationCacheData(\n upsert<Type>(\n transformedInput,\n currentData.flatMap((p) => p.data),\n primaryKeys,\n filter,\n merge,\n orderBy,\n ),\n currentData,\n limit,\n );\n } else if (isPostgrestPaginationCacheData<Type>(currentData)) {\n return toPaginationCacheData(\n upsert<Type>(\n transformedInput,\n currentData.flat(),\n primaryKeys,\n filter,\n merge,\n orderBy,\n ),\n limit,\n );\n } else if (isAnyPostgrestResponse<Type>(currentData)) {\n const { data } = currentData;\n\n if (!Array.isArray(data)) {\n if (data === null) {\n return {\n data,\n count: currentData.count,\n };\n }\n const newData = merge(data, transformedInput);\n return {\n // Check if the new data is still valid given the key\n data: filter.apply(newData) ? newData : null,\n count: currentData.count,\n };\n }\n\n const newData = upsert<Type>(\n transformedInput,\n // deep copy data to avoid mutating the original\n JSON.parse(JSON.stringify(data)),\n primaryKeys,\n filter,\n merge,\n orderBy,\n );\n\n return {\n data: newData,\n count: newData.length,\n };\n }\n return currentData;\n }),\n );\n }\n }\n }\n\n if (\n revalidateTablesOpt &&\n shouldRevalidateTable(revalidateTablesOpt, { decodedKey: key })\n ) {\n mutations.push(revalidate(k));\n }\n\n if (\n revalidateRelationsOpt &&\n shouldRevalidateRelation(revalidateRelationsOpt, {\n input: op.input,\n getPostgrestFilter,\n decodedKey: key,\n })\n ) {\n mutations.push(revalidate(k));\n }\n }\n await Promise.all(mutations);\n};\n","import {\n RevalidateTables,\n shouldRevalidateTable,\n} from './mutate/should-revalidate-table';\nimport type { DecodedKey } from './mutate/types';\n\nexport type RevalidateTablesOperation = RevalidateTables;\n\nexport type RevalidateTablesCache<KeyType> = {\n /**\n * The keys currently present in the cache\n */\n cacheKeys: KeyType[];\n /**\n * Decode a key. Should return null if not a PostgREST key.\n */\n decode: (k: KeyType) => DecodedKey | null;\n /**\n * The revalidation function from the cache library\n */\n revalidate: (key: KeyType) => Promise<void> | void;\n};\n\nexport const revalidateTables = async <KeyType>(\n tables: RevalidateTablesOperation,\n cache: RevalidateTablesCache<KeyType>,\n) => {\n const { cacheKeys, decode, revalidate } = cache;\n\n const mutations = [];\n for (const k of cacheKeys) {\n const key = decode(k);\n\n // Exit early if not a postgrest key\n if (!key) continue;\n\n if (shouldRevalidateTable(tables, { decodedKey: key })) {\n mutations.push(revalidate(k));\n }\n }\n\n await Promise.all(mutations);\n};\n","import {\n type DeleteItemOperation,\n deleteItem,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { flatten } from 'flat';\n\nimport { decode, usePostgrestFilterCache } from '../lib';\n\n/**\n * Convenience hook to delete an item from the react query cache. Does not make any http requests, and is supposed to be used for custom cache updates.\n * @param opts The mutation options\n * @returns void\n */\nexport function useDeleteItem<Type extends Record<string, unknown>>(\n opts: Omit<DeleteItemOperation<Type>, 'input'>,\n) {\n const queryClient = useQueryClient();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return async (input: Type) =>\n await deleteItem(\n {\n input: flatten(input) as Type,\n ...opts,\n },\n {\n cacheKeys: queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey),\n getPostgrestFilter,\n revalidate: (key) => queryClient.invalidateQueries({ queryKey: key }),\n mutate: (key, fn) => {\n queryClient.setQueriesData({ queryKey: key }, fn);\n },\n decode,\n },\n );\n}\n","import {\n PostgrestFilter,\n type PostgrestQueryParserOptions,\n encodeObject,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\n\nexport const POSTGREST_FILTER_KEY_PREFIX = 'postgrest-filter';\n\nexport const usePostgrestFilterCache = <\n R extends Record<string, unknown>,\n>() => {\n const queryClient = useQueryClient();\n\n return (query: string, opts?: PostgrestQueryParserOptions) => {\n const key = [\n POSTGREST_FILTER_KEY_PREFIX,\n query,\n opts ? encodeObject(opts) : null,\n ];\n const cacheData = queryClient.getQueryData(key);\n if (cacheData instanceof PostgrestFilter) {\n return cacheData;\n }\n const filter = PostgrestFilter.fromQuery(query, opts);\n queryClient.setQueryData(key, filter);\n return filter as PostgrestFilter<R>;\n };\n};\n","import {\n type DecodedKey,\n PostgrestParser,\n isPostgrestBuilder,\n} from '@supabase-cache-helpers/postgrest-core';\n\nexport const KEY_PREFIX = 'postgrest';\nexport const INFINITE_KEY_PREFIX = 'page';\n\nexport type DecodedReactQueryKey = DecodedKey & {\n isInfinite: boolean;\n key: string[];\n};\n\nexport const encode = <Result>(key: unknown, isInfinite: boolean): string[] => {\n if (!isPostgrestBuilder<Result>(key)) {\n throw new Error('Key is not a PostgrestBuilder');\n }\n\n const parser = new PostgrestParser<Result>(key);\n return [\n KEY_PREFIX,\n isInfinite ? INFINITE_KEY_PREFIX : 'null',\n parser.schema,\n parser.table,\n parser.queryKey,\n parser.bodyKey ?? 'null',\n `count=${parser.count}`,\n `head=${parser.isHead}`,\n parser.orderByKey,\n ];\n};\n\nexport const decode = (key: unknown): DecodedReactQueryKey | null => {\n if (!Array.isArray(key)) return null;\n\n const [\n prefix,\n infinitePrefix,\n schema,\n table,\n queryKey,\n bodyKey,\n count,\n head,\n orderByKey,\n ] = key;\n\n // Exit early if not a postgrest key\n if (prefix !== KEY_PREFIX) return null;\n\n const params = new URLSearchParams(queryKey);\n const limit = params.get('limit');\n const offset = params.get('offset');\n\n const countValue = count.replace('count=', '');\n\n return {\n limit: limit ? Number(limit) : undefined,\n offset: offset ? Number(offset) : undefined,\n bodyKey,\n count: countValue === 'null' ? null : countValue,\n isHead: head === 'head=true',\n isInfinite: infinitePrefix === INFINITE_KEY_PREFIX,\n key,\n queryKey,\n schema,\n table,\n orderByKey,\n };\n};\n","import type { BuildNormalizedQueryOps } from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { decode } from './key';\nimport { usePostgrestFilterCache } from './use-postgrest-filter-cache';\n\nexport const useQueriesForTableLoader = (table: string) => {\n const queryClient = useQueryClient();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return () =>\n queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey)\n .reduce<ReturnType<BuildNormalizedQueryOps['queriesForTable']>>(\n (prev, curr) => {\n const decodedKey = decode(curr);\n if (decodedKey?.table === table) {\n prev.push(getPostgrestFilter(decodedKey.queryKey).params);\n }\n return prev;\n },\n [],\n );\n};\n","import {\n type MutateItemOperation,\n mutateItem,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { flatten } from 'flat';\n\nimport { decode, usePostgrestFilterCache } from '../lib';\n\n/**\n * Convenience hook to mutate an item within the react query cache. Does not make any http requests, and is supposed to be used for custom cache updates.\n * @param opts The mutation options\n * @returns void\n */\nexport function useMutateItem<Type extends Record<string, unknown>>(\n opts: Omit<MutateItemOperation<Type>, 'input' | 'mutate'>,\n): (input: Partial<Type>, mutateFn: (current: Type) => Type) => Promise<void> {\n const queryClient = useQueryClient();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return async (input: Partial<Type>, mutateFn: (current: Type) => Type) =>\n await mutateItem(\n {\n input: flatten(input) as Partial<Type>,\n mutate: mutateFn,\n ...opts,\n },\n {\n cacheKeys: queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey),\n getPostgrestFilter,\n revalidate: (key) => queryClient.invalidateQueries({ queryKey: key }),\n mutate: (key, fn) => {\n queryClient.setQueriesData({ queryKey: key }, fn);\n },\n decode,\n },\n );\n}\n","import {\n type RevalidateTablesOperation,\n revalidateTables,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { decode } from '../lib';\n\n/**\n * Returns a function that can be used to revalidate all queries in the cache that match the tables provided in the `RevalidateTablesOperation`\n * This hook does not make any HTTP requests and is intended to be used for custom cache revalidations.\n *\n * @param opts - The tables to revalidate\n *\n * @returns A function that will revalidate all defined tables when called.\n * **/\nexport function useRevalidateTables(\n tables: RevalidateTablesOperation,\n): () => Promise<void> {\n const queryClient = useQueryClient();\n\n return async () =>\n await revalidateTables(tables, {\n cacheKeys: queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey),\n revalidate: (key) => queryClient.invalidateQueries({ queryKey: key }),\n decode,\n });\n}\n","import {\n type UpsertItemOperation,\n upsertItem,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { flatten } from 'flat';\n\nimport { decode, usePostgrestFilterCache } from '../lib';\n\n/**\n * Convenience hook to upsert an item into the react query cache. Does not make any http requests, and is supposed to be used for custom cache updates.\n * @param opts The mutation options\n * @returns void\n */\nexport function useUpsertItem<Type extends Record<string, unknown>>(\n opts: Omit<UpsertItemOperation<Type>, 'input'>,\n) {\n const queryClient = useQueryClient();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return async (input: Type) =>\n await upsertItem(\n {\n input: flatten(input) as Type,\n ...opts,\n },\n {\n cacheKeys: queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey),\n getPostgrestFilter,\n revalidate: (key) => queryClient.invalidateQueries({ queryKey: key }),\n mutate: (key, fn) => {\n queryClient.setQueriesData({ queryKey: key }, fn);\n },\n decode,\n },\n );\n}\n","import {\n buildDeleteFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useDeleteItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a DELETE mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the DELETE mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'DeleteOne', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useDeleteManyMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<'DeleteMany', S, T, RelationName, Re, Q, R>,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input) => {\n const result = await buildDeleteFetcher<O, S, T, RelationName, Re, Q, R>(\n qb,\n primaryKeys,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(input);\n\n if (result) {\n for (const r of result) {\n deleteItem(r.normalizedData as T['Row']);\n }\n }\n\n if (!result || result.every((r) => !r.userQueryData)) return null;\n\n return result.map((r) => r.userQueryData as R);\n },\n ...opts,\n });\n}\n\nexport { useDeleteManyMutation };\n","import {\n buildDeleteFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useDeleteItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a DELETE mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the DELETE mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'DeleteOne', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useDeleteMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<'DeleteOne', S, T, RelationName, Re, Q, R>,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input) => {\n const r = await buildDeleteFetcher<O, S, T, RelationName, Re, Q, R>(\n qb,\n primaryKeys,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )([input]);\n\n if (!r) return null;\n\n const result = r[0];\n\n if (result) {\n await deleteItem(result.normalizedData as T['Row']);\n }\n return result?.userQueryData ?? null;\n },\n ...opts,\n });\n}\n\nexport { useDeleteMutation };\n","import {\n buildInsertFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport { getUserResponse } from './get-user-response';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a INSERT mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the INSERT mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'Insert', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useInsertMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<'Insert', S, T, RelationName, Re, Q, R>,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input) => {\n const result = await buildInsertFetcher<O, S, T, RelationName, Re, Q, R>(\n qb,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(input);\n\n if (result) {\n await Promise.all(\n result.map(\n async (d) => await upsertItem(d.normalizedData as T['Row']),\n ),\n );\n }\n return getUserResponse(result) ?? null;\n },\n ...opts,\n });\n}\n\nexport { useInsertMutation };\n","import type { MutationFetcherResponse } from '@supabase-cache-helpers/postgrest-core';\n\ntype Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T; // from lodash\n\nexport function truthy<T>(value: T): value is Truthy<T> {\n return !!value;\n}\n\nexport const getUserResponse = <R>(\n d: MutationFetcherResponse<R>[] | null | undefined,\n) => {\n if (!d) return d;\n return d.map((r) => r.userQueryData).filter(truthy);\n};\n","import {\n buildUpdateFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a UPDATE mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the UPDATE mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'UpdateOne', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useUpdateMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Relationships = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<\n S,\n T['Row'],\n RelationName,\n Relationships,\n Q extends '*' ? '*' : Q,\n O\n >,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Relationships>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<\n 'UpdateOne',\n S,\n T,\n RelationName,\n Relationships,\n Q,\n R\n >,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input) => {\n const result = await buildUpdateFetcher<\n O,\n S,\n T,\n RelationName,\n Relationships,\n Q,\n R\n >(qb, primaryKeys, {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n })(input);\n if (result) {\n await upsertItem(result.normalizedData as T['Row']);\n }\n return result?.userQueryData ?? null;\n },\n ...opts,\n });\n}\n\nexport { useUpdateMutation };\n","import {\n buildUpsertFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport { getUserResponse } from './get-user-response';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a UPSERT mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the UPSERT mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'Upsert', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useUpsertMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<'Upsert', S, T, RelationName, Re, Q, R>,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input: T['Insert'][]) => {\n const data = await buildUpsertFetcher<O, S, T, RelationName, Re, Q, R>(\n qb,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(input);\n if (data) {\n await Promise.all(\n data.map(async (d) => await upsertItem(d.normalizedData as T['Row'])),\n );\n }\n return getUserResponse(data) ?? null;\n },\n ...opts,\n });\n}\n\nexport { useUpsertMutation };\n","import {\n type AnyPostgrestResponse,\n isPostgrestBuilder,\n isPostgrestTransformBuilder,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type { PostgrestError } from '@supabase/postgrest-js';\nimport type { UseQueryOptions as UseReactQueryOptions } from '@tanstack/react-query';\n\nimport { encode } from '../lib/key';\n\nexport function buildQueryOpts<Result>(\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseReactQueryOptions<AnyPostgrestResponse<Result>, PostgrestError> {\n return {\n queryKey: encode<Result>(query, false),\n queryFn: async ({ signal }) => {\n if (isPostgrestTransformBuilder(query)) {\n query = query.abortSignal(signal);\n }\n if (isPostgrestBuilder(query)) {\n query = query.throwOnError();\n }\n return await query;\n },\n ...config,\n };\n}\n","import type { AnyPostgrestResponse } from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\nimport type { FetchQueryOptions, QueryClient } from '@tanstack/react-query';\n\nimport { buildQueryOpts } from './build-query-opts';\n\nfunction fetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<PostgrestSingleResponse<Result>>;\nfunction fetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestMaybeSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<PostgrestMaybeSingleResponse<Result>>;\nfunction fetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<PostgrestResponse<Result>>;\n\nasync function fetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<AnyPostgrestResponse<Result>> {\n return await queryClient.fetchQuery<\n AnyPostgrestResponse<Result>,\n PostgrestError\n >(buildQueryOpts(query, config));\n}\n\nexport { fetchQuery };\n","import {\n type AnyPostgrestResponse,\n isPostgrestBuilder,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\nimport type { FetchQueryOptions, QueryClient } from '@tanstack/react-query';\n\nimport { encode } from '../lib';\nimport { buildQueryOpts } from './build-query-opts';\n\nfunction prefetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<void>;\nfunction prefetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestMaybeSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<void>;\nfunction prefetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<void>;\n\nasync function prefetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n) {\n await queryClient.prefetchQuery<AnyPostgrestResponse<Result>, PostgrestError>(\n buildQueryOpts(query, config),\n );\n}\n\nfunction fetchQueryInitialData<Result>(\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n): Promise<[string[], PostgrestSingleResponse<Result>]>;\n\nfunction fetchQueryInitialData<Result>(\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>>,\n): Promise<[string[], PostgrestMaybeSingleResponse<Result>]>;\n\nfunction fetchQueryInitialData<Result>(\n query: PromiseLike<PostgrestResponse<Result>>,\n): Promise<[string[], PostgrestResponse<Result>]>;\n\nasync function fetchQueryInitialData<Result>(\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n): Promise<[string[], AnyPostgrestResponse<Result>]> {\n if (!isPostgrestBuilder<Result>(query)) {\n throw new Error('Query is not a PostgrestBuilder');\n }\n\n return [encode(query, false), await query.throwOnError()];\n}\n\nexport { prefetchQuery, fetchQueryInitialData };\n","import type { AnyPostgrestResponse } from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\nimport {\n type UseQueryOptions as UseReactQueryOptions,\n type UseQueryResult as UseReactQueryResult,\n useQuery as useReactQuery,\n} from '@tanstack/react-query';\n\nimport { buildQueryOpts } from './build-query-opts';\n\n/**\n * Applies Omit over a union, while preserving its union-ness.\n */\ntype DistributiveOmit<T, K extends keyof any> = T extends any\n ? Omit<T, K>\n : never;\n\n/**\n * Represents the return value of the `useQuery` hook when `query` is expected to return\n * a single row.\n */\nexport type UseQuerySingleReturn<Result> = DistributiveOmit<\n UseReactQueryResult<PostgrestSingleResponse<Result>['data'], PostgrestError>,\n 'refetch'\n> &\n Pick<\n UseReactQueryResult<PostgrestSingleResponse<Result>, PostgrestError>,\n 'refetch'\n > &\n Pick<PostgrestSingleResponse<Result>, 'count'>;\n\n/**\n * Represents the return value of the `useQuery` hook when `query` is expected to return\n * either a single row or an empty response.\n */\nexport type UseQueryMaybeSingleReturn<Result> = DistributiveOmit<\n UseReactQueryResult<\n PostgrestMaybeSingleResponse<Result>['data'],\n PostgrestError\n >,\n 'refetch'\n> &\n Pick<\n UseReactQueryResult<PostgrestMaybeSingleResponse<Result>, PostgrestError>,\n 'refetch'\n > &\n Pick<PostgrestMaybeSingleResponse<Result>, 'count'>;\n\n/**\n * Represents the return value of the `useQuery` hook when `query` is expected to return\n * one or more rows.\n */\nexport type UseQueryReturn<Result> = DistributiveOmit<\n UseReactQueryResult<PostgrestResponse<Result>['data'], PostgrestError>,\n 'refetch'\n> &\n Pick<\n UseReactQueryResult<PostgrestResponse<Result>, PostgrestError>,\n 'refetch'\n > &\n Pick<PostgrestResponse<Result>, 'count'>;\n\n/**\n * Represents the return value of the `useQuery` hook when the type of the query response\n * is not known.\n */\nexport type UseQueryAnyReturn<Result> = DistributiveOmit<\n UseReactQueryResult<AnyPostgrestResponse<Result>['data'], PostgrestError>,\n 'refetch'\n> &\n Pick<\n UseReactQueryResult<AnyPostgrestResponse<Result>, PostgrestError>,\n 'refetch'\n > &\n Pick<AnyPostgrestResponse<Result>, 'count'>;\n\n/**\n * React hook to execute a PostgREST query and return a single item response.\n *\n * @param {PromiseLike<PostgrestSingleResponse<Result>>} query A promise that resolves to a PostgREST single item response.\n * @param {Omit<UseReactQueryOptions<PostgrestSingleResponse<Result>, PostgrestError>, 'queryKey' | 'queryFn'>} [config] The React Query options.\n * @returns {UseQuerySingleReturn<Result>} The hook result containing the single item response data.\n */\nfunction useQuery<Result>(\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<PostgrestSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseQuerySingleReturn<Result>;\n/**\n * React hook to execute a PostgREST query and return a maybe single item response.\n *\n * @param {PromiseLike<PostgrestMaybeSingleResponse<Result>>} query A promise that resolves to a PostgREST maybe single item response.\n * @param {Omit<UseReactQueryOptions<PostgrestMaybeSingleResponse<Result>, PostgrestError>, 'queryKey' | 'queryFn'>} [config] The React Query options.\n * @returns {UseQueryMaybeSingleReturn<Result>} The hook result containing the maybe single item response data.\n */\nfunction useQuery<Result>(\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<PostgrestMaybeSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseQueryMaybeSingleReturn<Result>;\n/**\n * React hook to execute a PostgREST query.\n *\n * @template Result The expected response data type.\n * @param {PromiseLike<PostgrestResponse<Result>>} query A promise that resolves to a PostgREST response.\n * @param {Omit<UseReactQueryOptions<PostgrestResponse<Result>, PostgrestError>, 'queryKey' | 'queryFn'>} [config] The React Query options.\n * @returns {UseQueryReturn<Result>} The hook result containing the response data.\n */\nfunction useQuery<Result>(\n query: PromiseLike<PostgrestResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<PostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseQueryReturn<Result>;\n\n/**\n * React hook to execute a PostgREST query.\n *\n * @template Result The expected response data type.\n * @param {PromiseLike<AnyPostgrestResponse<Result>>} query A promise that resolves to a PostgREST response of any kind.\n * @param {Omit<UseReactQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>, 'queryKey' | 'queryFn'>} [config] The React Query options.\n * @returns {UseQueryAnyReturn<Result>} The hook result containing the response data.\n */\nfunction useQuery<Result>(\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseQueryAnyReturn<Result> {\n const result = useReactQuery<AnyPostgrestResponse<Result>, PostgrestError>(\n buildQueryOpts<Result>(query, config),\n );\n\n // isPending and isLoadingError are the only cases in which no data is present\n if (result.isPending || result.isLoadingError) {\n return {\n ...result,\n data: undefined,\n count: null,\n } as UseQueryAnyReturn<Result>;\n }\n\n return {\n ...result,\n data: result.data?.data,\n count: result.data?.count,\n } as UseQueryAnyReturn<Result>;\n}\n\nexport { useQuery };\n","import {\n type RevalidateOpts,\n buildNormalizedQuery,\n normalizeResponse,\n} from '@supabase-cache-helpers/postgrest-core';\nimport {\n UnstableGetResult as GetResult,\n PostgrestClientOptions,\n} from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport {\n REALTIME_LISTEN_TYPES,\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n type RealtimeChannel,\n type RealtimePostgresChangesFilter,\n type RealtimePostgresChangesPayload,\n type SupabaseClient,\n} from '@supabase/supabase-js';\nimport type { MutationOptions as ReactQueryMutatorOptions } from '@tanstack/react-query';\nimport { useEffect, useState } from 'react';\n\nimport { useDeleteItem, useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\n\n/**\n * Options for `useSubscriptionQuery` hook\n */\nexport type UseSubscriptionQueryOpts<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<\n S,\n T['Row'],\n RelationName,\n Re,\n Q extends '*' ? '*' : Q,\n PostgrestClientOptions\n >,\n> = RevalidateOpts<T['Row']> &\n ReactQueryMutatorOptions & {\n /**\n * A callback that will be called whenever a realtime event occurs for the given channel.\n * The callback will receive the event payload with an additional \"data\" property, which will be\n * the affected row of the event (or a modified version of it, if a select query is provided).\n */\n callback?: (\n event: RealtimePostgresChangesPayload<T['Row']> & { data: T['Row'] | R },\n ) => void | Promise<void>;\n };\n\n/**\n * A hook for subscribing to realtime Postgres events on a given channel.\n *\n * The subscription will automatically update the cache for the specified table in response\n * to incoming Postgres events, and optionally run a user-provided callback function with the\n * event and the updated data.\n *\n * This hook works by creating a Supabase Realtime channel for the specified table and\n * subscribing to Postgres changes on that channel. When an event is received, the hook\n * fetches the updated data from the database (using a `select` query generated from the cache\n * configuration), and then updates the cache accordingly.\n *\n * @param client - The Supabase client instance.\n * @param channelName - The name of the channel to subscribe to.\n * @param filter - The filter object to use when listening for changes.\n * @param primaryKeys - An array of the primary keys for the table being listened to.\n * @param query - An optional PostgREST query to use when selecting data for an event.\n * @param opts - Additional options to pass to the hook.\n * @returns An object containing the RealtimeChannel and the current status of the subscription.\n */\nfunction useSubscriptionQuery<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<\n S,\n T['Row'],\n RelationName,\n Re,\n Q extends '*' ? '*' : Q,\n PostgrestClientOptions\n >,\n>(\n client: SupabaseClient | null,\n channelName: string,\n filter: Omit<\n RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL}`>,\n 'table'\n > & {\n table: RelationName;\n },\n primaryKeys: (keyof T['Row'])[],\n query?: Q extends '*' ? \"'*' is not allowed\" : Q | null,\n opts?: UseSubscriptionQueryOpts<S, T, RelationName, Re, Q, R>,\n) {\n const [status, setStatus] = useState<string>();\n const [channel, setChannel] = useState<RealtimeChannel>();\n const queriesForTable = useQueriesForTableLoader(filter.table);\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n\n useEffect(() => {\n if (!client) return;\n\n const c = client\n .channel(channelName)\n .on<T['Row']>(\n REALTIME_LISTEN_TYPES.POSTGRES_CHANGES,\n filter,\n async (payload) => {\n let data: T['Row'] | R = payload.new ?? payload.old;\n const selectQuery = buildNormalizedQuery({ queriesForTable, query });\n if (\n payload.eventType !==\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE &&\n selectQuery\n ) {\n const qb = client\n .from(payload.table)\n .select(selectQuery.selectQuery);\n for (const pk of primaryKeys) {\n qb.eq(pk.toString(), data[pk]);\n }\n const res = await qb.single();\n if (res.data) {\n data = normalizeResponse(selectQuery.groupedPaths, res.data) as R;\n }\n }\n\n if (\n payload.eventType ===\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT ||\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE\n ) {\n await upsertItem(data as Record<string, unknown>);\n } else if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n if (opts?.callback) {\n opts.callback({\n ...payload,\n data,\n });\n }\n },\n )\n .subscribe((status: string) => setStatus(status));\n\n setChannel(c);\n\n return () => {\n if (c) c.unsubscribe();\n };\n }, []);\n\n return { channel, status };\n}\n\nexport { useSubscriptionQuery };\n","import type { RevalidateOpts } from '@supabase-cache-helpers/postgrest-core';\nimport type { GenericTable } from '@supabase/postgrest-js/dist/cjs/types';\nimport {\n REALTIME_LISTEN_TYPES,\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n type RealtimePostgresChangesFilter,\n type RealtimePostgresChangesPayload,\n type SupabaseClient,\n} from '@supabase/supabase-js';\nimport type { MutationOptions as ReactQueryMutatorOptions } from '@tanstack/react-query';\nimport { useEffect, useState } from 'react';\n\nimport { useDeleteItem, useUpsertItem } from '../cache';\n\n/**\n * Options for the `useSubscription` hook.\n */\nexport type UseSubscriptionOpts<T extends GenericTable> = RevalidateOpts<\n T['Row']\n> &\n ReactQueryMutatorOptions & {\n callback?: (\n event: RealtimePostgresChangesPayload<T['Row']>,\n ) => void | Promise<void>;\n };\n\n/**\n * Hook that sets up a real-time subscription to a Postgres database table.\n *\n * @param channel - The real-time channel to subscribe to.\n * @param filter - A filter that specifies the table and conditions for the subscription.\n * @param primaryKeys - An array of primary key column names for the table.\n * @param opts - Options for the mutation function used to upsert or delete rows in the cache.\n *\n * @returns An object containing the current status of the subscription.\n */\nfunction useSubscription<T extends GenericTable>(\n client: SupabaseClient | null,\n channelName: string,\n filter: Omit<\n RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL}`>,\n 'table'\n > & {\n table: string;\n },\n primaryKeys: (keyof T['Row'])[],\n opts?: UseSubscriptionOpts<T>,\n) {\n const [status, setStatus] = useState<string>();\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n\n useEffect(() => {\n if (!client) return;\n\n const c = client\n .channel(channelName)\n .on<T['Row']>(\n REALTIME_LISTEN_TYPES.POSTGRES_CHANGES,\n filter,\n async (payload) => {\n if (\n payload.eventType ===\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT ||\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE\n ) {\n await upsertItem(payload.new);\n } else if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n if (opts?.callback) {\n opts.callback({\n ...payload,\n });\n }\n },\n )\n .subscribe((status: string) => setStatus(status));\n\n return () => {\n if (c) c.unsubscribe();\n };\n }, []);\n\n return { status };\n}\n\nexport { useSubscription };\n"],"mappings":"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","names":["p","isPlainObject","flatten","decode","prev","isArray","unflatten","v","ifDateGetTime","obj","merge","decode","useQueryClient","useQueryClient","useQueryClient","useQueryClient","useQueryClient","useMutation","useMutation","useMutation","useMutation","REALTIME_LISTEN_TYPES","REALTIME_POSTGRES_CHANGES_LISTEN_EVENT","useEffect","useState","useQueryClient","__async","__spreadValues","useQueryClient","__async","__spreadValues","flatten","deleteItem","__spreadProps","getTable","upsertItem","__spreadProps","__spreadValues","useMutation","__async","__spreadValues","__async","isPostgrestBuilder","__spreadProps","__spreadValues"]}
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-GC3TBUWE.js";
|
|
4
4
|
import {
|
|
5
5
|
PostgrestParser
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-JOULSXOI.js";
|
|
7
7
|
import {
|
|
8
8
|
encode
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YUX6RGLZ.js";
|
|
10
10
|
import {
|
|
11
11
|
generateUUID,
|
|
12
12
|
useSupabase
|
|
@@ -604,4 +604,4 @@ export {
|
|
|
604
604
|
useDbAdvanceFilterQuery,
|
|
605
605
|
createCombinedStatus
|
|
606
606
|
};
|
|
607
|
-
//# sourceMappingURL=chunk-
|
|
607
|
+
//# sourceMappingURL=chunk-Z456IHCB.js.map
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { C as ClarificationQuestion, D as DatabaseTypes, F as Filter, x as FilterGroup, y as FilterOperator, z as Pagination, P as PublicTableNames, Q as QueryState, R as ResolveRowType, S as SchemaNames, m as SchemaTableNames, A as Sort, T as TableIdentifier, U as UseAdvanceQueryOptions, n as UseAdvanceQueryResult, o as UseDbCountOptions, p as UseDbCountResult, K as UseDbDeleteOptions, L as UseDbDeleteResult, q as UseDbInfiniteQueryOptions, r as UseDbInfiniteQueryResult, B as UseDbInsertOptions, E as UseDbInsertResult, v as UseDbQueryByIdOptions, w as UseDbQueryByIdResult, s as UseDbQueryOptions, t as UseDbQueryResult, G as UseDbUpdateOptions, H as UseDbUpdateResult, I as UseDbUpsertOptions, J as UseDbUpsertResult, u as useAdvanceQuery, a as useDataLayer, b as useDataLayerCore, M as useDataLayerCoreOptional, c as useDataLayerOptional, d as useDataLayerStatus, e as useDbCount, f as useDbDelete, g as useDbInfiniteQuery, h as useDbInsert, i as useDbQuery, j as useDbQueryById, k as useDbUpdate, l as useDbUpsert } from '../useDbCount-
|
|
1
|
+
export { C as ClarificationQuestion, D as DatabaseTypes, F as Filter, x as FilterGroup, y as FilterOperator, z as Pagination, P as PublicTableNames, Q as QueryState, R as ResolveRowType, S as SchemaNames, m as SchemaTableNames, A as Sort, T as TableIdentifier, U as UseAdvanceQueryOptions, n as UseAdvanceQueryResult, o as UseDbCountOptions, p as UseDbCountResult, K as UseDbDeleteOptions, L as UseDbDeleteResult, q as UseDbInfiniteQueryOptions, r as UseDbInfiniteQueryResult, B as UseDbInsertOptions, E as UseDbInsertResult, v as UseDbQueryByIdOptions, w as UseDbQueryByIdResult, s as UseDbQueryOptions, t as UseDbQueryResult, G as UseDbUpdateOptions, H as UseDbUpdateResult, I as UseDbUpsertOptions, J as UseDbUpsertResult, u as useAdvanceQuery, a as useDataLayer, b as useDataLayerCore, M as useDataLayerCoreOptional, c as useDataLayerOptional, d as useDataLayerStatus, e as useDbCount, f as useDbDelete, g as useDbInfiniteQuery, h as useDbInsert, i as useDbQuery, j as useDbQueryById, k as useDbUpdate, l as useDbUpsert } from '../useDbCount-DHLJzmkO.js';
|
|
2
2
|
import { SyncStatus, SyncControl } from '../core/index.js';
|
|
3
|
-
import '../DataLayerContext-
|
|
3
|
+
import '../DataLayerContext-C7cJtiO8.js';
|
|
4
4
|
import 'react';
|
|
5
5
|
import '@supabase/supabase-js';
|
|
6
6
|
import '@tanstack/react-query';
|