decocms 2.311.1 → 2.311.2
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/client/assets/{AlertCircle-GVxuU95v.js → AlertCircle-DZ5eg3QE.js} +1 -1
- package/dist/client/assets/{ArrowNarrowLeft-CZSxj8rY.js → ArrowNarrowLeft-1yI5FVCq.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-C9_9n6RS.js → ArrowUpRight-BHidxwxm.js} +1 -1
- package/dist/client/assets/{Check-B7RZVj2P.js → Check-Dw0791ut.js} +1 -1
- package/dist/client/assets/{CheckCircle-CpSCTcKF.js → CheckCircle-BpVjAVGG.js} +1 -1
- package/dist/client/assets/{ChevronDown-PN1FfGGP.js → ChevronDown-C4G6jLVm.js} +1 -1
- package/dist/client/assets/{ChevronRight-B87-4gCD.js → ChevronRight-L-rlViOq.js} +1 -1
- package/dist/client/assets/{ChevronUp-DXZ6bMcP.js → ChevronUp-4oGwYYrV.js} +1 -1
- package/dist/client/assets/{Container-Bn1bP0Yi.js → Container-1OJhud4n.js} +1 -1
- package/dist/client/assets/{DotsVertical-0NEZeBK_.js → DotsVertical-CRhKzL3Z.js} +1 -1
- package/dist/client/assets/{LinkExternal01-Cl6M9_6y.js → LinkExternal01-CT0C3v5M.js} +1 -1
- package/dist/client/assets/{Lock01-BNDVtNp3.js → Lock01-NALqVAd4.js} +1 -1
- package/dist/client/assets/{Palette-BgYWS9GS.js → Palette-B49S2k5j.js} +1 -1
- package/dist/client/assets/{Play-jAQMD8Zy.js → Play-D2-YC-0X.js} +1 -1
- package/dist/client/assets/{Plus-Decn041v.js → Plus-BwRT24yO.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-2tEGwXNO.js → RefreshCcw01-BJA8p2-V.js} +1 -1
- package/dist/client/assets/{SearchMd-xzJx66s8.js → SearchMd-8EQr6MDa.js} +1 -1
- package/dist/client/assets/{Settings02-I39qsUEU.js → Settings02-BR7-LgkT.js} +1 -1
- package/dist/client/assets/{Shield01-DJsSZNak.js → Shield01-CmUy76z8.js} +1 -1
- package/dist/client/assets/{Star01-VbAdZ1nM.js → Star01-CrZZMK_h.js} +1 -1
- package/dist/client/assets/{Sun-qACU13Q-.js → Sun-BrBo82rN.js} +1 -1
- package/dist/client/assets/{Tool01-BqlBf1k7.js → Tool01-CnVLW8Ff.js} +1 -1
- package/dist/client/assets/{Trash01-BqSCZqrj.js → Trash01-CqcArs7X.js} +1 -1
- package/dist/client/assets/{User01-w8zyOHhj.js → User01-CBWDKiqM.js} +1 -1
- package/dist/client/assets/{Users03-n9zzJAad.js → Users03-lMWEL75e.js} +1 -1
- package/dist/client/assets/{X-Cwv9W6IH.js → X-Bgn4m6iE.js} +1 -1
- package/dist/client/assets/{XCircle-VMAL-xhy.js → XCircle-C7dtAhFo.js} +1 -1
- package/dist/client/assets/{XClose-GzEq-HU9.js → XClose-DAS6g7IB.js} +1 -1
- package/dist/client/assets/{Zap-D93qKeqm.js → Zap-D4YLhHLH.js} +1 -1
- package/dist/client/assets/{ZapSquare-CGJC1mww.js → ZapSquare-DW8WgORO.js} +1 -1
- package/dist/client/assets/{accordion-ZNyW-Q9t.js → accordion-w2pr29VL.js} +1 -1
- package/dist/client/assets/{agent-icon-zc2fqM1k.js → agent-icon-CoSygmB4.js} +1 -1
- package/dist/client/assets/{agents-list-UtLvJq-k.js → agents-list-BmcHuxVe.js} +1 -1
- package/dist/client/assets/ai-providers-wvV25hLp.js +1 -0
- package/dist/client/assets/{alert-dialog-7vNv5N4P.js → alert-dialog-j_H6Duj2.js} +1 -1
- package/dist/client/assets/{auth-catchall-DnPh1GEo.js → auth-catchall-g0qxiTpM.js} +1 -1
- package/dist/client/assets/{automation-list-row-Cu-q04m4.js → automation-list-row-BwSlxsKi.js} +1 -1
- package/dist/client/assets/{automations-CU2EtM_4.js → automations-CZKFrDcG.js} +1 -1
- package/dist/client/assets/{avatar-Dda8SxzC.js → avatar-DH5nI_or.js} +1 -1
- package/dist/client/assets/{badge-C_Ey5yTa.js → badge-BITu5EVC.js} +1 -1
- package/dist/client/assets/{brand-context-pyqxXmJT.js → brand-context-6Yt9jzFn.js} +1 -1
- package/dist/client/assets/{card-BqDVz8rB.js → card-En6r2E_A.js} +1 -1
- package/dist/client/assets/{chat-context-B6Fg09sU.js → chat-context-CdP_0Ara.js} +1 -1
- package/dist/client/assets/{checkbox-CwdZbdGd.js → checkbox-DfdgwpYz.js} +1 -1
- package/dist/client/assets/{collection-detail-WOE1iHbK.js → collection-detail-Cq2qud8Y.js} +1 -1
- package/dist/client/assets/{collection-display-button-QyBcFXO8.js → collection-display-button-C9fQJGtX.js} +1 -1
- package/dist/client/assets/{collection-search-FuJrX0DL.js → collection-search-DFFtMlUb.js} +1 -1
- package/dist/client/assets/{collection-search-BPpIzKqG.js → collection-search-LW_e8pOY.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-k2i9yb0q.js → collection-table-wrapper-B2VGx1DA.js} +1 -1
- package/dist/client/assets/{collection-tabs-Bbxi3Lhu.js → collection-tabs-ie4BgKCV.js} +1 -1
- package/dist/client/assets/{collections-BXMI7Hvf.js → collections-D8nUEds8.js} +1 -1
- package/dist/client/assets/{command-CcKs3phr.js → command-BXrAL_Fp.js} +1 -1
- package/dist/client/assets/{connection-card-C9ObrVFa.js → connection-card-B3usJZNT.js} +1 -1
- package/dist/client/assets/{connection-detail-DXmyznni.js → connection-detail-BLvhyH8Y.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CLWU-iGL.js → connection-form-helpers-DJ9jYCyJ.js} +1 -1
- package/dist/client/assets/{connections-EFejJy4T.js → connections-JJSt3920.js} +1 -1
- package/dist/client/assets/{constants-DNYERMOq.js → constants-C_0Pvn36.js} +1 -1
- package/dist/client/assets/{constants-Bad0DdgK.js → constants-xCxa-gM5.js} +1 -1
- package/dist/client/assets/{dialog-BcmogFZk.js → dialog-CQJ1jbHU.js} +1 -1
- package/dist/client/assets/{domain-settings-QGlFO294.js → domain-settings-KzIawZDz.js} +1 -1
- package/dist/client/assets/{drawer-CFDUaOVL.js → drawer-CRXUsV25.js} +1 -1
- package/dist/client/assets/{dropdown-menu-NvUf9a-j.js → dropdown-menu-B0p6J489.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-CNm9aSBE.js → dynamic-plugin-layout-hX-cElnB.js} +1 -1
- package/dist/client/assets/{empty-state-Dg7DOfxH.js → empty-state-CTTNNvC-.js} +1 -1
- package/dist/client/assets/{empty-state-CYPi3AWF.js → empty-state-DiIlkZVx.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Crk93y-a.js → extract-connection-data-D5DCgJwZ.js} +1 -1
- package/dist/client/assets/{features-c-yBM4_h.js → features-CcS8M1BD.js} +1 -1
- package/dist/client/assets/{form-BbDiaTsN.js → form-D0XM9Oz-.js} +1 -1
- package/dist/client/assets/{general-BxBx3E8g.js → general-Ci0gKW7e.js} +1 -1
- package/dist/client/assets/{index-D-aGIpWM.js → index-08_qSeNu.js} +1 -1
- package/dist/client/assets/{index-DDUZQ_xH.js → index-8ASwCWdl.js} +1 -1
- package/dist/client/assets/{index-C3btaY0r.js → index-B2YlGv2D.js} +1 -1
- package/dist/client/assets/{index-D5c2Coqp.js → index-BbCoi7Kc.js} +3 -3
- package/dist/client/assets/{index-D3w8D7D3.js → index-BkAVJvYj.js} +1 -1
- package/dist/client/assets/{index-bUNQ5NEg.js → index-BuupSAqF.js} +1 -1
- package/dist/client/assets/{index-CvwiLDhg.js → index-Bzm-pgKW.js} +1 -1
- package/dist/client/assets/{index-Dl4CZy6K.js → index-Ce3hTrjw.js} +1 -1
- package/dist/client/assets/{index-BEwswwod.js → index-CtORjixM.js} +1 -1
- package/dist/client/assets/{index-Bom1zwxj.js → index-DN5Efs9x.js} +1 -1
- package/dist/client/assets/{index-rnnpRGp3.js → index-DvT00rVT.js} +1 -1
- package/dist/client/assets/{index-DmMHdsYF.js → index-Kg1PzPFs.js} +1 -1
- package/dist/client/assets/{index--qrsfEvC.js → index-N3u8642D.js} +1 -1
- package/dist/client/assets/{index-BVe-IL8_.js → index-TmBzv9_n.js} +1 -1
- package/dist/client/assets/{index-B3GjV7OW.js → index-XtKSdEVT.js} +2 -2
- package/dist/client/assets/{index-CLSBe_a4.js → index-gf-c6sSg.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-RMKX6Nq0.js → infiniteQueryObserver-CGPZBNLK.js} +1 -1
- package/dist/client/assets/{input-bkK8ZE7l.js → input-CA3wFziO.js} +1 -1
- package/dist/client/assets/{integration-icon-dKiJ5-c6.js → integration-icon-DB1BI0re.js} +1 -1
- package/dist/client/assets/{label-DTMz5O44.js → label-CsQ7X2nY.js} +1 -1
- package/dist/client/assets/{layout-LMk5O_ZK.js → layout-_eILQ4qX.js} +1 -1
- package/dist/client/assets/{lean-canvas-recruit-modal-BAnvgszw.js → lean-canvas-recruit-modal-DS3BEBlK.js} +1 -1
- package/dist/client/assets/{login-DL4UCCOO.js → login-BlD2FW6R.js} +1 -1
- package/dist/client/assets/{members-xgiddo21.js → members-CWZmvp91.js} +1 -1
- package/dist/client/assets/{monaco-editor-C2N0lO8-.js → monaco-editor-CoS3uflL.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-B1WEuAdI.js → monitoring-stats-row-CViWaRD_.js} +1 -1
- package/dist/client/assets/{oauth-callback-CEDkVwJ-.js → oauth-callback-CU5hLq_2.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Dg9MI2Au.js → oauth-callback-ai-provider-BeHCFfTz.js} +1 -1
- package/dist/client/assets/{onboarding-DkXotH-C.js → onboarding-1sE9lrXr.js} +1 -1
- package/dist/client/assets/{org-layout-BZIyzExD.js → org-layout-DjQQV-Zl.js} +1 -1
- package/dist/client/assets/{org-plugin-layout-DMO9tynz.js → org-plugin-layout-DAhuto61.js} +1 -1
- package/dist/client/assets/{pair-Cbmyley2.js → pair-2_9kst7n.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-9QQH63Km.js → plugin-empty-state-HCn3LT7f.js} +1 -1
- package/dist/client/assets/{plugin-header-Ca6fhiCD.js → plugin-header-BURSuFWr.js} +1 -1
- package/dist/client/assets/{plugin-layout-CL9tTgtN.js → plugin-layout-D26XJiuJ.js} +1 -1
- package/dist/client/assets/{popover-a3tMurU4.js → popover-DVrNLUGd.js} +1 -1
- package/dist/client/assets/{profile-D7pjioBj.js → profile-u4Q_ge8P.js} +1 -1
- package/dist/client/assets/{project-app-view-BhV2wKdY.js → project-app-view-TR-LCEsF.js} +1 -1
- package/dist/client/assets/registry-9FuEyggS.js +2 -0
- package/dist/client/assets/{registry-layout-BaWcD2qA.js → registry-layout-CBmViIei.js} +1 -1
- package/dist/client/assets/{required-auth-layout-CnaH9rpW.js → required-auth-layout-zpm5EQiY.js} +1 -1
- package/dist/client/assets/{reset-password-vwj49aZP.js → reset-password-BBgklwFT.js} +1 -1
- package/dist/client/assets/{roles-DphWxHYt.js → roles-BFmJtd_3.js} +1 -1
- package/dist/client/assets/{scroll-area-DqbokeCV.js → scroll-area-CTB7VMjJ.js} +1 -1
- package/dist/client/assets/{search-input-DAsaTE5l.js → search-input-CDZEhQeH.js} +1 -1
- package/dist/client/assets/{select-Dli7sWvO.js → select-Ck5CQAzm.js} +1 -1
- package/dist/client/assets/{select-model-BaOTlcuq.js → select-model-WqEqjF0n.js} +1 -1
- package/dist/client/assets/{settings-layout-CjXYIm0R.js → settings-layout-OR4Oj5Bz.js} +1 -1
- package/dist/client/assets/{settings-section-DBJaYBiY.js → settings-section-hGFEsbcg.js} +1 -1
- package/dist/client/assets/{shell-layout-BMRtkmni.js → shell-layout-DgbQScgJ.js} +1 -1
- package/dist/client/assets/{skeleton-H0I9mnBy.js → skeleton-15S9YHo5.js} +1 -1
- package/dist/client/assets/{sso-DYCaqBsm.js → sso-Clf1UBGT.js} +1 -1
- package/dist/client/assets/store-registry-D1p6Sky6.js +2 -0
- package/dist/client/assets/{store-uDsU3GrB.js → store-s535k-0R.js} +1 -1
- package/dist/client/assets/{switch-BdqZBTdM.js → switch-DZpAuoR4.js} +1 -1
- package/dist/client/assets/{table-DK414n0F.js → table-Di3ejdIM.js} +1 -1
- package/dist/client/assets/{tabs-CeGpUpHP.js → tabs-CZODVyGB.js} +1 -1
- package/dist/client/assets/{task-status-CqDAnW9H.js → task-status-B-brbBsk.js} +1 -1
- package/dist/client/assets/{textarea-DYbvm35p.js → textarea-BZSNnTf-.js} +1 -1
- package/dist/client/assets/{toggle-group-DXYK5Kmg.js → toggle-group-C6O7_FmI.js} +1 -1
- package/dist/client/assets/{tools-list-DQqEXfVG.js → tools-list-E1FCeDba.js} +1 -1
- package/dist/client/assets/{tooltip-M7OSSLPB.js → tooltip-DzR2OkiC.js} +1 -1
- package/dist/client/assets/{types-aUaKAv-0.js → types-DsXhCCX5.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CmHinIUs.js → use-ai-providers-CASknL33.js} +1 -1
- package/dist/client/assets/{use-collections-Cy_Omosv.js → use-collections-Clg_Ncfr.js} +1 -1
- package/dist/client/assets/{use-connection-BTNmhjS_.js → use-connection-CN-YbXIm.js} +1 -1
- package/dist/client/assets/{use-copy-CkkAJAvS.js → use-copy-B4Vw-FGS.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BuaKZJs7.js → use-create-virtual-mcp-DDS948Ec.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-CO57B6nX.js → use-debounced-autosave-DY33egle.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CQ1IkvCh.js → use-decopilot-events-CDc7_gFj.js} +1 -1
- package/dist/client/assets/{use-delete-connection-6dZbEpz0.js → use-delete-connection-B_kG1S-Z.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-ZPBLdFp5.js → use-infinite-scroll-C65PuA8D.js} +1 -1
- package/dist/client/assets/{use-list-state-C6g9hGA4.js → use-list-state-D0QSC4li.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-BxVuuTSL.js → use-mcp-tools-P1EYh7Ne.js} +1 -1
- package/dist/client/assets/{use-members-Bi_cxyIQ.js → use-members-B8Y7w6A6.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CSPyzm0t.js → use-navigate-to-agent-CdjjjAzp.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-C0e9yR_n.js → use-org-auth-client-DgZS2gPK.js} +1 -1
- package/dist/client/assets/{use-org-sso-BBRAkASE.js → use-org-sso-DUuDwVMq.js} +1 -1
- package/dist/client/assets/{use-organization-roles-C1ELHN87.js → use-organization-roles-COI0teJ2.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DTcFJGZh.js → use-organization-settings-DFYG1X4S.js} +1 -1
- package/dist/client/assets/{use-registry-connections-BTwHNugi.js → use-registry-connections-DtGSBXyx.js} +1 -1
- package/dist/client/assets/{use-status-sounds-DtamCVeq.js → use-status-sounds-Bzo-hQFh.js} +1 -1
- package/dist/client/assets/{use-tasks-B6YSkeM5.js → use-tasks-BkEjm0jr.js} +1 -1
- package/dist/client/assets/{use-view-mode-BT7njn-W.js → use-view-mode-QyxMfzTw.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CSMhsIFC.js → use-virtual-mcp-CywGzNw_.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BnoAFbMi.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-DALOqmfR.js +1 -0
- package/dist/client/assets/{user-D3wZendk.js → user-B1nA5pjb.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DrXoiKTK.js → view-mode-toggle-Cj3KDqTE.js} +1 -1
- package/dist/client/assets/{workflow-BfcwUbw-.js → workflow-DHFQknOK.js} +1 -1
- package/dist/client/assets/workflow-detail-Dq-mKRWi.js +1 -0
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +6 -2
- package/dist/server/node_modules/ansi-styles/index.d.ts +236 -0
- package/dist/server/node_modules/ansi-styles/index.js +223 -0
- package/dist/server/node_modules/{ansi-regex → ansi-styles}/package.json +13 -20
- package/dist/server/node_modules/ansi-styles/readme.md +173 -0
- package/dist/server/node_modules/convert-to-spaces/dist/index.d.ts +2 -0
- package/dist/server/node_modules/convert-to-spaces/dist/index.js +4 -0
- package/dist/server/node_modules/convert-to-spaces/license +21 -0
- package/dist/server/node_modules/convert-to-spaces/package.json +40 -0
- package/dist/server/node_modules/convert-to-spaces/readme.md +39 -0
- package/dist/server/node_modules/environment/index.d.ts +74 -0
- package/dist/server/node_modules/environment/index.js +47 -0
- package/dist/server/node_modules/environment/package.json +74 -0
- package/dist/server/node_modules/environment/readme.md +94 -0
- package/dist/server/node_modules/escape-string-regexp/index.d.ts +18 -0
- package/dist/server/node_modules/escape-string-regexp/index.js +11 -0
- package/dist/server/node_modules/escape-string-regexp/license +9 -0
- package/dist/server/node_modules/escape-string-regexp/package.json +43 -0
- package/dist/server/node_modules/escape-string-regexp/readme.md +29 -0
- package/dist/server/node_modules/get-east-asian-width/index.d.ts +60 -0
- package/dist/server/node_modules/get-east-asian-width/index.js +30 -0
- package/dist/server/node_modules/{ink → get-east-asian-width}/license +0 -1
- package/dist/server/node_modules/get-east-asian-width/lookup-data.js +18 -0
- package/dist/server/node_modules/get-east-asian-width/lookup.js +135 -0
- package/dist/server/node_modules/get-east-asian-width/package.json +71 -0
- package/dist/server/node_modules/get-east-asian-width/readme.md +65 -0
- package/dist/server/node_modules/get-east-asian-width/utilities.js +24 -0
- package/dist/server/node_modules/is-fullwidth-code-point/index.d.ts +17 -0
- package/dist/server/node_modules/is-fullwidth-code-point/index.js +12 -0
- package/dist/server/node_modules/is-fullwidth-code-point/license +9 -0
- package/dist/server/node_modules/is-fullwidth-code-point/package.json +53 -0
- package/dist/server/node_modules/is-fullwidth-code-point/readme.md +31 -0
- package/dist/server/node_modules/is-unicode-supported/index.d.ts +12 -0
- package/dist/server/node_modules/is-unicode-supported/index.js +21 -0
- package/dist/server/node_modules/is-unicode-supported/license +9 -0
- package/dist/server/node_modules/is-unicode-supported/package.json +47 -0
- package/dist/server/node_modules/is-unicode-supported/readme.md +35 -0
- package/dist/server/node_modules/pg-cloudflare/LICENSE +21 -0
- package/dist/server/node_modules/pg-cloudflare/README.md +112 -0
- package/dist/server/node_modules/pg-cloudflare/dist/empty.d.ts +2 -0
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js +6 -0
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js.map +1 -0
- package/dist/server/node_modules/pg-cloudflare/dist/index.d.ts +31 -0
- package/dist/server/node_modules/pg-cloudflare/dist/index.js +152 -0
- package/dist/server/node_modules/pg-cloudflare/dist/index.js.map +1 -0
- package/dist/server/node_modules/pg-cloudflare/esm/index.mjs +3 -0
- package/dist/server/node_modules/pg-cloudflare/package.json +39 -0
- package/dist/server/node_modules/pg-cloudflare/src/empty.ts +3 -0
- package/dist/server/node_modules/pg-cloudflare/src/index.ts +166 -0
- package/dist/server/node_modules/pg-cloudflare/src/types.d.ts +25 -0
- package/dist/server/node_modules/pg-connection-string/LICENSE +21 -0
- package/dist/server/node_modules/pg-connection-string/README.md +105 -0
- package/dist/server/node_modules/pg-connection-string/esm/index.mjs +8 -0
- package/dist/server/node_modules/pg-connection-string/index.d.ts +36 -0
- package/dist/server/node_modules/pg-connection-string/index.js +231 -0
- package/dist/server/node_modules/pg-connection-string/package.json +52 -0
- package/dist/server/node_modules/pg-pool/LICENSE +21 -0
- package/dist/server/node_modules/pg-pool/README.md +357 -0
- package/dist/server/node_modules/pg-pool/esm/index.mjs +5 -0
- package/dist/server/node_modules/pg-pool/index.js +517 -0
- package/dist/server/node_modules/pg-pool/package.json +51 -0
- package/dist/server/node_modules/pg-protocol/LICENSE +21 -0
- package/dist/server/node_modules/pg-protocol/README.md +3 -0
- package/dist/server/node_modules/pg-protocol/dist/b.js +23 -0
- package/dist/server/node_modules/pg-protocol/dist/b.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.d.ts +15 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js +55 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.d.ts +16 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js +81 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +1 -0
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js +530 -0
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/index.d.ts +6 -0
- package/dist/server/node_modules/pg-protocol/dist/index.js +15 -0
- package/dist/server/node_modules/pg-protocol/dist/index.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/messages.d.ts +162 -0
- package/dist/server/node_modules/pg-protocol/dist/messages.js +160 -0
- package/dist/server/node_modules/pg-protocol/dist/messages.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +1 -0
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js +252 -0
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/parser.d.ts +24 -0
- package/dist/server/node_modules/pg-protocol/dist/parser.js +324 -0
- package/dist/server/node_modules/pg-protocol/dist/parser.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/serializer.d.ts +42 -0
- package/dist/server/node_modules/pg-protocol/dist/serializer.js +189 -0
- package/dist/server/node_modules/pg-protocol/dist/serializer.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/esm/index.js +11 -0
- package/dist/server/node_modules/pg-protocol/package.json +45 -0
- package/dist/server/node_modules/pg-protocol/src/b.ts +25 -0
- package/dist/server/node_modules/pg-protocol/src/buffer-reader.ts +58 -0
- package/dist/server/node_modules/pg-protocol/src/buffer-writer.ts +85 -0
- package/dist/server/node_modules/pg-protocol/src/inbound-parser.test.ts +575 -0
- package/dist/server/node_modules/pg-protocol/src/index.ts +11 -0
- package/dist/server/node_modules/pg-protocol/src/messages.ts +262 -0
- package/dist/server/node_modules/pg-protocol/src/outbound-serializer.test.ts +276 -0
- package/dist/server/node_modules/pg-protocol/src/parser.ts +413 -0
- package/dist/server/node_modules/pg-protocol/src/serializer.ts +274 -0
- package/dist/server/node_modules/pg-protocol/src/testing/buffer-list.ts +67 -0
- package/dist/server/node_modules/pg-protocol/src/testing/test-buffers.ts +166 -0
- package/dist/server/node_modules/pg-protocol/src/types/chunky.d.ts +1 -0
- package/dist/server/node_modules/pg-types/.travis.yml +7 -0
- package/dist/server/node_modules/pg-types/Makefile +14 -0
- package/dist/server/node_modules/pg-types/README.md +75 -0
- package/dist/server/node_modules/pg-types/index.d.ts +137 -0
- package/dist/server/node_modules/pg-types/index.js +47 -0
- package/dist/server/node_modules/pg-types/index.test-d.ts +21 -0
- package/dist/server/node_modules/pg-types/lib/arrayParser.js +11 -0
- package/dist/server/node_modules/pg-types/lib/binaryParsers.js +257 -0
- package/dist/server/node_modules/pg-types/lib/builtins.js +73 -0
- package/dist/server/node_modules/pg-types/lib/textParsers.js +215 -0
- package/dist/server/node_modules/pg-types/package.json +42 -0
- package/dist/server/node_modules/pg-types/test/index.js +24 -0
- package/dist/server/node_modules/pg-types/test/types.js +597 -0
- package/dist/server/node_modules/pgpass/README.md +74 -0
- package/dist/server/node_modules/pgpass/lib/helper.js +233 -0
- package/dist/server/node_modules/pgpass/lib/index.js +23 -0
- package/dist/server/node_modules/pgpass/package.json +41 -0
- package/dist/server/node_modules/restore-cursor/index.d.ts +11 -0
- package/dist/server/node_modules/restore-cursor/index.js +11 -0
- package/dist/server/node_modules/restore-cursor/license +9 -0
- package/dist/server/node_modules/restore-cursor/package.json +55 -0
- package/dist/server/node_modules/restore-cursor/readme.md +31 -0
- package/dist/server/node_modules/string-width/index.d.ts +39 -0
- package/dist/server/node_modules/string-width/index.js +82 -0
- package/dist/server/node_modules/string-width/license +9 -0
- package/dist/server/node_modules/string-width/package.json +64 -0
- package/dist/server/node_modules/string-width/readme.md +66 -0
- package/dist/server/server.js +5 -1
- package/package.json +1 -1
- package/dist/client/assets/ai-providers-CfDd4KX1.js +0 -1
- package/dist/client/assets/registry-CWfZJmtj.js +0 -2
- package/dist/client/assets/store-registry-CBTBvJpl.js +0 -2
- package/dist/client/assets/useInfiniteQuery-96c4mtDU.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-HyWQwfY6.js +0 -1
- package/dist/client/assets/workflow-detail-C0BgSrtB.js +0 -1
- package/dist/server/node_modules/ansi-regex/index.d.ts +0 -33
- package/dist/server/node_modules/ansi-regex/index.js +0 -14
- package/dist/server/node_modules/ansi-regex/readme.md +0 -66
- package/dist/server/node_modules/emoji-regex/LICENSE-MIT.txt +0 -20
- package/dist/server/node_modules/emoji-regex/README.md +0 -107
- package/dist/server/node_modules/emoji-regex/index.d.ts +0 -3
- package/dist/server/node_modules/emoji-regex/index.js +0 -4
- package/dist/server/node_modules/emoji-regex/index.mjs +0 -4
- package/dist/server/node_modules/emoji-regex/package.json +0 -45
- package/dist/server/node_modules/ink/build/ansi-tokenizer.d.ts +0 -38
- package/dist/server/node_modules/ink/build/ansi-tokenizer.js +0 -316
- package/dist/server/node_modules/ink/build/ansi-tokenizer.js.map +0 -1
- package/dist/server/node_modules/ink/build/apply-styles.js +0 -175
- package/dist/server/node_modules/ink/build/build-layout.js +0 -77
- package/dist/server/node_modules/ink/build/calculate-wrapped-text.js +0 -53
- package/dist/server/node_modules/ink/build/colorize.d.ts +0 -3
- package/dist/server/node_modules/ink/build/colorize.js +0 -48
- package/dist/server/node_modules/ink/build/colorize.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/AccessibilityContext.d.ts +0 -3
- package/dist/server/node_modules/ink/build/components/AccessibilityContext.js +0 -5
- package/dist/server/node_modules/ink/build/components/AccessibilityContext.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/App.d.ts +0 -18
- package/dist/server/node_modules/ink/build/components/App.js +0 -351
- package/dist/server/node_modules/ink/build/components/App.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/AppContext.d.ts +0 -15
- package/dist/server/node_modules/ink/build/components/AppContext.js +0 -11
- package/dist/server/node_modules/ink/build/components/AppContext.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/BackgroundContext.d.ts +0 -4
- package/dist/server/node_modules/ink/build/components/BackgroundContext.js +0 -3
- package/dist/server/node_modules/ink/build/components/BackgroundContext.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/Box.d.ts +0 -117
- package/dist/server/node_modules/ink/build/components/Box.js +0 -34
- package/dist/server/node_modules/ink/build/components/Box.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/Color.js +0 -62
- package/dist/server/node_modules/ink/build/components/Cursor.d.ts +0 -83
- package/dist/server/node_modules/ink/build/components/Cursor.js +0 -53
- package/dist/server/node_modules/ink/build/components/Cursor.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/CursorContext.d.ts +0 -11
- package/dist/server/node_modules/ink/build/components/CursorContext.js +0 -8
- package/dist/server/node_modules/ink/build/components/CursorContext.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/ErrorBoundary.d.ts +0 -18
- package/dist/server/node_modules/ink/build/components/ErrorBoundary.js +0 -23
- package/dist/server/node_modules/ink/build/components/ErrorBoundary.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/ErrorOverview.d.ts +0 -6
- package/dist/server/node_modules/ink/build/components/ErrorOverview.js +0 -84
- package/dist/server/node_modules/ink/build/components/ErrorOverview.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/FocusContext.d.ts +0 -16
- package/dist/server/node_modules/ink/build/components/FocusContext.js +0 -17
- package/dist/server/node_modules/ink/build/components/FocusContext.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/Newline.d.ts +0 -13
- package/dist/server/node_modules/ink/build/components/Newline.js +0 -8
- package/dist/server/node_modules/ink/build/components/Newline.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/Spacer.d.ts +0 -7
- package/dist/server/node_modules/ink/build/components/Spacer.js +0 -11
- package/dist/server/node_modules/ink/build/components/Spacer.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/Static.d.ts +0 -24
- package/dist/server/node_modules/ink/build/components/Static.js +0 -28
- package/dist/server/node_modules/ink/build/components/Static.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/StderrContext.d.ts +0 -15
- package/dist/server/node_modules/ink/build/components/StderrContext.js +0 -13
- package/dist/server/node_modules/ink/build/components/StderrContext.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/StdinContext.d.ts +0 -22
- package/dist/server/node_modules/ink/build/components/StdinContext.js +0 -19
- package/dist/server/node_modules/ink/build/components/StdinContext.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/StdoutContext.d.ts +0 -15
- package/dist/server/node_modules/ink/build/components/StdoutContext.js +0 -13
- package/dist/server/node_modules/ink/build/components/StdoutContext.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/Text.d.ts +0 -55
- package/dist/server/node_modules/ink/build/components/Text.js +0 -50
- package/dist/server/node_modules/ink/build/components/Text.js.map +0 -1
- package/dist/server/node_modules/ink/build/components/Transform.d.ts +0 -16
- package/dist/server/node_modules/ink/build/components/Transform.js +0 -15
- package/dist/server/node_modules/ink/build/components/Transform.js.map +0 -1
- package/dist/server/node_modules/ink/build/cursor-helpers.d.ts +0 -38
- package/dist/server/node_modules/ink/build/cursor-helpers.js +0 -56
- package/dist/server/node_modules/ink/build/cursor-helpers.js.map +0 -1
- package/dist/server/node_modules/ink/build/devtools-window-polyfill.js +0 -65
- package/dist/server/node_modules/ink/build/devtools-window-polyfill.js.map +0 -1
- package/dist/server/node_modules/ink/build/devtools.d.ts +0 -1
- package/dist/server/node_modules/ink/build/devtools.js +0 -11
- package/dist/server/node_modules/ink/build/devtools.js.map +0 -1
- package/dist/server/node_modules/ink/build/dom.d.ts +0 -56
- package/dist/server/node_modules/ink/build/dom.js +0 -124
- package/dist/server/node_modules/ink/build/dom.js.map +0 -1
- package/dist/server/node_modules/ink/build/experimental/apply-style.js +0 -140
- package/dist/server/node_modules/ink/build/experimental/dom.js +0 -123
- package/dist/server/node_modules/ink/build/experimental/output.js +0 -91
- package/dist/server/node_modules/ink/build/experimental/reconciler.js +0 -141
- package/dist/server/node_modules/ink/build/experimental/renderer.js +0 -81
- package/dist/server/node_modules/ink/build/get-max-width.d.ts +0 -3
- package/dist/server/node_modules/ink/build/get-max-width.js +0 -10
- package/dist/server/node_modules/ink/build/get-max-width.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/use-app.d.ts +0 -5
- package/dist/server/node_modules/ink/build/hooks/use-app.js +0 -8
- package/dist/server/node_modules/ink/build/hooks/use-app.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/use-cursor.d.ts +0 -12
- package/dist/server/node_modules/ink/build/hooks/use-cursor.js +0 -29
- package/dist/server/node_modules/ink/build/hooks/use-cursor.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/use-focus-manager.d.ts +0 -28
- package/dist/server/node_modules/ink/build/hooks/use-focus-manager.js +0 -17
- package/dist/server/node_modules/ink/build/hooks/use-focus-manager.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/use-focus.d.ts +0 -29
- package/dist/server/node_modules/ink/build/hooks/use-focus.js +0 -42
- package/dist/server/node_modules/ink/build/hooks/use-focus.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/use-input.d.ts +0 -131
- package/dist/server/node_modules/ink/build/hooks/use-input.js +0 -124
- package/dist/server/node_modules/ink/build/hooks/use-input.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/use-is-screen-reader-enabled.d.ts +0 -5
- package/dist/server/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js +0 -11
- package/dist/server/node_modules/ink/build/hooks/use-is-screen-reader-enabled.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/use-stderr.d.ts +0 -5
- package/dist/server/node_modules/ink/build/hooks/use-stderr.js +0 -8
- package/dist/server/node_modules/ink/build/hooks/use-stderr.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/use-stdin.d.ts +0 -5
- package/dist/server/node_modules/ink/build/hooks/use-stdin.js +0 -8
- package/dist/server/node_modules/ink/build/hooks/use-stdin.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/use-stdout.d.ts +0 -5
- package/dist/server/node_modules/ink/build/hooks/use-stdout.js +0 -8
- package/dist/server/node_modules/ink/build/hooks/use-stdout.js.map +0 -1
- package/dist/server/node_modules/ink/build/hooks/useInput.js +0 -38
- package/dist/server/node_modules/ink/build/index.d.ts +0 -34
- package/dist/server/node_modules/ink/build/index.js +0 -20
- package/dist/server/node_modules/ink/build/index.js.map +0 -1
- package/dist/server/node_modules/ink/build/ink.d.ts +0 -90
- package/dist/server/node_modules/ink/build/ink.js +0 -637
- package/dist/server/node_modules/ink/build/ink.js.map +0 -1
- package/dist/server/node_modules/ink/build/input-parser.d.ts +0 -7
- package/dist/server/node_modules/ink/build/input-parser.js +0 -154
- package/dist/server/node_modules/ink/build/input-parser.js.map +0 -1
- package/dist/server/node_modules/ink/build/instance.js +0 -205
- package/dist/server/node_modules/ink/build/instances.d.ts +0 -3
- package/dist/server/node_modules/ink/build/instances.js +0 -8
- package/dist/server/node_modules/ink/build/instances.js.map +0 -1
- package/dist/server/node_modules/ink/build/kitty-keyboard.d.ts +0 -23
- package/dist/server/node_modules/ink/build/kitty-keyboard.js +0 -32
- package/dist/server/node_modules/ink/build/kitty-keyboard.js.map +0 -1
- package/dist/server/node_modules/ink/build/layout.d.ts +0 -7
- package/dist/server/node_modules/ink/build/layout.js +0 -33
- package/dist/server/node_modules/ink/build/layout.js.map +0 -1
- package/dist/server/node_modules/ink/build/log-update.d.ts +0 -19
- package/dist/server/node_modules/ink/build/log-update.js +0 -242
- package/dist/server/node_modules/ink/build/log-update.js.map +0 -1
- package/dist/server/node_modules/ink/build/measure-element.d.ts +0 -16
- package/dist/server/node_modules/ink/build/measure-element.js +0 -9
- package/dist/server/node_modules/ink/build/measure-element.js.map +0 -1
- package/dist/server/node_modules/ink/build/measure-text.d.ts +0 -6
- package/dist/server/node_modules/ink/build/measure-text.js +0 -21
- package/dist/server/node_modules/ink/build/measure-text.js.map +0 -1
- package/dist/server/node_modules/ink/build/options.d.ts +0 -52
- package/dist/server/node_modules/ink/build/options.js +0 -2
- package/dist/server/node_modules/ink/build/options.js.map +0 -1
- package/dist/server/node_modules/ink/build/output.d.ts +0 -35
- package/dist/server/node_modules/ink/build/output.js +0 -183
- package/dist/server/node_modules/ink/build/output.js.map +0 -1
- package/dist/server/node_modules/ink/build/parse-keypress.d.ts +0 -22
- package/dist/server/node_modules/ink/build/parse-keypress.js +0 -493
- package/dist/server/node_modules/ink/build/parse-keypress.js.map +0 -1
- package/dist/server/node_modules/ink/build/reconciler.d.ts +0 -4
- package/dist/server/node_modules/ink/build/reconciler.js +0 -274
- package/dist/server/node_modules/ink/build/reconciler.js.map +0 -1
- package/dist/server/node_modules/ink/build/render-background.d.ts +0 -4
- package/dist/server/node_modules/ink/build/render-background.js +0 -25
- package/dist/server/node_modules/ink/build/render-background.js.map +0 -1
- package/dist/server/node_modules/ink/build/render-border.d.ts +0 -4
- package/dist/server/node_modules/ink/build/render-border.js +0 -73
- package/dist/server/node_modules/ink/build/render-border.js.map +0 -1
- package/dist/server/node_modules/ink/build/render-node-to-output.d.ts +0 -14
- package/dist/server/node_modules/ink/build/render-node-to-output.js +0 -147
- package/dist/server/node_modules/ink/build/render-node-to-output.js.map +0 -1
- package/dist/server/node_modules/ink/build/render-to-string.d.ts +0 -38
- package/dist/server/node_modules/ink/build/render-to-string.js +0 -115
- package/dist/server/node_modules/ink/build/render-to-string.js.map +0 -1
- package/dist/server/node_modules/ink/build/render.d.ts +0 -121
- package/dist/server/node_modules/ink/build/render.js +0 -55
- package/dist/server/node_modules/ink/build/render.js.map +0 -1
- package/dist/server/node_modules/ink/build/renderer.d.ts +0 -8
- package/dist/server/node_modules/ink/build/renderer.js +0 -55
- package/dist/server/node_modules/ink/build/renderer.js.map +0 -1
- package/dist/server/node_modules/ink/build/sanitize-ansi.d.ts +0 -2
- package/dist/server/node_modules/ink/build/sanitize-ansi.js +0 -27
- package/dist/server/node_modules/ink/build/sanitize-ansi.js.map +0 -1
- package/dist/server/node_modules/ink/build/screen-reader-update.d.ts +0 -13
- package/dist/server/node_modules/ink/build/screen-reader-update.js +0 -38
- package/dist/server/node_modules/ink/build/screen-reader-update.js.map +0 -1
- package/dist/server/node_modules/ink/build/squash-text-nodes.d.ts +0 -3
- package/dist/server/node_modules/ink/build/squash-text-nodes.js +0 -36
- package/dist/server/node_modules/ink/build/squash-text-nodes.js.map +0 -1
- package/dist/server/node_modules/ink/build/styles.d.ts +0 -240
- package/dist/server/node_modules/ink/build/styles.js +0 -232
- package/dist/server/node_modules/ink/build/styles.js.map +0 -1
- package/dist/server/node_modules/ink/build/utils.d.ts +0 -2
- package/dist/server/node_modules/ink/build/utils.js +0 -4
- package/dist/server/node_modules/ink/build/utils.js.map +0 -1
- package/dist/server/node_modules/ink/build/wrap-text.d.ts +0 -3
- package/dist/server/node_modules/ink/build/wrap-text.js +0 -31
- package/dist/server/node_modules/ink/build/wrap-text.js.map +0 -1
- package/dist/server/node_modules/ink/build/write-synchronized.d.ts +0 -4
- package/dist/server/node_modules/ink/build/write-synchronized.js +0 -7
- package/dist/server/node_modules/ink/build/write-synchronized.js.map +0 -1
- package/dist/server/node_modules/ink/package.json +0 -201
- package/dist/server/node_modules/ink/readme.md +0 -2636
- package/dist/server/node_modules/onetime/index.d.ts +0 -64
- package/dist/server/node_modules/onetime/index.js +0 -44
- package/dist/server/node_modules/onetime/package.json +0 -43
- package/dist/server/node_modules/onetime/readme.md +0 -94
- /package/dist/server/node_modules/{ansi-regex → ansi-styles}/license +0 -0
- /package/dist/server/node_modules/{onetime → environment}/license +0 -0
- /package/dist/server/node_modules/{ink/build/devtools-window-polyfill.d.ts → pg-protocol/dist/b.d.ts} +0 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { TransformOptions } from 'stream'
|
|
2
|
+
import {
|
|
3
|
+
Mode,
|
|
4
|
+
bindComplete,
|
|
5
|
+
parseComplete,
|
|
6
|
+
closeComplete,
|
|
7
|
+
noData,
|
|
8
|
+
portalSuspended,
|
|
9
|
+
copyDone,
|
|
10
|
+
replicationStart,
|
|
11
|
+
emptyQuery,
|
|
12
|
+
ReadyForQueryMessage,
|
|
13
|
+
CommandCompleteMessage,
|
|
14
|
+
CopyDataMessage,
|
|
15
|
+
CopyResponse,
|
|
16
|
+
NotificationResponseMessage,
|
|
17
|
+
RowDescriptionMessage,
|
|
18
|
+
ParameterDescriptionMessage,
|
|
19
|
+
Field,
|
|
20
|
+
DataRowMessage,
|
|
21
|
+
ParameterStatusMessage,
|
|
22
|
+
BackendKeyDataMessage,
|
|
23
|
+
DatabaseError,
|
|
24
|
+
BackendMessage,
|
|
25
|
+
MessageName,
|
|
26
|
+
AuthenticationMD5Password,
|
|
27
|
+
NoticeMessage,
|
|
28
|
+
} from './messages'
|
|
29
|
+
import { BufferReader } from './buffer-reader'
|
|
30
|
+
|
|
31
|
+
// every message is prefixed with a single bye
|
|
32
|
+
const CODE_LENGTH = 1
|
|
33
|
+
// every message has an int32 length which includes itself but does
|
|
34
|
+
// NOT include the code in the length
|
|
35
|
+
const LEN_LENGTH = 4
|
|
36
|
+
|
|
37
|
+
const HEADER_LENGTH = CODE_LENGTH + LEN_LENGTH
|
|
38
|
+
|
|
39
|
+
// A placeholder for a `BackendMessage`’s length value that will be set after construction.
|
|
40
|
+
const LATEINIT_LENGTH = -1
|
|
41
|
+
|
|
42
|
+
export type Packet = {
|
|
43
|
+
code: number
|
|
44
|
+
packet: Buffer
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const emptyBuffer = Buffer.allocUnsafe(0)
|
|
48
|
+
|
|
49
|
+
type StreamOptions = TransformOptions & {
|
|
50
|
+
mode: Mode
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const enum MessageCodes {
|
|
54
|
+
DataRow = 0x44, // D
|
|
55
|
+
ParseComplete = 0x31, // 1
|
|
56
|
+
BindComplete = 0x32, // 2
|
|
57
|
+
CloseComplete = 0x33, // 3
|
|
58
|
+
CommandComplete = 0x43, // C
|
|
59
|
+
ReadyForQuery = 0x5a, // Z
|
|
60
|
+
NoData = 0x6e, // n
|
|
61
|
+
NotificationResponse = 0x41, // A
|
|
62
|
+
AuthenticationResponse = 0x52, // R
|
|
63
|
+
ParameterStatus = 0x53, // S
|
|
64
|
+
BackendKeyData = 0x4b, // K
|
|
65
|
+
ErrorMessage = 0x45, // E
|
|
66
|
+
NoticeMessage = 0x4e, // N
|
|
67
|
+
RowDescriptionMessage = 0x54, // T
|
|
68
|
+
ParameterDescriptionMessage = 0x74, // t
|
|
69
|
+
PortalSuspended = 0x73, // s
|
|
70
|
+
ReplicationStart = 0x57, // W
|
|
71
|
+
EmptyQuery = 0x49, // I
|
|
72
|
+
CopyIn = 0x47, // G
|
|
73
|
+
CopyOut = 0x48, // H
|
|
74
|
+
CopyDone = 0x63, // c
|
|
75
|
+
CopyData = 0x64, // d
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export type MessageCallback = (msg: BackendMessage) => void
|
|
79
|
+
|
|
80
|
+
export class Parser {
|
|
81
|
+
private buffer: Buffer = emptyBuffer
|
|
82
|
+
private bufferLength: number = 0
|
|
83
|
+
private bufferOffset: number = 0
|
|
84
|
+
private reader = new BufferReader()
|
|
85
|
+
private mode: Mode
|
|
86
|
+
|
|
87
|
+
constructor(opts?: StreamOptions) {
|
|
88
|
+
if (opts?.mode === 'binary') {
|
|
89
|
+
throw new Error('Binary mode not supported yet')
|
|
90
|
+
}
|
|
91
|
+
this.mode = opts?.mode || 'text'
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public parse(buffer: Buffer, callback: MessageCallback) {
|
|
95
|
+
this.mergeBuffer(buffer)
|
|
96
|
+
const bufferFullLength = this.bufferOffset + this.bufferLength
|
|
97
|
+
let offset = this.bufferOffset
|
|
98
|
+
while (offset + HEADER_LENGTH <= bufferFullLength) {
|
|
99
|
+
// code is 1 byte long - it identifies the message type
|
|
100
|
+
const code = this.buffer[offset]
|
|
101
|
+
// length is 1 Uint32BE - it is the length of the message EXCLUDING the code
|
|
102
|
+
const length = this.buffer.readUInt32BE(offset + CODE_LENGTH)
|
|
103
|
+
const fullMessageLength = CODE_LENGTH + length
|
|
104
|
+
if (fullMessageLength + offset <= bufferFullLength) {
|
|
105
|
+
const message = this.handlePacket(offset + HEADER_LENGTH, code, length, this.buffer)
|
|
106
|
+
callback(message)
|
|
107
|
+
offset += fullMessageLength
|
|
108
|
+
} else {
|
|
109
|
+
break
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (offset === bufferFullLength) {
|
|
113
|
+
// No more use for the buffer
|
|
114
|
+
this.buffer = emptyBuffer
|
|
115
|
+
this.bufferLength = 0
|
|
116
|
+
this.bufferOffset = 0
|
|
117
|
+
} else {
|
|
118
|
+
// Adjust the cursors of remainingBuffer
|
|
119
|
+
this.bufferLength = bufferFullLength - offset
|
|
120
|
+
this.bufferOffset = offset
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private mergeBuffer(buffer: Buffer): void {
|
|
125
|
+
if (this.bufferLength > 0) {
|
|
126
|
+
const newLength = this.bufferLength + buffer.byteLength
|
|
127
|
+
const newFullLength = newLength + this.bufferOffset
|
|
128
|
+
if (newFullLength > this.buffer.byteLength) {
|
|
129
|
+
// We can't concat the new buffer with the remaining one
|
|
130
|
+
let newBuffer: Buffer
|
|
131
|
+
if (newLength <= this.buffer.byteLength && this.bufferOffset >= this.bufferLength) {
|
|
132
|
+
// We can move the relevant part to the beginning of the buffer instead of allocating a new buffer
|
|
133
|
+
newBuffer = this.buffer
|
|
134
|
+
} else {
|
|
135
|
+
// Allocate a new larger buffer
|
|
136
|
+
let newBufferLength = this.buffer.byteLength * 2
|
|
137
|
+
while (newLength >= newBufferLength) {
|
|
138
|
+
newBufferLength *= 2
|
|
139
|
+
}
|
|
140
|
+
newBuffer = Buffer.allocUnsafe(newBufferLength)
|
|
141
|
+
}
|
|
142
|
+
// Move the remaining buffer to the new one
|
|
143
|
+
this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset + this.bufferLength)
|
|
144
|
+
this.buffer = newBuffer
|
|
145
|
+
this.bufferOffset = 0
|
|
146
|
+
}
|
|
147
|
+
// Concat the new buffer with the remaining one
|
|
148
|
+
buffer.copy(this.buffer, this.bufferOffset + this.bufferLength)
|
|
149
|
+
this.bufferLength = newLength
|
|
150
|
+
} else {
|
|
151
|
+
this.buffer = buffer
|
|
152
|
+
this.bufferOffset = 0
|
|
153
|
+
this.bufferLength = buffer.byteLength
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
private handlePacket(offset: number, code: number, length: number, bytes: Buffer): BackendMessage {
|
|
158
|
+
const { reader } = this
|
|
159
|
+
|
|
160
|
+
// NOTE: This undesirably retains the buffer in `this.reader` if the `parse*Message` calls below throw. However, those should only throw in the case of a protocol error, which normally results in the reader being discarded.
|
|
161
|
+
reader.setBuffer(offset, bytes)
|
|
162
|
+
|
|
163
|
+
let message: BackendMessage
|
|
164
|
+
|
|
165
|
+
switch (code) {
|
|
166
|
+
case MessageCodes.BindComplete:
|
|
167
|
+
message = bindComplete
|
|
168
|
+
break
|
|
169
|
+
case MessageCodes.ParseComplete:
|
|
170
|
+
message = parseComplete
|
|
171
|
+
break
|
|
172
|
+
case MessageCodes.CloseComplete:
|
|
173
|
+
message = closeComplete
|
|
174
|
+
break
|
|
175
|
+
case MessageCodes.NoData:
|
|
176
|
+
message = noData
|
|
177
|
+
break
|
|
178
|
+
case MessageCodes.PortalSuspended:
|
|
179
|
+
message = portalSuspended
|
|
180
|
+
break
|
|
181
|
+
case MessageCodes.CopyDone:
|
|
182
|
+
message = copyDone
|
|
183
|
+
break
|
|
184
|
+
case MessageCodes.ReplicationStart:
|
|
185
|
+
message = replicationStart
|
|
186
|
+
break
|
|
187
|
+
case MessageCodes.EmptyQuery:
|
|
188
|
+
message = emptyQuery
|
|
189
|
+
break
|
|
190
|
+
case MessageCodes.DataRow:
|
|
191
|
+
message = parseDataRowMessage(reader)
|
|
192
|
+
break
|
|
193
|
+
case MessageCodes.CommandComplete:
|
|
194
|
+
message = parseCommandCompleteMessage(reader)
|
|
195
|
+
break
|
|
196
|
+
case MessageCodes.ReadyForQuery:
|
|
197
|
+
message = parseReadyForQueryMessage(reader)
|
|
198
|
+
break
|
|
199
|
+
case MessageCodes.NotificationResponse:
|
|
200
|
+
message = parseNotificationMessage(reader)
|
|
201
|
+
break
|
|
202
|
+
case MessageCodes.AuthenticationResponse:
|
|
203
|
+
message = parseAuthenticationResponse(reader, length)
|
|
204
|
+
break
|
|
205
|
+
case MessageCodes.ParameterStatus:
|
|
206
|
+
message = parseParameterStatusMessage(reader)
|
|
207
|
+
break
|
|
208
|
+
case MessageCodes.BackendKeyData:
|
|
209
|
+
message = parseBackendKeyData(reader)
|
|
210
|
+
break
|
|
211
|
+
case MessageCodes.ErrorMessage:
|
|
212
|
+
message = parseErrorMessage(reader, 'error')
|
|
213
|
+
break
|
|
214
|
+
case MessageCodes.NoticeMessage:
|
|
215
|
+
message = parseErrorMessage(reader, 'notice')
|
|
216
|
+
break
|
|
217
|
+
case MessageCodes.RowDescriptionMessage:
|
|
218
|
+
message = parseRowDescriptionMessage(reader)
|
|
219
|
+
break
|
|
220
|
+
case MessageCodes.ParameterDescriptionMessage:
|
|
221
|
+
message = parseParameterDescriptionMessage(reader)
|
|
222
|
+
break
|
|
223
|
+
case MessageCodes.CopyIn:
|
|
224
|
+
message = parseCopyInMessage(reader)
|
|
225
|
+
break
|
|
226
|
+
case MessageCodes.CopyOut:
|
|
227
|
+
message = parseCopyOutMessage(reader)
|
|
228
|
+
break
|
|
229
|
+
case MessageCodes.CopyData:
|
|
230
|
+
message = parseCopyData(reader, length)
|
|
231
|
+
break
|
|
232
|
+
default:
|
|
233
|
+
return new DatabaseError('received invalid response: ' + code.toString(16), length, 'error')
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
reader.setBuffer(0, emptyBuffer)
|
|
237
|
+
|
|
238
|
+
message.length = length
|
|
239
|
+
return message
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const parseReadyForQueryMessage = (reader: BufferReader) => {
|
|
244
|
+
const status = reader.string(1)
|
|
245
|
+
return new ReadyForQueryMessage(LATEINIT_LENGTH, status)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const parseCommandCompleteMessage = (reader: BufferReader) => {
|
|
249
|
+
const text = reader.cstring()
|
|
250
|
+
return new CommandCompleteMessage(LATEINIT_LENGTH, text)
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const parseCopyData = (reader: BufferReader, length: number) => {
|
|
254
|
+
const chunk = reader.bytes(length - 4)
|
|
255
|
+
return new CopyDataMessage(LATEINIT_LENGTH, chunk)
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const parseCopyInMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyInResponse')
|
|
259
|
+
|
|
260
|
+
const parseCopyOutMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyOutResponse')
|
|
261
|
+
|
|
262
|
+
const parseCopyMessage = (reader: BufferReader, messageName: MessageName) => {
|
|
263
|
+
const isBinary = reader.byte() !== 0
|
|
264
|
+
const columnCount = reader.int16()
|
|
265
|
+
const message = new CopyResponse(LATEINIT_LENGTH, messageName, isBinary, columnCount)
|
|
266
|
+
for (let i = 0; i < columnCount; i++) {
|
|
267
|
+
message.columnTypes[i] = reader.int16()
|
|
268
|
+
}
|
|
269
|
+
return message
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const parseNotificationMessage = (reader: BufferReader) => {
|
|
273
|
+
const processId = reader.int32()
|
|
274
|
+
const channel = reader.cstring()
|
|
275
|
+
const payload = reader.cstring()
|
|
276
|
+
return new NotificationResponseMessage(LATEINIT_LENGTH, processId, channel, payload)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
const parseRowDescriptionMessage = (reader: BufferReader) => {
|
|
280
|
+
const fieldCount = reader.int16()
|
|
281
|
+
const message = new RowDescriptionMessage(LATEINIT_LENGTH, fieldCount)
|
|
282
|
+
for (let i = 0; i < fieldCount; i++) {
|
|
283
|
+
message.fields[i] = parseField(reader)
|
|
284
|
+
}
|
|
285
|
+
return message
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const parseField = (reader: BufferReader) => {
|
|
289
|
+
const name = reader.cstring()
|
|
290
|
+
const tableID = reader.uint32()
|
|
291
|
+
const columnID = reader.int16()
|
|
292
|
+
const dataTypeID = reader.uint32()
|
|
293
|
+
const dataTypeSize = reader.int16()
|
|
294
|
+
const dataTypeModifier = reader.int32()
|
|
295
|
+
const mode = reader.int16() === 0 ? 'text' : 'binary'
|
|
296
|
+
return new Field(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, mode)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const parseParameterDescriptionMessage = (reader: BufferReader) => {
|
|
300
|
+
const parameterCount = reader.int16()
|
|
301
|
+
const message = new ParameterDescriptionMessage(LATEINIT_LENGTH, parameterCount)
|
|
302
|
+
for (let i = 0; i < parameterCount; i++) {
|
|
303
|
+
message.dataTypeIDs[i] = reader.int32()
|
|
304
|
+
}
|
|
305
|
+
return message
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
const parseDataRowMessage = (reader: BufferReader) => {
|
|
309
|
+
const fieldCount = reader.int16()
|
|
310
|
+
const fields: any[] = new Array(fieldCount)
|
|
311
|
+
for (let i = 0; i < fieldCount; i++) {
|
|
312
|
+
const len = reader.int32()
|
|
313
|
+
// a -1 for length means the value of the field is null
|
|
314
|
+
fields[i] = len === -1 ? null : reader.string(len)
|
|
315
|
+
}
|
|
316
|
+
return new DataRowMessage(LATEINIT_LENGTH, fields)
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const parseParameterStatusMessage = (reader: BufferReader) => {
|
|
320
|
+
const name = reader.cstring()
|
|
321
|
+
const value = reader.cstring()
|
|
322
|
+
return new ParameterStatusMessage(LATEINIT_LENGTH, name, value)
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const parseBackendKeyData = (reader: BufferReader) => {
|
|
326
|
+
const processID = reader.int32()
|
|
327
|
+
const secretKey = reader.int32()
|
|
328
|
+
return new BackendKeyDataMessage(LATEINIT_LENGTH, processID, secretKey)
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const parseAuthenticationResponse = (reader: BufferReader, length: number) => {
|
|
332
|
+
const code = reader.int32()
|
|
333
|
+
// TODO(bmc): maybe better types here
|
|
334
|
+
const message: BackendMessage & any = {
|
|
335
|
+
name: 'authenticationOk',
|
|
336
|
+
length,
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
switch (code) {
|
|
340
|
+
case 0: // AuthenticationOk
|
|
341
|
+
break
|
|
342
|
+
case 3: // AuthenticationCleartextPassword
|
|
343
|
+
if (message.length === 8) {
|
|
344
|
+
message.name = 'authenticationCleartextPassword'
|
|
345
|
+
}
|
|
346
|
+
break
|
|
347
|
+
case 5: // AuthenticationMD5Password
|
|
348
|
+
if (message.length === 12) {
|
|
349
|
+
message.name = 'authenticationMD5Password'
|
|
350
|
+
const salt = reader.bytes(4)
|
|
351
|
+
return new AuthenticationMD5Password(LATEINIT_LENGTH, salt)
|
|
352
|
+
}
|
|
353
|
+
break
|
|
354
|
+
case 10: // AuthenticationSASL
|
|
355
|
+
{
|
|
356
|
+
message.name = 'authenticationSASL'
|
|
357
|
+
message.mechanisms = []
|
|
358
|
+
let mechanism: string
|
|
359
|
+
do {
|
|
360
|
+
mechanism = reader.cstring()
|
|
361
|
+
if (mechanism) {
|
|
362
|
+
message.mechanisms.push(mechanism)
|
|
363
|
+
}
|
|
364
|
+
} while (mechanism)
|
|
365
|
+
}
|
|
366
|
+
break
|
|
367
|
+
case 11: // AuthenticationSASLContinue
|
|
368
|
+
message.name = 'authenticationSASLContinue'
|
|
369
|
+
message.data = reader.string(length - 8)
|
|
370
|
+
break
|
|
371
|
+
case 12: // AuthenticationSASLFinal
|
|
372
|
+
message.name = 'authenticationSASLFinal'
|
|
373
|
+
message.data = reader.string(length - 8)
|
|
374
|
+
break
|
|
375
|
+
default:
|
|
376
|
+
throw new Error('Unknown authenticationOk message type ' + code)
|
|
377
|
+
}
|
|
378
|
+
return message
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const parseErrorMessage = (reader: BufferReader, name: MessageName) => {
|
|
382
|
+
const fields: Record<string, string> = {}
|
|
383
|
+
let fieldType = reader.string(1)
|
|
384
|
+
while (fieldType !== '\0') {
|
|
385
|
+
fields[fieldType] = reader.cstring()
|
|
386
|
+
fieldType = reader.string(1)
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
const messageValue = fields.M
|
|
390
|
+
|
|
391
|
+
const message =
|
|
392
|
+
name === 'notice'
|
|
393
|
+
? new NoticeMessage(LATEINIT_LENGTH, messageValue)
|
|
394
|
+
: new DatabaseError(messageValue, LATEINIT_LENGTH, name)
|
|
395
|
+
|
|
396
|
+
message.severity = fields.S
|
|
397
|
+
message.code = fields.C
|
|
398
|
+
message.detail = fields.D
|
|
399
|
+
message.hint = fields.H
|
|
400
|
+
message.position = fields.P
|
|
401
|
+
message.internalPosition = fields.p
|
|
402
|
+
message.internalQuery = fields.q
|
|
403
|
+
message.where = fields.W
|
|
404
|
+
message.schema = fields.s
|
|
405
|
+
message.table = fields.t
|
|
406
|
+
message.column = fields.c
|
|
407
|
+
message.dataType = fields.d
|
|
408
|
+
message.constraint = fields.n
|
|
409
|
+
message.file = fields.F
|
|
410
|
+
message.line = fields.L
|
|
411
|
+
message.routine = fields.R
|
|
412
|
+
return message
|
|
413
|
+
}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { Writer } from './buffer-writer'
|
|
2
|
+
|
|
3
|
+
const enum code {
|
|
4
|
+
startup = 0x70,
|
|
5
|
+
query = 0x51,
|
|
6
|
+
parse = 0x50,
|
|
7
|
+
bind = 0x42,
|
|
8
|
+
execute = 0x45,
|
|
9
|
+
flush = 0x48,
|
|
10
|
+
sync = 0x53,
|
|
11
|
+
end = 0x58,
|
|
12
|
+
close = 0x43,
|
|
13
|
+
describe = 0x44,
|
|
14
|
+
copyFromChunk = 0x64,
|
|
15
|
+
copyDone = 0x63,
|
|
16
|
+
copyFail = 0x66,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const writer = new Writer()
|
|
20
|
+
|
|
21
|
+
const startup = (opts: Record<string, string>): Buffer => {
|
|
22
|
+
// protocol version
|
|
23
|
+
writer.addInt16(3).addInt16(0)
|
|
24
|
+
for (const key of Object.keys(opts)) {
|
|
25
|
+
writer.addCString(key).addCString(opts[key])
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
writer.addCString('client_encoding').addCString('UTF8')
|
|
29
|
+
|
|
30
|
+
const bodyBuffer = writer.addCString('').flush()
|
|
31
|
+
// this message is sent without a code
|
|
32
|
+
|
|
33
|
+
const length = bodyBuffer.length + 4
|
|
34
|
+
|
|
35
|
+
return new Writer().addInt32(length).add(bodyBuffer).flush()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const requestSsl = (): Buffer => {
|
|
39
|
+
const response = Buffer.allocUnsafe(8)
|
|
40
|
+
response.writeInt32BE(8, 0)
|
|
41
|
+
response.writeInt32BE(80877103, 4)
|
|
42
|
+
return response
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const password = (password: string): Buffer => {
|
|
46
|
+
return writer.addCString(password).flush(code.startup)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const sendSASLInitialResponseMessage = function (mechanism: string, initialResponse: string): Buffer {
|
|
50
|
+
// 0x70 = 'p'
|
|
51
|
+
writer.addCString(mechanism).addInt32(Buffer.byteLength(initialResponse)).addString(initialResponse)
|
|
52
|
+
|
|
53
|
+
return writer.flush(code.startup)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const sendSCRAMClientFinalMessage = function (additionalData: string): Buffer {
|
|
57
|
+
return writer.addString(additionalData).flush(code.startup)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const query = (text: string): Buffer => {
|
|
61
|
+
return writer.addCString(text).flush(code.query)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
type ParseOpts = {
|
|
65
|
+
name?: string
|
|
66
|
+
types?: number[]
|
|
67
|
+
text: string
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const emptyArray: any[] = []
|
|
71
|
+
|
|
72
|
+
const parse = (query: ParseOpts): Buffer => {
|
|
73
|
+
// expect something like this:
|
|
74
|
+
// { name: 'queryName',
|
|
75
|
+
// text: 'select * from blah',
|
|
76
|
+
// types: ['int8', 'bool'] }
|
|
77
|
+
|
|
78
|
+
// normalize missing query names to allow for null
|
|
79
|
+
const name = query.name || ''
|
|
80
|
+
if (name.length > 63) {
|
|
81
|
+
console.error('Warning! Postgres only supports 63 characters for query names.')
|
|
82
|
+
console.error('You supplied %s (%s)', name, name.length)
|
|
83
|
+
console.error('This can cause conflicts and silent errors executing queries')
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const types = query.types || emptyArray
|
|
87
|
+
|
|
88
|
+
const len = types.length
|
|
89
|
+
|
|
90
|
+
const buffer = writer
|
|
91
|
+
.addCString(name) // name of query
|
|
92
|
+
.addCString(query.text) // actual query text
|
|
93
|
+
.addInt16(len)
|
|
94
|
+
|
|
95
|
+
for (let i = 0; i < len; i++) {
|
|
96
|
+
buffer.addInt32(types[i])
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return writer.flush(code.parse)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
type ValueMapper = (param: any, index: number) => any
|
|
103
|
+
|
|
104
|
+
type BindOpts = {
|
|
105
|
+
portal?: string
|
|
106
|
+
binary?: boolean
|
|
107
|
+
statement?: string
|
|
108
|
+
values?: any[]
|
|
109
|
+
// optional map from JS value to postgres value per parameter
|
|
110
|
+
valueMapper?: ValueMapper
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const paramWriter = new Writer()
|
|
114
|
+
|
|
115
|
+
// make this a const enum so typescript will inline the value
|
|
116
|
+
const enum ParamType {
|
|
117
|
+
STRING = 0,
|
|
118
|
+
BINARY = 1,
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const writeValues = function (values: any[], valueMapper?: ValueMapper): void {
|
|
122
|
+
for (let i = 0; i < values.length; i++) {
|
|
123
|
+
const mappedVal = valueMapper ? valueMapper(values[i], i) : values[i]
|
|
124
|
+
if (mappedVal == null) {
|
|
125
|
+
// add the param type (string) to the writer
|
|
126
|
+
writer.addInt16(ParamType.STRING)
|
|
127
|
+
// write -1 to the param writer to indicate null
|
|
128
|
+
paramWriter.addInt32(-1)
|
|
129
|
+
} else if (mappedVal instanceof Buffer) {
|
|
130
|
+
// add the param type (binary) to the writer
|
|
131
|
+
writer.addInt16(ParamType.BINARY)
|
|
132
|
+
// add the buffer to the param writer
|
|
133
|
+
paramWriter.addInt32(mappedVal.length)
|
|
134
|
+
paramWriter.add(mappedVal)
|
|
135
|
+
} else {
|
|
136
|
+
// add the param type (string) to the writer
|
|
137
|
+
writer.addInt16(ParamType.STRING)
|
|
138
|
+
paramWriter.addInt32(Buffer.byteLength(mappedVal))
|
|
139
|
+
paramWriter.addString(mappedVal)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const bind = (config: BindOpts = {}): Buffer => {
|
|
145
|
+
// normalize config
|
|
146
|
+
const portal = config.portal || ''
|
|
147
|
+
const statement = config.statement || ''
|
|
148
|
+
const binary = config.binary || false
|
|
149
|
+
const values = config.values || emptyArray
|
|
150
|
+
const len = values.length
|
|
151
|
+
|
|
152
|
+
writer.addCString(portal).addCString(statement)
|
|
153
|
+
writer.addInt16(len)
|
|
154
|
+
|
|
155
|
+
writeValues(values, config.valueMapper)
|
|
156
|
+
|
|
157
|
+
writer.addInt16(len)
|
|
158
|
+
writer.add(paramWriter.flush())
|
|
159
|
+
|
|
160
|
+
// all results use the same format code
|
|
161
|
+
writer.addInt16(1)
|
|
162
|
+
// format code
|
|
163
|
+
writer.addInt16(binary ? ParamType.BINARY : ParamType.STRING)
|
|
164
|
+
return writer.flush(code.bind)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
type ExecOpts = {
|
|
168
|
+
portal?: string
|
|
169
|
+
rows?: number
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const emptyExecute = Buffer.from([code.execute, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00])
|
|
173
|
+
|
|
174
|
+
const execute = (config?: ExecOpts): Buffer => {
|
|
175
|
+
// this is the happy path for most queries
|
|
176
|
+
if (!config || (!config.portal && !config.rows)) {
|
|
177
|
+
return emptyExecute
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const portal = config.portal || ''
|
|
181
|
+
const rows = config.rows || 0
|
|
182
|
+
|
|
183
|
+
const portalLength = Buffer.byteLength(portal)
|
|
184
|
+
const len = 4 + portalLength + 1 + 4
|
|
185
|
+
// one extra bit for code
|
|
186
|
+
const buff = Buffer.allocUnsafe(1 + len)
|
|
187
|
+
buff[0] = code.execute
|
|
188
|
+
buff.writeInt32BE(len, 1)
|
|
189
|
+
buff.write(portal, 5, 'utf-8')
|
|
190
|
+
buff[portalLength + 5] = 0 // null terminate portal cString
|
|
191
|
+
buff.writeUInt32BE(rows, buff.length - 4)
|
|
192
|
+
return buff
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const cancel = (processID: number, secretKey: number): Buffer => {
|
|
196
|
+
const buffer = Buffer.allocUnsafe(16)
|
|
197
|
+
buffer.writeInt32BE(16, 0)
|
|
198
|
+
buffer.writeInt16BE(1234, 4)
|
|
199
|
+
buffer.writeInt16BE(5678, 6)
|
|
200
|
+
buffer.writeInt32BE(processID, 8)
|
|
201
|
+
buffer.writeInt32BE(secretKey, 12)
|
|
202
|
+
return buffer
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
type PortalOpts = {
|
|
206
|
+
type: 'S' | 'P'
|
|
207
|
+
name?: string
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const cstringMessage = (code: code, string: string): Buffer => {
|
|
211
|
+
const stringLen = Buffer.byteLength(string)
|
|
212
|
+
const len = 4 + stringLen + 1
|
|
213
|
+
// one extra bit for code
|
|
214
|
+
const buffer = Buffer.allocUnsafe(1 + len)
|
|
215
|
+
buffer[0] = code
|
|
216
|
+
buffer.writeInt32BE(len, 1)
|
|
217
|
+
buffer.write(string, 5, 'utf-8')
|
|
218
|
+
buffer[len] = 0 // null terminate cString
|
|
219
|
+
return buffer
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const emptyDescribePortal = writer.addCString('P').flush(code.describe)
|
|
223
|
+
const emptyDescribeStatement = writer.addCString('S').flush(code.describe)
|
|
224
|
+
|
|
225
|
+
const describe = (msg: PortalOpts): Buffer => {
|
|
226
|
+
return msg.name
|
|
227
|
+
? cstringMessage(code.describe, `${msg.type}${msg.name || ''}`)
|
|
228
|
+
: msg.type === 'P'
|
|
229
|
+
? emptyDescribePortal
|
|
230
|
+
: emptyDescribeStatement
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const close = (msg: PortalOpts): Buffer => {
|
|
234
|
+
const text = `${msg.type}${msg.name || ''}`
|
|
235
|
+
return cstringMessage(code.close, text)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const copyData = (chunk: Buffer): Buffer => {
|
|
239
|
+
return writer.add(chunk).flush(code.copyFromChunk)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
const copyFail = (message: string): Buffer => {
|
|
243
|
+
return cstringMessage(code.copyFail, message)
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const codeOnlyBuffer = (code: code): Buffer => Buffer.from([code, 0x00, 0x00, 0x00, 0x04])
|
|
247
|
+
|
|
248
|
+
const flushBuffer = codeOnlyBuffer(code.flush)
|
|
249
|
+
const syncBuffer = codeOnlyBuffer(code.sync)
|
|
250
|
+
const endBuffer = codeOnlyBuffer(code.end)
|
|
251
|
+
const copyDoneBuffer = codeOnlyBuffer(code.copyDone)
|
|
252
|
+
|
|
253
|
+
const serialize = {
|
|
254
|
+
startup,
|
|
255
|
+
password,
|
|
256
|
+
requestSsl,
|
|
257
|
+
sendSASLInitialResponseMessage,
|
|
258
|
+
sendSCRAMClientFinalMessage,
|
|
259
|
+
query,
|
|
260
|
+
parse,
|
|
261
|
+
bind,
|
|
262
|
+
execute,
|
|
263
|
+
describe,
|
|
264
|
+
close,
|
|
265
|
+
flush: () => flushBuffer,
|
|
266
|
+
sync: () => syncBuffer,
|
|
267
|
+
end: () => endBuffer,
|
|
268
|
+
copyData,
|
|
269
|
+
copyDone: () => copyDoneBuffer,
|
|
270
|
+
copyFail,
|
|
271
|
+
cancel,
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export { serialize }
|