@nicia-ai/typegraph 0.34.0 → 0.36.0
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/backend/postgres/index.cjs +29 -29
- package/dist/backend/postgres/index.d.cts +39 -7
- package/dist/backend/postgres/index.d.ts +39 -7
- package/dist/backend/postgres/index.js +16 -16
- package/dist/backend/postgres/pglite.cjs +21 -21
- package/dist/backend/postgres/pglite.d.cts +4 -4
- package/dist/backend/postgres/pglite.d.ts +4 -4
- package/dist/backend/postgres/pglite.js +16 -16
- package/dist/backend/sqlite/index.cjs +25 -26
- package/dist/backend/sqlite/index.d.cts +8 -8
- package/dist/backend/sqlite/index.d.ts +8 -8
- package/dist/backend/sqlite/index.js +13 -14
- package/dist/backend/sqlite/libsql.cjs +19 -19
- package/dist/backend/sqlite/libsql.d.cts +4 -4
- package/dist/backend/sqlite/libsql.d.ts +4 -4
- package/dist/backend/sqlite/libsql.js +15 -15
- package/dist/backend/sqlite/local.cjs +101 -21
- package/dist/backend/sqlite/local.cjs.map +1 -1
- package/dist/backend/sqlite/local.d.cts +95 -5
- package/dist/backend/sqlite/local.d.ts +95 -5
- package/dist/backend/sqlite/local.js +95 -16
- package/dist/backend/sqlite/local.js.map +1 -1
- package/dist/{chunk-T6SPUYLX.cjs → chunk-2THZ3TQI.cjs} +116 -10
- package/dist/chunk-2THZ3TQI.cjs.map +1 -0
- package/dist/{chunk-UJLOZYKT.cjs → chunk-456Z2U7Y.cjs} +441 -115
- package/dist/chunk-456Z2U7Y.cjs.map +1 -0
- package/dist/chunk-4BCU6VFZ.cjs +100 -0
- package/dist/chunk-4BCU6VFZ.cjs.map +1 -0
- package/dist/chunk-4BMPGT35.cjs +12 -0
- package/dist/{chunk-HMFK4BXR.cjs.map → chunk-4BMPGT35.cjs.map} +1 -1
- package/dist/chunk-4CAXEB2F.cjs +1366 -0
- package/dist/chunk-4CAXEB2F.cjs.map +1 -0
- package/dist/{chunk-RY2VIWAM.js → chunk-4GX2JJXS.js} +355 -32
- package/dist/chunk-4GX2JJXS.js.map +1 -0
- package/dist/{chunk-GQANNXXT.cjs → chunk-5A6FNS6N.cjs} +75 -20
- package/dist/chunk-5A6FNS6N.cjs.map +1 -0
- package/dist/{chunk-3Z6TW3CT.cjs → chunk-5AQIKK56.cjs} +65 -25
- package/dist/chunk-5AQIKK56.cjs.map +1 -0
- package/dist/{chunk-WLRIWYHQ.js → chunk-5DIPR3L3.js} +2145 -1937
- package/dist/chunk-5DIPR3L3.js.map +1 -0
- package/dist/{chunk-BVTWD66D.js → chunk-5SEGFTZX.js} +3 -3
- package/dist/{chunk-BVTWD66D.js.map → chunk-5SEGFTZX.js.map} +1 -1
- package/dist/{chunk-A7SZZFAG.js → chunk-5VTR2F2K.js} +452 -109
- package/dist/chunk-5VTR2F2K.js.map +1 -0
- package/dist/{chunk-JJRCLAUN.cjs → chunk-5W4L6DLF.cjs} +116 -10
- package/dist/chunk-5W4L6DLF.cjs.map +1 -0
- package/dist/{chunk-6GNSY7AV.js → chunk-6FR2MMS6.js} +7 -7
- package/dist/chunk-6FR2MMS6.js.map +1 -0
- package/dist/{chunk-3BRVBQQD.cjs → chunk-7BQLPXK6.cjs} +2648 -2440
- package/dist/chunk-7BQLPXK6.cjs.map +1 -0
- package/dist/chunk-7YSP4V4R.cjs +69 -0
- package/dist/chunk-7YSP4V4R.cjs.map +1 -0
- package/dist/chunk-A42GCBGX.cjs +28 -0
- package/dist/chunk-A42GCBGX.cjs.map +1 -0
- package/dist/{chunk-ZV5N4DBG.js → chunk-BJVEU3ZL.js} +300 -58
- package/dist/chunk-BJVEU3ZL.js.map +1 -0
- package/dist/chunk-BYPOGQWK.js +25 -0
- package/dist/chunk-BYPOGQWK.js.map +1 -0
- package/dist/chunk-CUHM5CWJ.cjs +12 -0
- package/dist/chunk-CUHM5CWJ.cjs.map +1 -0
- package/dist/{chunk-2JXB3NYJ.cjs → chunk-D7ZEOS56.cjs} +25 -32
- package/dist/chunk-D7ZEOS56.cjs.map +1 -0
- package/dist/chunk-DFVLCOP6.js +10 -0
- package/dist/chunk-DFVLCOP6.js.map +1 -0
- package/dist/{chunk-JIEJCTDS.cjs → chunk-DIK74MXX.cjs} +37 -4
- package/dist/chunk-DIK74MXX.cjs.map +1 -0
- package/dist/chunk-DN5VP4JC.js +1343 -0
- package/dist/chunk-DN5VP4JC.js.map +1 -0
- package/dist/chunk-EOLERH7Y.cjs +40 -0
- package/dist/chunk-EOLERH7Y.cjs.map +1 -0
- package/dist/{chunk-TGJE22RM.cjs → chunk-FACJJWGF.cjs} +24 -6
- package/dist/chunk-FACJJWGF.cjs.map +1 -0
- package/dist/{chunk-WVC2Q2FD.cjs → chunk-FN35DLCN.cjs} +31 -9
- package/dist/chunk-FN35DLCN.cjs.map +1 -0
- package/dist/{chunk-KUTNI6SI.js → chunk-FPIZFYHE.js} +10 -18
- package/dist/chunk-FPIZFYHE.js.map +1 -0
- package/dist/{chunk-VCGO4V26.js → chunk-FRV5Q5IO.js} +64 -9
- package/dist/chunk-FRV5Q5IO.js.map +1 -0
- package/dist/{chunk-K5P5OZXS.js → chunk-G6Q5UM7U.js} +2 -2
- package/dist/{chunk-K5P5OZXS.js.map → chunk-G6Q5UM7U.js.map} +1 -1
- package/dist/{chunk-JQGIPGVL.cjs → chunk-H7YNSMA7.cjs} +43 -2
- package/dist/chunk-H7YNSMA7.cjs.map +1 -0
- package/dist/chunk-HW3LW7DH.cjs +1271 -0
- package/dist/chunk-HW3LW7DH.cjs.map +1 -0
- package/dist/{chunk-V3QNTB7Z.js → chunk-IU46OHVW.js} +194 -114
- package/dist/chunk-IU46OHVW.js.map +1 -0
- package/dist/{chunk-HK5SATYM.cjs → chunk-J3LEGNQB.cjs} +16 -109
- package/dist/chunk-J3LEGNQB.cjs.map +1 -0
- package/dist/{chunk-ZP5WHI4C.cjs → chunk-JFMEONLG.cjs} +358 -116
- package/dist/chunk-JFMEONLG.cjs.map +1 -0
- package/dist/{chunk-2MRAX3UE.js → chunk-JFUPDJXD.js} +47 -4
- package/dist/chunk-JFUPDJXD.js.map +1 -0
- package/dist/{chunk-Z5XBMDXU.js → chunk-KBGQIPRQ.js} +42 -3
- package/dist/chunk-KBGQIPRQ.js.map +1 -0
- package/dist/{chunk-K2TGS3EN.js → chunk-M75SUBFG.js} +138 -89
- package/dist/chunk-M75SUBFG.js.map +1 -0
- package/dist/chunk-OHMP6N2J.js +47 -0
- package/dist/chunk-OHMP6N2J.js.map +1 -0
- package/dist/{chunk-4DIBPQNJ.js → chunk-OR5ZA5WP.js} +135 -25
- package/dist/chunk-OR5ZA5WP.js.map +1 -0
- package/dist/{chunk-6HVOHZHS.cjs → chunk-PWGX5DF5.cjs} +213 -168
- package/dist/chunk-PWGX5DF5.cjs.map +1 -0
- package/dist/chunk-PZKNKG5M.js +1252 -0
- package/dist/chunk-PZKNKG5M.js.map +1 -0
- package/dist/{chunk-DEQFL35G.js → chunk-Q5TEXCTB.js} +61 -7
- package/dist/chunk-Q5TEXCTB.js.map +1 -0
- package/dist/{chunk-QV245VMN.js → chunk-RAXU3RMB.js} +100 -6
- package/dist/chunk-RAXU3RMB.js.map +1 -0
- package/dist/{chunk-RHZWOJVA.cjs → chunk-RSSQKPSZ.cjs} +52 -4
- package/dist/chunk-RSSQKPSZ.cjs.map +1 -0
- package/dist/{chunk-G6SOJEDI.cjs → chunk-S55OV6PW.cjs} +15 -15
- package/dist/chunk-S55OV6PW.cjs.map +1 -0
- package/dist/chunk-S5F7ZLP2.js +94 -0
- package/dist/chunk-S5F7ZLP2.js.map +1 -0
- package/dist/{chunk-3E7SNSIA.cjs → chunk-SJDMVITW.cjs} +4 -4
- package/dist/{chunk-3E7SNSIA.cjs.map → chunk-SJDMVITW.cjs.map} +1 -1
- package/dist/{chunk-CHXTTSC6.js → chunk-SKCOUWAX.js} +104 -5
- package/dist/chunk-SKCOUWAX.js.map +1 -0
- package/dist/{chunk-XLUNB2TZ.js → chunk-SNXVDZAJ.js} +3 -3
- package/dist/{chunk-XLUNB2TZ.js.map → chunk-SNXVDZAJ.js.map} +1 -1
- package/dist/{chunk-ZURTTSCM.js → chunk-SXGE7ITL.js} +6 -94
- package/dist/chunk-SXGE7ITL.js.map +1 -0
- package/dist/{chunk-RBV7YCQD.js → chunk-T2WUSPDA.js} +49 -9
- package/dist/chunk-T2WUSPDA.js.map +1 -0
- package/dist/{chunk-KGC4LY5T.cjs → chunk-TCOCYN2P.cjs} +75 -21
- package/dist/chunk-TCOCYN2P.cjs.map +1 -0
- package/dist/{chunk-FLRCVI2G.cjs → chunk-TDXIBCGY.cjs} +2 -2
- package/dist/{chunk-FLRCVI2G.cjs.map → chunk-TDXIBCGY.cjs.map} +1 -1
- package/dist/{chunk-ZY4GXIVN.cjs → chunk-TEDRJXOG.cjs} +5 -5
- package/dist/{chunk-ZY4GXIVN.cjs.map → chunk-TEDRJXOG.cjs.map} +1 -1
- package/dist/{chunk-WL2SG7ZV.cjs → chunk-UMDVATGY.cjs} +6 -6
- package/dist/{chunk-WL2SG7ZV.cjs.map → chunk-UMDVATGY.cjs.map} +1 -1
- package/dist/chunk-UT3S4SEN.js +31 -0
- package/dist/chunk-UT3S4SEN.js.map +1 -0
- package/dist/{chunk-RRKQAKD6.cjs → chunk-UUT7UN2N.cjs} +149 -39
- package/dist/chunk-UUT7UN2N.cjs.map +1 -0
- package/dist/{chunk-SHLY4MCM.js → chunk-UZV3AZKF.js} +21 -3
- package/dist/chunk-UZV3AZKF.js.map +1 -0
- package/dist/{chunk-CYX2JTDG.js → chunk-VHMPG6UL.js} +29 -7
- package/dist/chunk-VHMPG6UL.js.map +1 -0
- package/dist/{chunk-LANHCOXB.js → chunk-VQEXF5D4.js} +485 -83
- package/dist/chunk-VQEXF5D4.js.map +1 -0
- package/dist/{chunk-K34OPSJK.js → chunk-W63OVYY4.js} +3 -3
- package/dist/{chunk-K34OPSJK.js.map → chunk-W63OVYY4.js.map} +1 -1
- package/dist/{chunk-TQOYM4LN.js → chunk-WI7ISNQF.js} +35 -5
- package/dist/chunk-WI7ISNQF.js.map +1 -0
- package/dist/{chunk-UNNPKQUG.cjs → chunk-X4JBT642.cjs} +246 -155
- package/dist/chunk-X4JBT642.cjs.map +1 -0
- package/dist/chunk-ZAMFOJ5P.cjs +1176 -0
- package/dist/chunk-ZAMFOJ5P.cjs.map +1 -0
- package/dist/{chunk-T46GR2VY.js → chunk-ZIGXMKQQ.js} +3 -3
- package/dist/{chunk-T46GR2VY.js.map → chunk-ZIGXMKQQ.js.map} +1 -1
- package/dist/{chunk-5IQIX7LU.cjs → chunk-ZUNQ5BEP.cjs} +518 -172
- package/dist/chunk-ZUNQ5BEP.cjs.map +1 -0
- package/dist/{ddl-BrmPg61z.d.ts → ddl-C2rZ-Aen.d.ts} +4 -4
- package/dist/{ddl-j1-sH6lE.d.cts → ddl-CZz7a0E8.d.cts} +4 -4
- package/dist/{extension-types-YGFJPrzK.d.cts → extension-types-ixRpJVUp.d.cts} +24 -1
- package/dist/{extension-types-YGFJPrzK.d.ts → extension-types-ixRpJVUp.d.ts} +24 -1
- package/dist/{types-DkNnF-7K.d.cts → fulltext-strategy-B57yvC5Q.d.ts} +2562 -2133
- package/dist/{types-D1Sqeyxy.d.ts → fulltext-strategy-CDkSSYhq.d.cts} +2562 -2133
- package/dist/graph-extension/index.cjs +20 -19
- package/dist/graph-extension/index.d.cts +4 -4
- package/dist/graph-extension/index.d.ts +4 -4
- package/dist/graph-extension/index.js +5 -4
- package/dist/graph-merge/index.cjs +255 -164
- package/dist/graph-merge/index.cjs.map +1 -1
- package/dist/graph-merge/index.d.cts +63 -33
- package/dist/graph-merge/index.d.ts +63 -33
- package/dist/graph-merge/index.js +135 -44
- package/dist/graph-merge/index.js.map +1 -1
- package/dist/{index-DGX6D9j1.d.ts → index-BFvdmBPV.d.ts} +301 -93
- package/dist/{index-SEvUHDA6.d.cts → index-BLtQWKRj.d.cts} +301 -93
- package/dist/index.cjs +216 -188
- package/dist/index.d.cts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.js +33 -33
- package/dist/indexes/index.cjs +19 -20
- package/dist/indexes/index.d.cts +5 -5
- package/dist/indexes/index.d.ts +5 -5
- package/dist/indexes/index.js +10 -11
- package/dist/interchange/index.cjs +48 -26
- package/dist/interchange/index.d.cts +126 -12
- package/dist/interchange/index.d.ts +126 -12
- package/dist/interchange/index.js +15 -13
- package/dist/{manager-ms9cKdc6.d.cts → manager-DwQi8eV0.d.cts} +9 -2
- package/dist/{manager-BZUeN_BU.d.ts → manager-ejUCB52T.d.ts} +9 -2
- package/dist/{materialize-indexes-D20xNluI.d.cts → materialize-indexes-B4e9360H.d.cts} +20 -4
- package/dist/{materialize-indexes-CAkIYFV-.d.ts → materialize-indexes-te9TPMMJ.d.ts} +20 -4
- package/dist/{postgres-BhpxGMC5.d.cts → postgres-CfEqsRMp.d.cts} +152 -1
- package/dist/{postgres-CWHLwNl1.d.ts → postgres-DQ5R6rzV.d.ts} +152 -1
- package/dist/profiler/index.cjs +11 -11
- package/dist/profiler/index.d.cts +7 -7
- package/dist/profiler/index.d.ts +7 -7
- package/dist/profiler/index.js +4 -4
- package/dist/provenance/index.cjs +40 -41
- package/dist/provenance/index.cjs.map +1 -1
- package/dist/provenance/index.d.cts +5 -5
- package/dist/provenance/index.d.ts +5 -5
- package/dist/provenance/index.js +11 -12
- package/dist/provenance/index.js.map +1 -1
- package/dist/schema/index.cjs +53 -40
- package/dist/schema/index.cjs.map +1 -1
- package/dist/schema/index.d.cts +57 -57
- package/dist/schema/index.d.ts +57 -57
- package/dist/schema/index.js +28 -15
- package/dist/schema/index.js.map +1 -1
- package/dist/{sqlite-XrDxNaa7.d.cts → sqlite-D7zBinNR.d.cts} +92 -1
- package/dist/{sqlite-CGu5SLsw.d.ts → sqlite-DvQndLky.d.ts} +92 -1
- package/dist/{store-view-D09po4H6.d.cts → store-view-9KDOpZzF.d.cts} +643 -58
- package/dist/{store-view-BlgnhEYf.d.ts → store-view-DplHC3Nt.d.ts} +643 -58
- package/dist/{types-DiE1AO7p.d.cts → types-Bv9DcS_E.d.cts} +2 -2
- package/dist/{types-B1TbZJYS.d.ts → types-CoxuV7EJ.d.ts} +2 -2
- package/dist/{where-DKjuofPr.d.cts → where-7RKFOsXt.d.ts} +2 -2
- package/dist/{where-DrUIIWHb.d.ts → where-DdMIXOtH.d.cts} +2 -2
- package/package.json +14 -13
- package/dist/chunk-2EBMPJBO.js +0 -16
- package/dist/chunk-2EBMPJBO.js.map +0 -1
- package/dist/chunk-2JXB3NYJ.cjs.map +0 -1
- package/dist/chunk-2MRAX3UE.js.map +0 -1
- package/dist/chunk-3BRVBQQD.cjs.map +0 -1
- package/dist/chunk-3EUKJEQ3.js +0 -77
- package/dist/chunk-3EUKJEQ3.js.map +0 -1
- package/dist/chunk-3Z6TW3CT.cjs.map +0 -1
- package/dist/chunk-4DIBPQNJ.js.map +0 -1
- package/dist/chunk-4S2FXGBJ.js +0 -9
- package/dist/chunk-4S2FXGBJ.js.map +0 -1
- package/dist/chunk-5IQIX7LU.cjs.map +0 -1
- package/dist/chunk-6GNSY7AV.js.map +0 -1
- package/dist/chunk-6HVOHZHS.cjs.map +0 -1
- package/dist/chunk-6SCVW4AS.js +0 -20
- package/dist/chunk-6SCVW4AS.js.map +0 -1
- package/dist/chunk-A7SZZFAG.js.map +0 -1
- package/dist/chunk-CHXTTSC6.js.map +0 -1
- package/dist/chunk-CYX2JTDG.js.map +0 -1
- package/dist/chunk-DEQFL35G.js.map +0 -1
- package/dist/chunk-G6SOJEDI.cjs.map +0 -1
- package/dist/chunk-GQANNXXT.cjs.map +0 -1
- package/dist/chunk-GZCNZ7QW.js +0 -24
- package/dist/chunk-GZCNZ7QW.js.map +0 -1
- package/dist/chunk-HK5SATYM.cjs.map +0 -1
- package/dist/chunk-HMFK4BXR.cjs +0 -12
- package/dist/chunk-HTGDWIDE.cjs +0 -89
- package/dist/chunk-HTGDWIDE.cjs.map +0 -1
- package/dist/chunk-JIEJCTDS.cjs.map +0 -1
- package/dist/chunk-JJRCLAUN.cjs.map +0 -1
- package/dist/chunk-JQGIPGVL.cjs.map +0 -1
- package/dist/chunk-K2TGS3EN.js.map +0 -1
- package/dist/chunk-KGC4LY5T.cjs.map +0 -1
- package/dist/chunk-KNHYNQQ3.cjs +0 -663
- package/dist/chunk-KNHYNQQ3.cjs.map +0 -1
- package/dist/chunk-KUTNI6SI.js.map +0 -1
- package/dist/chunk-LANHCOXB.js.map +0 -1
- package/dist/chunk-N6WTUSBV.cjs +0 -23
- package/dist/chunk-N6WTUSBV.cjs.map +0 -1
- package/dist/chunk-NAUA4PW5.cjs +0 -28
- package/dist/chunk-NAUA4PW5.cjs.map +0 -1
- package/dist/chunk-QV245VMN.js.map +0 -1
- package/dist/chunk-RBV7YCQD.js.map +0 -1
- package/dist/chunk-RHZWOJVA.cjs.map +0 -1
- package/dist/chunk-RRKQAKD6.cjs.map +0 -1
- package/dist/chunk-RY2VIWAM.js.map +0 -1
- package/dist/chunk-SHLY4MCM.js.map +0 -1
- package/dist/chunk-T2DWPQNE.js +0 -649
- package/dist/chunk-T2DWPQNE.js.map +0 -1
- package/dist/chunk-T6SPUYLX.cjs.map +0 -1
- package/dist/chunk-TGJE22RM.cjs.map +0 -1
- package/dist/chunk-TOTPVGOG.cjs +0 -774
- package/dist/chunk-TOTPVGOG.cjs.map +0 -1
- package/dist/chunk-TQOYM4LN.js.map +0 -1
- package/dist/chunk-UJLOZYKT.cjs.map +0 -1
- package/dist/chunk-UNNPKQUG.cjs.map +0 -1
- package/dist/chunk-V3QNTB7Z.js.map +0 -1
- package/dist/chunk-VCGO4V26.js.map +0 -1
- package/dist/chunk-WLRIWYHQ.js.map +0 -1
- package/dist/chunk-WVC2Q2FD.cjs.map +0 -1
- package/dist/chunk-XXVEULWX.js +0 -39
- package/dist/chunk-XXVEULWX.js.map +0 -1
- package/dist/chunk-YAZE7QZR.cjs +0 -32
- package/dist/chunk-YAZE7QZR.cjs.map +0 -1
- package/dist/chunk-YC6PWTHY.cjs +0 -44
- package/dist/chunk-YC6PWTHY.cjs.map +0 -1
- package/dist/chunk-Z5HBYM7U.cjs +0 -11
- package/dist/chunk-Z5HBYM7U.cjs.map +0 -1
- package/dist/chunk-Z5XBMDXU.js.map +0 -1
- package/dist/chunk-ZP5WHI4C.cjs.map +0 -1
- package/dist/chunk-ZURTTSCM.js.map +0 -1
- package/dist/chunk-ZV5N4DBG.js.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkCUHM5CWJ_cjs = require('./chunk-CUHM5CWJ.cjs');
|
|
4
|
+
var chunkD7ZEOS56_cjs = require('./chunk-D7ZEOS56.cjs');
|
|
5
|
+
var chunk7YSP4V4R_cjs = require('./chunk-7YSP4V4R.cjs');
|
|
5
6
|
var drizzleOrm = require('drizzle-orm');
|
|
6
7
|
var pgCore = require('drizzle-orm/pg-core');
|
|
7
8
|
|
|
@@ -50,7 +51,20 @@ var PGVECTOR_CAPABILITIES = {
|
|
|
50
51
|
supported: true,
|
|
51
52
|
metrics: ["cosine", "l2", "inner_product"],
|
|
52
53
|
indexTypes: ["hnsw", "ivfflat", "none"],
|
|
53
|
-
maxDimensions: PGVECTOR_MAX_DIMENSIONS
|
|
54
|
+
maxDimensions: PGVECTOR_MAX_DIMENSIONS,
|
|
55
|
+
// The backend probes `pg_extension.extversion` once and turns on
|
|
56
|
+
// `hnsw.iterative_scan` / `ivfflat.iterative_scan` when pgvector >= 0.8, so a
|
|
57
|
+
// filtered scan re-enters the index for more candidates.
|
|
58
|
+
//
|
|
59
|
+
// NOT a full-page guarantee, on either axis. The iterative scan stops at
|
|
60
|
+
// `hnsw.max_scan_tuples` / `ivfflat.max_probes`; and on pgvector < 0.8 there
|
|
61
|
+
// is no iterative scan at all, so the search stays `ef_search`-bounded and
|
|
62
|
+
// behaves like a post-filter. A statically-declared mode cannot express
|
|
63
|
+
// either, which is why the guarantee is its own field.
|
|
64
|
+
filteredApproximateSearch: {
|
|
65
|
+
mode: "iterative-scan",
|
|
66
|
+
guaranteesFullPage: false
|
|
67
|
+
}
|
|
54
68
|
};
|
|
55
69
|
function usesAnnIndex(slot) {
|
|
56
70
|
return slot.indexType === "hnsw" || slot.indexType === "ivfflat";
|
|
@@ -73,7 +87,7 @@ function operatorClass(metric) {
|
|
|
73
87
|
}
|
|
74
88
|
}
|
|
75
89
|
function vectorLiteral(embedding, name) {
|
|
76
|
-
|
|
90
|
+
chunkD7ZEOS56_cjs.assertFiniteEmbedding(embedding, name);
|
|
77
91
|
return drizzleOrm.sql`${formatVector(embedding)}::vector`;
|
|
78
92
|
}
|
|
79
93
|
function distanceExpression(embeddingColumn, queryEmbedding, metric) {
|
|
@@ -98,11 +112,11 @@ var pgvectorStrategy = {
|
|
|
98
112
|
name: "pgvector",
|
|
99
113
|
capabilities: PGVECTOR_CAPABILITIES,
|
|
100
114
|
tableName(graphId, nodeKind, fieldPath) {
|
|
101
|
-
return
|
|
115
|
+
return chunkD7ZEOS56_cjs.vectorPhysicalName(TABLE_PREFIX, graphId, nodeKind, fieldPath);
|
|
102
116
|
},
|
|
103
117
|
ownedTables(slot) {
|
|
104
118
|
const table = this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath);
|
|
105
|
-
const name =
|
|
119
|
+
const name = chunkD7ZEOS56_cjs.quoteIdentifier(table);
|
|
106
120
|
const createDdl = [
|
|
107
121
|
`CREATE TABLE IF NOT EXISTS ${name} (
|
|
108
122
|
"graph_id" TEXT NOT NULL,
|
|
@@ -115,7 +129,7 @@ var pgvectorStrategy = {
|
|
|
115
129
|
];
|
|
116
130
|
return [
|
|
117
131
|
{
|
|
118
|
-
logicalName: `${
|
|
132
|
+
logicalName: `${chunkD7ZEOS56_cjs.VECTOR_CONTRIBUTION_PREFIX}:${slot.nodeKind}.${slot.fieldPath}`,
|
|
119
133
|
owner: "pgvector",
|
|
120
134
|
tableName: table,
|
|
121
135
|
createDdl,
|
|
@@ -124,7 +138,7 @@ var pgvectorStrategy = {
|
|
|
124
138
|
];
|
|
125
139
|
},
|
|
126
140
|
buildUpsert(slot, params, timestamp) {
|
|
127
|
-
const table =
|
|
141
|
+
const table = chunk7YSP4V4R_cjs.quotedTableName(
|
|
128
142
|
this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath)
|
|
129
143
|
);
|
|
130
144
|
const value = vectorLiteral(params.embedding, "embedding");
|
|
@@ -137,8 +151,27 @@ var pgvectorStrategy = {
|
|
|
137
151
|
`
|
|
138
152
|
];
|
|
139
153
|
},
|
|
154
|
+
buildUpsertBatch(slot, params, timestamp) {
|
|
155
|
+
const table = chunk7YSP4V4R_cjs.quotedTableName(
|
|
156
|
+
this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath)
|
|
157
|
+
);
|
|
158
|
+
const valueRows = drizzleOrm.sql.join(
|
|
159
|
+
params.rows.map(
|
|
160
|
+
(row) => drizzleOrm.sql`(${params.graphId}, ${row.nodeId}, ${vectorLiteral(row.embedding, "embedding")}, ${timestamp}, ${timestamp})`
|
|
161
|
+
),
|
|
162
|
+
drizzleOrm.sql`, `
|
|
163
|
+
);
|
|
164
|
+
return [
|
|
165
|
+
drizzleOrm.sql`
|
|
166
|
+
INSERT INTO ${table} ("graph_id", "node_id", "embedding", "created_at", "updated_at")
|
|
167
|
+
VALUES ${valueRows}
|
|
168
|
+
ON CONFLICT ("graph_id", "node_id")
|
|
169
|
+
DO UPDATE SET "embedding" = EXCLUDED."embedding", "updated_at" = EXCLUDED."updated_at"
|
|
170
|
+
`
|
|
171
|
+
];
|
|
172
|
+
},
|
|
140
173
|
buildDelete(slot, params) {
|
|
141
|
-
const table =
|
|
174
|
+
const table = chunk7YSP4V4R_cjs.quotedTableName(
|
|
142
175
|
this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath)
|
|
143
176
|
);
|
|
144
177
|
return [
|
|
@@ -148,8 +181,8 @@ var pgvectorStrategy = {
|
|
|
148
181
|
`
|
|
149
182
|
];
|
|
150
183
|
},
|
|
151
|
-
buildSearch(slot, params) {
|
|
152
|
-
const table =
|
|
184
|
+
buildSearch(slot, params, candidates) {
|
|
185
|
+
const table = chunk7YSP4V4R_cjs.quotedTableName(
|
|
153
186
|
this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath)
|
|
154
187
|
);
|
|
155
188
|
const embeddingColumn = drizzleOrm.sql`${table}."embedding"`;
|
|
@@ -158,19 +191,40 @@ var pgvectorStrategy = {
|
|
|
158
191
|
params.queryEmbedding,
|
|
159
192
|
params.metric
|
|
160
193
|
);
|
|
161
|
-
const score =
|
|
194
|
+
const score = chunkD7ZEOS56_cjs.vectorScoreExpression(distance, params.metric);
|
|
162
195
|
const conditions = [drizzleOrm.sql`${table}."graph_id" = ${params.graphId}`];
|
|
163
196
|
if (params.minScore !== void 0) {
|
|
164
197
|
conditions.push(
|
|
165
|
-
|
|
198
|
+
chunkD7ZEOS56_cjs.vectorMinScoreCondition(distance, params.metric, params.minScore)
|
|
166
199
|
);
|
|
167
200
|
}
|
|
201
|
+
if (candidates !== void 0) {
|
|
202
|
+
conditions.push(drizzleOrm.sql`${table}."node_id" IN (${candidates})`);
|
|
203
|
+
}
|
|
204
|
+
const pageOffset = params.offset ?? 0;
|
|
205
|
+
const pageClause = chunkCUHM5CWJ_cjs.vectorPageClause(params.limit, params.offset);
|
|
206
|
+
if (slot.indexType === "ivfflat") {
|
|
207
|
+
const direction = params.metric === "cosine" ? drizzleOrm.sql.raw("DESC") : drizzleOrm.sql.raw("ASC");
|
|
208
|
+
const relaxedBody = drizzleOrm.sql`
|
|
209
|
+
SELECT ${table}."node_id" AS node_id, ${score} AS score
|
|
210
|
+
FROM ${table}
|
|
211
|
+
WHERE ${drizzleOrm.sql.join(conditions, drizzleOrm.sql` AND `)}
|
|
212
|
+
ORDER BY ${distance} ASC
|
|
213
|
+
LIMIT ${params.limit + pageOffset}
|
|
214
|
+
`;
|
|
215
|
+
return drizzleOrm.sql`
|
|
216
|
+
WITH tg_vec_relaxed AS MATERIALIZED (${relaxedBody})
|
|
217
|
+
SELECT node_id, score FROM tg_vec_relaxed
|
|
218
|
+
ORDER BY score ${direction}, node_id ASC
|
|
219
|
+
${pageClause}
|
|
220
|
+
`;
|
|
221
|
+
}
|
|
168
222
|
return drizzleOrm.sql`
|
|
169
223
|
SELECT ${table}."node_id" AS node_id, ${score} AS score
|
|
170
224
|
FROM ${table}
|
|
171
225
|
WHERE ${drizzleOrm.sql.join(conditions, drizzleOrm.sql` AND `)}
|
|
172
226
|
ORDER BY ${distance} ASC
|
|
173
|
-
|
|
227
|
+
${pageClause}
|
|
174
228
|
`;
|
|
175
229
|
},
|
|
176
230
|
distanceExpression(embeddingColumn, queryEmbedding, metric) {
|
|
@@ -189,17 +243,17 @@ var pgvectorStrategy = {
|
|
|
189
243
|
buildDropIndex(slot) {
|
|
190
244
|
if (!usesAnnIndex(slot)) return void 0;
|
|
191
245
|
const indexName = pgvectorIndexName(slot);
|
|
192
|
-
return drizzleOrm.sql.raw(`DROP INDEX IF EXISTS ${
|
|
246
|
+
return drizzleOrm.sql.raw(`DROP INDEX IF EXISTS ${chunkD7ZEOS56_cjs.quoteIdentifier(indexName)}`);
|
|
193
247
|
},
|
|
194
248
|
buildDropStorage(slot) {
|
|
195
|
-
const table =
|
|
249
|
+
const table = chunkD7ZEOS56_cjs.quoteIdentifier(
|
|
196
250
|
this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath)
|
|
197
251
|
);
|
|
198
252
|
return [`DROP TABLE IF EXISTS ${table} CASCADE`];
|
|
199
253
|
}
|
|
200
254
|
};
|
|
201
255
|
function pgvectorIndexName(slot) {
|
|
202
|
-
return
|
|
256
|
+
return chunkD7ZEOS56_cjs.vectorPhysicalName(
|
|
203
257
|
INDEX_PREFIX,
|
|
204
258
|
slot.graphId,
|
|
205
259
|
slot.nodeKind,
|
|
@@ -207,8 +261,8 @@ function pgvectorIndexName(slot) {
|
|
|
207
261
|
);
|
|
208
262
|
}
|
|
209
263
|
function pgvectorIndexDdl(table, slot, concurrent) {
|
|
210
|
-
const indexName =
|
|
211
|
-
const quotedTable =
|
|
264
|
+
const indexName = chunkD7ZEOS56_cjs.quoteIdentifier(pgvectorIndexName(slot));
|
|
265
|
+
const quotedTable = chunkD7ZEOS56_cjs.quoteIdentifier(table);
|
|
212
266
|
const opClass = operatorClass(slot.metric);
|
|
213
267
|
const m = slot.indexParams?.m ?? DEFAULT_HNSW_M;
|
|
214
268
|
const efConstruction = slot.indexParams?.efConstruction ?? DEFAULT_HNSW_EF_CONSTRUCTION;
|
|
@@ -235,5 +289,5 @@ function pgvectorIndexDdl(table, slot, concurrent) {
|
|
|
235
289
|
|
|
236
290
|
exports.assertPgvectorEfSearch = assertPgvectorEfSearch;
|
|
237
291
|
exports.pgvectorStrategy = pgvectorStrategy;
|
|
238
|
-
//# sourceMappingURL=chunk-
|
|
239
|
-
//# sourceMappingURL=chunk-
|
|
292
|
+
//# sourceMappingURL=chunk-TCOCYN2P.cjs.map
|
|
293
|
+
//# sourceMappingURL=chunk-TCOCYN2P.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/backend/drizzle/columns/vector.ts","../src/query/dialect/vector/pgvector-strategy.ts"],"names":["customType","assertFiniteEmbedding","sql","vectorPhysicalName","quoteIdentifier","VECTOR_CONTRIBUTION_PREFIX","quotedTableName","vectorScoreExpression","vectorMinScoreCondition","vectorPageClause"],"mappings":"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","file":"chunk-TCOCYN2P.cjs","sourcesContent":["/**\n * Custom Drizzle column type for pgvector's VECTOR type.\n *\n * Provides native support for PostgreSQL vector embeddings without\n * requiring runtime casts in queries.\n *\n * @example\n * ```typescript\n * import { pgTable, text, integer } from \"drizzle-orm/pg-core\";\n * import { vector } from \"./columns/vector\";\n *\n * const embeddings = pgTable(\"embeddings\", {\n * id: text(\"id\").primaryKey(),\n * embedding: vector(\"embedding\"),\n * dimensions: integer(\"dimensions\"),\n * });\n * ```\n */\nimport { customType } from \"drizzle-orm/pg-core\";\n\n/**\n * PostgreSQL vector column type for pgvector extension.\n *\n * Stores embeddings as native VECTOR type, enabling efficient\n * similarity search without runtime casts.\n *\n * The column type is unparameterized (`VECTOR` not `VECTOR(N)`)\n * to support multiple embedding dimensions in a single table.\n * Dimension validation is handled at the application level.\n *\n * @example\n * ```typescript\n * // In table definition\n * embedding: vector(\"embedding\").notNull(),\n *\n * // In queries - no cast needed\n * db.execute(sql`\n * SELECT * FROM embeddings\n * WHERE embedding <=> ${formatVector([0.1, 0.2, 0.3])} < 0.5\n * `);\n * ```\n */\nexport const vector = customType<{\n data: number[];\n driverData: string;\n config: { dimensions?: number };\n}>({\n dataType(config) {\n // Use parameterized type if dimensions specified, otherwise unparameterized\n return config?.dimensions ? `vector(${config.dimensions})` : \"vector\";\n },\n\n toDriver(value: number[]): string {\n // Format as pgvector literal: [1.0,2.0,3.0]\n return `[${value.join(\",\")}]`;\n },\n\n fromDriver(value: string): number[] {\n // pgvector returns '[1,2,3]' format\n // Handle both string and already-parsed array (some drivers differ)\n if (Array.isArray(value)) {\n return value as number[];\n }\n // Parse the string representation\n const content = value.slice(1, -1); // Remove [ and ]\n if (content === \"\") {\n return [];\n }\n return content.split(\",\").map((s) => Number.parseFloat(s.trim()));\n },\n});\n\n/**\n * Formats a number array as a pgvector literal string.\n *\n * Use this when building raw SQL queries with embeddings.\n *\n * @example\n * ```typescript\n * const embedding = [0.1, 0.2, 0.3];\n * db.execute(sql`\n * SELECT * FROM embeddings\n * WHERE embedding <=> ${formatVector(embedding)}::vector < 0.5\n * `);\n * ```\n */\nexport function formatVector(embedding: readonly number[]): string {\n return `[${embedding.join(\",\")}]`;\n}\n","/**\n * pgvector strategy.\n *\n * Postgres' pgvector extension is the one engine where the *same* SQL serves\n * brute-force and ANN: `ORDER BY embedding <=> q LIMIT k` scans sequentially\n * with no index and is rewritten to an HNSW/IVFFlat scan the moment a matching\n * index exists — the planner picks it up automatically. So `buildSearch` never\n * branches on `slot.indexType`; it emits one relevance scan and lets Postgres\n * decide. (Contrast libSQL/sqlite-vec, whose ANN needs distinct syntax.)\n *\n * Storage is per-`(nodeKind, fieldPath)`: a `vector(N)` column carrying the\n * field's fixed dimension `N`, with the operator-class-typed ANN index folded\n * into the same table contribution so materialization builds table + index\n * together. The typed column means the index does not need the legacy\n * `::vector(N)` cast-in-index escape hatch the old shared table relied on.\n *\n * Metric support is the full pgvector set — `cosine`, `l2`, `inner_product` —\n * advertised as data on `capabilities`, mirroring `vector_cosine_ops` /\n * `vector_l2_ops` / `vector_ip_ops` and the `<=>` / `<->` / `<#>` operators.\n *\n * Mirrors the `libsqlVectorStrategy` / `sqliteVecStrategy` structure while\n * letting Postgres' planner pick the ANN index when one exists.\n */\nimport { type SQL, sql } from \"drizzle-orm\";\n\nimport { formatVector } from \"../../../backend/drizzle/columns/vector\";\nimport { quotedTableName } from \"../../../backend/drizzle/operations/shared\";\nimport { type StrategyTableContribution } from \"../../../backend/table-contribution\";\nimport {\n type DeleteEmbeddingParams,\n type UpsertEmbeddingBatchParams,\n type UpsertEmbeddingParams,\n type VectorCapabilities,\n type VectorMetric,\n type VectorSearchParams,\n} from \"../../../backend/types\";\nimport {\n assertFiniteEmbedding,\n quoteIdentifier,\n VECTOR_CONTRIBUTION_PREFIX,\n vectorMinScoreCondition,\n vectorPhysicalName,\n vectorScoreExpression,\n type VectorSlot,\n type VectorStrategy,\n} from \"../vector-strategy\";\nimport { vectorPageClause } from \"./pagination\";\n\n/** Physical-name prefixes for the per-field table and its ANN index. */\nconst TABLE_PREFIX = \"tg_vec\";\nconst INDEX_PREFIX = \"tg_vecidx\";\n\n/**\n * pgvector defines `hnsw.ef_search` as an integer GUC with a valid range\n * of 1..1000; `SET hnsw.ef_search = 1001` errors at the server. The\n * backend validates a per-search `efSearch` against this ceiling before\n * inlining it into `SET LOCAL`, surfacing a clear message instead of a raw\n * pgvector error.\n */\nexport const MAX_HNSW_EF_SEARCH = 1000;\n\n/**\n * Validates a per-search `efSearch` override against pgvector's\n * `hnsw.ef_search` valid range. `undefined` (no override) is accepted.\n */\nexport function assertPgvectorEfSearch(efSearch?: number): void {\n if (efSearch === undefined) return;\n if (!Number.isInteger(efSearch) || efSearch <= 0) {\n throw new Error(`efSearch must be a positive integer, got: ${efSearch}`);\n }\n if (efSearch > MAX_HNSW_EF_SEARCH) {\n throw new RangeError(\n `efSearch must be ≤ ${MAX_HNSW_EF_SEARCH} (pgvector's hnsw.ef_search ` +\n `valid range is 1..${MAX_HNSW_EF_SEARCH}), got: ${efSearch}`,\n );\n }\n}\n\n/**\n * pgvector's `vector` type caps at 16,000 dimensions for a stored column\n * (2,000 for an indexed column, but the column-type ceiling is what governs\n * storage; recall degradation beyond 2,000 is a tuning concern, not a hard\n * limit advertised here).\n */\nconst PGVECTOR_MAX_DIMENSIONS = 16_000;\n\n/** Default HNSW `m` (max connections per layer) — pgvector's own default. */\nconst DEFAULT_HNSW_M = 16;\n/** Default HNSW `ef_construction` (build candidate list) — pgvector's own default. */\nconst DEFAULT_HNSW_EF_CONSTRUCTION = 64;\n/** Default IVFFlat `lists` (inverted lists) — pgvector's own default. */\nconst DEFAULT_IVFFLAT_LISTS = 100;\n\nconst PGVECTOR_CAPABILITIES: VectorCapabilities = {\n supported: true,\n metrics: [\"cosine\", \"l2\", \"inner_product\"],\n indexTypes: [\"hnsw\", \"ivfflat\", \"none\"],\n maxDimensions: PGVECTOR_MAX_DIMENSIONS,\n // The backend probes `pg_extension.extversion` once and turns on\n // `hnsw.iterative_scan` / `ivfflat.iterative_scan` when pgvector >= 0.8, so a\n // filtered scan re-enters the index for more candidates.\n //\n // NOT a full-page guarantee, on either axis. The iterative scan stops at\n // `hnsw.max_scan_tuples` / `ivfflat.max_probes`; and on pgvector < 0.8 there\n // is no iterative scan at all, so the search stays `ef_search`-bounded and\n // behaves like a post-filter. A statically-declared mode cannot express\n // either, which is why the guarantee is its own field.\n filteredApproximateSearch: {\n mode: \"iterative-scan\",\n guaranteesFullPage: false,\n },\n};\n\n/** Whether a slot's declared index type materializes a real pgvector ANN index. */\nfunction usesAnnIndex(slot: VectorSlot): boolean {\n return slot.indexType === \"hnsw\" || slot.indexType === \"ivfflat\";\n}\n\n/**\n * pgvector operator class for a metric's ANN index — `vector_cosine_ops` /\n * `vector_l2_ops` / `vector_ip_ops`, mirroring the `<=>` / `<->` / `<#>`\n * distance operators this strategy emits.\n */\nfunction operatorClass(metric: VectorMetric): string {\n switch (metric) {\n case \"cosine\": {\n return \"vector_cosine_ops\";\n }\n case \"l2\": {\n return \"vector_l2_ops\";\n }\n case \"inner_product\": {\n return \"vector_ip_ops\";\n }\n default: {\n const _exhaustive: never = metric;\n throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);\n }\n }\n}\n\n/**\n * Formats an embedding as a `::vector` literal. The value is bound as a\n * parameter (not interpolated) — Postgres parses the `[a,b,c]` text and the\n * cast types it. Finiteness is validated first so a NaN names its index.\n */\nfunction vectorLiteral(embedding: readonly number[], name: string): SQL {\n assertFiniteEmbedding(embedding, name);\n return sql`${formatVector(embedding)}::vector`;\n}\n\nfunction distanceExpression(\n embeddingColumn: SQL,\n queryEmbedding: readonly number[],\n metric: VectorMetric,\n): SQL {\n const query = vectorLiteral(queryEmbedding, \"queryEmbedding\");\n switch (metric) {\n case \"cosine\": {\n return sql`(${embeddingColumn} <=> ${query})`;\n }\n case \"l2\": {\n return sql`(${embeddingColumn} <-> ${query})`;\n }\n case \"inner_product\": {\n return sql`(${embeddingColumn} <#> ${query})`;\n }\n default: {\n const _exhaustive: never = metric;\n throw new Error(`Unsupported vector metric: ${String(_exhaustive)}`);\n }\n }\n}\n\nexport const pgvectorStrategy: VectorStrategy = {\n name: \"pgvector\",\n capabilities: PGVECTOR_CAPABILITIES,\n\n tableName(graphId, nodeKind, fieldPath) {\n return vectorPhysicalName(TABLE_PREFIX, graphId, nodeKind, fieldPath);\n },\n\n ownedTables(slot): readonly StrategyTableContribution[] {\n const table = this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath);\n const name = quoteIdentifier(table);\n\n // No standalone graph_id index: the PRIMARY KEY (graph_id, node_id) already\n // covers `WHERE graph_id = ?` via its leading column, so a separate index\n // would be pure write amplification.\n const createDdl = [\n `CREATE TABLE IF NOT EXISTS ${name} (\n \"graph_id\" TEXT NOT NULL,\n \"node_id\" TEXT NOT NULL,\n \"embedding\" vector(${slot.dimensions}) NOT NULL,\n \"created_at\" TIMESTAMPTZ NOT NULL,\n \"updated_at\" TIMESTAMPTZ NOT NULL,\n PRIMARY KEY (\"graph_id\", \"node_id\")\n);`,\n ];\n\n // The HNSW/IVFFlat index is intentionally NOT created here. pgvector\n // similarity SQL is planner-driven (`ORDER BY embedding <=> q LIMIT k`\n // uses the index when present, sequential-scans when not), so the index\n // is a pure materialization concern: `buildCreateIndex` builds it through\n // `materializeIndexes()` with the field's declared `m`/`ef_construction`/\n // `lists`. Building it eagerly here would bake in default tuning (the\n // write-ensure slot has no `indexParams`) and `CREATE INDEX IF NOT EXISTS`\n // would then mask the tuned index materialization would emit.\n\n return [\n {\n logicalName: `${VECTOR_CONTRIBUTION_PREFIX}:${slot.nodeKind}.${slot.fieldPath}`,\n owner: \"pgvector\",\n tableName: table,\n createDdl,\n runtimeEnsure: true,\n },\n ];\n },\n\n buildUpsert(slot, params: UpsertEmbeddingParams, timestamp): readonly SQL[] {\n const table = quotedTableName(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n );\n const value = vectorLiteral(params.embedding, \"embedding\");\n return [\n sql`\n INSERT INTO ${table} (\"graph_id\", \"node_id\", \"embedding\", \"created_at\", \"updated_at\")\n VALUES (${params.graphId}, ${params.nodeId}, ${value}, ${timestamp}, ${timestamp})\n ON CONFLICT (\"graph_id\", \"node_id\")\n DO UPDATE SET \"embedding\" = EXCLUDED.\"embedding\", \"updated_at\" = EXCLUDED.\"updated_at\"\n `,\n ];\n },\n\n buildUpsertBatch(\n slot,\n params: UpsertEmbeddingBatchParams,\n timestamp,\n ): readonly SQL[] {\n const table = quotedTableName(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n );\n const valueRows = sql.join(\n params.rows.map(\n (row) =>\n sql`(${params.graphId}, ${row.nodeId}, ${vectorLiteral(row.embedding, \"embedding\")}, ${timestamp}, ${timestamp})`,\n ),\n sql`, `,\n );\n return [\n sql`\n INSERT INTO ${table} (\"graph_id\", \"node_id\", \"embedding\", \"created_at\", \"updated_at\")\n VALUES ${valueRows}\n ON CONFLICT (\"graph_id\", \"node_id\")\n DO UPDATE SET \"embedding\" = EXCLUDED.\"embedding\", \"updated_at\" = EXCLUDED.\"updated_at\"\n `,\n ];\n },\n\n buildDelete(slot, params: DeleteEmbeddingParams): readonly SQL[] {\n const table = quotedTableName(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n );\n return [\n sql`\n DELETE FROM ${table}\n WHERE \"graph_id\" = ${params.graphId} AND \"node_id\" = ${params.nodeId}\n `,\n ];\n },\n\n buildSearch(slot, params: VectorSearchParams, candidates?: SQL): SQL {\n const table = quotedTableName(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n );\n const embeddingColumn = sql`${table}.\"embedding\"`;\n const distance = distanceExpression(\n embeddingColumn,\n params.queryEmbedding,\n params.metric,\n );\n const score = vectorScoreExpression(distance, params.metric);\n\n // Same SQL for brute-force and ANN: with a matching HNSW/IVFFlat index the\n // Postgres planner rewrites this `ORDER BY distance LIMIT k` into an index\n // scan automatically, so the strategy never branches on `slot.indexType`.\n const conditions: SQL[] = [sql`${table}.\"graph_id\" = ${params.graphId}`];\n if (params.minScore !== undefined) {\n conditions.push(\n vectorMinScoreCondition(distance, params.metric, params.minScore),\n );\n }\n // Candidate pushdown keeps the HNSW scan (verified plan: HNSW Index Scan\n // -> Nested Loop probe of the nodes pkey -> Limit). Exact under\n // `hnsw.iterative_scan` (pgvector >= 0.8, applied by the backend);\n // bounded by `ef_search` on older pgvector — still strictly better than\n // ranking tombstones into top-k and dropping them post-hoc.\n //\n // Plain `IN (subquery)`: with fresh statistics the planner hashes it\n // (brute-force scans) or drives per-row probes of the nodes pkey\n // under the ordered HNSW scan — the plan-verified shape the liveness\n // pushdown was built on. Stale statistics degrade any membership\n // form; the answer is `store.refreshStatistics()` after bulk loads,\n // not a cleverer SQL shape.\n if (candidates !== undefined) {\n conditions.push(sql`${table}.\"node_id\" IN (${candidates})`);\n }\n // Pagination is rank-relative: the scan fetches `limit + offset`\n // ordered candidates and OFFSET discards the leading page.\n const pageOffset = params.offset ?? 0;\n const pageClause = vectorPageClause(params.limit, params.offset);\n // IVFFlat's iterative scan only offers `relaxed_order` (no\n // strict_order mode), so under the backend-applied\n // `ivfflat.iterative_scan` the index may emit the candidate set\n // slightly out of distance order. Re-sort the bounded set inside a\n // MATERIALIZED wrapper — the fence stops the planner from collapsing\n // the sort back into the index scan's claimed ordering — and page in\n // the wrapper: an OFFSET inside the relaxed scan could discard the\n // wrong rows. Score is monotone in distance, so ordering by score per\n // the metric's direction restores exact ranking.\n if (slot.indexType === \"ivfflat\") {\n const direction =\n params.metric === \"cosine\" ? sql.raw(\"DESC\") : sql.raw(\"ASC\");\n const relaxedBody = sql`\n SELECT ${table}.\"node_id\" AS node_id, ${score} AS score\n FROM ${table}\n WHERE ${sql.join(conditions, sql` AND `)}\n ORDER BY ${distance} ASC\n LIMIT ${params.limit + pageOffset}\n `;\n return sql`\n WITH tg_vec_relaxed AS MATERIALIZED (${relaxedBody})\n SELECT node_id, score FROM tg_vec_relaxed\n ORDER BY score ${direction}, node_id ASC\n ${pageClause}\n `;\n }\n return sql`\n SELECT ${table}.\"node_id\" AS node_id, ${score} AS score\n FROM ${table}\n WHERE ${sql.join(conditions, sql` AND `)}\n ORDER BY ${distance} ASC\n ${pageClause}\n `;\n },\n\n distanceExpression(embeddingColumn, queryEmbedding, metric) {\n return distanceExpression(embeddingColumn, queryEmbedding, metric);\n },\n\n buildCreateIndex(slot, options): SQL | undefined {\n if (!usesAnnIndex(slot)) return undefined;\n return sql.raw(\n pgvectorIndexDdl(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n slot,\n options?.concurrent === true,\n ),\n );\n },\n\n buildDropIndex(slot): SQL | undefined {\n if (!usesAnnIndex(slot)) return undefined;\n const indexName = pgvectorIndexName(slot);\n return sql.raw(`DROP INDEX IF EXISTS ${quoteIdentifier(indexName)}`);\n },\n\n buildDropStorage(slot): readonly string[] {\n const table = quoteIdentifier(\n this.tableName(slot.graphId, slot.nodeKind, slot.fieldPath),\n );\n // CASCADE drops the ANN index along with the table.\n return [`DROP TABLE IF EXISTS ${table} CASCADE`];\n },\n};\n\nfunction pgvectorIndexName(slot: VectorSlot): string {\n return vectorPhysicalName(\n INDEX_PREFIX,\n slot.graphId,\n slot.nodeKind,\n slot.fieldPath,\n );\n}\n\nfunction pgvectorIndexDdl(\n table: string,\n slot: VectorSlot,\n concurrent: boolean,\n): string {\n const indexName = quoteIdentifier(pgvectorIndexName(slot));\n const quotedTable = quoteIdentifier(table);\n const opClass = operatorClass(slot.metric);\n // Honor the field's declared tuning; fall back to pgvector defaults.\n const m = slot.indexParams?.m ?? DEFAULT_HNSW_M;\n const efConstruction =\n slot.indexParams?.efConstruction ?? DEFAULT_HNSW_EF_CONSTRUCTION;\n const lists = slot.indexParams?.lists ?? DEFAULT_IVFFLAT_LISTS;\n // CONCURRENTLY builds without taking a write-blocking lock on the live table\n // (materializeIndexes passes concurrent on Postgres). Run outside a tx.\n const create = `CREATE INDEX${concurrent ? \" CONCURRENTLY\" : \"\"} IF NOT EXISTS`;\n\n switch (slot.indexType) {\n case \"hnsw\": {\n return `${create} ${indexName} ON ${quotedTable} USING hnsw (\"embedding\" ${opClass}) WITH (m = ${m}, ef_construction = ${efConstruction});`;\n }\n case \"ivfflat\": {\n return `${create} ${indexName} ON ${quotedTable} USING ivfflat (\"embedding\" ${opClass}) WITH (lists = ${lists});`;\n }\n case \"none\": {\n throw new Error(\n \"pgvectorIndexDdl called for a brute-force-only slot (indexType 'none').\",\n );\n }\n default: {\n const _exhaustive: never = slot.indexType;\n throw new Error(`Unsupported vector index type: ${String(_exhaustive)}`);\n }\n }\n}\n"]}
|
|
@@ -118,5 +118,5 @@ exports.jsonPointer = jsonPointer;
|
|
|
118
118
|
exports.normalizeJsonPointer = normalizeJsonPointer;
|
|
119
119
|
exports.parseJsonPointer = parseJsonPointer;
|
|
120
120
|
exports.resolveJsonPointer = resolveJsonPointer;
|
|
121
|
-
//# sourceMappingURL=chunk-
|
|
122
|
-
//# sourceMappingURL=chunk-
|
|
121
|
+
//# sourceMappingURL=chunk-TDXIBCGY.cjs.map
|
|
122
|
+
//# sourceMappingURL=chunk-TDXIBCGY.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/query/json-pointer.ts"],"names":[],"mappings":"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","file":"chunk-FLRCVI2G.cjs","sourcesContent":["// JSON Pointer utilities and types.\n\nexport const MAX_JSON_POINTER_DEPTH = 5 as const;\n\nexport type JsonPointer = string & { readonly __jsonPointer: unique symbol };\nexport type JsonPointerSegment = string | number;\nexport type JsonPointerSegments = readonly JsonPointerSegment[];\n\ntype Depth = 0 | 1 | 2 | 3 | 4 | 5;\n\ninterface DepthDecrementMap {\n 0: 0;\n 1: 0;\n 2: 1;\n 3: 2;\n 4: 3;\n 5: 4;\n}\n\ntype Decrement<Current extends Depth> = DepthDecrementMap[Current];\n\ntype NonNegativeIntegerString = Exclude<`${bigint}`, `-${string}`>;\ntype ObjectPointerKey<T> = Exclude<\n Extract<keyof T, string>,\n NonNegativeIntegerString\n>;\n\ntype EncodeTilde<S extends string> =\n S extends `${infer Head}~${infer Tail}` ?\n `${EncodeTilde<Head>}~0${EncodeTilde<Tail>}`\n : S;\n\ntype EncodeSlash<S extends string> =\n S extends `${infer Head}/${infer Tail}` ?\n `${EncodeSlash<Head>}~1${EncodeSlash<Tail>}`\n : S;\n\ntype EncodePointerSegment<S extends string> = EncodeSlash<EncodeTilde<S>>;\n\ntype DecodePointerSegment<S extends string> =\n S extends `${infer Head}~1${infer Tail}` ?\n `${DecodePointerSegment<Head>}/${DecodePointerSegment<Tail>}`\n : S extends `${infer Head}~0${infer Tail}` ?\n `${DecodePointerSegment<Head>}~${DecodePointerSegment<Tail>}`\n : S;\n\ntype PointerForArray<T, Current extends Depth> =\n | `/${NonNegativeIntegerString}`\n | (Current extends 1 ? never\n : `/${NonNegativeIntegerString}${JsonPointerFor<T, Decrement<Current>>}`);\n\ntype PointerForObject<T, Current extends Depth> = {\n [K in ObjectPointerKey<T>]:\n | `/${EncodePointerSegment<K>}`\n | (Current extends 1 ? never\n : `/${EncodePointerSegment<K>}${JsonPointerFor<T[K], Decrement<Current>>}`);\n}[ObjectPointerKey<T>];\n\nexport type JsonPointerFor<T, Current extends Depth = 5> =\n | \"\"\n | (Current extends 0 ? \"\"\n : T extends readonly (infer U)[] ? PointerForArray<U, Current>\n : never)\n | (Current extends 0 ? \"\"\n : T extends Record<string, unknown> ? PointerForObject<T, Current>\n : never);\n\ntype PointerSegmentsForArray<T, Current extends Depth> =\n | readonly [number]\n | (Current extends 1 ? readonly [number]\n : readonly [number, ...JsonPointerSegmentsFor<T, Decrement<Current>>]);\n\ntype PointerSegmentsForObject<T, Current extends Depth> = {\n [K in ObjectPointerKey<T>]:\n | readonly [K]\n | (Current extends 1 ? readonly [K]\n : readonly [K, ...JsonPointerSegmentsFor<T[K], Decrement<Current>>]);\n}[ObjectPointerKey<T>];\n\nexport type JsonPointerSegmentsFor<T, Current extends Depth = 5> =\n | readonly []\n | (Current extends 0 ? readonly []\n : T extends readonly (infer U)[] ? PointerSegmentsForArray<U, Current>\n : never)\n | (Current extends 0 ? readonly []\n : T extends Record<string, unknown> ? PointerSegmentsForObject<T, Current>\n : never);\n\nexport type JsonPointerInput<T> =\n | JsonPointerFor<T>\n | JsonPointerSegmentsFor<T>\n | JsonPointer;\n\nexport type ResolveJsonPointer<T, Pointer extends string> =\n Pointer extends \"\" ? T\n : Pointer extends `/${infer Head}/${infer Tail}` ?\n ResolveJsonPointer<\n ResolvePointerSegment<T, DecodePointerSegment<Head>>,\n `/${Tail}`\n >\n : Pointer extends `/${infer Head}` ?\n ResolvePointerSegment<T, DecodePointerSegment<Head>>\n : unknown;\n\ntype ResolvePointerSegment<T, Segment extends string> =\n T extends readonly (infer U)[] ?\n Segment extends NonNegativeIntegerString ?\n U\n : unknown\n : T extends Record<string, unknown> ?\n Segment extends keyof T ?\n Segment extends NonNegativeIntegerString ?\n unknown\n : T[Segment]\n : unknown\n : unknown;\n\nexport type ResolveJsonPointerSegments<\n T,\n Segments extends readonly JsonPointerSegment[],\n> =\n Segments extends readonly [] ? T\n : Segments extends readonly [infer Head, ...infer Tail] ?\n ResolveJsonPointerSegments<\n ResolvePointerSegment<T, SegmentToString<Head>>,\n Extract<Tail, readonly JsonPointerSegment[]>\n >\n : unknown;\n\ntype SegmentToString<Segment> =\n Segment extends number ? `${Segment}`\n : Segment extends string ? Segment\n : string;\n\nexport function jsonPointer(segments: JsonPointerSegments): JsonPointer {\n if (segments.length > MAX_JSON_POINTER_DEPTH) {\n throw new Error(\n `JSON Pointer exceeds max depth ${MAX_JSON_POINTER_DEPTH}: ${segments.length}`,\n );\n }\n\n if (segments.length === 0) {\n return \"\" as JsonPointer;\n }\n\n const encoded = segments.map((segment) => {\n if (segment === \"-\") {\n throw new Error(\n \"JSON Pointer '-' segment is not allowed for query access\",\n );\n }\n if (typeof segment === \"number\") {\n if (!Number.isInteger(segment) || segment < 0) {\n throw new Error(\n `JSON Pointer index must be a non-negative integer: ${segment}`,\n );\n }\n return segment.toString();\n }\n return encodeJsonPointerSegment(segment);\n });\n\n return `/${encoded.join(\"/\")}` as JsonPointer;\n}\n\nfunction isJsonPointerSegments(\n input: unknown,\n): input is readonly JsonPointerSegment[] {\n return Array.isArray(input);\n}\n\nexport function normalizeJsonPointer<T>(\n input: JsonPointerInput<T>,\n): JsonPointer {\n if (isJsonPointerSegments(input)) {\n return jsonPointer(input);\n }\n\n return assertJsonPointer(input);\n}\n\nexport function parseJsonPointer(pointer: JsonPointer): readonly string[] {\n if (pointer === \"\") {\n return [];\n }\n\n const rawSegments = pointer.slice(1).split(\"/\");\n return rawSegments.map((segment) => decodeJsonPointerSegment(segment));\n}\n\n/**\n * Resolves the value at a JSON pointer within a plain JS value, returning\n * `undefined` if any segment is missing or traverses a non-object.\n */\nexport function resolveJsonPointer(\n value: unknown,\n pointer: JsonPointer,\n): unknown {\n let current = value;\n for (const segment of parseJsonPointer(pointer)) {\n if (current === null || current === undefined) return undefined;\n if (typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\n}\n\nexport function joinJsonPointers(\n base: JsonPointer | undefined,\n relative: JsonPointer,\n): JsonPointer {\n if (!base || base === \"\") {\n return relative;\n }\n if (relative === \"\") {\n return base;\n }\n\n const combinedSegments = [\n ...parseJsonPointer(base),\n ...parseJsonPointer(relative),\n ];\n return jsonPointer(combinedSegments);\n}\n\nfunction assertJsonPointer(pointer: string): JsonPointer {\n if (pointer !== \"\" && !pointer.startsWith(\"/\")) {\n throw new Error(\"JSON Pointer must be empty or start with '/'\");\n }\n\n const segments = pointer === \"\" ? [] : pointer.slice(1).split(\"/\");\n if (segments.length > MAX_JSON_POINTER_DEPTH) {\n throw new Error(\n `JSON Pointer exceeds max depth ${MAX_JSON_POINTER_DEPTH}: ${segments.length}`,\n );\n }\n\n for (const segment of segments) {\n if (segment === \"-\") {\n throw new Error(\n \"JSON Pointer '-' segment is not allowed for query access\",\n );\n }\n if (!isValidPointerEncoding(segment)) {\n throw new Error(\n `Invalid JSON Pointer escape sequence in segment: ${segment}`,\n );\n }\n }\n\n return pointer as JsonPointer;\n}\n\n/**\n * Escape a single JSON Pointer reference segment per RFC 6901: `~`\n * becomes `~0`, `/` becomes `~1`. Callers join the result with `/`.\n */\nexport function encodeJsonPointerSegment(segment: string): string {\n return segment.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n}\n\nfunction decodeJsonPointerSegment(segment: string): string {\n return segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n}\n\nfunction isValidPointerEncoding(segment: string): boolean {\n for (let index = 0; index < segment.length; index += 1) {\n if (segment[index] !== \"~\") {\n continue;\n }\n const next = segment[index + 1];\n if (next !== \"0\" && next !== \"1\") {\n return false;\n }\n index += 1;\n }\n return true;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/query/json-pointer.ts"],"names":[],"mappings":"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","file":"chunk-TDXIBCGY.cjs","sourcesContent":["// JSON Pointer utilities and types.\n\nexport const MAX_JSON_POINTER_DEPTH = 5 as const;\n\nexport type JsonPointer = string & { readonly __jsonPointer: unique symbol };\nexport type JsonPointerSegment = string | number;\nexport type JsonPointerSegments = readonly JsonPointerSegment[];\n\ntype Depth = 0 | 1 | 2 | 3 | 4 | 5;\n\ninterface DepthDecrementMap {\n 0: 0;\n 1: 0;\n 2: 1;\n 3: 2;\n 4: 3;\n 5: 4;\n}\n\ntype Decrement<Current extends Depth> = DepthDecrementMap[Current];\n\ntype NonNegativeIntegerString = Exclude<`${bigint}`, `-${string}`>;\ntype ObjectPointerKey<T> = Exclude<\n Extract<keyof T, string>,\n NonNegativeIntegerString\n>;\n\ntype EncodeTilde<S extends string> =\n S extends `${infer Head}~${infer Tail}` ?\n `${EncodeTilde<Head>}~0${EncodeTilde<Tail>}`\n : S;\n\ntype EncodeSlash<S extends string> =\n S extends `${infer Head}/${infer Tail}` ?\n `${EncodeSlash<Head>}~1${EncodeSlash<Tail>}`\n : S;\n\ntype EncodePointerSegment<S extends string> = EncodeSlash<EncodeTilde<S>>;\n\ntype DecodePointerSegment<S extends string> =\n S extends `${infer Head}~1${infer Tail}` ?\n `${DecodePointerSegment<Head>}/${DecodePointerSegment<Tail>}`\n : S extends `${infer Head}~0${infer Tail}` ?\n `${DecodePointerSegment<Head>}~${DecodePointerSegment<Tail>}`\n : S;\n\ntype PointerForArray<T, Current extends Depth> =\n | `/${NonNegativeIntegerString}`\n | (Current extends 1 ? never\n : `/${NonNegativeIntegerString}${JsonPointerFor<T, Decrement<Current>>}`);\n\ntype PointerForObject<T, Current extends Depth> = {\n [K in ObjectPointerKey<T>]:\n | `/${EncodePointerSegment<K>}`\n | (Current extends 1 ? never\n : `/${EncodePointerSegment<K>}${JsonPointerFor<T[K], Decrement<Current>>}`);\n}[ObjectPointerKey<T>];\n\nexport type JsonPointerFor<T, Current extends Depth = 5> =\n | \"\"\n | (Current extends 0 ? \"\"\n : T extends readonly (infer U)[] ? PointerForArray<U, Current>\n : never)\n | (Current extends 0 ? \"\"\n : T extends Record<string, unknown> ? PointerForObject<T, Current>\n : never);\n\ntype PointerSegmentsForArray<T, Current extends Depth> =\n | readonly [number]\n | (Current extends 1 ? readonly [number]\n : readonly [number, ...JsonPointerSegmentsFor<T, Decrement<Current>>]);\n\ntype PointerSegmentsForObject<T, Current extends Depth> = {\n [K in ObjectPointerKey<T>]:\n | readonly [K]\n | (Current extends 1 ? readonly [K]\n : readonly [K, ...JsonPointerSegmentsFor<T[K], Decrement<Current>>]);\n}[ObjectPointerKey<T>];\n\nexport type JsonPointerSegmentsFor<T, Current extends Depth = 5> =\n | readonly []\n | (Current extends 0 ? readonly []\n : T extends readonly (infer U)[] ? PointerSegmentsForArray<U, Current>\n : never)\n | (Current extends 0 ? readonly []\n : T extends Record<string, unknown> ? PointerSegmentsForObject<T, Current>\n : never);\n\nexport type JsonPointerInput<T> =\n JsonPointerFor<T> | JsonPointerSegmentsFor<T> | JsonPointer;\n\nexport type ResolveJsonPointer<T, Pointer extends string> =\n Pointer extends \"\" ? T\n : Pointer extends `/${infer Head}/${infer Tail}` ?\n ResolveJsonPointer<\n ResolvePointerSegment<T, DecodePointerSegment<Head>>,\n `/${Tail}`\n >\n : Pointer extends `/${infer Head}` ?\n ResolvePointerSegment<T, DecodePointerSegment<Head>>\n : unknown;\n\ntype ResolvePointerSegment<T, Segment extends string> =\n T extends readonly (infer U)[] ?\n Segment extends NonNegativeIntegerString ?\n U\n : unknown\n : T extends Record<string, unknown> ?\n Segment extends keyof T ?\n Segment extends NonNegativeIntegerString ?\n unknown\n : T[Segment]\n : unknown\n : unknown;\n\nexport type ResolveJsonPointerSegments<\n T,\n Segments extends readonly JsonPointerSegment[],\n> =\n Segments extends readonly [] ? T\n : Segments extends readonly [infer Head, ...infer Tail] ?\n ResolveJsonPointerSegments<\n ResolvePointerSegment<T, SegmentToString<Head>>,\n Extract<Tail, readonly JsonPointerSegment[]>\n >\n : unknown;\n\ntype SegmentToString<Segment> =\n Segment extends number ? `${Segment}`\n : Segment extends string ? Segment\n : string;\n\nexport function jsonPointer(segments: JsonPointerSegments): JsonPointer {\n if (segments.length > MAX_JSON_POINTER_DEPTH) {\n throw new Error(\n `JSON Pointer exceeds max depth ${MAX_JSON_POINTER_DEPTH}: ${segments.length}`,\n );\n }\n\n if (segments.length === 0) {\n return \"\" as JsonPointer;\n }\n\n const encoded = segments.map((segment) => {\n if (segment === \"-\") {\n throw new Error(\n \"JSON Pointer '-' segment is not allowed for query access\",\n );\n }\n if (typeof segment === \"number\") {\n if (!Number.isInteger(segment) || segment < 0) {\n throw new Error(\n `JSON Pointer index must be a non-negative integer: ${segment}`,\n );\n }\n return segment.toString();\n }\n return encodeJsonPointerSegment(segment);\n });\n\n return `/${encoded.join(\"/\")}` as JsonPointer;\n}\n\nfunction isJsonPointerSegments(\n input: unknown,\n): input is readonly JsonPointerSegment[] {\n return Array.isArray(input);\n}\n\nexport function normalizeJsonPointer<T>(\n input: JsonPointerInput<T>,\n): JsonPointer {\n if (isJsonPointerSegments(input)) {\n return jsonPointer(input);\n }\n\n return assertJsonPointer(input);\n}\n\nexport function parseJsonPointer(pointer: JsonPointer): readonly string[] {\n if (pointer === \"\") {\n return [];\n }\n\n const rawSegments = pointer.slice(1).split(\"/\");\n return rawSegments.map((segment) => decodeJsonPointerSegment(segment));\n}\n\n/**\n * Resolves the value at a JSON pointer within a plain JS value, returning\n * `undefined` if any segment is missing or traverses a non-object.\n */\nexport function resolveJsonPointer(\n value: unknown,\n pointer: JsonPointer,\n): unknown {\n let current = value;\n for (const segment of parseJsonPointer(pointer)) {\n if (current === null || current === undefined) return undefined;\n if (typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\n}\n\nexport function joinJsonPointers(\n base: JsonPointer | undefined,\n relative: JsonPointer,\n): JsonPointer {\n if (!base || base === \"\") {\n return relative;\n }\n if (relative === \"\") {\n return base;\n }\n\n const combinedSegments = [\n ...parseJsonPointer(base),\n ...parseJsonPointer(relative),\n ];\n return jsonPointer(combinedSegments);\n}\n\nfunction assertJsonPointer(pointer: string): JsonPointer {\n if (pointer !== \"\" && !pointer.startsWith(\"/\")) {\n throw new Error(\"JSON Pointer must be empty or start with '/'\");\n }\n\n const segments = pointer === \"\" ? [] : pointer.slice(1).split(\"/\");\n if (segments.length > MAX_JSON_POINTER_DEPTH) {\n throw new Error(\n `JSON Pointer exceeds max depth ${MAX_JSON_POINTER_DEPTH}: ${segments.length}`,\n );\n }\n\n for (const segment of segments) {\n if (segment === \"-\") {\n throw new Error(\n \"JSON Pointer '-' segment is not allowed for query access\",\n );\n }\n if (!isValidPointerEncoding(segment)) {\n throw new Error(\n `Invalid JSON Pointer escape sequence in segment: ${segment}`,\n );\n }\n }\n\n return pointer as JsonPointer;\n}\n\n/**\n * Escape a single JSON Pointer reference segment per RFC 6901: `~`\n * becomes `~0`, `/` becomes `~1`. Callers join the result with `/`.\n */\nexport function encodeJsonPointerSegment(segment: string): string {\n return segment.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n}\n\nfunction decodeJsonPointerSegment(segment: string): string {\n return segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n}\n\nfunction isValidPointerEncoding(segment: string): boolean {\n for (let index = 0; index < segment.length; index += 1) {\n if (segment[index] !== \"~\") {\n continue;\n }\n const next = segment[index + 1];\n if (next !== \"0\" && next !== \"1\") {\n return false;\n }\n index += 1;\n }\n return true;\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunk7YSP4V4R_cjs = require('./chunk-7YSP4V4R.cjs');
|
|
4
4
|
|
|
5
5
|
// src/utils/hash.ts
|
|
6
6
|
function fnv1aBase36(input) {
|
|
7
|
-
let hash =
|
|
7
|
+
let hash = chunk7YSP4V4R_cjs.FNV1A_OFFSET_BASIS;
|
|
8
8
|
for (const character of input) {
|
|
9
9
|
const codePoint = character.codePointAt(0);
|
|
10
10
|
if (codePoint === void 0) continue;
|
|
11
11
|
hash ^= codePoint;
|
|
12
|
-
hash = Math.imul(hash,
|
|
12
|
+
hash = Math.imul(hash, chunk7YSP4V4R_cjs.FNV1A_PRIME);
|
|
13
13
|
}
|
|
14
14
|
return (hash >>> 0).toString(36);
|
|
15
15
|
}
|
|
@@ -28,5 +28,5 @@ async function sha256Hex(input, byteLength = 8) {
|
|
|
28
28
|
|
|
29
29
|
exports.fnv1aBase36 = fnv1aBase36;
|
|
30
30
|
exports.sha256Hex = sha256Hex;
|
|
31
|
-
//# sourceMappingURL=chunk-
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
31
|
+
//# sourceMappingURL=chunk-TEDRJXOG.cjs.map
|
|
32
|
+
//# sourceMappingURL=chunk-TEDRJXOG.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/hash.ts"],"names":["FNV1A_OFFSET_BASIS","FNV1A_PRIME"],"mappings":";;;;;AAWO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,IAAI,IAAA,GAAOA,oCAAA;AACX,EAAA,KAAA,MAAW,aAAa,KAAA,EAAO;AAC7B,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,WAAA,CAAY,CAAC,CAAA;AACzC,IAAA,IAAI,cAAc,MAAA,EAAW;AAC7B,IAAA,IAAA,IAAQ,SAAA;AACR,IAAA,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,EAAMC,6BAAW,CAAA;AAAA,EACpC;AACA,EAAA,OAAA,CAAQ,IAAA,KAAS,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA;AACjC;AAWA,eAAsB,SAAA,CACpB,KAAA,EACA,UAAA,GAAa,CAAA,EACI;AACjB,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAC9C,EAAA,MAAM,SAAS,MAAM,UAAA,CAAW,OAAO,MAAA,CAAO,MAAA,CAAO,WAAW,OAAO,CAAA;AACvE,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAM,CAAA;AACnC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,UAAA,EAAY,KAAA,EAAA,EAAS;AAC/C,IAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,IAAA,IAAI,SAAS,MAAA,EAAW;AACxB,IAAA,GAAA,IAAO,KAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,GAAA;AACT","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/utils/hash.ts"],"names":["FNV1A_OFFSET_BASIS","FNV1A_PRIME"],"mappings":";;;;;AAWO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,IAAI,IAAA,GAAOA,oCAAA;AACX,EAAA,KAAA,MAAW,aAAa,KAAA,EAAO;AAC7B,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,WAAA,CAAY,CAAC,CAAA;AACzC,IAAA,IAAI,cAAc,MAAA,EAAW;AAC7B,IAAA,IAAA,IAAQ,SAAA;AACR,IAAA,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,IAAA,EAAMC,6BAAW,CAAA;AAAA,EACpC;AACA,EAAA,OAAA,CAAQ,IAAA,KAAS,CAAA,EAAG,QAAA,CAAS,EAAE,CAAA;AACjC;AAWA,eAAsB,SAAA,CACpB,KAAA,EACA,UAAA,GAAa,CAAA,EACI;AACjB,EAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,KAAK,CAAA;AAC9C,EAAA,MAAM,SAAS,MAAM,UAAA,CAAW,OAAO,MAAA,CAAO,MAAA,CAAO,WAAW,OAAO,CAAA;AACvE,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAM,CAAA;AACnC,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,IAAS,KAAA,GAAQ,CAAA,EAAG,KAAA,GAAQ,UAAA,EAAY,KAAA,EAAA,EAAS;AAC/C,IAAA,MAAM,IAAA,GAAO,MAAM,KAAK,CAAA;AACxB,IAAA,IAAI,SAAS,MAAA,EAAW;AACxB,IAAA,GAAA,IAAO,KAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,GAAA;AACT","file":"chunk-TEDRJXOG.cjs","sourcesContent":["/**\n * Hash utilities — FNV-1a for fast non-cryptographic identifier\n * generation, SHA-256 (truncated) for collision-resistant signatures.\n */\nimport { FNV1A_OFFSET_BASIS, FNV1A_PRIME } from \"../constants\";\n\n/**\n * FNV-1a hash of `input`, returned as a base-36 encoded string. Used for\n * generating short, deterministic identifiers (column aliases, index\n * name suffixes, etc.).\n */\nexport function fnv1aBase36(input: string): string {\n let hash = FNV1A_OFFSET_BASIS;\n for (const character of input) {\n const codePoint = character.codePointAt(0);\n if (codePoint === undefined) continue;\n hash ^= codePoint;\n hash = Math.imul(hash, FNV1A_PRIME);\n }\n return (hash >>> 0).toString(36);\n}\n\n/**\n * Hex-truncated SHA-256 of `input` via the Web Crypto API. Works in\n * Node.js 16+, Cloudflare Workers, Deno, and browsers.\n *\n * `byteLength` controls how many bytes of the digest are emitted —\n * default 8 (16 hex chars, ~64 bits, sufficient for schema-version and\n * per-graph index signatures). Pass 16 (32 hex chars) when hashes are\n * compared against externally-stored signatures.\n */\nexport async function sha256Hex(\n input: string,\n byteLength = 8,\n): Promise<string> {\n const encoded = new TextEncoder().encode(input);\n const digest = await globalThis.crypto.subtle.digest(\"SHA-256\", encoded);\n const bytes = new Uint8Array(digest);\n let hex = \"\";\n for (let index = 0; index < byteLength; index++) {\n const byte = bytes[index];\n if (byte === undefined) break;\n hex += byte.toString(16).padStart(2, \"0\");\n }\n return hex;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkH7YNSMA7_cjs = require('./chunk-H7YNSMA7.cjs');
|
|
4
4
|
|
|
5
5
|
// src/query/schema-introspector.ts
|
|
6
6
|
var SUPPORTED_SCHEMA_TYPES = [
|
|
@@ -137,17 +137,17 @@ function createSchemaIntrospector(nodeKinds, edgeKinds) {
|
|
|
137
137
|
};
|
|
138
138
|
}
|
|
139
139
|
function resolveFieldTypeInfo(schema) {
|
|
140
|
-
const embeddingDimensions =
|
|
140
|
+
const embeddingDimensions = chunkH7YNSMA7_cjs.getEmbeddingDimensions(schema);
|
|
141
141
|
if (embeddingDimensions !== void 0) {
|
|
142
142
|
return { valueType: "embedding", dimensions: embeddingDimensions };
|
|
143
143
|
}
|
|
144
|
-
const searchableMetadata =
|
|
144
|
+
const searchableMetadata = chunkH7YNSMA7_cjs.getSearchableMetadata(schema);
|
|
145
145
|
const searchableStringSchema = searchableMetadata === void 0 ? void 0 : unwrapSearchableStringSchema(schema);
|
|
146
146
|
if (searchableMetadata !== void 0 && searchableStringSchema !== void 0) {
|
|
147
147
|
return { valueType: "string", searchable: searchableMetadata };
|
|
148
148
|
}
|
|
149
149
|
const unwrapped = unwrapSchema(schema);
|
|
150
|
-
const unwrappedEmbeddingDimensions =
|
|
150
|
+
const unwrappedEmbeddingDimensions = chunkH7YNSMA7_cjs.getEmbeddingDimensions(unwrapped);
|
|
151
151
|
if (unwrappedEmbeddingDimensions !== void 0) {
|
|
152
152
|
return { valueType: "embedding", dimensions: unwrappedEmbeddingDimensions };
|
|
153
153
|
}
|
|
@@ -357,5 +357,5 @@ function unwrapSchema(schema) {
|
|
|
357
357
|
}
|
|
358
358
|
|
|
359
359
|
exports.createSchemaIntrospector = createSchemaIntrospector;
|
|
360
|
-
//# sourceMappingURL=chunk-
|
|
361
|
-
//# sourceMappingURL=chunk-
|
|
360
|
+
//# sourceMappingURL=chunk-UMDVATGY.cjs.map
|
|
361
|
+
//# sourceMappingURL=chunk-UMDVATGY.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/query/schema-introspector.ts"],"names":["getEmbeddingDimensions","getSearchableMetadata","shape"],"mappings":"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","file":"chunk-WL2SG7ZV.cjs","sourcesContent":["import { type z } from \"zod\";\n\nimport { getEmbeddingDimensions } from \"../core/embedding\";\nimport {\n getSearchableMetadata,\n type SearchableMetadata,\n} from \"../core/searchable\";\nimport { type ValueType } from \"./ast\";\n\nconst SUPPORTED_SCHEMA_TYPES = [\n \"string\",\n \"number\",\n \"nan\",\n \"boolean\",\n \"date\",\n \"literal\",\n \"enum\",\n \"nativeEnum\",\n \"array\",\n \"tuple\",\n \"object\",\n \"record\",\n \"union\",\n \"discriminatedUnion\",\n \"intersection\",\n] as const;\n\ntype SupportedSchemaType = (typeof SUPPORTED_SCHEMA_TYPES)[number];\n\n// Use Set<string> to allow checking arbitrary strings while maintaining type safety\nconst SUPPORTED_SCHEMA_TYPE_SET: ReadonlySet<string> = new Set(\n SUPPORTED_SCHEMA_TYPES,\n);\n\nfunction isSupportedSchemaType(type: string): type is SupportedSchemaType {\n return SUPPORTED_SCHEMA_TYPE_SET.has(type);\n}\n\nexport type FieldTypeInfo = Readonly<{\n valueType: ValueType;\n elementType?: ValueType | undefined;\n elementTypeInfo?: FieldTypeInfo | undefined;\n shape?: Readonly<Record<string, FieldTypeInfo>> | undefined;\n recordValueType?: FieldTypeInfo | undefined;\n /** For embedding types: the number of dimensions */\n dimensions?: number | undefined;\n /** For fulltext-searchable string types: field-level metadata */\n searchable?: SearchableMetadata | undefined;\n}>;\n\nexport type SchemaIntrospector = Readonly<{\n getFieldTypeInfo: (\n kindName: string,\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n getSharedFieldTypeInfo: (\n kindNames: readonly string[],\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n getEdgeFieldTypeInfo: (\n edgeKindName: string,\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n getSharedEdgeFieldTypeInfo: (\n edgeKindNames: readonly string[],\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n /**\n * True iff every kind in `kindNames` has at least one `searchable()`\n * field. For polymorphic aliases, `$fulltext` is available only when\n * every resolved kind has searchable content — otherwise `.matches()`\n * would silently miss some kinds.\n */\n hasSearchableField: (kindNames: readonly string[]) => boolean;\n}>;\n\nfunction sharedCacheKey(\n kindNames: readonly string[],\n fieldName: string,\n): string {\n return `${[...kindNames].toSorted().join(\"|\")}|${fieldName}`;\n}\n\nexport function createSchemaIntrospector(\n nodeKinds: ReadonlyMap<string, { schema: z.ZodType }>,\n edgeKinds?: ReadonlyMap<string, { schema: z.ZodType }>,\n): SchemaIntrospector {\n const nodeShapeCache = new Map<\n string,\n Readonly<Record<string, FieldTypeInfo>>\n >();\n const edgeShapeCache = new Map<\n string,\n Readonly<Record<string, FieldTypeInfo>>\n >();\n // Proxy-based field accessors trigger a fresh merge on every property\n // read during a `whereNode(n => ...)` callback. For polymorphic\n // aliases with N kinds and M field accesses, that is O(N*M) per\n // compile; caching collapses it to O(1) after the first access.\n const sharedFieldTypeInfoCache = new Map<string, FieldTypeInfo | undefined>();\n const sharedEdgeFieldTypeInfoCache = new Map<\n string,\n FieldTypeInfo | undefined\n >();\n const searchableCache = new Map<string, boolean>();\n\n function getFieldTypeInfo(\n kindName: string,\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const shape = getShapeForKind(kindName);\n return shape?.[fieldName];\n }\n\n function getSharedFieldTypeInfo(\n kindNames: readonly string[],\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const cacheKey = sharedCacheKey(kindNames, fieldName);\n if (sharedFieldTypeInfoCache.has(cacheKey)) {\n return sharedFieldTypeInfoCache.get(cacheKey);\n }\n\n const infos = kindNames\n .map((kindName) => getFieldTypeInfo(kindName, fieldName))\n .filter((info): info is FieldTypeInfo => info !== undefined);\n\n const merged =\n infos.length !== kindNames.length || infos.length === 0 ?\n undefined\n : mergeFieldTypeInfos(infos);\n sharedFieldTypeInfoCache.set(cacheKey, merged);\n return merged;\n }\n\n function getEdgeFieldTypeInfo(\n edgeKindName: string,\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const shape = getShapeForEdgeKind(edgeKindName);\n return shape?.[fieldName];\n }\n\n function getSharedEdgeFieldTypeInfo(\n edgeKindNames: readonly string[],\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const cacheKey = sharedCacheKey(edgeKindNames, fieldName);\n if (sharedEdgeFieldTypeInfoCache.has(cacheKey)) {\n return sharedEdgeFieldTypeInfoCache.get(cacheKey);\n }\n\n const infos = edgeKindNames\n .map((kindName) => getEdgeFieldTypeInfo(kindName, fieldName))\n .filter((info): info is FieldTypeInfo => info !== undefined);\n\n const merged =\n infos.length !== edgeKindNames.length || infos.length === 0 ?\n undefined\n : mergeFieldTypeInfos(infos);\n sharedEdgeFieldTypeInfoCache.set(cacheKey, merged);\n return merged;\n }\n\n function getShapeForKind(\n kindName: string,\n ): Readonly<Record<string, FieldTypeInfo>> | undefined {\n const cached = nodeShapeCache.get(kindName);\n if (cached) {\n return cached;\n }\n\n const kind = nodeKinds.get(kindName);\n if (!kind) {\n return undefined;\n }\n\n const schema = kind.schema;\n if (schema.type !== \"object\") {\n return undefined;\n }\n\n const shape = (schema.def as { shape?: Record<string, z.ZodType> }).shape;\n if (!shape) {\n return undefined;\n }\n\n const entries = Object.entries(shape).map(\n ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n );\n const resolved = Object.freeze(Object.fromEntries(entries));\n nodeShapeCache.set(kindName, resolved);\n return resolved;\n }\n\n function getShapeForEdgeKind(\n edgeKindName: string,\n ): Readonly<Record<string, FieldTypeInfo>> | undefined {\n if (!edgeKinds) {\n return undefined;\n }\n\n const cached = edgeShapeCache.get(edgeKindName);\n if (cached) {\n return cached;\n }\n\n const kind = edgeKinds.get(edgeKindName);\n if (!kind) {\n return undefined;\n }\n\n const schema = kind.schema;\n if (schema.type !== \"object\") {\n return undefined;\n }\n\n const shape = (schema.def as { shape?: Record<string, z.ZodType> }).shape;\n if (!shape) {\n return undefined;\n }\n\n const entries = Object.entries(shape).map(\n ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n );\n const resolved = Object.freeze(Object.fromEntries(entries));\n edgeShapeCache.set(edgeKindName, resolved);\n return resolved;\n }\n\n function hasSearchableField(kindNames: readonly string[]): boolean {\n const cacheKey = [...kindNames].toSorted().join(\"|\");\n const cached = searchableCache.get(cacheKey);\n if (cached !== undefined) return cached;\n\n const result =\n kindNames.length > 0 &&\n kindNames.every((kindName) => {\n const shape = getShapeForKind(kindName);\n if (!shape) return false;\n return Object.values(shape).some(\n (info) => info.searchable !== undefined,\n );\n });\n searchableCache.set(cacheKey, result);\n return result;\n }\n\n return {\n getFieldTypeInfo,\n getSharedFieldTypeInfo,\n getEdgeFieldTypeInfo,\n getSharedEdgeFieldTypeInfo,\n hasSearchableField,\n };\n}\n\nfunction resolveFieldTypeInfo(schema: z.ZodType): FieldTypeInfo {\n // Check for embedding type before unwrapping\n // (embedding metadata is attached to the outer schema)\n const embeddingDimensions = getEmbeddingDimensions(schema);\n if (embeddingDimensions !== undefined) {\n return { valueType: \"embedding\", dimensions: embeddingDimensions };\n }\n\n const searchableMetadata = getSearchableMetadata(schema);\n const searchableStringSchema =\n searchableMetadata === undefined ? undefined : (\n unwrapSearchableStringSchema(schema)\n );\n if (\n searchableMetadata !== undefined &&\n searchableStringSchema !== undefined\n ) {\n return { valueType: \"string\", searchable: searchableMetadata };\n }\n\n const unwrapped = unwrapSchema(schema);\n\n // Check embedding on unwrapped schema too (for z.optional(embedding(...)))\n const unwrappedEmbeddingDimensions = getEmbeddingDimensions(unwrapped);\n if (unwrappedEmbeddingDimensions !== undefined) {\n return { valueType: \"embedding\", dimensions: unwrappedEmbeddingDimensions };\n }\n\n // Cast to string to detach from Zod's internal type union,\n // then let the type guard narrow to our SupportedSchemaType.\n const rawType = unwrapped.type as string;\n\n if (!isSupportedSchemaType(rawType)) {\n return { valueType: \"unknown\" };\n }\n\n // After the type guard, rawType is SupportedSchemaType.\n const schemaType = rawType;\n\n // Handle each schema type individually\n if (schemaType === \"string\") {\n return { valueType: \"string\" };\n }\n if (schemaType === \"number\" || schemaType === \"nan\") {\n return { valueType: \"number\" };\n }\n if (schemaType === \"boolean\") {\n return { valueType: \"boolean\" };\n }\n if (schemaType === \"date\") {\n return { valueType: \"date\" };\n }\n if (schemaType === \"literal\") {\n const literalValue = (unwrapped.def as { value?: unknown }).value;\n return resolveLiteralTypeInfo(literalValue);\n }\n if (schemaType === \"enum\") {\n return { valueType: \"string\" };\n }\n if (schemaType === \"nativeEnum\") {\n const values = Object.values(\n (unwrapped.def as { values?: Record<string, unknown> }).values ?? {},\n );\n const valueType = resolveEnumValueType(values);\n return { valueType };\n }\n if (schemaType === \"array\") {\n const elementSchema = (unwrapped.def as { element?: z.ZodType }).element;\n const elementInfo =\n elementSchema ? resolveFieldTypeInfo(elementSchema) : undefined;\n return {\n valueType: \"array\",\n elementType: elementInfo?.valueType,\n elementTypeInfo: elementInfo,\n };\n }\n if (schemaType === \"tuple\") {\n return {\n valueType: \"array\",\n elementType: \"unknown\",\n };\n }\n if (schemaType === \"object\") {\n const shape = (unwrapped.def as { shape?: Record<string, z.ZodType> })\n .shape;\n if (!shape) {\n return { valueType: \"object\" };\n }\n const entries = Object.entries(shape).map(\n ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n );\n const resolved = Object.freeze(Object.fromEntries(entries));\n return {\n valueType: \"object\",\n shape: resolved,\n };\n }\n if (schemaType === \"record\") {\n const valueSchema = (unwrapped.def as { valueType?: z.ZodType }).valueType;\n const valueInfo =\n valueSchema ? resolveFieldTypeInfo(valueSchema) : undefined;\n return {\n valueType: \"object\",\n recordValueType: valueInfo,\n };\n }\n if (schemaType === \"union\" || schemaType === \"discriminatedUnion\") {\n const unionOptions = (unwrapped.def as { options?: readonly z.ZodType[] })\n .options;\n if (!unionOptions || unionOptions.length === 0) {\n return { valueType: \"unknown\" };\n }\n const optionInfos = unionOptions.map((option) =>\n resolveFieldTypeInfo(option),\n );\n return mergeFieldTypeInfos(optionInfos) ?? { valueType: \"unknown\" };\n }\n\n // Only \"intersection\" remains after all other cases\n const left = (unwrapped.def as { left?: z.ZodType }).left;\n const right = (unwrapped.def as { right?: z.ZodType }).right;\n if (!left || !right) {\n return { valueType: \"unknown\" };\n }\n const leftInfo = resolveFieldTypeInfo(left);\n const rightInfo = resolveFieldTypeInfo(right);\n return mergeFieldTypeInfos([leftInfo, rightInfo]) ?? { valueType: \"unknown\" };\n}\n\nfunction resolveLiteralTypeInfo(value: unknown): FieldTypeInfo {\n if (value instanceof Date) {\n return { valueType: \"date\" };\n }\n if (typeof value === \"string\") {\n return { valueType: \"string\" };\n }\n if (typeof value === \"number\") {\n return { valueType: \"number\" };\n }\n if (typeof value === \"boolean\") {\n return { valueType: \"boolean\" };\n }\n return { valueType: \"unknown\" };\n}\n\nfunction resolveEnumValueType(values: readonly unknown[]): ValueType {\n const uniqueTypes = new Set(values.map((value) => typeof value));\n if (uniqueTypes.size !== 1) {\n return \"unknown\";\n }\n\n const type = uniqueTypes.values().next().value;\n if (type === \"string\") {\n return \"string\";\n }\n if (type === \"number\") {\n return \"number\";\n }\n if (type === \"boolean\") {\n return \"boolean\";\n }\n return \"unknown\";\n}\n\nfunction mergeFieldTypeInfos(\n infos: readonly FieldTypeInfo[],\n): FieldTypeInfo | undefined {\n const [first, ...rest] = infos;\n if (!first) {\n return undefined;\n }\n\n const sameValueType = rest.every(\n (info) => info.valueType === first.valueType,\n );\n if (!sameValueType) {\n return undefined;\n }\n\n if (first.valueType === \"array\") {\n const elementType =\n rest.every((info) => info.elementType === first.elementType) ?\n first.elementType\n : \"unknown\";\n const elementTypeInfo =\n (\n rest.every(\n (info) =>\n info.elementTypeInfo?.valueType ===\n first.elementTypeInfo?.valueType,\n )\n ) ?\n first.elementTypeInfo\n : undefined;\n return {\n valueType: \"array\",\n elementType,\n elementTypeInfo,\n };\n }\n\n if (first.valueType === \"object\") {\n const shapes = infos\n .map((info) => info.shape)\n .filter(\n (shape): shape is Readonly<Record<string, FieldTypeInfo>> =>\n shape !== undefined,\n );\n\n const shape =\n shapes.length === infos.length ? intersectShapes(shapes) : undefined;\n\n const recordValueType =\n (\n rest.every(\n (info) =>\n info.recordValueType?.valueType ===\n first.recordValueType?.valueType,\n )\n ) ?\n first.recordValueType\n : undefined;\n\n return {\n valueType: \"object\",\n shape,\n recordValueType,\n };\n }\n\n // Strings: only mark the merged result as searchable if every kind\n // in the polymorphic alias declares the field as searchable. A field\n // that isn't uniformly searchable would silently search only some\n // kinds via `.matches()`.\n if (first.valueType === \"string\") {\n const allSearchable =\n first.searchable !== undefined &&\n rest.every((info) => info.searchable !== undefined);\n return allSearchable ?\n { valueType: \"string\", searchable: first.searchable }\n : { valueType: \"string\" };\n }\n\n return first;\n}\n\nfunction intersectShapes(\n shapes: readonly Readonly<Record<string, FieldTypeInfo>>[],\n): Readonly<Record<string, FieldTypeInfo>> {\n const [first, ...rest] = shapes;\n if (!first) {\n return Object.freeze({});\n }\n\n const keys = Object.keys(first).filter((key) =>\n rest.every((shape) => key in shape),\n );\n\n const entries = keys\n .map((key) => {\n const infos = shapes.map((shape) => shape[key]!);\n const merged = mergeFieldTypeInfos(infos);\n if (!merged) {\n return;\n }\n return [key, merged] as const;\n })\n .filter(\n (entry): entry is readonly [string, FieldTypeInfo] => entry !== undefined,\n );\n\n return Object.freeze(Object.fromEntries(entries));\n}\n\nfunction unwrapSearchableStringSchema(\n schema: z.ZodType,\n): z.ZodType | undefined {\n const type = schema.type;\n const def = schema.def as {\n innerType?: z.ZodType;\n in?: z.ZodType;\n out?: z.ZodType;\n };\n\n if (\n (type === \"optional\" ||\n type === \"nullable\" ||\n type === \"default\" ||\n type === \"prefault\" ||\n type === \"catch\" ||\n type === \"readonly\" ||\n type === \"nonoptional\" ||\n type === \"success\") &&\n def.innerType\n ) {\n return unwrapSearchableStringSchema(def.innerType);\n }\n\n if (type === \"pipe\") {\n return (\n (def.in === undefined ?\n undefined\n : unwrapSearchableStringSchema(def.in)) ??\n (def.out === undefined ?\n undefined\n : unwrapSearchableStringSchema(def.out))\n );\n }\n\n const unwrapped = unwrapSchema(schema);\n return unwrapped.type === \"string\" ? unwrapped : undefined;\n}\n\nfunction unwrapSchema(schema: z.ZodType): z.ZodType {\n const type = schema.type;\n const def = schema.def as {\n innerType?: z.ZodType;\n out?: z.ZodType;\n };\n\n if (\n (type === \"optional\" ||\n type === \"nullable\" ||\n type === \"default\" ||\n type === \"prefault\" ||\n type === \"catch\" ||\n type === \"readonly\" ||\n type === \"nonoptional\" ||\n type === \"success\") &&\n def.innerType\n ) {\n return unwrapSchema(def.innerType);\n }\n\n if (type === \"pipe\" && def.out) {\n return unwrapSchema(def.out);\n }\n\n return schema;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/query/schema-introspector.ts"],"names":["getEmbeddingDimensions","getSearchableMetadata","shape"],"mappings":"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","file":"chunk-UMDVATGY.cjs","sourcesContent":["import { type z } from \"zod\";\n\nimport { getEmbeddingDimensions } from \"../core/embedding\";\nimport {\n getSearchableMetadata,\n type SearchableMetadata,\n} from \"../core/searchable\";\nimport { type ValueType } from \"./ast\";\n\nconst SUPPORTED_SCHEMA_TYPES = [\n \"string\",\n \"number\",\n \"nan\",\n \"boolean\",\n \"date\",\n \"literal\",\n \"enum\",\n \"nativeEnum\",\n \"array\",\n \"tuple\",\n \"object\",\n \"record\",\n \"union\",\n \"discriminatedUnion\",\n \"intersection\",\n] as const;\n\ntype SupportedSchemaType = (typeof SUPPORTED_SCHEMA_TYPES)[number];\n\n// Use Set<string> to allow checking arbitrary strings while maintaining type safety\nconst SUPPORTED_SCHEMA_TYPE_SET: ReadonlySet<string> = new Set(\n SUPPORTED_SCHEMA_TYPES,\n);\n\nfunction isSupportedSchemaType(type: string): type is SupportedSchemaType {\n return SUPPORTED_SCHEMA_TYPE_SET.has(type);\n}\n\nexport type FieldTypeInfo = Readonly<{\n valueType: ValueType;\n elementType?: ValueType | undefined;\n elementTypeInfo?: FieldTypeInfo | undefined;\n shape?: Readonly<Record<string, FieldTypeInfo>> | undefined;\n recordValueType?: FieldTypeInfo | undefined;\n /** For embedding types: the number of dimensions */\n dimensions?: number | undefined;\n /** For fulltext-searchable string types: field-level metadata */\n searchable?: SearchableMetadata | undefined;\n}>;\n\nexport type SchemaIntrospector = Readonly<{\n getFieldTypeInfo: (\n kindName: string,\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n getSharedFieldTypeInfo: (\n kindNames: readonly string[],\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n getEdgeFieldTypeInfo: (\n edgeKindName: string,\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n getSharedEdgeFieldTypeInfo: (\n edgeKindNames: readonly string[],\n fieldName: string,\n ) => FieldTypeInfo | undefined;\n /**\n * True iff every kind in `kindNames` has at least one `searchable()`\n * field. For polymorphic aliases, `$fulltext` is available only when\n * every resolved kind has searchable content — otherwise `.matches()`\n * would silently miss some kinds.\n */\n hasSearchableField: (kindNames: readonly string[]) => boolean;\n}>;\n\nfunction sharedCacheKey(\n kindNames: readonly string[],\n fieldName: string,\n): string {\n return `${[...kindNames].toSorted().join(\"|\")}|${fieldName}`;\n}\n\nexport function createSchemaIntrospector(\n nodeKinds: ReadonlyMap<string, { schema: z.ZodType }>,\n edgeKinds?: ReadonlyMap<string, { schema: z.ZodType }>,\n): SchemaIntrospector {\n const nodeShapeCache = new Map<\n string,\n Readonly<Record<string, FieldTypeInfo>>\n >();\n const edgeShapeCache = new Map<\n string,\n Readonly<Record<string, FieldTypeInfo>>\n >();\n // Proxy-based field accessors trigger a fresh merge on every property\n // read during a `whereNode(n => ...)` callback. For polymorphic\n // aliases with N kinds and M field accesses, that is O(N*M) per\n // compile; caching collapses it to O(1) after the first access.\n const sharedFieldTypeInfoCache = new Map<string, FieldTypeInfo | undefined>();\n const sharedEdgeFieldTypeInfoCache = new Map<\n string,\n FieldTypeInfo | undefined\n >();\n const searchableCache = new Map<string, boolean>();\n\n function getFieldTypeInfo(\n kindName: string,\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const shape = getShapeForKind(kindName);\n return shape?.[fieldName];\n }\n\n function getSharedFieldTypeInfo(\n kindNames: readonly string[],\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const cacheKey = sharedCacheKey(kindNames, fieldName);\n if (sharedFieldTypeInfoCache.has(cacheKey)) {\n return sharedFieldTypeInfoCache.get(cacheKey);\n }\n\n const infos = kindNames\n .map((kindName) => getFieldTypeInfo(kindName, fieldName))\n .filter((info): info is FieldTypeInfo => info !== undefined);\n\n const merged =\n infos.length !== kindNames.length || infos.length === 0 ?\n undefined\n : mergeFieldTypeInfos(infos);\n sharedFieldTypeInfoCache.set(cacheKey, merged);\n return merged;\n }\n\n function getEdgeFieldTypeInfo(\n edgeKindName: string,\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const shape = getShapeForEdgeKind(edgeKindName);\n return shape?.[fieldName];\n }\n\n function getSharedEdgeFieldTypeInfo(\n edgeKindNames: readonly string[],\n fieldName: string,\n ): FieldTypeInfo | undefined {\n const cacheKey = sharedCacheKey(edgeKindNames, fieldName);\n if (sharedEdgeFieldTypeInfoCache.has(cacheKey)) {\n return sharedEdgeFieldTypeInfoCache.get(cacheKey);\n }\n\n const infos = edgeKindNames\n .map((kindName) => getEdgeFieldTypeInfo(kindName, fieldName))\n .filter((info): info is FieldTypeInfo => info !== undefined);\n\n const merged =\n infos.length !== edgeKindNames.length || infos.length === 0 ?\n undefined\n : mergeFieldTypeInfos(infos);\n sharedEdgeFieldTypeInfoCache.set(cacheKey, merged);\n return merged;\n }\n\n function getShapeForKind(\n kindName: string,\n ): Readonly<Record<string, FieldTypeInfo>> | undefined {\n const cached = nodeShapeCache.get(kindName);\n if (cached) {\n return cached;\n }\n\n const kind = nodeKinds.get(kindName);\n if (!kind) {\n return undefined;\n }\n\n const schema = kind.schema;\n if (schema.type !== \"object\") {\n return undefined;\n }\n\n const shape = (schema.def as { shape?: Record<string, z.ZodType> }).shape;\n if (!shape) {\n return undefined;\n }\n\n const entries = Object.entries(shape).map(\n ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n );\n const resolved = Object.freeze(Object.fromEntries(entries));\n nodeShapeCache.set(kindName, resolved);\n return resolved;\n }\n\n function getShapeForEdgeKind(\n edgeKindName: string,\n ): Readonly<Record<string, FieldTypeInfo>> | undefined {\n if (!edgeKinds) {\n return undefined;\n }\n\n const cached = edgeShapeCache.get(edgeKindName);\n if (cached) {\n return cached;\n }\n\n const kind = edgeKinds.get(edgeKindName);\n if (!kind) {\n return undefined;\n }\n\n const schema = kind.schema;\n if (schema.type !== \"object\") {\n return undefined;\n }\n\n const shape = (schema.def as { shape?: Record<string, z.ZodType> }).shape;\n if (!shape) {\n return undefined;\n }\n\n const entries = Object.entries(shape).map(\n ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n );\n const resolved = Object.freeze(Object.fromEntries(entries));\n edgeShapeCache.set(edgeKindName, resolved);\n return resolved;\n }\n\n function hasSearchableField(kindNames: readonly string[]): boolean {\n const cacheKey = [...kindNames].toSorted().join(\"|\");\n const cached = searchableCache.get(cacheKey);\n if (cached !== undefined) return cached;\n\n const result =\n kindNames.length > 0 &&\n kindNames.every((kindName) => {\n const shape = getShapeForKind(kindName);\n if (!shape) return false;\n return Object.values(shape).some(\n (info) => info.searchable !== undefined,\n );\n });\n searchableCache.set(cacheKey, result);\n return result;\n }\n\n return {\n getFieldTypeInfo,\n getSharedFieldTypeInfo,\n getEdgeFieldTypeInfo,\n getSharedEdgeFieldTypeInfo,\n hasSearchableField,\n };\n}\n\nfunction resolveFieldTypeInfo(schema: z.ZodType): FieldTypeInfo {\n // Check for embedding type before unwrapping\n // (embedding metadata is attached to the outer schema)\n const embeddingDimensions = getEmbeddingDimensions(schema);\n if (embeddingDimensions !== undefined) {\n return { valueType: \"embedding\", dimensions: embeddingDimensions };\n }\n\n const searchableMetadata = getSearchableMetadata(schema);\n const searchableStringSchema =\n searchableMetadata === undefined ? undefined : (\n unwrapSearchableStringSchema(schema)\n );\n if (\n searchableMetadata !== undefined &&\n searchableStringSchema !== undefined\n ) {\n return { valueType: \"string\", searchable: searchableMetadata };\n }\n\n const unwrapped = unwrapSchema(schema);\n\n // Check embedding on unwrapped schema too (for z.optional(embedding(...)))\n const unwrappedEmbeddingDimensions = getEmbeddingDimensions(unwrapped);\n if (unwrappedEmbeddingDimensions !== undefined) {\n return { valueType: \"embedding\", dimensions: unwrappedEmbeddingDimensions };\n }\n\n // Cast to string to detach from Zod's internal type union,\n // then let the type guard narrow to our SupportedSchemaType.\n const rawType = unwrapped.type as string;\n\n if (!isSupportedSchemaType(rawType)) {\n return { valueType: \"unknown\" };\n }\n\n // After the type guard, rawType is SupportedSchemaType.\n const schemaType = rawType;\n\n // Handle each schema type individually\n if (schemaType === \"string\") {\n return { valueType: \"string\" };\n }\n if (schemaType === \"number\" || schemaType === \"nan\") {\n return { valueType: \"number\" };\n }\n if (schemaType === \"boolean\") {\n return { valueType: \"boolean\" };\n }\n if (schemaType === \"date\") {\n return { valueType: \"date\" };\n }\n if (schemaType === \"literal\") {\n const literalValue = (unwrapped.def as { value?: unknown }).value;\n return resolveLiteralTypeInfo(literalValue);\n }\n if (schemaType === \"enum\") {\n return { valueType: \"string\" };\n }\n if (schemaType === \"nativeEnum\") {\n const values = Object.values(\n (unwrapped.def as { values?: Record<string, unknown> }).values ?? {},\n );\n const valueType = resolveEnumValueType(values);\n return { valueType };\n }\n if (schemaType === \"array\") {\n const elementSchema = (unwrapped.def as { element?: z.ZodType }).element;\n const elementInfo =\n elementSchema ? resolveFieldTypeInfo(elementSchema) : undefined;\n return {\n valueType: \"array\",\n elementType: elementInfo?.valueType,\n elementTypeInfo: elementInfo,\n };\n }\n if (schemaType === \"tuple\") {\n return {\n valueType: \"array\",\n elementType: \"unknown\",\n };\n }\n if (schemaType === \"object\") {\n const shape = (unwrapped.def as { shape?: Record<string, z.ZodType> })\n .shape;\n if (!shape) {\n return { valueType: \"object\" };\n }\n const entries = Object.entries(shape).map(\n ([key, value]) => [key, resolveFieldTypeInfo(value)] as const,\n );\n const resolved = Object.freeze(Object.fromEntries(entries));\n return {\n valueType: \"object\",\n shape: resolved,\n };\n }\n if (schemaType === \"record\") {\n const valueSchema = (unwrapped.def as { valueType?: z.ZodType }).valueType;\n const valueInfo =\n valueSchema ? resolveFieldTypeInfo(valueSchema) : undefined;\n return {\n valueType: \"object\",\n recordValueType: valueInfo,\n };\n }\n if (schemaType === \"union\" || schemaType === \"discriminatedUnion\") {\n const unionOptions = (unwrapped.def as { options?: readonly z.ZodType[] })\n .options;\n if (!unionOptions || unionOptions.length === 0) {\n return { valueType: \"unknown\" };\n }\n const optionInfos = unionOptions.map((option) =>\n resolveFieldTypeInfo(option),\n );\n return mergeFieldTypeInfos(optionInfos) ?? { valueType: \"unknown\" };\n }\n\n // Only \"intersection\" remains after all other cases\n const left = (unwrapped.def as { left?: z.ZodType }).left;\n const right = (unwrapped.def as { right?: z.ZodType }).right;\n if (!left || !right) {\n return { valueType: \"unknown\" };\n }\n const leftInfo = resolveFieldTypeInfo(left);\n const rightInfo = resolveFieldTypeInfo(right);\n return mergeFieldTypeInfos([leftInfo, rightInfo]) ?? { valueType: \"unknown\" };\n}\n\nfunction resolveLiteralTypeInfo(value: unknown): FieldTypeInfo {\n if (value instanceof Date) {\n return { valueType: \"date\" };\n }\n if (typeof value === \"string\") {\n return { valueType: \"string\" };\n }\n if (typeof value === \"number\") {\n return { valueType: \"number\" };\n }\n if (typeof value === \"boolean\") {\n return { valueType: \"boolean\" };\n }\n return { valueType: \"unknown\" };\n}\n\nfunction resolveEnumValueType(values: readonly unknown[]): ValueType {\n const uniqueTypes = new Set(values.map((value) => typeof value));\n if (uniqueTypes.size !== 1) {\n return \"unknown\";\n }\n\n const type = uniqueTypes.values().next().value;\n if (type === \"string\") {\n return \"string\";\n }\n if (type === \"number\") {\n return \"number\";\n }\n if (type === \"boolean\") {\n return \"boolean\";\n }\n return \"unknown\";\n}\n\nfunction mergeFieldTypeInfos(\n infos: readonly FieldTypeInfo[],\n): FieldTypeInfo | undefined {\n const [first, ...rest] = infos;\n if (!first) {\n return undefined;\n }\n\n const sameValueType = rest.every(\n (info) => info.valueType === first.valueType,\n );\n if (!sameValueType) {\n return undefined;\n }\n\n if (first.valueType === \"array\") {\n const elementType =\n rest.every((info) => info.elementType === first.elementType) ?\n first.elementType\n : \"unknown\";\n const elementTypeInfo =\n (\n rest.every(\n (info) =>\n info.elementTypeInfo?.valueType ===\n first.elementTypeInfo?.valueType,\n )\n ) ?\n first.elementTypeInfo\n : undefined;\n return {\n valueType: \"array\",\n elementType,\n elementTypeInfo,\n };\n }\n\n if (first.valueType === \"object\") {\n const shapes = infos\n .map((info) => info.shape)\n .filter(\n (shape): shape is Readonly<Record<string, FieldTypeInfo>> =>\n shape !== undefined,\n );\n\n const shape =\n shapes.length === infos.length ? intersectShapes(shapes) : undefined;\n\n const recordValueType =\n (\n rest.every(\n (info) =>\n info.recordValueType?.valueType ===\n first.recordValueType?.valueType,\n )\n ) ?\n first.recordValueType\n : undefined;\n\n return {\n valueType: \"object\",\n shape,\n recordValueType,\n };\n }\n\n // Strings: only mark the merged result as searchable if every kind\n // in the polymorphic alias declares the field as searchable. A field\n // that isn't uniformly searchable would silently search only some\n // kinds via `.matches()`.\n if (first.valueType === \"string\") {\n const allSearchable =\n first.searchable !== undefined &&\n rest.every((info) => info.searchable !== undefined);\n return allSearchable ?\n { valueType: \"string\", searchable: first.searchable }\n : { valueType: \"string\" };\n }\n\n return first;\n}\n\nfunction intersectShapes(\n shapes: readonly Readonly<Record<string, FieldTypeInfo>>[],\n): Readonly<Record<string, FieldTypeInfo>> {\n const [first, ...rest] = shapes;\n if (!first) {\n return Object.freeze({});\n }\n\n const keys = Object.keys(first).filter((key) =>\n rest.every((shape) => key in shape),\n );\n\n const entries = keys\n .map((key) => {\n const infos = shapes.map((shape) => shape[key]!);\n const merged = mergeFieldTypeInfos(infos);\n if (!merged) {\n return;\n }\n return [key, merged] as const;\n })\n .filter(\n (entry): entry is readonly [string, FieldTypeInfo] => entry !== undefined,\n );\n\n return Object.freeze(Object.fromEntries(entries));\n}\n\nfunction unwrapSearchableStringSchema(\n schema: z.ZodType,\n): z.ZodType | undefined {\n const type = schema.type;\n const def = schema.def as {\n innerType?: z.ZodType;\n in?: z.ZodType;\n out?: z.ZodType;\n };\n\n if (\n (type === \"optional\" ||\n type === \"nullable\" ||\n type === \"default\" ||\n type === \"prefault\" ||\n type === \"catch\" ||\n type === \"readonly\" ||\n type === \"nonoptional\" ||\n type === \"success\") &&\n def.innerType\n ) {\n return unwrapSearchableStringSchema(def.innerType);\n }\n\n if (type === \"pipe\") {\n return (\n (def.in === undefined ?\n undefined\n : unwrapSearchableStringSchema(def.in)) ??\n (def.out === undefined ?\n undefined\n : unwrapSearchableStringSchema(def.out))\n );\n }\n\n const unwrapped = unwrapSchema(schema);\n return unwrapped.type === \"string\" ? unwrapped : undefined;\n}\n\nfunction unwrapSchema(schema: z.ZodType): z.ZodType {\n const type = schema.type;\n const def = schema.def as {\n innerType?: z.ZodType;\n out?: z.ZodType;\n };\n\n if (\n (type === \"optional\" ||\n type === \"nullable\" ||\n type === \"default\" ||\n type === \"prefault\" ||\n type === \"catch\" ||\n type === \"readonly\" ||\n type === \"nonoptional\" ||\n type === \"success\") &&\n def.innerType\n ) {\n return unwrapSchema(def.innerType);\n }\n\n if (type === \"pipe\" && def.out) {\n return unwrapSchema(def.out);\n }\n\n return schema;\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// src/query/sql-intent.ts
|
|
2
|
+
function asCompiledRowsSql(query) {
|
|
3
|
+
return query;
|
|
4
|
+
}
|
|
5
|
+
function asCompiledSelectSql(query) {
|
|
6
|
+
return asCompiledRowsSql(query);
|
|
7
|
+
}
|
|
8
|
+
function asCompiledStatementSql(query) {
|
|
9
|
+
return query;
|
|
10
|
+
}
|
|
11
|
+
var forceCustomPlanQueries = /* @__PURE__ */ new WeakSet();
|
|
12
|
+
function markForceCustomPlan(query) {
|
|
13
|
+
forceCustomPlanQueries.add(query);
|
|
14
|
+
}
|
|
15
|
+
function shouldForceCustomPlan(query) {
|
|
16
|
+
return forceCustomPlanQueries.has(query);
|
|
17
|
+
}
|
|
18
|
+
var annIndexScanQueries = /* @__PURE__ */ new WeakMap();
|
|
19
|
+
function markAnnIndexScan(query, indexTypes) {
|
|
20
|
+
annIndexScanQueries.set(query, indexTypes);
|
|
21
|
+
}
|
|
22
|
+
function annIndexScanTypes(query) {
|
|
23
|
+
return annIndexScanQueries.get(query);
|
|
24
|
+
}
|
|
25
|
+
function isRawExecutable(query) {
|
|
26
|
+
return !shouldForceCustomPlan(query) && annIndexScanTypes(query) === void 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { annIndexScanTypes, asCompiledRowsSql, asCompiledSelectSql, asCompiledStatementSql, isRawExecutable, markAnnIndexScan, markForceCustomPlan, shouldForceCustomPlan };
|
|
30
|
+
//# sourceMappingURL=chunk-UT3S4SEN.js.map
|
|
31
|
+
//# sourceMappingURL=chunk-UT3S4SEN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/query/sql-intent.ts"],"names":[],"mappings":";AAaO,SAAS,kBAAkB,KAAA,EAA6B;AAC7D,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,oBAAoB,KAAA,EAA+B;AACjE,EAAA,OAAO,kBAAkB,KAAK,CAAA;AAChC;AAEO,SAAS,uBAAuB,KAAA,EAAkC;AACvE,EAAA,OAAO,KAAA;AACT;AAYA,IAAM,sBAAA,uBAA6B,OAAA,EAAa;AAEzC,SAAS,oBAAoB,KAAA,EAAkB;AACpD,EAAA,sBAAA,CAAuB,IAAI,KAAK,CAAA;AAClC;AAEO,SAAS,sBAAsB,KAAA,EAAqB;AACzD,EAAA,OAAO,sBAAA,CAAuB,IAAI,KAAK,CAAA;AACzC;AAaA,IAAM,mBAAA,uBAA0B,OAAA,EAAgC;AAEzD,SAAS,gBAAA,CACd,OACA,UAAA,EACM;AACN,EAAA,mBAAA,CAAoB,GAAA,CAAI,OAAO,UAAU,CAAA;AAC3C;AAEO,SAAS,kBAAkB,KAAA,EAA2C;AAC3E,EAAA,OAAO,mBAAA,CAAoB,IAAI,KAAK,CAAA;AACtC;AAYO,SAAS,gBAAgB,KAAA,EAAqB;AACnD,EAAA,OACE,CAAC,qBAAA,CAAsB,KAAK,CAAA,IAAK,iBAAA,CAAkB,KAAK,CAAA,KAAM,MAAA;AAElE","file":"chunk-UT3S4SEN.js","sourcesContent":["import { type SQL } from \"drizzle-orm\";\n\ndeclare const SqlIntentBrand: unique symbol;\n\nexport type SqlIntent = \"rows\" | \"statement\";\n\nexport type IntentSql<I extends SqlIntent> = SQL &\n Readonly<{ [SqlIntentBrand]: I }>;\n\nexport type CompiledRowsSql = IntentSql<\"rows\">;\nexport type CompiledSelectSql = CompiledRowsSql;\nexport type CompiledStatementSql = IntentSql<\"statement\">;\n\nexport function asCompiledRowsSql(query: SQL): CompiledRowsSql {\n return query as CompiledRowsSql;\n}\n\nexport function asCompiledSelectSql(query: SQL): CompiledSelectSql {\n return asCompiledRowsSql(query);\n}\n\nexport function asCompiledStatementSql(query: SQL): CompiledStatementSql {\n return query as CompiledStatementSql;\n}\n\n/**\n * Statements whose good plan depends on the bound parameter values —\n * e.g. an id-array membership filter where the array cardinality varies\n * per call. PostgreSQL's prepared-statement machinery switches to a\n * generic (parameter-blind) plan after five executions, which for these\n * statements is catastrophically wrong (measured 21ms -> 310ms on the\n * subgraph edge fetch). Marked statements are executed unnamed so every\n * call is planned against the actual parameters; the re-parse cost is\n * ~1ms, the generic-plan cliff it avoids is 10-300ms.\n */\nconst forceCustomPlanQueries = new WeakSet<SQL>();\n\nexport function markForceCustomPlan(query: SQL): void {\n forceCustomPlanQueries.add(query);\n}\n\nexport function shouldForceCustomPlan(query: SQL): boolean {\n return forceCustomPlanQueries.has(query);\n}\n\n/**\n * Statements whose plan includes an engine ANN index scan (the inline\n * `.similarTo(..., { approximate: true })` branch). The PostgreSQL\n * backend wraps their execution with the same pgvector GUC overrides\n * the search facade applies (`hnsw.iterative_scan = strict_order` /\n * `ivfflat.iterative_scan = relaxed_order` on pgvector >= 0.8), so a\n * filtered approximate query keeps scanning past the default ef_search\n * frontier instead of starving. Carries the slot index types so the\n * backend knows which GUCs apply. Backends without GUC semantics\n * ignore the brand.\n */\nconst annIndexScanQueries = new WeakMap<SQL, readonly string[]>();\n\nexport function markAnnIndexScan(\n query: SQL,\n indexTypes: readonly string[],\n): void {\n annIndexScanQueries.set(query, indexTypes);\n}\n\nexport function annIndexScanTypes(query: SQL): readonly string[] | undefined {\n return annIndexScanQueries.get(query);\n}\n\n/**\n * Whether a compiled statement can be run as raw text (`executeRaw`) without\n * losing execution semantics. Both brands above ride on the SQL *object* and\n * are honored only by `backend.execute`: the force-custom-plan flag makes\n * PostgreSQL re-plan against the actual parameters (opposed to reusing a\n * cached statement), and the ANN-scan brand drives the pgvector iterative-scan\n * GUC wrapper. A statement carrying either must not be flattened to text and\n * cached — callers fall back to `backend.execute`. Keeping this predicate\n * beside the brands means a future brand updates one place, not every caller.\n */\nexport function isRawExecutable(query: SQL): boolean {\n return (\n !shouldForceCustomPlan(query) && annIndexScanTypes(query) === undefined\n );\n}\n"]}
|