decocms 2.178.1 → 2.178.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-CI8iQIN4.js → AlertCircle-12chRuly.js} +1 -1
- package/dist/client/assets/{AlignLeft-D1a9nQq5.js → AlignLeft-_LT9deOt.js} +1 -1
- package/dist/client/assets/{ArrowDown-bcBjuFxH.js → ArrowDown-7rbX3zqZ.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BaV7db3X.js → ArrowLeft-erI8s3G2.js} +1 -1
- package/dist/client/assets/{ArrowUp-BtIkmj4Y.js → ArrowUp-DoIG5eQh.js} +1 -1
- package/dist/client/assets/{Building02-R_mkgdQ4.js → Building02-Dr7IyBdv.js} +1 -1
- package/dist/client/assets/{Check-GOz4_bBS.js → Check-DW8AVFkq.js} +1 -1
- package/dist/client/assets/{CheckCircle-DosFvCW2.js → CheckCircle-hBpanOsI.js} +1 -1
- package/dist/client/assets/{CheckSquare-Be1kXxvn.js → CheckSquare-Cr3IzSXp.js} +1 -1
- package/dist/client/assets/{CheckVerified02-CZakFFpv.js → CheckVerified02-r17ymUCs.js} +1 -1
- package/dist/client/assets/{ChevronDown-DElgod-p.js → ChevronDown-BIRGQoZ5.js} +1 -1
- package/dist/client/assets/{ChevronLeft-Bk7mc5_w.js → ChevronLeft-D-e7F7Gj.js} +1 -1
- package/dist/client/assets/{ChevronRight-Ys0vr-YD.js → ChevronRight-DsjLlugM.js} +1 -1
- package/dist/client/assets/{ChevronUp-CKkWbsZ5.js → ChevronUp-Bi3NMXzv.js} +1 -1
- package/dist/client/assets/{Clock-DRICOB0c.js → Clock-D4xJnA3P.js} +1 -1
- package/dist/client/assets/{Code01-CDxb4LVl.js → Code01-YGq5QwlZ.js} +1 -1
- package/dist/client/assets/{Container-C8ScaknS.js → Container-DHyMOW_p.js} +1 -1
- package/dist/client/assets/{Copy01-DhAVspEC.js → Copy01-DkcjIGiS.js} +1 -1
- package/dist/client/assets/{Dataflow03-ONoSH2VT.js → Dataflow03-CD3eo8oO.js} +1 -1
- package/dist/client/assets/{DotsHorizontal-BaiN7u8r.js → DotsHorizontal-CjYGc80C.js} +1 -1
- package/dist/client/assets/{DotsVertical-rvqtR29a.js → DotsVertical-2nyye7GD.js} +1 -1
- package/dist/client/assets/{Download01-CVEqgoRT.js → Download01-BvtNZalG.js} +1 -1
- package/dist/client/assets/{Edit01-BaPedGGl.js → Edit01-CoeKfJ-u.js} +1 -1
- package/dist/client/assets/{Edit05-DSl3Jqkp.js → Edit05-CbbEzOoe.js} +1 -1
- package/dist/client/assets/{Eye-BgAytXDm.js → Eye-hBqNQHpc.js} +1 -1
- package/dist/client/assets/{EyeOff-CucokIoZ.js → EyeOff-CJoTkAtN.js} +1 -1
- package/dist/client/assets/{File02-gbFS8GtC.js → File02-D19u2hUl.js} +1 -1
- package/dist/client/assets/{File06-Dpi3gJhU.js → File06-Bp4ioOvR.js} +1 -1
- package/dist/client/assets/{FilterLines-BeHTcRH-.js → FilterLines-Dvk7BhWf.js} +1 -1
- package/dist/client/assets/{Globe01-Ceb6Pyzg.js → Globe01-B8Ib7knn.js} +1 -1
- package/dist/client/assets/{Globe02-4oAOo4_d.js → Globe02-wRhoc1N5.js} +1 -1
- package/dist/client/assets/{Grid01-NwJJaoW7.js → Grid01-C5e9ReQ4.js} +1 -1
- package/dist/client/assets/{Home02-DQJpzzIE.js → Home02-JZJR9jmQ.js} +1 -1
- package/dist/client/assets/{Image01-BwGUDEUi.js → Image01-DjoSkYp_.js} +1 -1
- package/dist/client/assets/{Inbox01-CDOpLWwZ.js → Inbox01-ClVaT7W5.js} +1 -1
- package/dist/client/assets/{InfoCircle-CfTVXLYm.js → InfoCircle-DzyfpQes.js} +1 -1
- package/dist/client/assets/{Key01-BZkaWvm5.js → Key01-qNySmY39.js} +1 -1
- package/dist/client/assets/{LayersTwo01-D9dHuPjU.js → LayersTwo01-dfSlQT0y.js} +1 -1
- package/dist/client/assets/{LayoutLeft-BHhw95T0.js → LayoutLeft-B2KZfn2n.js} +1 -1
- package/dist/client/assets/{Link01-CU6UcWFS.js → Link01-Cz_ZRKoB.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DOdBEG1U.js → LinkExternal01-CKvCiQnV.js} +1 -1
- package/dist/client/assets/{List-DD3BKPLz.js → List-NLa0AhO4.js} +1 -1
- package/dist/client/assets/{Loading01-B85tVuIU.js → Loading01-Bb8FCosd.js} +1 -1
- package/dist/client/assets/{Lock01-WwvDQaaT.js → Lock01-CnZITIks.js} +1 -1
- package/dist/client/assets/{Play-DTPauCd1.js → Play-Bw5lQw7j.js} +1 -1
- package/dist/client/assets/{Plus-C9dY5EOr.js → Plus-CajZ9VfC.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-DJsZi8Hz.js → RefreshCcw01-B_NTitRE.js} +1 -1
- package/dist/client/assets/{Save01-COu7GfwR.js → Save01-8oEsqMkJ.js} +1 -1
- package/dist/client/assets/{SearchMd-CKp0BoPW.js → SearchMd-eZWeU0sP.js} +1 -1
- package/dist/client/assets/{Settings01-DunsMQ-m.js → Settings01-ClPVpLPy.js} +1 -1
- package/dist/client/assets/{Shield01-CCMtDdxH.js → Shield01-N4ace-oo.js} +1 -1
- package/dist/client/assets/{Terminal-COsHV7Wy.js → Terminal-CGwuP-_5.js} +1 -1
- package/dist/client/assets/{Tool01-Delk_MGO.js → Tool01-D1m8i7Ez.js} +1 -1
- package/dist/client/assets/{Trash01-BtiNjuw3.js → Trash01-B_4PTwjI.js} +1 -1
- package/dist/client/assets/{Upload01-DqqcM3M6.js → Upload01-CLIOr3Tj.js} +1 -1
- package/dist/client/assets/{Users03-CQa5jfkV.js → Users03-Bv-hUQkl.js} +1 -1
- package/dist/client/assets/{X-CaaFSPD_.js → X-LzehymHS.js} +1 -1
- package/dist/client/assets/{XClose-Dey3r3af.js → XClose-CcNXqPQc.js} +1 -1
- package/dist/client/assets/{Zap-DX02pf-a.js → Zap-BFN1DqIC.js} +1 -1
- package/dist/client/assets/{agent-connections-preview-BCTZ6BnP.js → agent-connections-preview-3pYXfstj.js} +1 -1
- package/dist/client/assets/{agent-detail-BBSZrHWb.js → agent-detail-DMK-u3yi.js} +1 -1
- package/dist/client/assets/{agents-DVOxH2hb.js → agents-Wfe5dNfh.js} +1 -1
- package/dist/client/assets/{ai-providers-logos-BWU0RfRJ.js → ai-providers-logos-CCp39UCk.js} +1 -1
- package/dist/client/assets/{alert-dialog-BGZzdkI2.js → alert-dialog-B_ae3oRt.js} +1 -1
- package/dist/client/assets/{auth-catchall-1PjzZ5eD.js → auth-catchall-DAx9m28t.js} +1 -1
- package/dist/client/assets/{automation-detail-dSH73muX.js → automation-detail-DfFkGT_5.js} +1 -1
- package/dist/client/assets/{automations-CEr8CMbK.js → automations-A8NOzTSS.js} +1 -1
- package/dist/client/assets/{avatar-DWAYNsNK.js → avatar-B2yArl-q.js} +1 -1
- package/dist/client/assets/{badge-B_BTuJZe.js → badge-DtRom7JO.js} +1 -1
- package/dist/client/assets/{binder-l1kCmNCE.js → binder-D4cqx_Kx.js} +1 -1
- package/dist/client/assets/{breadcrumb-ijphtzQp.js → breadcrumb-C2RG4nAQ.js} +1 -1
- package/dist/client/assets/{card-CwEWrOs9.js → card-B8qDZGCZ.js} +1 -1
- package/dist/client/assets/{checkbox-B_91sMwd.js → checkbox-B1rexahu.js} +1 -1
- package/dist/client/assets/{collapsible-DILfwVxb.js → collapsible-BtjeaBAE.js} +1 -1
- package/dist/client/assets/{collection-detail-lkCxiUzr.js → collection-detail-BaBGI9i2.js} +1 -1
- package/dist/client/assets/{collection-display-button-kCOiEzLn.js → collection-display-button-CpVZ4wHm.js} +1 -1
- package/dist/client/assets/{collection-search-Bdxpglbf.js → collection-search-BYV7N3mr.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-D-vPJPam.js → collection-table-wrapper-CHFJQd21.js} +1 -1
- package/dist/client/assets/{collection-tabs-IdlFD1jR.js → collection-tabs-CJEa3dRy.js} +1 -1
- package/dist/client/assets/{command-BgTh2_vK.js → command-Drksh_DO.js} +1 -1
- package/dist/client/assets/{connection-card-BWZAp_hO.js → connection-card-Bak2l1_M.js} +1 -1
- package/dist/client/assets/{connection-detail-DPSHmWyz.js → connection-detail-BKy2ZsS6.js} +1 -1
- package/dist/client/assets/{connections-BvYzdmU4.js → connections-Dxf4eIOE.js} +1 -1
- package/dist/client/assets/{constants-BCt7c81T.js → constants-D7qXOYRn.js} +1 -1
- package/dist/client/assets/{context-BTMVzdan.js → context-DxQMlFKC.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-Du7uAMNm.js → create-organization-dialog-CNWB-72r.js} +1 -1
- package/dist/client/assets/{create-project-dialog-Bb7dubB7.js → create-project-dialog-BeIY4Oy9.js} +1 -1
- package/dist/client/assets/{danger-CfnLHwII.js → danger-YWbxrjNq.js} +1 -1
- package/dist/client/assets/{danger-zone-DjN4GhuT.js → danger-zone-DGg0ZzSy.js} +1 -1
- package/dist/client/assets/{dependencies-CwSG23CA.js → dependencies-DtAVTWu-.js} +1 -1
- package/dist/client/assets/{dialog-BDa2Gsq9.js → dialog-ChXYvlDt.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DEQ5DCnG.js → dropdown-menu-BxlQMXgW.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-DP6UGwOE.js → dynamic-plugin-layout-JpZTv0Ay.js} +1 -1
- package/dist/client/assets/{editable-task-title-CaE6DIBf.js → editable-task-title-Cm-uIwFs.js} +1 -1
- package/dist/client/assets/{empty-state-DmgqwjeV.js → empty-state-qLM_bVsv.js} +1 -1
- package/dist/client/assets/{empty-state-C4c2sKjV.js → empty-state-xIvMMy-_.js} +1 -1
- package/dist/client/assets/{env-vars-editor-Ah5xyGmz.js → env-vars-editor-Yss1wn0m.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BxJWN5u-.js → extract-connection-data-48N591A_.js} +1 -1
- package/dist/client/assets/{file-browser-BRFmGA__.js → file-browser-BbqpPFZK.js} +2 -2
- package/dist/client/assets/{form-BWoxqZfk.js → form-CaFPTMVC.js} +1 -1
- package/dist/client/assets/{general-BKqD1lIr.js → general-DI9irVIQ.js} +1 -1
- package/dist/client/assets/{generate-id-BaIFvm62.js → generate-id-BiV6m8fS.js} +1 -1
- package/dist/client/assets/{grid-view-DGZvuOwZ.js → grid-view-DurgUMuo.js} +1 -1
- package/dist/client/assets/{home-B7jB9Gxp.js → home-CspK560n.js} +1 -1
- package/dist/client/assets/{index-BgoahoDu.js → index-ChUIqRBi.js} +1 -1
- package/dist/client/assets/{index--PLXALUm.js → index-CqWJIMlG.js} +1 -1
- package/dist/client/assets/{index-WTO-ZRzC.js → index-CqtWW-Tq.js} +1 -1
- package/dist/client/assets/{index-10S4l3se.js → index-CqyqI90F.js} +1 -1
- package/dist/client/assets/{index-DZ6p-ZXx.js → index-De1iYnQy.js} +1 -1
- package/dist/client/assets/{index-DcxE8oe_.js → index-NjMxPJgF.js} +3 -3
- package/dist/client/assets/{index-DGLQ2uQ5.js → index-TV8hw8s3.js} +1 -1
- package/dist/client/assets/{index-Bc448aeG.js → index-YL7q5tyF.js} +1 -1
- package/dist/client/assets/{index-CTjqFNkw.js → index-YRudAQp7.js} +1 -1
- package/dist/client/assets/{index-B5vgf28x.js → index-yiVP4brl.js} +1 -1
- package/dist/client/assets/{index-CM7_8eMu.js → index-zWpUeKAz.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-CzIVu_kK.js → infiniteQueryObserver-JZ0YxCW-.js} +1 -1
- package/dist/client/assets/{input-DPpAbHbD.js → input-B89sozd8.js} +1 -1
- package/dist/client/assets/{integration-icon-6jcHFHZV.js → integration-icon-BPVDVJvP.js} +1 -1
- package/dist/client/assets/{label-BtaiiWJ8.js → label-DkiEYJcU.js} +1 -1
- package/dist/client/assets/{layout-Cjef80qc.js → layout-Cqn-h1Jz.js} +1 -1
- package/dist/client/assets/{layout-DG9LlvE6.js → layout-DcmGLVHZ.js} +1 -1
- package/dist/client/assets/{login-D1Xb70mS.js → login-qT_ItpIx.js} +1 -1
- package/dist/client/assets/{logo-upload-79T6Ecg3.js → logo-upload-CoGaedUC.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-DgOOTmoQ.js → mcp-app-renderer-By1mQEU9.js} +1 -1
- package/dist/client/assets/{mcp-server-card-CqBs71hZ.js → mcp-server-card-B3Nrrgyk.js} +1 -1
- package/dist/client/assets/{mcp-server-detail-D_BCRi3w.js → mcp-server-detail-DMfy0V9h.js} +2 -2
- package/dist/client/assets/{members-BkdG_-Nh.js → members-Q81LXZu1.js} +1 -1
- package/dist/client/assets/{monaco-editor-D5smiy7k.js → monaco-editor-ZB27PMAe.js} +1 -1
- package/dist/client/assets/{monitoring-kw0ipyvO.js → monitoring-C31A03PZ.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-edit-S2Ut1cvD.js → monitoring-dashboard-edit-Dfi8Jxeb.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-view-gNG_IQ8M.js → monitoring-dashboard-view-CxjxBHLW.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-D3PlzPcP.js → monitoring-stats-row-CAn-8pVZ.js} +1 -1
- package/dist/client/assets/{oauth-callback-9ngEzskH.js → oauth-callback-B8DRnSok.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CpdQKMVl.js → oauth-callback-ai-provider-CsTCxPAY.js} +1 -1
- package/dist/client/assets/{org-ai-providers-CrQ3OeB5.js → org-ai-providers-DaYyItUL.js} +1 -1
- package/dist/client/assets/{page-C2HdbsvN.js → page-BjLk0DX_.js} +1 -1
- package/dist/client/assets/{page-DmVGFJaY.js → page-C2I5Nlmu.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-DXhpvNlI.js → plugin-empty-state-K02oXRNN.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-CWxRJkeE.js → plugin-empty-state-l30u7dec.js} +1 -1
- package/dist/client/assets/{plugin-header-C3JJ8Nq_.js → plugin-header-B_wkRb4Y.js} +1 -1
- package/dist/client/assets/{plugin-header-TcX-3hN2.js → plugin-header-CE-BhILm.js} +1 -1
- package/dist/client/assets/plugins-6p4XZdw1.js +1 -0
- package/dist/client/assets/{popover-CNIkv0WT.js → popover-Br8QkMK3.js} +1 -1
- package/dist/client/assets/{project-app-view-BVSK5NCb.js → project-app-view-CRe7LVZk.js} +1 -1
- package/dist/client/assets/{project-layout-Bd1vlG83.js → project-layout-Bg1hlIaM.js} +1 -1
- package/dist/client/assets/{project-plugins-az_ZXSwN.js → project-plugins-BHOZZsH7.js} +1 -1
- package/dist/client/assets/{projects-list-D8eiYeUr.js → projects-list-i4ZvUqtI.js} +1 -1
- package/dist/client/assets/{registry-layout-BXceDqEw.js → registry-layout-DQV7LhSo.js} +1 -1
- package/dist/client/assets/{registry-utils-CkCRcmq4.js → registry-utils-cjX9P5J9.js} +1 -1
- package/dist/client/assets/{reset-password-xlfm2d95.js → reset-password-Cgcrl5ZG.js} +1 -1
- package/dist/client/assets/{resizable-B7fIdnoq.js → resizable-Nu1SqaJD.js} +1 -1
- package/dist/client/assets/{save-actions-DIKaTzi7.js → save-actions-CVl6VtT2.js} +1 -1
- package/dist/client/assets/{scroll-area-B-pB6oMr.js → scroll-area-BTJQ86Ry.js} +1 -1
- package/dist/client/assets/{select-DeNgR918.js → select-Dx3T3-4n.js} +1 -1
- package/dist/client/assets/{select-virtual-mcp-CFDIRCp8.js → select-virtual-mcp-BS537pmy.js} +1 -1
- package/dist/client/assets/{sheet-BBLyN2xl.js → sheet-C3HM0Uwr.js} +1 -1
- package/dist/client/assets/{shell-layout-CiKn6BP6.js → shell-layout-Bco0BFOl.js} +2 -2
- package/dist/client/assets/{sidebar-settings-DOwlHFdj.js → sidebar-settings-JhN4X_jg.js} +1 -1
- package/dist/client/assets/{skeleton-CNgs5GJt.js → skeleton-Cjm8s7CT.js} +1 -1
- package/dist/client/assets/{spinner-BZdAS5i2.js → spinner-Dzx7B3Jl.js} +1 -1
- package/dist/client/assets/{store-invite-BXcKXIzr.js → store-invite-BPcFU0aw.js} +1 -1
- package/dist/client/assets/{switch-CmREXk8C.js → switch-CA_oYDia.js} +1 -1
- package/dist/client/assets/{table-C4WVepD4.js → table-C-1rP_rt.js} +1 -1
- package/dist/client/assets/{tabs-BeYHPY-1.js → tabs-BSOe8gLq.js} +1 -1
- package/dist/client/assets/{task-status-DauQRqAW.js → task-status-DYx9R7EL.js} +1 -1
- package/dist/client/assets/tasks-D1X8oLa3.js +1 -0
- package/dist/client/assets/{tasks-panel-DqbQRMGq.js → tasks-panel-BJ3TfA-_.js} +1 -1
- package/dist/client/assets/{textarea-C7YqhWTc.js → textarea-DIJzFUWn.js} +1 -1
- package/dist/client/assets/{time-range-picker-CM-9xODE.js → time-range-picker-CGBh-D6p.js} +1 -1
- package/dist/client/assets/{toggle-group-B7g3fYap.js → toggle-group-DlZGDyPQ.js} +1 -1
- package/dist/client/assets/{tools-list-4D_tBiUe.js → tools-list-D-T64862.js} +1 -1
- package/dist/client/assets/{tooltip-CXZH0tSC.js → tooltip-BJMSu0c2.js} +1 -1
- package/dist/client/assets/{topbar-portal-CjA9qO3_.js → topbar-portal-ChPXVsi1.js} +1 -1
- package/dist/client/assets/{types-CPj3Y6i2.js → types-BHeMLyAV.js} +1 -1
- package/dist/client/assets/{use-automations-B0CZymwk.js → use-automations-Bmw3x7Dk.js} +1 -1
- package/dist/client/assets/{use-collections-CObsJD7p.js → use-collections-C0cYiFfV.js} +1 -1
- package/dist/client/assets/{use-connection-Cv_-e2MS.js → use-connection-CHFdKnsr.js} +1 -1
- package/dist/client/assets/{use-copy-sxHnzQ3E.js → use-copy-xhdji_Bl.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-dSjfTRl8.js → use-create-virtual-mcp-B7odZ_c3.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-CqxPDCSp.js → use-infinite-scroll-CPhZNIw7.js} +1 -1
- package/dist/client/assets/{use-install-from-registry-wW1d1HtB.js → use-install-from-registry-BzwuBLOx.js} +1 -1
- package/dist/client/assets/{use-list-state-CWVUvMhj.js → use-list-state-CbsN6RbJ.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-C4X4lEEg.js → use-mcp-prompts-Bel4H4rh.js} +1 -1
- package/dist/client/assets/{use-mcp-resources-DoUnZI9j.js → use-mcp-resources-qGdymfRz.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Cnh4vEBm.js → use-mcp-tools-BCZI_Wqc.js} +1 -1
- package/dist/client/assets/{use-members-BHa-Fb-h.js → use-members-B4ncWtMV.js} +1 -1
- package/dist/client/assets/{use-mobile-v2XXLV0O.js → use-mobile-DOUfTohp.js} +1 -1
- package/dist/client/assets/{use-project-B-9YXhNP.js → use-project-b5C3lq5-.js} +1 -1
- package/dist/client/assets/{use-store-discovery-z8nwAYJJ.js → use-store-discovery-B402mTHd.js} +1 -1
- package/dist/client/assets/{use-view-mode-XMRPR1ke.js → use-view-mode-ss3eRodO.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DfPJ-WDb.js → use-virtual-mcp-BP6aaUzw.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BXDrDvlH.js +1 -0
- package/dist/client/assets/{useMutation-CV3IN68C.js → useMutation-68NxhXCf.js} +1 -1
- package/dist/client/assets/useQuery-BYBCFxgb.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-X3jXt04i.js +1 -0
- package/dist/client/assets/{user-_Hc5WOWn.js → user-iDZRuimU.js} +1 -1
- package/dist/client/assets/{workflow-DKAllKJO.js → workflow-CrrTPehP.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/migrate.js +1 -1
- 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 → pg-pool}/LICENSE +1 -1
- 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/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/plugins-BfcAD8Xs.js +0 -1
- package/dist/client/assets/tasks-fQ7kFf17.js +0 -1
- package/dist/client/assets/useInfiniteQuery-BIejUr4H.js +0 -1
- package/dist/client/assets/useQuery-CEE9SUlS.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-B7NkSjI9.js +0 -1
- package/dist/server/node_modules/pg/README.md +0 -95
- package/dist/server/node_modules/pg/esm/index.mjs +0 -20
- package/dist/server/node_modules/pg/lib/client.js +0 -743
- package/dist/server/node_modules/pg/lib/connection-parameters.js +0 -171
- package/dist/server/node_modules/pg/lib/connection.js +0 -221
- package/dist/server/node_modules/pg/lib/crypto/cert-signatures.js +0 -122
- package/dist/server/node_modules/pg/lib/crypto/sasl.js +0 -212
- package/dist/server/node_modules/pg/lib/crypto/utils-legacy.js +0 -43
- package/dist/server/node_modules/pg/lib/crypto/utils-webcrypto.js +0 -89
- package/dist/server/node_modules/pg/lib/crypto/utils.js +0 -9
- package/dist/server/node_modules/pg/lib/defaults.js +0 -91
- package/dist/server/node_modules/pg/lib/index.js +0 -73
- package/dist/server/node_modules/pg/lib/native/client.js +0 -323
- package/dist/server/node_modules/pg/lib/native/index.js +0 -2
- package/dist/server/node_modules/pg/lib/native/query.js +0 -165
- package/dist/server/node_modules/pg/lib/query.js +0 -252
- package/dist/server/node_modules/pg/lib/result.js +0 -109
- package/dist/server/node_modules/pg/lib/stream.js +0 -83
- package/dist/server/node_modules/pg/lib/type-overrides.js +0 -35
- package/dist/server/node_modules/pg/lib/utils.js +0 -217
- package/dist/server/node_modules/pg/package.json +0 -76
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const { EventEmitter } = require('events')
|
|
4
|
-
|
|
5
|
-
const Result = require('./result')
|
|
6
|
-
const utils = require('./utils')
|
|
7
|
-
|
|
8
|
-
class Query extends EventEmitter {
|
|
9
|
-
constructor(config, values, callback) {
|
|
10
|
-
super()
|
|
11
|
-
|
|
12
|
-
config = utils.normalizeQueryConfig(config, values, callback)
|
|
13
|
-
|
|
14
|
-
this.text = config.text
|
|
15
|
-
this.values = config.values
|
|
16
|
-
this.rows = config.rows
|
|
17
|
-
this.types = config.types
|
|
18
|
-
this.name = config.name
|
|
19
|
-
this.queryMode = config.queryMode
|
|
20
|
-
this.binary = config.binary
|
|
21
|
-
// use unique portal name each time
|
|
22
|
-
this.portal = config.portal || ''
|
|
23
|
-
this.callback = config.callback
|
|
24
|
-
this._rowMode = config.rowMode
|
|
25
|
-
if (process.domain && config.callback) {
|
|
26
|
-
this.callback = process.domain.bind(config.callback)
|
|
27
|
-
}
|
|
28
|
-
this._result = new Result(this._rowMode, this.types)
|
|
29
|
-
|
|
30
|
-
// potential for multiple results
|
|
31
|
-
this._results = this._result
|
|
32
|
-
this._canceledDueToError = false
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
requiresPreparation() {
|
|
36
|
-
if (this.queryMode === 'extended') {
|
|
37
|
-
return true
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// named queries must always be prepared
|
|
41
|
-
if (this.name) {
|
|
42
|
-
return true
|
|
43
|
-
}
|
|
44
|
-
// always prepare if there are max number of rows expected per
|
|
45
|
-
// portal execution
|
|
46
|
-
if (this.rows) {
|
|
47
|
-
return true
|
|
48
|
-
}
|
|
49
|
-
// don't prepare empty text queries
|
|
50
|
-
if (!this.text) {
|
|
51
|
-
return false
|
|
52
|
-
}
|
|
53
|
-
// prepare if there are values
|
|
54
|
-
if (!this.values) {
|
|
55
|
-
return false
|
|
56
|
-
}
|
|
57
|
-
return this.values.length > 0
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
_checkForMultirow() {
|
|
61
|
-
// if we already have a result with a command property
|
|
62
|
-
// then we've already executed one query in a multi-statement simple query
|
|
63
|
-
// turn our results into an array of results
|
|
64
|
-
if (this._result.command) {
|
|
65
|
-
if (!Array.isArray(this._results)) {
|
|
66
|
-
this._results = [this._result]
|
|
67
|
-
}
|
|
68
|
-
this._result = new Result(this._rowMode, this._result._types)
|
|
69
|
-
this._results.push(this._result)
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// associates row metadata from the supplied
|
|
74
|
-
// message with this query object
|
|
75
|
-
// metadata used when parsing row results
|
|
76
|
-
handleRowDescription(msg) {
|
|
77
|
-
this._checkForMultirow()
|
|
78
|
-
this._result.addFields(msg.fields)
|
|
79
|
-
this._accumulateRows = this.callback || !this.listeners('row').length
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
handleDataRow(msg) {
|
|
83
|
-
let row
|
|
84
|
-
|
|
85
|
-
if (this._canceledDueToError) {
|
|
86
|
-
return
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
try {
|
|
90
|
-
row = this._result.parseRow(msg.fields)
|
|
91
|
-
} catch (err) {
|
|
92
|
-
this._canceledDueToError = err
|
|
93
|
-
return
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
this.emit('row', row, this._result)
|
|
97
|
-
if (this._accumulateRows) {
|
|
98
|
-
this._result.addRow(row)
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
handleCommandComplete(msg, connection) {
|
|
103
|
-
this._checkForMultirow()
|
|
104
|
-
this._result.addCommandComplete(msg)
|
|
105
|
-
// need to sync after each command complete of a prepared statement
|
|
106
|
-
// if we were using a row count which results in multiple calls to _getRows
|
|
107
|
-
if (this.rows) {
|
|
108
|
-
connection.sync()
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// if a named prepared statement is created with empty query text
|
|
113
|
-
// the backend will send an emptyQuery message but *not* a command complete message
|
|
114
|
-
// since we pipeline sync immediately after execute we don't need to do anything here
|
|
115
|
-
// unless we have rows specified, in which case we did not pipeline the initial sync call
|
|
116
|
-
handleEmptyQuery(connection) {
|
|
117
|
-
if (this.rows) {
|
|
118
|
-
connection.sync()
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
handleError(err, connection) {
|
|
123
|
-
// need to sync after error during a prepared statement
|
|
124
|
-
if (this._canceledDueToError) {
|
|
125
|
-
err = this._canceledDueToError
|
|
126
|
-
this._canceledDueToError = false
|
|
127
|
-
}
|
|
128
|
-
// if callback supplied do not emit error event as uncaught error
|
|
129
|
-
// events will bubble up to node process
|
|
130
|
-
if (this.callback) {
|
|
131
|
-
return this.callback(err)
|
|
132
|
-
}
|
|
133
|
-
this.emit('error', err)
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
handleReadyForQuery(con) {
|
|
137
|
-
if (this._canceledDueToError) {
|
|
138
|
-
return this.handleError(this._canceledDueToError, con)
|
|
139
|
-
}
|
|
140
|
-
if (this.callback) {
|
|
141
|
-
try {
|
|
142
|
-
this.callback(null, this._results)
|
|
143
|
-
} catch (err) {
|
|
144
|
-
process.nextTick(() => {
|
|
145
|
-
throw err
|
|
146
|
-
})
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
this.emit('end', this._results)
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
submit(connection) {
|
|
153
|
-
if (typeof this.text !== 'string' && typeof this.name !== 'string') {
|
|
154
|
-
return new Error('A query must have either text or a name. Supplying neither is unsupported.')
|
|
155
|
-
}
|
|
156
|
-
const previous = connection.parsedStatements[this.name]
|
|
157
|
-
if (this.text && previous && this.text !== previous) {
|
|
158
|
-
return new Error(`Prepared statements must be unique - '${this.name}' was used for a different statement`)
|
|
159
|
-
}
|
|
160
|
-
if (this.values && !Array.isArray(this.values)) {
|
|
161
|
-
return new Error('Query values must be an array')
|
|
162
|
-
}
|
|
163
|
-
if (this.requiresPreparation()) {
|
|
164
|
-
// If we're using the extended query protocol we fire off several separate commands
|
|
165
|
-
// to the backend. On some versions of node & some operating system versions
|
|
166
|
-
// the network stack writes each message separately instead of buffering them together
|
|
167
|
-
// causing the client & network to send more slowly. Corking & uncorking the stream
|
|
168
|
-
// allows node to buffer up the messages internally before sending them all off at once.
|
|
169
|
-
// note: we're checking for existence of cork/uncork because some versions of streams
|
|
170
|
-
// might not have this (cloudflare?)
|
|
171
|
-
connection.stream.cork && connection.stream.cork()
|
|
172
|
-
try {
|
|
173
|
-
this.prepare(connection)
|
|
174
|
-
} finally {
|
|
175
|
-
// while unlikely for this.prepare to throw, if it does & we don't uncork this stream
|
|
176
|
-
// this client becomes unresponsive, so put in finally block "just in case"
|
|
177
|
-
connection.stream.uncork && connection.stream.uncork()
|
|
178
|
-
}
|
|
179
|
-
} else {
|
|
180
|
-
connection.query(this.text)
|
|
181
|
-
}
|
|
182
|
-
return null
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
hasBeenParsed(connection) {
|
|
186
|
-
return this.name && connection.parsedStatements[this.name]
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
handlePortalSuspended(connection) {
|
|
190
|
-
this._getRows(connection, this.rows)
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
_getRows(connection, rows) {
|
|
194
|
-
connection.execute({
|
|
195
|
-
portal: this.portal,
|
|
196
|
-
rows: rows,
|
|
197
|
-
})
|
|
198
|
-
// if we're not reading pages of rows send the sync command
|
|
199
|
-
// to indicate the pipeline is finished
|
|
200
|
-
if (!rows) {
|
|
201
|
-
connection.sync()
|
|
202
|
-
} else {
|
|
203
|
-
// otherwise flush the call out to read more rows
|
|
204
|
-
connection.flush()
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
// http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY
|
|
209
|
-
prepare(connection) {
|
|
210
|
-
// TODO refactor this poor encapsulation
|
|
211
|
-
if (!this.hasBeenParsed(connection)) {
|
|
212
|
-
connection.parse({
|
|
213
|
-
text: this.text,
|
|
214
|
-
name: this.name,
|
|
215
|
-
types: this.types,
|
|
216
|
-
})
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
// because we're mapping user supplied values to
|
|
220
|
-
// postgres wire protocol compatible values it could
|
|
221
|
-
// throw an exception, so try/catch this section
|
|
222
|
-
try {
|
|
223
|
-
connection.bind({
|
|
224
|
-
portal: this.portal,
|
|
225
|
-
statement: this.name,
|
|
226
|
-
values: this.values,
|
|
227
|
-
binary: this.binary,
|
|
228
|
-
valueMapper: utils.prepareValue,
|
|
229
|
-
})
|
|
230
|
-
} catch (err) {
|
|
231
|
-
this.handleError(err, connection)
|
|
232
|
-
return
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
connection.describe({
|
|
236
|
-
type: 'P',
|
|
237
|
-
name: this.portal || '',
|
|
238
|
-
})
|
|
239
|
-
|
|
240
|
-
this._getRows(connection, this.rows)
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
handleCopyInResponse(connection) {
|
|
244
|
-
connection.sendCopyFail('No source stream defined')
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
handleCopyData(msg, connection) {
|
|
248
|
-
// noop
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
module.exports = Query
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const types = require('pg-types')
|
|
4
|
-
|
|
5
|
-
const matchRegexp = /^([A-Za-z]+)(?: (\d+))?(?: (\d+))?/
|
|
6
|
-
|
|
7
|
-
// result object returned from query
|
|
8
|
-
// in the 'end' event and also
|
|
9
|
-
// passed as second argument to provided callback
|
|
10
|
-
class Result {
|
|
11
|
-
constructor(rowMode, types) {
|
|
12
|
-
this.command = null
|
|
13
|
-
this.rowCount = null
|
|
14
|
-
this.oid = null
|
|
15
|
-
this.rows = []
|
|
16
|
-
this.fields = []
|
|
17
|
-
this._parsers = undefined
|
|
18
|
-
this._types = types
|
|
19
|
-
this.RowCtor = null
|
|
20
|
-
this.rowAsArray = rowMode === 'array'
|
|
21
|
-
if (this.rowAsArray) {
|
|
22
|
-
this.parseRow = this._parseRowAsArray
|
|
23
|
-
}
|
|
24
|
-
this._prebuiltEmptyResultObject = null
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// adds a command complete message
|
|
28
|
-
addCommandComplete(msg) {
|
|
29
|
-
let match
|
|
30
|
-
if (msg.text) {
|
|
31
|
-
// pure javascript
|
|
32
|
-
match = matchRegexp.exec(msg.text)
|
|
33
|
-
} else {
|
|
34
|
-
// native bindings
|
|
35
|
-
match = matchRegexp.exec(msg.command)
|
|
36
|
-
}
|
|
37
|
-
if (match) {
|
|
38
|
-
this.command = match[1]
|
|
39
|
-
if (match[3]) {
|
|
40
|
-
// COMMAND OID ROWS
|
|
41
|
-
this.oid = parseInt(match[2], 10)
|
|
42
|
-
this.rowCount = parseInt(match[3], 10)
|
|
43
|
-
} else if (match[2]) {
|
|
44
|
-
// COMMAND ROWS
|
|
45
|
-
this.rowCount = parseInt(match[2], 10)
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
_parseRowAsArray(rowData) {
|
|
51
|
-
const row = new Array(rowData.length)
|
|
52
|
-
for (let i = 0, len = rowData.length; i < len; i++) {
|
|
53
|
-
const rawValue = rowData[i]
|
|
54
|
-
if (rawValue !== null) {
|
|
55
|
-
row[i] = this._parsers[i](rawValue)
|
|
56
|
-
} else {
|
|
57
|
-
row[i] = null
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return row
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
parseRow(rowData) {
|
|
64
|
-
const row = { ...this._prebuiltEmptyResultObject }
|
|
65
|
-
for (let i = 0, len = rowData.length; i < len; i++) {
|
|
66
|
-
const rawValue = rowData[i]
|
|
67
|
-
const field = this.fields[i].name
|
|
68
|
-
if (rawValue !== null) {
|
|
69
|
-
const v = this.fields[i].format === 'binary' ? Buffer.from(rawValue) : rawValue
|
|
70
|
-
row[field] = this._parsers[i](v)
|
|
71
|
-
} else {
|
|
72
|
-
row[field] = null
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return row
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
addRow(row) {
|
|
79
|
-
this.rows.push(row)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
addFields(fieldDescriptions) {
|
|
83
|
-
// clears field definitions
|
|
84
|
-
// multiple query statements in 1 action can result in multiple sets
|
|
85
|
-
// of rowDescriptions...eg: 'select NOW(); select 1::int;'
|
|
86
|
-
// you need to reset the fields
|
|
87
|
-
this.fields = fieldDescriptions
|
|
88
|
-
if (this.fields.length) {
|
|
89
|
-
this._parsers = new Array(fieldDescriptions.length)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const row = {}
|
|
93
|
-
|
|
94
|
-
for (let i = 0; i < fieldDescriptions.length; i++) {
|
|
95
|
-
const desc = fieldDescriptions[i]
|
|
96
|
-
row[desc.name] = null
|
|
97
|
-
|
|
98
|
-
if (this._types) {
|
|
99
|
-
this._parsers[i] = this._types.getTypeParser(desc.dataTypeID, desc.format || 'text')
|
|
100
|
-
} else {
|
|
101
|
-
this._parsers[i] = types.getTypeParser(desc.dataTypeID, desc.format || 'text')
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
this._prebuiltEmptyResultObject = { ...row }
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
module.exports = Result
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
const { getStream, getSecureStream } = getStreamFuncs()
|
|
2
|
-
|
|
3
|
-
module.exports = {
|
|
4
|
-
/**
|
|
5
|
-
* Get a socket stream compatible with the current runtime environment.
|
|
6
|
-
* @returns {Duplex}
|
|
7
|
-
*/
|
|
8
|
-
getStream,
|
|
9
|
-
/**
|
|
10
|
-
* Get a TLS secured socket, compatible with the current environment,
|
|
11
|
-
* using the socket and other settings given in `options`.
|
|
12
|
-
* @returns {Duplex}
|
|
13
|
-
*/
|
|
14
|
-
getSecureStream,
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* The stream functions that work in Node.js
|
|
19
|
-
*/
|
|
20
|
-
function getNodejsStreamFuncs() {
|
|
21
|
-
function getStream(ssl) {
|
|
22
|
-
const net = require('net')
|
|
23
|
-
return new net.Socket()
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function getSecureStream(options) {
|
|
27
|
-
const tls = require('tls')
|
|
28
|
-
return tls.connect(options)
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
getStream,
|
|
32
|
-
getSecureStream,
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* The stream functions that work in Cloudflare Workers
|
|
38
|
-
*/
|
|
39
|
-
function getCloudflareStreamFuncs() {
|
|
40
|
-
function getStream(ssl) {
|
|
41
|
-
const { CloudflareSocket } = require('pg-cloudflare')
|
|
42
|
-
return new CloudflareSocket(ssl)
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function getSecureStream(options) {
|
|
46
|
-
options.socket.startTls(options)
|
|
47
|
-
return options.socket
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
getStream,
|
|
51
|
-
getSecureStream,
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Are we running in a Cloudflare Worker?
|
|
57
|
-
*
|
|
58
|
-
* @returns true if the code is currently running inside a Cloudflare Worker.
|
|
59
|
-
*/
|
|
60
|
-
function isCloudflareRuntime() {
|
|
61
|
-
// Since 2022-03-21 the `global_navigator` compatibility flag is on for Cloudflare Workers
|
|
62
|
-
// which means that `navigator.userAgent` will be defined.
|
|
63
|
-
// eslint-disable-next-line no-undef
|
|
64
|
-
if (typeof navigator === 'object' && navigator !== null && typeof navigator.userAgent === 'string') {
|
|
65
|
-
// eslint-disable-next-line no-undef
|
|
66
|
-
return navigator.userAgent === 'Cloudflare-Workers'
|
|
67
|
-
}
|
|
68
|
-
// In case `navigator` or `navigator.userAgent` is not defined then try a more sneaky approach
|
|
69
|
-
if (typeof Response === 'function') {
|
|
70
|
-
const resp = new Response(null, { cf: { thing: true } })
|
|
71
|
-
if (typeof resp.cf === 'object' && resp.cf !== null && resp.cf.thing) {
|
|
72
|
-
return true
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
return false
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function getStreamFuncs() {
|
|
79
|
-
if (isCloudflareRuntime()) {
|
|
80
|
-
return getCloudflareStreamFuncs()
|
|
81
|
-
}
|
|
82
|
-
return getNodejsStreamFuncs()
|
|
83
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const types = require('pg-types')
|
|
4
|
-
|
|
5
|
-
function TypeOverrides(userTypes) {
|
|
6
|
-
this._types = userTypes || types
|
|
7
|
-
this.text = {}
|
|
8
|
-
this.binary = {}
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
TypeOverrides.prototype.getOverrides = function (format) {
|
|
12
|
-
switch (format) {
|
|
13
|
-
case 'text':
|
|
14
|
-
return this.text
|
|
15
|
-
case 'binary':
|
|
16
|
-
return this.binary
|
|
17
|
-
default:
|
|
18
|
-
return {}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
TypeOverrides.prototype.setTypeParser = function (oid, format, parseFn) {
|
|
23
|
-
if (typeof format === 'function') {
|
|
24
|
-
parseFn = format
|
|
25
|
-
format = 'text'
|
|
26
|
-
}
|
|
27
|
-
this.getOverrides(format)[oid] = parseFn
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
TypeOverrides.prototype.getTypeParser = function (oid, format) {
|
|
31
|
-
format = format || 'text'
|
|
32
|
-
return this.getOverrides(format)[oid] || this._types.getTypeParser(oid, format)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
module.exports = TypeOverrides
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const defaults = require('./defaults')
|
|
4
|
-
|
|
5
|
-
const util = require('util')
|
|
6
|
-
const { isDate } = util.types || util // Node 8 doesn't have `util.types`
|
|
7
|
-
|
|
8
|
-
function escapeElement(elementRepresentation) {
|
|
9
|
-
const escaped = elementRepresentation.replace(/\\/g, '\\\\').replace(/"/g, '\\"')
|
|
10
|
-
|
|
11
|
-
return '"' + escaped + '"'
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// convert a JS array to a postgres array literal
|
|
15
|
-
// uses comma separator so won't work for types like box that use
|
|
16
|
-
// a different array separator.
|
|
17
|
-
function arrayString(val) {
|
|
18
|
-
let result = '{'
|
|
19
|
-
for (let i = 0; i < val.length; i++) {
|
|
20
|
-
if (i > 0) {
|
|
21
|
-
result = result + ','
|
|
22
|
-
}
|
|
23
|
-
if (val[i] === null || typeof val[i] === 'undefined') {
|
|
24
|
-
result = result + 'NULL'
|
|
25
|
-
} else if (Array.isArray(val[i])) {
|
|
26
|
-
result = result + arrayString(val[i])
|
|
27
|
-
} else if (ArrayBuffer.isView(val[i])) {
|
|
28
|
-
let item = val[i]
|
|
29
|
-
if (!(item instanceof Buffer)) {
|
|
30
|
-
const buf = Buffer.from(item.buffer, item.byteOffset, item.byteLength)
|
|
31
|
-
if (buf.length === item.byteLength) {
|
|
32
|
-
item = buf
|
|
33
|
-
} else {
|
|
34
|
-
item = buf.slice(item.byteOffset, item.byteOffset + item.byteLength)
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
result += '\\\\x' + item.toString('hex')
|
|
38
|
-
} else {
|
|
39
|
-
result += escapeElement(prepareValue(val[i]))
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
result = result + '}'
|
|
43
|
-
return result
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// converts values from javascript types
|
|
47
|
-
// to their 'raw' counterparts for use as a postgres parameter
|
|
48
|
-
// note: you can override this function to provide your own conversion mechanism
|
|
49
|
-
// for complex types, etc...
|
|
50
|
-
const prepareValue = function (val, seen) {
|
|
51
|
-
// null and undefined are both null for postgres
|
|
52
|
-
if (val == null) {
|
|
53
|
-
return null
|
|
54
|
-
}
|
|
55
|
-
if (typeof val === 'object') {
|
|
56
|
-
if (val instanceof Buffer) {
|
|
57
|
-
return val
|
|
58
|
-
}
|
|
59
|
-
if (ArrayBuffer.isView(val)) {
|
|
60
|
-
const buf = Buffer.from(val.buffer, val.byteOffset, val.byteLength)
|
|
61
|
-
if (buf.length === val.byteLength) {
|
|
62
|
-
return buf
|
|
63
|
-
}
|
|
64
|
-
return buf.slice(val.byteOffset, val.byteOffset + val.byteLength) // Node.js v4 does not support those Buffer.from params
|
|
65
|
-
}
|
|
66
|
-
if (isDate(val)) {
|
|
67
|
-
if (defaults.parseInputDatesAsUTC) {
|
|
68
|
-
return dateToStringUTC(val)
|
|
69
|
-
} else {
|
|
70
|
-
return dateToString(val)
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (Array.isArray(val)) {
|
|
74
|
-
return arrayString(val)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return prepareObject(val, seen)
|
|
78
|
-
}
|
|
79
|
-
return val.toString()
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
function prepareObject(val, seen) {
|
|
83
|
-
if (val && typeof val.toPostgres === 'function') {
|
|
84
|
-
seen = seen || []
|
|
85
|
-
if (seen.indexOf(val) !== -1) {
|
|
86
|
-
throw new Error('circular reference detected while preparing "' + val + '" for query')
|
|
87
|
-
}
|
|
88
|
-
seen.push(val)
|
|
89
|
-
|
|
90
|
-
return prepareValue(val.toPostgres(prepareValue), seen)
|
|
91
|
-
}
|
|
92
|
-
return JSON.stringify(val)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function dateToString(date) {
|
|
96
|
-
let offset = -date.getTimezoneOffset()
|
|
97
|
-
|
|
98
|
-
let year = date.getFullYear()
|
|
99
|
-
const isBCYear = year < 1
|
|
100
|
-
if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation
|
|
101
|
-
|
|
102
|
-
let ret =
|
|
103
|
-
String(year).padStart(4, '0') +
|
|
104
|
-
'-' +
|
|
105
|
-
String(date.getMonth() + 1).padStart(2, '0') +
|
|
106
|
-
'-' +
|
|
107
|
-
String(date.getDate()).padStart(2, '0') +
|
|
108
|
-
'T' +
|
|
109
|
-
String(date.getHours()).padStart(2, '0') +
|
|
110
|
-
':' +
|
|
111
|
-
String(date.getMinutes()).padStart(2, '0') +
|
|
112
|
-
':' +
|
|
113
|
-
String(date.getSeconds()).padStart(2, '0') +
|
|
114
|
-
'.' +
|
|
115
|
-
String(date.getMilliseconds()).padStart(3, '0')
|
|
116
|
-
|
|
117
|
-
if (offset < 0) {
|
|
118
|
-
ret += '-'
|
|
119
|
-
offset *= -1
|
|
120
|
-
} else {
|
|
121
|
-
ret += '+'
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
ret += String(Math.floor(offset / 60)).padStart(2, '0') + ':' + String(offset % 60).padStart(2, '0')
|
|
125
|
-
if (isBCYear) ret += ' BC'
|
|
126
|
-
return ret
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function dateToStringUTC(date) {
|
|
130
|
-
let year = date.getUTCFullYear()
|
|
131
|
-
const isBCYear = year < 1
|
|
132
|
-
if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation
|
|
133
|
-
|
|
134
|
-
let ret =
|
|
135
|
-
String(year).padStart(4, '0') +
|
|
136
|
-
'-' +
|
|
137
|
-
String(date.getUTCMonth() + 1).padStart(2, '0') +
|
|
138
|
-
'-' +
|
|
139
|
-
String(date.getUTCDate()).padStart(2, '0') +
|
|
140
|
-
'T' +
|
|
141
|
-
String(date.getUTCHours()).padStart(2, '0') +
|
|
142
|
-
':' +
|
|
143
|
-
String(date.getUTCMinutes()).padStart(2, '0') +
|
|
144
|
-
':' +
|
|
145
|
-
String(date.getUTCSeconds()).padStart(2, '0') +
|
|
146
|
-
'.' +
|
|
147
|
-
String(date.getUTCMilliseconds()).padStart(3, '0')
|
|
148
|
-
|
|
149
|
-
ret += '+00:00'
|
|
150
|
-
if (isBCYear) ret += ' BC'
|
|
151
|
-
return ret
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function normalizeQueryConfig(config, values, callback) {
|
|
155
|
-
// can take in strings or config objects
|
|
156
|
-
config = typeof config === 'string' ? { text: config } : config
|
|
157
|
-
if (values) {
|
|
158
|
-
if (typeof values === 'function') {
|
|
159
|
-
config.callback = values
|
|
160
|
-
} else {
|
|
161
|
-
config.values = values
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
if (callback) {
|
|
165
|
-
config.callback = callback
|
|
166
|
-
}
|
|
167
|
-
return config
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
// Ported from PostgreSQL 9.2.4 source code in src/interfaces/libpq/fe-exec.c
|
|
171
|
-
const escapeIdentifier = function (str) {
|
|
172
|
-
return '"' + str.replace(/"/g, '""') + '"'
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const escapeLiteral = function (str) {
|
|
176
|
-
let hasBackslash = false
|
|
177
|
-
let escaped = "'"
|
|
178
|
-
|
|
179
|
-
if (str == null) {
|
|
180
|
-
return "''"
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if (typeof str !== 'string') {
|
|
184
|
-
return "''"
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
for (let i = 0; i < str.length; i++) {
|
|
188
|
-
const c = str[i]
|
|
189
|
-
if (c === "'") {
|
|
190
|
-
escaped += c + c
|
|
191
|
-
} else if (c === '\\') {
|
|
192
|
-
escaped += c + c
|
|
193
|
-
hasBackslash = true
|
|
194
|
-
} else {
|
|
195
|
-
escaped += c
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
escaped += "'"
|
|
200
|
-
|
|
201
|
-
if (hasBackslash === true) {
|
|
202
|
-
escaped = ' E' + escaped
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return escaped
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
module.exports = {
|
|
209
|
-
prepareValue: function prepareValueWrapper(value) {
|
|
210
|
-
// this ensures that extra arguments do not get passed into prepareValue
|
|
211
|
-
// by accident, eg: from calling values.map(utils.prepareValue)
|
|
212
|
-
return prepareValue(value)
|
|
213
|
-
},
|
|
214
|
-
normalizeQueryConfig,
|
|
215
|
-
escapeIdentifier,
|
|
216
|
-
escapeLiteral,
|
|
217
|
-
}
|