@malloy-publisher/server 0.0.104 → 0.0.108
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/app/api-doc.yaml +133 -0
- package/dist/app/assets/Chip-DGhbYY0q.js +1 -0
- package/dist/app/assets/Container-B0KHzXKt.js +1 -0
- package/dist/app/assets/DialogTitle-DR48y6tE.js +1 -0
- package/dist/app/assets/Edit-DALFdGEc.js +1 -0
- package/dist/app/assets/FormControlContext-BRoFhJft.js +1 -0
- package/dist/app/assets/HomePage-D_nRraEL.js +3 -0
- package/dist/app/assets/MainPage-B4hVmqCL.js +1 -0
- package/dist/app/assets/MenuItem-_baoLhUG.js +1 -0
- package/dist/app/assets/Modal-BXBDnsg2.js +1 -0
- package/dist/app/assets/ModelPage-BKTJdSxS.js +2 -0
- package/dist/app/assets/MoreVert-CShGo3pe.js +1 -0
- package/dist/app/assets/PackagePage-z3SwXvJf.js +2 -0
- package/dist/app/assets/ProjectPage-jU6PqHcz.js +1 -0
- package/dist/app/assets/RouteError-xhztAFCv.js +1 -0
- package/dist/app/assets/WorkbookPage-BFAQAKC6.js +6 -0
- package/dist/app/assets/index-Bzmq4WOt.js +676 -0
- package/dist/app/assets/index-DIS-Myin.js +420 -0
- package/dist/app/assets/{index-CvbMKVwx.js → index-DoB7q17I.js} +7 -7
- package/dist/app/assets/index.es20-BPDKJ1mC.js +1 -0
- package/dist/app/assets/index.es23-CGcuw-pl.js +2 -0
- package/dist/app/assets/{index.es249-vQhhZ2LX.js → index.es297-CXXkvqrk.js} +1 -1
- package/dist/app/assets/{index.es250-CksNcviw.js → index.es298-Clb9Gx4p.js} +1 -1
- package/dist/app/assets/{index.es253-DEUN5ecV.js → index.es301-CvjmNg6I.js} +1 -1
- package/dist/app/assets/{index.es258-CBBAlEzL.js → index.es306-BTbwrAfY.js} +1 -1
- package/dist/app/assets/{index.es266-CtlTbXND.js → index.es314-i9HKymPG.js} +1 -1
- package/dist/app/assets/{index.es267-DvsB_mYL.js → index.es315-ffN5HvPT.js} +1 -1
- package/dist/app/assets/{index.es270-Cf0xo1Jt.js → index.es318-Dt5n7rl7.js} +1 -1
- package/dist/app/assets/{index.es274-B3p031dD.js → index.es322-DarpkShG.js} +1 -1
- package/dist/app/assets/{index.es277-CXhkNvQA.js → index.es325-DGXcHkJW.js} +1 -1
- package/dist/app/assets/{index.es280-CQqCEkit.js → index.es328-OrbxFN0T.js} +1 -1
- package/dist/app/assets/{index.es281-CQ39VpuA.js → index.es329-DOg4tLZf.js} +1 -1
- package/dist/app/assets/{index.es295-CsysVRym.js → index.es343-B3c-LWee.js} +1 -1
- package/dist/app/assets/{index.es296-C8jPQ3Rr.js → index.es344-BzlM_qzj.js} +1 -1
- package/dist/app/assets/{index.es297-6_Wr58nd.js → index.es345-Bx5jaaik.js} +1 -1
- package/dist/app/assets/{index.es299-DZRKfkIp.js → index.es347-D4l698Ba.js} +1 -1
- package/dist/app/assets/{index.es304-C22MomE6.js → index.es352-CpzIN4Ck.js} +1 -1
- package/dist/app/assets/{index.es306-CikFelEc.js → index.es354-BzQZ7qJD.js} +1 -1
- package/dist/app/assets/{index.es307-DDdo8Cr7.js → index.es355-DX--h2FO.js} +1 -1
- package/dist/app/assets/{index.es312-7wk1sW9I.js → index.es360-Brs4IhQL.js} +1 -1
- package/dist/app/assets/{index.es313-DjB156D0.js → index.es361-C_jQQEMZ.js} +1 -1
- package/dist/app/assets/{index.es315-CECan3M6.js → index.es363-BZd8QWNz.js} +1 -1
- package/dist/app/assets/{index.es316-BpzAZiXB.js → index.es364-5Y8szdnr.js} +1 -1
- package/dist/app/assets/{index.es317-B7DYWrJm.js → index.es365-iXnPxtgs.js} +1 -1
- package/dist/app/assets/{index.es320-CIh8KUcG.js → index.es368-BBVgx6aX.js} +1 -1
- package/dist/app/assets/{index.es322-Cfczm2Bl.js → index.es370-ClbIH95T.js} +1 -1
- package/dist/app/assets/{index.es323-CjaPjt8z.js → index.es371-DmqxEYIc.js} +1 -1
- package/dist/app/assets/{index.es324-DM8bgB31.js → index.es372-Bot_-48c.js} +1 -1
- package/dist/app/assets/{index.es330-CgQ5IRSZ.js → index.es378-B9aRQ00Z.js} +1 -1
- package/dist/app/assets/{index.es331-1Kn64e9h.js → index.es379-DQAEtWxw.js} +1 -1
- package/dist/app/assets/{index.es332-C5S6SaRd.js → index.es380-BBp8E5gV.js} +1 -1
- package/dist/app/assets/{index.es333-DRNI3y8C.js → index.es381-Cl0nVZsB.js} +1 -1
- package/dist/app/assets/{index.es335-Bky6ujZj.js → index.es383-BMW5Mbfn.js} +1 -1
- package/dist/app/assets/{index.es339-BlKzDsx7.js → index.es387-Cqwn90T2.js} +1 -1
- package/dist/app/assets/{index.es340-CV2drMme.js → index.es388-BGLiezvQ.js} +1 -1
- package/dist/app/assets/{index.es348-RwB794xL.js → index.es396-Dnto5_1_.js} +1 -1
- package/dist/app/assets/{index.es351-DxXG49oC.js → index.es399-oYyQuMIn.js} +1 -1
- package/dist/app/assets/{index.es354-CblwWSRe.js → index.es402-C7bOCmc3.js} +1 -1
- package/dist/app/assets/{index.es357-zGM2IebW.js → index.es405-CgiLlAXi.js} +1 -1
- package/dist/app/assets/{index.es361-CGhlwrAl.js → index.es409-CTqIYL8X.js} +1 -1
- package/dist/app/assets/{index.es363-BMG8Qu1P.js → index.es411-DCscG5n_.js} +1 -1
- package/dist/app/assets/{index.es371-DOrO3dlY.js → index.es419-D8w4xXW-.js} +1 -1
- package/dist/app/assets/{index.es372-C3qt3nbG.js → index.es420-CoY4mPyG.js} +1 -1
- package/dist/app/assets/{index.es379-ozNxe-JA.js → index.es427-DPgNELR1.js} +1 -1
- package/dist/app/assets/{index.es380-D-1e6bJP.js → index.es428-CKGg3G7e.js} +1 -1
- package/dist/app/assets/{index.es390-JWq4SvhU.js → index.es438-DLZwD0On.js} +1 -1
- package/dist/app/assets/{index.es394-BqfF9xAw.js → index.es442-CeFC_3kB.js} +1 -1
- package/dist/app/assets/{index.es400-DFk1u2rb.js → index.es448-Bkdic4-K.js} +1 -1
- package/dist/app/assets/{index.es405-B44zXQ2s.js → index.es453-BTUy9umd.js} +1 -1
- package/dist/app/assets/{index.es406-DtZqlgbp.js → index.es454-B-wtdVwd.js} +1 -1
- package/dist/app/assets/{index.es408-CMnKExjm.js → index.es456-DMl0frQV.js} +1 -1
- package/dist/app/assets/{index.es412-BUhztRl-.js → index.es460-BCFWaHpj.js} +1 -1
- package/dist/app/assets/{index.es414-BTSAIgvA.js → index.es462-CMWboMtJ.js} +1 -1
- package/dist/app/assets/{index.es416-hhTkRuCJ.js → index.es464-3Yi-DUIC.js} +1 -1
- package/dist/app/assets/{index.es419-DThbt6Ye.js → index.es467-Bhyygz2G.js} +1 -1
- package/dist/app/assets/{index.es420-BJwAPUTz.js → index.es468-HCYOhbfy.js} +1 -1
- package/dist/app/assets/{index.es424-C0rPM_VP.js → index.es472-BGdt37JU.js} +1 -1
- package/dist/app/assets/{index.es426-RDpd2VRz.js → index.es474-Cvsrw_ol.js} +1 -1
- package/dist/app/assets/{index.es433-BhZ0-KPw.js → index.es481-CQK61FBO.js} +1 -1
- package/dist/app/assets/{index.es435-DZeQaCUO.js → index.es483-_fCFzllD.js} +1 -1
- package/dist/app/assets/{index.es437-B9GL_sFZ.js → index.es485-onmvNF-0.js} +1 -1
- package/dist/app/assets/{index.es441-CTE1R4Hu.js → index.es489-7PLT4DLq.js} +1 -1
- package/dist/app/assets/{index.es451-kJsmP3kY.js → index.es499-C0JWr_xK.js} +1 -1
- package/dist/app/assets/{index.es452-B31qAn1V.js → index.es500-D41F9-Tw.js} +1 -1
- package/dist/app/assets/{index.es459-CC57CidG.js → index.es507-DKp0nulG.js} +1 -1
- package/dist/app/assets/{index.es460-Cid_wmHI.js → index.es508-ilzXBvKZ.js} +1 -1
- package/dist/app/assets/index.es7-C8O8lseo.js +1 -0
- package/dist/app/assets/index.modern-Da9HWSay.js +17 -0
- package/dist/app/assets/{index.umd-DknWdzGi.js → index.umd-BJAbIV_-.js} +61 -61
- package/dist/app/assets/listItemTextClasses-DhilXbg6.js +1 -0
- package/dist/app/index.html +1 -3
- package/dist/server.js +1840 -6281
- package/eslint.config.mjs +16 -3
- package/package.json +81 -81
- package/publisher.config.json +32 -25
- package/src/config.ts +61 -1
- package/src/constants.ts +0 -1
- package/src/controller/connection.controller.ts +2 -2
- package/src/server.ts +73 -13
- package/src/service/connection.ts +25 -15
- package/src/service/package.spec.ts +67 -22
- package/src/service/package.ts +14 -2
- package/src/service/project.ts +13 -31
- package/src/service/project_store.spec.ts +30 -53
- package/src/service/project_store.ts +100 -68
- package/dist/app/assets/index-6Jnc0Dwt.js +0 -240
- package/dist/app/assets/index-SM0qJxoC.js +0 -676
- package/dist/app/assets/index.es24-Cn4yPrhQ.js +0 -2
- package/dist/app/assets/mui-BL9dYvR2.js +0 -159
- package/dist/app/assets/vendor-c5ypKtDW.js +0 -17
- /package/dist/app/assets/{index.es238-CG6Dc4jp.js → index.es286-CG6Dc4jp.js} +0 -0
- /package/dist/app/assets/{index.es246-DsBKuouk.js → index.es294-DsBKuouk.js} +0 -0
- /package/dist/app/assets/{index.es247-D_z4Izcz.js → index.es295-D_z4Izcz.js} +0 -0
- /package/dist/app/assets/{index.es248-727ZlQH0.js → index.es296-727ZlQH0.js} +0 -0
- /package/dist/app/assets/{index.es251-Dn00JSTd.js → index.es299-Dn00JSTd.js} +0 -0
- /package/dist/app/assets/{index.es252-COJ4H7py.js → index.es300-COJ4H7py.js} +0 -0
- /package/dist/app/assets/{index.es254-Bu5BbsvL.js → index.es302-Bu5BbsvL.js} +0 -0
- /package/dist/app/assets/{index.es255-7O62HKoU.js → index.es303-7O62HKoU.js} +0 -0
- /package/dist/app/assets/{index.es256-BPT9niGB.js → index.es304-BPT9niGB.js} +0 -0
- /package/dist/app/assets/{index.es257-Dhn9LcZ4.js → index.es305-Dhn9LcZ4.js} +0 -0
- /package/dist/app/assets/{index.es259-eg146-Ew.js → index.es307-eg146-Ew.js} +0 -0
- /package/dist/app/assets/{index.es260-Du268qiB.js → index.es308-Du268qiB.js} +0 -0
- /package/dist/app/assets/{index.es261-fje9CFhw.js → index.es309-fje9CFhw.js} +0 -0
- /package/dist/app/assets/{index.es262-BwXTMy5W.js → index.es310-BwXTMy5W.js} +0 -0
- /package/dist/app/assets/{index.es263-3xVqZejG.js → index.es311-3xVqZejG.js} +0 -0
- /package/dist/app/assets/{index.es264-xW4inM5L.js → index.es312-xW4inM5L.js} +0 -0
- /package/dist/app/assets/{index.es265-DHo0CJ0O.js → index.es313-DHo0CJ0O.js} +0 -0
- /package/dist/app/assets/{index.es268-C3t2pwGQ.js → index.es316-C3t2pwGQ.js} +0 -0
- /package/dist/app/assets/{index.es269-DNquZEk8.js → index.es317-DNquZEk8.js} +0 -0
- /package/dist/app/assets/{index.es271-BHOwM8T6.js → index.es319-BHOwM8T6.js} +0 -0
- /package/dist/app/assets/{index.es272-DxSadP1t.js → index.es320-DxSadP1t.js} +0 -0
- /package/dist/app/assets/{index.es273-DbXoA79R.js → index.es321-DbXoA79R.js} +0 -0
- /package/dist/app/assets/{index.es275-Bp6g37R7.js → index.es323-Bp6g37R7.js} +0 -0
- /package/dist/app/assets/{index.es276-sacFqUAJ.js → index.es324-sacFqUAJ.js} +0 -0
- /package/dist/app/assets/{index.es278-C7gG9l05.js → index.es326-C7gG9l05.js} +0 -0
- /package/dist/app/assets/{index.es279-Dsg_Bt_b.js → index.es327-Dsg_Bt_b.js} +0 -0
- /package/dist/app/assets/{index.es282-D9R-vmeu.js → index.es330-D9R-vmeu.js} +0 -0
- /package/dist/app/assets/{index.es283-BPhBrDlE.js → index.es331-BPhBrDlE.js} +0 -0
- /package/dist/app/assets/{index.es284-C-TU5hQ_.js → index.es332-C-TU5hQ_.js} +0 -0
- /package/dist/app/assets/{index.es285-DtFQj3wx.js → index.es333-DtFQj3wx.js} +0 -0
- /package/dist/app/assets/{index.es286-m2LEI-9-.js → index.es334-m2LEI-9-.js} +0 -0
- /package/dist/app/assets/{index.es287-BoXegm-a.js → index.es335-BoXegm-a.js} +0 -0
- /package/dist/app/assets/{index.es288-B9wLZaAG.js → index.es336-B9wLZaAG.js} +0 -0
- /package/dist/app/assets/{index.es289-ClGRhx96.js → index.es337-ClGRhx96.js} +0 -0
- /package/dist/app/assets/{index.es290-DEIpsLCJ.js → index.es338-DEIpsLCJ.js} +0 -0
- /package/dist/app/assets/{index.es291-BgYniUM_.js → index.es339-BgYniUM_.js} +0 -0
- /package/dist/app/assets/{index.es292-COcR7UxN.js → index.es340-COcR7UxN.js} +0 -0
- /package/dist/app/assets/{index.es293-BjQB5zDj.js → index.es341-BjQB5zDj.js} +0 -0
- /package/dist/app/assets/{index.es294-C-nORZOA.js → index.es342-C-nORZOA.js} +0 -0
- /package/dist/app/assets/{index.es298-BX77sIaO.js → index.es346-BX77sIaO.js} +0 -0
- /package/dist/app/assets/{index.es300-B-DoSBHF.js → index.es348-B-DoSBHF.js} +0 -0
- /package/dist/app/assets/{index.es301-bCA53EVm.js → index.es349-bCA53EVm.js} +0 -0
- /package/dist/app/assets/{index.es302-w-ucz2PV.js → index.es350-w-ucz2PV.js} +0 -0
- /package/dist/app/assets/{index.es303-Dayu4EKP.js → index.es351-Dayu4EKP.js} +0 -0
- /package/dist/app/assets/{index.es305-DKXYxT9g.js → index.es353-DKXYxT9g.js} +0 -0
- /package/dist/app/assets/{index.es308-DfxzS6Rs.js → index.es356-DfxzS6Rs.js} +0 -0
- /package/dist/app/assets/{index.es309-SKMF96pI.js → index.es357-SKMF96pI.js} +0 -0
- /package/dist/app/assets/{index.es310-ajMbGru0.js → index.es358-ajMbGru0.js} +0 -0
- /package/dist/app/assets/{index.es311--30QC5Em.js → index.es359--30QC5Em.js} +0 -0
- /package/dist/app/assets/{index.es314-B430Bg39.js → index.es362-B430Bg39.js} +0 -0
- /package/dist/app/assets/{index.es318-CM8KxXT1.js → index.es366-CM8KxXT1.js} +0 -0
- /package/dist/app/assets/{index.es319-B1SYOhNW.js → index.es367-B1SYOhNW.js} +0 -0
- /package/dist/app/assets/{index.es321-DkBy-JyN.js → index.es369-DkBy-JyN.js} +0 -0
- /package/dist/app/assets/{index.es325-BILxekzW.js → index.es373-BILxekzW.js} +0 -0
- /package/dist/app/assets/{index.es326-C5wWYbrZ.js → index.es374-C5wWYbrZ.js} +0 -0
- /package/dist/app/assets/{index.es327-HzYwdGDm.js → index.es375-HzYwdGDm.js} +0 -0
- /package/dist/app/assets/{index.es328-T-Tgc4AT.js → index.es376-T-Tgc4AT.js} +0 -0
- /package/dist/app/assets/{index.es329-ifBTmRxC.js → index.es377-ifBTmRxC.js} +0 -0
- /package/dist/app/assets/{index.es334-BMj5Y0dO.js → index.es382-BMj5Y0dO.js} +0 -0
- /package/dist/app/assets/{index.es336-BjABl1g7.js → index.es384-BjABl1g7.js} +0 -0
- /package/dist/app/assets/{index.es337-xI-RfyKK.js → index.es385-xI-RfyKK.js} +0 -0
- /package/dist/app/assets/{index.es338-ySlJ1b_l.js → index.es386-ySlJ1b_l.js} +0 -0
- /package/dist/app/assets/{index.es341-BQoSv7ci.js → index.es389-BQoSv7ci.js} +0 -0
- /package/dist/app/assets/{index.es342-w8dY5SsB.js → index.es390-w8dY5SsB.js} +0 -0
- /package/dist/app/assets/{index.es343-TU54ms6u.js → index.es391-TU54ms6u.js} +0 -0
- /package/dist/app/assets/{index.es344-DREVFZK8.js → index.es392-DREVFZK8.js} +0 -0
- /package/dist/app/assets/{index.es345-BfivnA6A.js → index.es393-BfivnA6A.js} +0 -0
- /package/dist/app/assets/{index.es346-P4WzXJd0.js → index.es394-P4WzXJd0.js} +0 -0
- /package/dist/app/assets/{index.es347-BAng5TT0.js → index.es395-BAng5TT0.js} +0 -0
- /package/dist/app/assets/{index.es349-B5lbUyaz.js → index.es397-B5lbUyaz.js} +0 -0
- /package/dist/app/assets/{index.es350-mebxcVVE.js → index.es398-mebxcVVE.js} +0 -0
- /package/dist/app/assets/{index.es352-XBlWyCtg.js → index.es400-XBlWyCtg.js} +0 -0
- /package/dist/app/assets/{index.es353-BfCpw3nA.js → index.es401-BfCpw3nA.js} +0 -0
- /package/dist/app/assets/{index.es355-Cc5clBb7.js → index.es403-Cc5clBb7.js} +0 -0
- /package/dist/app/assets/{index.es356-IuBKFhSY.js → index.es404-IuBKFhSY.js} +0 -0
- /package/dist/app/assets/{index.es358-Du5NY7AG.js → index.es406-Du5NY7AG.js} +0 -0
- /package/dist/app/assets/{index.es359-Bvotw-X0.js → index.es407-Bvotw-X0.js} +0 -0
- /package/dist/app/assets/{index.es360-UIAJJxZW.js → index.es408-UIAJJxZW.js} +0 -0
- /package/dist/app/assets/{index.es362-D9-PGadD.js → index.es410-D9-PGadD.js} +0 -0
- /package/dist/app/assets/{index.es364-sdHcTMYB.js → index.es412-sdHcTMYB.js} +0 -0
- /package/dist/app/assets/{index.es365-Ci6OQyBP.js → index.es413-Ci6OQyBP.js} +0 -0
- /package/dist/app/assets/{index.es366-BC5c_5Pe.js → index.es414-BC5c_5Pe.js} +0 -0
- /package/dist/app/assets/{index.es367-Tz6hzZYG.js → index.es415-Tz6hzZYG.js} +0 -0
- /package/dist/app/assets/{index.es368-DB_GagMm.js → index.es416-DB_GagMm.js} +0 -0
- /package/dist/app/assets/{index.es369-DLbgOhZU.js → index.es417-DLbgOhZU.js} +0 -0
- /package/dist/app/assets/{index.es370-B0XVJmRM.js → index.es418-B0XVJmRM.js} +0 -0
- /package/dist/app/assets/{index.es373-shcSOmrb.js → index.es421-shcSOmrb.js} +0 -0
- /package/dist/app/assets/{index.es374-D4Tzg5kh.js → index.es422-D4Tzg5kh.js} +0 -0
- /package/dist/app/assets/{index.es375-Deuh7S70.js → index.es423-Deuh7S70.js} +0 -0
- /package/dist/app/assets/{index.es376-BUEGK8hf.js → index.es424-BUEGK8hf.js} +0 -0
- /package/dist/app/assets/{index.es377-BNioltXt.js → index.es425-BNioltXt.js} +0 -0
- /package/dist/app/assets/{index.es378-JqZropPD.js → index.es426-JqZropPD.js} +0 -0
- /package/dist/app/assets/{index.es381-LKU2TuZ1.js → index.es429-LKU2TuZ1.js} +0 -0
- /package/dist/app/assets/{index.es382-BFLt1xDp.js → index.es430-BFLt1xDp.js} +0 -0
- /package/dist/app/assets/{index.es383-DKykz6zU.js → index.es431-DKykz6zU.js} +0 -0
- /package/dist/app/assets/{index.es384-B3ZDOciz.js → index.es432-B3ZDOciz.js} +0 -0
- /package/dist/app/assets/{index.es385-CSHBycmS.js → index.es433-CSHBycmS.js} +0 -0
- /package/dist/app/assets/{index.es386-BIEUsx6d.js → index.es434-BIEUsx6d.js} +0 -0
- /package/dist/app/assets/{index.es387-B48N-Iqd.js → index.es435-B48N-Iqd.js} +0 -0
- /package/dist/app/assets/{index.es388-BY-TUvya.js → index.es436-BY-TUvya.js} +0 -0
- /package/dist/app/assets/{index.es389-zocC4JxJ.js → index.es437-zocC4JxJ.js} +0 -0
- /package/dist/app/assets/{index.es391-Cza_XSSt.js → index.es439-Cza_XSSt.js} +0 -0
- /package/dist/app/assets/{index.es392-Bg-kzb6g.js → index.es440-Bg-kzb6g.js} +0 -0
- /package/dist/app/assets/{index.es393-DhUJRlN_.js → index.es441-DhUJRlN_.js} +0 -0
- /package/dist/app/assets/{index.es395-C8lEn-DE.js → index.es443-C8lEn-DE.js} +0 -0
- /package/dist/app/assets/{index.es396-DhMKtDLN.js → index.es444-DhMKtDLN.js} +0 -0
- /package/dist/app/assets/{index.es397-CwjWoCRV.js → index.es445-CwjWoCRV.js} +0 -0
- /package/dist/app/assets/{index.es398-CzouJOBO.js → index.es446-CzouJOBO.js} +0 -0
- /package/dist/app/assets/{index.es399-B1bQXN8T.js → index.es447-B1bQXN8T.js} +0 -0
- /package/dist/app/assets/{index.es401-5LuOXUq_.js → index.es449-5LuOXUq_.js} +0 -0
- /package/dist/app/assets/{index.es402-DWJ3fJO_.js → index.es450-DWJ3fJO_.js} +0 -0
- /package/dist/app/assets/{index.es403-DJlmqQ1C.js → index.es451-DJlmqQ1C.js} +0 -0
- /package/dist/app/assets/{index.es404-QhoSD0DR.js → index.es452-QhoSD0DR.js} +0 -0
- /package/dist/app/assets/{index.es407-Be6lgOlo.js → index.es455-Be6lgOlo.js} +0 -0
- /package/dist/app/assets/{index.es409-BJ4Li9vH.js → index.es457-BJ4Li9vH.js} +0 -0
- /package/dist/app/assets/{index.es410-DQVVAn-B.js → index.es458-DQVVAn-B.js} +0 -0
- /package/dist/app/assets/{index.es411-BJGe-b2p.js → index.es459-BJGe-b2p.js} +0 -0
- /package/dist/app/assets/{index.es413-BLhTXw86.js → index.es461-BLhTXw86.js} +0 -0
- /package/dist/app/assets/{index.es415-atvbtKCR.js → index.es463-atvbtKCR.js} +0 -0
- /package/dist/app/assets/{index.es417-DkLiglaE.js → index.es465-DkLiglaE.js} +0 -0
- /package/dist/app/assets/{index.es418-C1w2a3ep.js → index.es466-C1w2a3ep.js} +0 -0
- /package/dist/app/assets/{index.es421-Cf8iN4DR.js → index.es469-Cf8iN4DR.js} +0 -0
- /package/dist/app/assets/{index.es422-COK4E0Yg.js → index.es470-COK4E0Yg.js} +0 -0
- /package/dist/app/assets/{index.es423-BknIz3MU.js → index.es471-BknIz3MU.js} +0 -0
- /package/dist/app/assets/{index.es425-BeQkCIfX.js → index.es473-BeQkCIfX.js} +0 -0
- /package/dist/app/assets/{index.es427-BSxZ-RaX.js → index.es475-BSxZ-RaX.js} +0 -0
- /package/dist/app/assets/{index.es428-C7L56vO4.js → index.es476-C7L56vO4.js} +0 -0
- /package/dist/app/assets/{index.es429-CUnW07Te.js → index.es477-CUnW07Te.js} +0 -0
- /package/dist/app/assets/{index.es430-C1XDQQGZ.js → index.es478-C1XDQQGZ.js} +0 -0
- /package/dist/app/assets/{index.es431-CQjiPCtT.js → index.es479-CQjiPCtT.js} +0 -0
- /package/dist/app/assets/{index.es432-DQ1-QYvQ.js → index.es480-DQ1-QYvQ.js} +0 -0
- /package/dist/app/assets/{index.es434-BbSNqyBO.js → index.es482-BbSNqyBO.js} +0 -0
- /package/dist/app/assets/{index.es436-CB2ApiWb.js → index.es484-CB2ApiWb.js} +0 -0
- /package/dist/app/assets/{index.es438-B_m7g4N7.js → index.es486-B_m7g4N7.js} +0 -0
- /package/dist/app/assets/{index.es439-B6W0miNI.js → index.es487-B6W0miNI.js} +0 -0
- /package/dist/app/assets/{index.es440-BMR_PYu6.js → index.es488-BMR_PYu6.js} +0 -0
- /package/dist/app/assets/{index.es442-Dj6nwHGl.js → index.es490-Dj6nwHGl.js} +0 -0
- /package/dist/app/assets/{index.es443-BpWG_bgh.js → index.es491-BpWG_bgh.js} +0 -0
- /package/dist/app/assets/{index.es444-BVUVsWT6.js → index.es492-BVUVsWT6.js} +0 -0
- /package/dist/app/assets/{index.es445-CAQ2eGtk.js → index.es493-CAQ2eGtk.js} +0 -0
- /package/dist/app/assets/{index.es446-BFOHcciG.js → index.es494-BFOHcciG.js} +0 -0
- /package/dist/app/assets/{index.es447-CdO5JTpU.js → index.es495-CdO5JTpU.js} +0 -0
- /package/dist/app/assets/{index.es448-CJaU5se_.js → index.es496-CJaU5se_.js} +0 -0
- /package/dist/app/assets/{index.es449-DYoNaHQp.js → index.es497-DYoNaHQp.js} +0 -0
- /package/dist/app/assets/{index.es450-m4uW47V2.js → index.es498-m4uW47V2.js} +0 -0
- /package/dist/app/assets/{index.es453-nyqBNV6O.js → index.es501-nyqBNV6O.js} +0 -0
- /package/dist/app/assets/{index.es454-C6j12Q_x.js → index.es502-C6j12Q_x.js} +0 -0
- /package/dist/app/assets/{index.es455-7A4Fjokl.js → index.es503-7A4Fjokl.js} +0 -0
- /package/dist/app/assets/{index.es456-CB0Krxn9.js → index.es504-CB0Krxn9.js} +0 -0
- /package/dist/app/assets/{index.es457-DCE3LsBG.js → index.es505-DCE3LsBG.js} +0 -0
- /package/dist/app/assets/{index.es458-C3FkfJm5.js → index.es506-C3FkfJm5.js} +0 -0
- /package/dist/app/assets/{index.es461-CVw76BM1.js → index.es509-CVw76BM1.js} +0 -0
- /package/dist/app/assets/{index.es462-HnGAYVZD.js → index.es510-HnGAYVZD.js} +0 -0
- /package/dist/app/assets/{index.es463-BVz_zdnA.js → index.es511-BVz_zdnA.js} +0 -0
- /package/dist/app/assets/{index.es464-C3khCPGq.js → index.es512-C3khCPGq.js} +0 -0
- /package/dist/app/assets/{index.es465-D-2ljcwZ.js → index.es513-D-2ljcwZ.js} +0 -0
- /package/dist/app/assets/{index.es466-Cv9koXgw.js → index.es514-Cv9koXgw.js} +0 -0
- /package/dist/app/assets/{index.es467-CD_QflpE.js → index.es515-CD_QflpE.js} +0 -0
- /package/dist/app/assets/{index.es468-DRW-0cLl.js → index.es516-DRW-0cLl.js} +0 -0
- /package/dist/app/assets/{index.es469-C-_shW-Y.js → index.es517-C-_shW-Y.js} +0 -0
- /package/dist/app/assets/{index.es470-LGGdnPYs.js → index.es518-LGGdnPYs.js} +0 -0
- /package/dist/app/assets/{index.es471-C3mMm8J8.js → index.es519-C3mMm8J8.js} +0 -0
- /package/dist/app/assets/{index.es472-BzJJZx-M.js → index.es520-BzJJZx-M.js} +0 -0
- /package/dist/app/assets/{index.es473-BXkSAIEj.js → index.es521-BXkSAIEj.js} +0 -0
- /package/dist/app/assets/{index.es474-BgDCqdQA.js → index.es522-BgDCqdQA.js} +0 -0
- /package/dist/app/assets/{index.es475-C8M2exoo.js → index.es523-C8M2exoo.js} +0 -0
- /package/dist/app/assets/{index.es476-DHJKELXO.js → index.es524-DHJKELXO.js} +0 -0
- /package/dist/app/assets/{index.es477-Cuk6v7N8.js → index.es525-Cuk6v7N8.js} +0 -0
- /package/dist/app/assets/{index.es478-DH5Ifo-i.js → index.es526-DH5Ifo-i.js} +0 -0
- /package/dist/app/assets/{index.es479-E3gJ1_iC.js → index.es527-E3gJ1_iC.js} +0 -0
- /package/dist/app/assets/{index.es480-DAi9KRSo.js → index.es528-DAi9KRSo.js} +0 -0
- /package/dist/app/assets/{index.es481-D7oLnXFd.js → index.es529-D7oLnXFd.js} +0 -0
- /package/dist/app/assets/{index.es482-BfjtVDDH.js → index.es530-BfjtVDDH.js} +0 -0
- /package/dist/app/assets/{index.es483-DnULxvSX.js → index.es531-DnULxvSX.js} +0 -0
- /package/dist/app/assets/{index.es484-CkXjmgJE.js → index.es532-CkXjmgJE.js} +0 -0
- /package/dist/app/assets/{index.es485-CfQXZHmo.js → index.es533-CfQXZHmo.js} +0 -0
- /package/dist/app/assets/{index.es486-DWedfzmr.js → index.es534-DWedfzmr.js} +0 -0
- /package/dist/app/assets/{index.es487-DUszq2jm.js → index.es535-DUszq2jm.js} +0 -0
- /package/dist/app/assets/{index.es488-B7mTdjB0.js → index.es536-B7mTdjB0.js} +0 -0
- /package/dist/app/assets/{index.es489-D5KoaKCx.js → index.es537-D5KoaKCx.js} +0 -0
- /package/dist/app/assets/{index.es490-BfHTSMKl.js → index.es538-BfHTSMKl.js} +0 -0
- /package/dist/app/assets/{index.es491-B0m2ddpp.js → index.es539-B0m2ddpp.js} +0 -0
- /package/dist/app/assets/{index.es492-CyktbL80.js → index.es540-CyktbL80.js} +0 -0
- /package/dist/app/assets/{index.es493-Csfq5Kiy.js → index.es541-Csfq5Kiy.js} +0 -0
- /package/dist/app/assets/{index.es494-CafNBF8u.js → index.es542-CafNBF8u.js} +0 -0
- /package/dist/app/assets/{index.es495-CTRr51gU.js → index.es543-CTRr51gU.js} +0 -0
- /package/dist/app/assets/{index.es496-D4h5O-jR.js → index.es544-D4h5O-jR.js} +0 -0
- /package/dist/app/assets/{index.es497-C39BiMTA.js → index.es545-C39BiMTA.js} +0 -0
- /package/dist/app/assets/{index.es498-Ddv68eIx.js → index.es546-Ddv68eIx.js} +0 -0
- /package/dist/app/assets/{index.es499-GBQ2dnAY.js → index.es547-GBQ2dnAY.js} +0 -0
- /package/dist/app/assets/{index.es500-PoHY5YXO.js → index.es548-PoHY5YXO.js} +0 -0
- /package/dist/app/assets/{index.es501-3e1v2bzS.js → index.es549-3e1v2bzS.js} +0 -0
- /package/dist/app/assets/{index.es502-CS3Unz2-.js → index.es550-CS3Unz2-.js} +0 -0
- /package/dist/app/assets/{index.es503-bN70gL4F.js → index.es551-bN70gL4F.js} +0 -0
- /package/dist/app/assets/{index.es504-CmCqftbK.js → index.es552-CmCqftbK.js} +0 -0
- /package/dist/app/assets/{index.es505-Ds-gbosJ.js → index.es553-Ds-gbosJ.js} +0 -0
- /package/dist/app/assets/{index.es506-CjDtw9vr.js → index.es554-CjDtw9vr.js} +0 -0
- /package/dist/app/assets/{index.es507-BthQWCQV.js → index.es555-BthQWCQV.js} +0 -0
- /package/dist/app/assets/{index.es508-DqwNpetd.js → index.es556-DqwNpetd.js} +0 -0
- /package/dist/app/assets/{index.es509-Bw305WKR.js → index.es557-Bw305WKR.js} +0 -0
- /package/dist/app/assets/{index.es510-DXbdFlpD.js → index.es558-DXbdFlpD.js} +0 -0
- /package/dist/app/assets/{index.es511-L9t79GZl.js → index.es559-L9t79GZl.js} +0 -0
- /package/dist/app/assets/{index.es512-CbfX1IO0.js → index.es560-CbfX1IO0.js} +0 -0
- /package/dist/app/assets/{index.es513-DBQeEorK.js → index.es561-DBQeEorK.js} +0 -0
- /package/dist/app/assets/{index.es514-BEBZ7ncR.js → index.es562-BEBZ7ncR.js} +0 -0
- /package/dist/app/assets/{index.es515-Bkuqu6BP.js → index.es563-Bkuqu6BP.js} +0 -0
- /package/dist/app/assets/{index.es516-D0r3Knsf.js → index.es564-D0r3Knsf.js} +0 -0
- /package/dist/app/assets/{index.es517-CVO1_9PV.js → index.es565-CVO1_9PV.js} +0 -0
|
@@ -4,7 +4,7 @@ import { join } from "path";
|
|
|
4
4
|
import sinon from "sinon";
|
|
5
5
|
import { PackageNotFoundError } from "../errors";
|
|
6
6
|
import { readConnectionConfig } from "./connection";
|
|
7
|
-
import {
|
|
7
|
+
import { Model } from "./model";
|
|
8
8
|
import { Package } from "./package";
|
|
9
9
|
import { Scheduler } from "./scheduler";
|
|
10
10
|
import { Stats } from "fs";
|
|
@@ -12,11 +12,6 @@ import { Stats } from "fs";
|
|
|
12
12
|
// Minimal partial types for mocking
|
|
13
13
|
type PartialScheduler = Pick<Scheduler, "list">;
|
|
14
14
|
|
|
15
|
-
const connectionMocks: ApiConnection[] = [
|
|
16
|
-
{ name: "conn1", type: "postgres", postgresConnection: {} },
|
|
17
|
-
{ name: "conn2", type: "bigquery", bigqueryConnection: {} },
|
|
18
|
-
];
|
|
19
|
-
|
|
20
15
|
describe("service/package", () => {
|
|
21
16
|
const testPackageDirectory = "testPackage";
|
|
22
17
|
|
|
@@ -30,11 +25,6 @@ describe("service/package", () => {
|
|
|
30
25
|
join(testPackageDirectory, "database.csv"),
|
|
31
26
|
parquetBuffer,
|
|
32
27
|
);
|
|
33
|
-
const content = JSON.stringify(connectionMocks);
|
|
34
|
-
await fs.writeFile(
|
|
35
|
-
join(testPackageDirectory, "publisher.connections.json"),
|
|
36
|
-
content,
|
|
37
|
-
);
|
|
38
28
|
const publisherContent = JSON.stringify({ description: "Test package" });
|
|
39
29
|
await fs.writeFile(
|
|
40
30
|
join(testPackageDirectory, "publisher.json"),
|
|
@@ -85,6 +75,7 @@ describe("service/package", () => {
|
|
|
85
75
|
"testPackage",
|
|
86
76
|
testPackageDirectory,
|
|
87
77
|
new Map(),
|
|
78
|
+
"/server/root",
|
|
88
79
|
),
|
|
89
80
|
).rejects.toThrowError(
|
|
90
81
|
new PackageNotFoundError(
|
|
@@ -124,6 +115,7 @@ describe("service/package", () => {
|
|
|
124
115
|
"testPackage",
|
|
125
116
|
testPackageDirectory,
|
|
126
117
|
new Map(),
|
|
118
|
+
"/server/root",
|
|
127
119
|
);
|
|
128
120
|
|
|
129
121
|
expect(packageInstance).toBeInstanceOf(Package);
|
|
@@ -232,23 +224,76 @@ describe("service/package", () => {
|
|
|
232
224
|
});
|
|
233
225
|
|
|
234
226
|
describe("readConnectionConfig", () => {
|
|
235
|
-
it("should return an empty array if
|
|
236
|
-
await fs.rm(
|
|
237
|
-
join(testPackageDirectory, "publisher.connections.json"),
|
|
238
|
-
);
|
|
239
|
-
|
|
240
|
-
sinon.stub(fs, "stat").rejects(new Error("File not found"));
|
|
241
|
-
|
|
227
|
+
it("should return an empty array if no project name or server root path is provided", async () => {
|
|
242
228
|
const config = await readConnectionConfig(testPackageDirectory);
|
|
243
229
|
expect(Array.isArray(config)).toBe(true);
|
|
244
230
|
expect(config).toHaveLength(0);
|
|
245
231
|
});
|
|
246
232
|
|
|
247
|
-
it("should return
|
|
248
|
-
|
|
249
|
-
|
|
233
|
+
it("should return an empty array if project name or server root path is missing", async () => {
|
|
234
|
+
const config1 = await readConnectionConfig(
|
|
235
|
+
testPackageDirectory,
|
|
236
|
+
"testProject",
|
|
237
|
+
);
|
|
238
|
+
expect(Array.isArray(config1)).toBe(true);
|
|
239
|
+
expect(config1).toHaveLength(0);
|
|
240
|
+
|
|
241
|
+
const config2 = await readConnectionConfig(
|
|
242
|
+
testPackageDirectory,
|
|
243
|
+
undefined,
|
|
244
|
+
"/server/root",
|
|
245
|
+
);
|
|
246
|
+
expect(Array.isArray(config2)).toBe(true);
|
|
247
|
+
expect(config2).toHaveLength(0);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it("should return connections from publisher config when project name and server root are provided", async () => {
|
|
251
|
+
const tempServerRoot = "/tmp/test-server-root";
|
|
252
|
+
const tempConfigPath = join(
|
|
253
|
+
tempServerRoot,
|
|
254
|
+
"publisher.config.json",
|
|
255
|
+
);
|
|
256
|
+
|
|
257
|
+
// Create temp directory and config file
|
|
258
|
+
await fs.mkdir(tempServerRoot, { recursive: true });
|
|
259
|
+
await fs.writeFile(
|
|
260
|
+
tempConfigPath,
|
|
261
|
+
JSON.stringify({
|
|
262
|
+
frozenConfig: false,
|
|
263
|
+
projects: [
|
|
264
|
+
{
|
|
265
|
+
name: "testProject",
|
|
266
|
+
packages: [],
|
|
267
|
+
connections: [
|
|
268
|
+
{ name: "test-conn", type: "postgres" },
|
|
269
|
+
{ name: "test-conn2", type: "bigquery" },
|
|
270
|
+
],
|
|
271
|
+
},
|
|
272
|
+
],
|
|
273
|
+
}),
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
const config = await readConnectionConfig(
|
|
277
|
+
testPackageDirectory,
|
|
278
|
+
"testProject",
|
|
279
|
+
tempServerRoot,
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
expect(Array.isArray(config)).toBe(true);
|
|
283
|
+
expect(config).toHaveLength(2);
|
|
284
|
+
expect(config[0]).toMatchObject({
|
|
285
|
+
name: "test-conn",
|
|
286
|
+
type: "postgres",
|
|
287
|
+
resource: "/api/v0/connections/test-conn",
|
|
288
|
+
});
|
|
289
|
+
expect(config[1]).toMatchObject({
|
|
290
|
+
name: "test-conn2",
|
|
291
|
+
type: "bigquery",
|
|
292
|
+
resource: "/api/v0/connections/test-conn2",
|
|
293
|
+
});
|
|
250
294
|
|
|
251
|
-
|
|
295
|
+
// Clean up
|
|
296
|
+
await fs.rm(tempServerRoot, { recursive: true, force: true });
|
|
252
297
|
});
|
|
253
298
|
});
|
|
254
299
|
});
|
package/src/service/package.ts
CHANGED
|
@@ -72,6 +72,7 @@ export class Package {
|
|
|
72
72
|
packageName: string,
|
|
73
73
|
packagePath: string,
|
|
74
74
|
projectConnections: Map<string, Connection>,
|
|
75
|
+
serverRootPath: string,
|
|
75
76
|
): Promise<Package> {
|
|
76
77
|
const startTime = performance.now();
|
|
77
78
|
await Package.validatePackageManifestExistsOrThrowError(packagePath);
|
|
@@ -107,7 +108,12 @@ export class Package {
|
|
|
107
108
|
});
|
|
108
109
|
// Package connections override project connections.
|
|
109
110
|
const { malloyConnections: packageConnections } =
|
|
110
|
-
await createConnections(
|
|
111
|
+
await createConnections(
|
|
112
|
+
packagePath,
|
|
113
|
+
[],
|
|
114
|
+
projectName,
|
|
115
|
+
serverRootPath,
|
|
116
|
+
);
|
|
111
117
|
const connectionsTime = performance.now();
|
|
112
118
|
logger.info("Package connections created", {
|
|
113
119
|
packageName,
|
|
@@ -297,6 +303,7 @@ export class Package {
|
|
|
297
303
|
try {
|
|
298
304
|
await fs.stat(packageConfigPath);
|
|
299
305
|
} catch {
|
|
306
|
+
logger.error(`Can't find ${packageConfigPath}`);
|
|
300
307
|
throw new PackageNotFoundError(
|
|
301
308
|
`Package manifest for ${packagePath} does not exist.`,
|
|
302
309
|
);
|
|
@@ -365,8 +372,13 @@ export class Package {
|
|
|
365
372
|
urlReader: new EmptyURLReader(),
|
|
366
373
|
connections: [new DuckDBConnection("duckdb")],
|
|
367
374
|
});
|
|
375
|
+
// Escape backslashes for Windows paths in the Malloy model string
|
|
376
|
+
const escapedPath =
|
|
377
|
+
process.platform === "win32"
|
|
378
|
+
? fullPath.replace(/\\/g, "\\\\")
|
|
379
|
+
: fullPath;
|
|
368
380
|
const model = runtime.loadModel(
|
|
369
|
-
`source: temp is duckdb.table('${
|
|
381
|
+
`source: temp is duckdb.table('${escapedPath}')`,
|
|
370
382
|
);
|
|
371
383
|
const modelDef = await model.getModel();
|
|
372
384
|
const fields = (modelDef._modelDef.contents["temp"] as SourceDef).fields;
|
package/src/service/project.ts
CHANGED
|
@@ -35,23 +35,22 @@ export class Project {
|
|
|
35
35
|
private packageStatuses: Map<string, PackageInfo> = new Map();
|
|
36
36
|
private malloyConnections: Map<string, BaseConnection>;
|
|
37
37
|
private apiConnections: ApiConnection[];
|
|
38
|
-
private internalConnections: InternalConnection[];
|
|
39
38
|
private projectPath: string;
|
|
40
39
|
private projectName: string;
|
|
40
|
+
private serverRootPath: string;
|
|
41
41
|
public metadata: ApiProject;
|
|
42
42
|
|
|
43
43
|
constructor(
|
|
44
44
|
projectName: string,
|
|
45
45
|
projectPath: string,
|
|
46
46
|
malloyConnections: Map<string, BaseConnection>,
|
|
47
|
-
internalConnections: InternalConnection[],
|
|
48
47
|
apiConnections: InternalConnection[],
|
|
48
|
+
serverRootPath: string,
|
|
49
49
|
) {
|
|
50
50
|
this.projectName = projectName;
|
|
51
51
|
this.projectPath = projectPath;
|
|
52
|
+
this.serverRootPath = serverRootPath;
|
|
52
53
|
this.malloyConnections = malloyConnections;
|
|
53
|
-
// InternalConnections have full connection details for doing schema inspection
|
|
54
|
-
this.internalConnections = internalConnections;
|
|
55
54
|
this.apiConnections = apiConnections;
|
|
56
55
|
this.metadata = {
|
|
57
56
|
resource: `${API_PREFIX}/projects/${this.projectName}`,
|
|
@@ -82,7 +81,6 @@ export class Project {
|
|
|
82
81
|
// Update the project's connection maps
|
|
83
82
|
this.malloyConnections = malloyConnections;
|
|
84
83
|
this.apiConnections = apiConnections;
|
|
85
|
-
this.internalConnections = apiConnections;
|
|
86
84
|
|
|
87
85
|
logger.info(
|
|
88
86
|
`Successfully updated connections for project ${this.projectName}`,
|
|
@@ -101,6 +99,7 @@ export class Project {
|
|
|
101
99
|
projectName: string,
|
|
102
100
|
projectPath: string,
|
|
103
101
|
defaultConnections: ApiConnection[],
|
|
102
|
+
serverRootPath?: string,
|
|
104
103
|
): Promise<Project> {
|
|
105
104
|
if (!(await fs.promises.stat(projectPath)).isDirectory()) {
|
|
106
105
|
throw new ProjectNotFoundError(
|
|
@@ -112,7 +111,12 @@ export class Project {
|
|
|
112
111
|
let apiConnections: InternalConnection[] = [];
|
|
113
112
|
|
|
114
113
|
logger.info(`Creating project with connection configuration`);
|
|
115
|
-
const result = await createConnections(
|
|
114
|
+
const result = await createConnections(
|
|
115
|
+
projectPath,
|
|
116
|
+
defaultConnections,
|
|
117
|
+
projectName,
|
|
118
|
+
serverRootPath,
|
|
119
|
+
);
|
|
116
120
|
malloyConnections = result.malloyConnections;
|
|
117
121
|
apiConnections = result.apiConnections;
|
|
118
122
|
|
|
@@ -129,17 +133,7 @@ export class Project {
|
|
|
129
133
|
projectPath,
|
|
130
134
|
malloyConnections,
|
|
131
135
|
apiConnections,
|
|
132
|
-
|
|
133
|
-
// Create a new ApiConnection object from each InternalConnection
|
|
134
|
-
// by excluding the internal connection details
|
|
135
|
-
// We don't want to send passwords and connection strings to the client
|
|
136
|
-
return {
|
|
137
|
-
name: internalConnection.name,
|
|
138
|
-
type: internalConnection.type,
|
|
139
|
-
attributes: internalConnection.attributes,
|
|
140
|
-
resource: internalConnection.resource,
|
|
141
|
-
};
|
|
142
|
-
}),
|
|
136
|
+
serverRootPath || "",
|
|
143
137
|
);
|
|
144
138
|
}
|
|
145
139
|
|
|
@@ -176,20 +170,6 @@ export class Project {
|
|
|
176
170
|
return connection;
|
|
177
171
|
}
|
|
178
172
|
|
|
179
|
-
// Returns a connection with full connection details for doing schema inspection
|
|
180
|
-
// Don't send this to the client as it contains sensitive information
|
|
181
|
-
public getInternalConnection(connectionName: string): InternalConnection {
|
|
182
|
-
const connection = this.internalConnections.find(
|
|
183
|
-
(connection) => connection.name === connectionName,
|
|
184
|
-
);
|
|
185
|
-
if (!connection) {
|
|
186
|
-
throw new ConnectionNotFoundError(
|
|
187
|
-
`Connection ${connectionName} not found`,
|
|
188
|
-
);
|
|
189
|
-
}
|
|
190
|
-
return connection;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
173
|
public getMalloyConnection(connectionName: string): BaseConnection {
|
|
194
174
|
const connection = this.malloyConnections.get(connectionName);
|
|
195
175
|
if (!connection) {
|
|
@@ -290,6 +270,7 @@ export class Project {
|
|
|
290
270
|
packageName,
|
|
291
271
|
path.join(this.projectPath, packageName),
|
|
292
272
|
this.malloyConnections,
|
|
273
|
+
this.serverRootPath,
|
|
293
274
|
);
|
|
294
275
|
this.packages.set(packageName, _package);
|
|
295
276
|
|
|
@@ -334,6 +315,7 @@ export class Project {
|
|
|
334
315
|
packageName,
|
|
335
316
|
packagePath,
|
|
336
317
|
this.malloyConnections,
|
|
318
|
+
this.serverRootPath,
|
|
337
319
|
),
|
|
338
320
|
);
|
|
339
321
|
} catch (error) {
|
|
@@ -15,19 +15,6 @@ const serverRootPath = path.join(
|
|
|
15
15
|
"pathways-worker-publisher-project-store-test",
|
|
16
16
|
);
|
|
17
17
|
const projectName = "organizationName-projectName";
|
|
18
|
-
const testConnections: Connection[] = [
|
|
19
|
-
{
|
|
20
|
-
name: "testConnection",
|
|
21
|
-
type: "postgres",
|
|
22
|
-
postgresConnection: {
|
|
23
|
-
host: "host",
|
|
24
|
-
port: 1234,
|
|
25
|
-
databaseName: "databaseName",
|
|
26
|
-
userName: "userName",
|
|
27
|
-
password: "password",
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
];
|
|
31
18
|
|
|
32
19
|
let sandbox: sinon.SinonSandbox;
|
|
33
20
|
|
|
@@ -72,13 +59,6 @@ describe("ProjectStore Service", () => {
|
|
|
72
59
|
const projectPath = path.join(serverRootPath, projectName);
|
|
73
60
|
mkdirSync(projectPath, { recursive: true });
|
|
74
61
|
|
|
75
|
-
// Create connections file
|
|
76
|
-
const connectionsPath = path.join(
|
|
77
|
-
projectPath,
|
|
78
|
-
"publisher.connections.json",
|
|
79
|
-
);
|
|
80
|
-
writeFileSync(connectionsPath, JSON.stringify(testConnections));
|
|
81
|
-
|
|
82
62
|
// Create publisher config
|
|
83
63
|
const publisherConfigPath = path.join(
|
|
84
64
|
serverRootPath,
|
|
@@ -87,6 +67,7 @@ describe("ProjectStore Service", () => {
|
|
|
87
67
|
writeFileSync(
|
|
88
68
|
publisherConfigPath,
|
|
89
69
|
JSON.stringify({
|
|
70
|
+
frozenConfig: false,
|
|
90
71
|
projects: [
|
|
91
72
|
{
|
|
92
73
|
name: projectName,
|
|
@@ -96,6 +77,12 @@ describe("ProjectStore Service", () => {
|
|
|
96
77
|
location: projectPath,
|
|
97
78
|
},
|
|
98
79
|
],
|
|
80
|
+
connections: [
|
|
81
|
+
{
|
|
82
|
+
name: "testConnection",
|
|
83
|
+
type: "postgres",
|
|
84
|
+
},
|
|
85
|
+
],
|
|
99
86
|
},
|
|
100
87
|
],
|
|
101
88
|
}),
|
|
@@ -117,16 +104,6 @@ describe("ProjectStore Service", () => {
|
|
|
117
104
|
mkdirSync(projectPath1, { recursive: true });
|
|
118
105
|
mkdirSync(projectPath2, { recursive: true });
|
|
119
106
|
|
|
120
|
-
// Create connections files
|
|
121
|
-
writeFileSync(
|
|
122
|
-
path.join(projectPath1, "publisher.connections.json"),
|
|
123
|
-
JSON.stringify(testConnections),
|
|
124
|
-
);
|
|
125
|
-
writeFileSync(
|
|
126
|
-
path.join(projectPath2, "publisher.connections.json"),
|
|
127
|
-
JSON.stringify(testConnections),
|
|
128
|
-
);
|
|
129
|
-
|
|
130
107
|
// Create publisher config
|
|
131
108
|
const publisherConfigPath = path.join(
|
|
132
109
|
serverRootPath,
|
|
@@ -135,6 +112,7 @@ describe("ProjectStore Service", () => {
|
|
|
135
112
|
writeFileSync(
|
|
136
113
|
publisherConfigPath,
|
|
137
114
|
JSON.stringify({
|
|
115
|
+
frozenConfig: false,
|
|
138
116
|
projects: [
|
|
139
117
|
{
|
|
140
118
|
name: projectName1,
|
|
@@ -144,6 +122,12 @@ describe("ProjectStore Service", () => {
|
|
|
144
122
|
location: projectPath1,
|
|
145
123
|
},
|
|
146
124
|
],
|
|
125
|
+
connections: [
|
|
126
|
+
{
|
|
127
|
+
name: "testConnection",
|
|
128
|
+
type: "postgres",
|
|
129
|
+
},
|
|
130
|
+
],
|
|
147
131
|
},
|
|
148
132
|
{
|
|
149
133
|
name: projectName2,
|
|
@@ -153,6 +137,13 @@ describe("ProjectStore Service", () => {
|
|
|
153
137
|
location: projectPath2,
|
|
154
138
|
},
|
|
155
139
|
],
|
|
140
|
+
connections: [
|
|
141
|
+
{
|
|
142
|
+
name: "testConnection2",
|
|
143
|
+
type: "bigquery",
|
|
144
|
+
bigqueryConnection: {},
|
|
145
|
+
},
|
|
146
|
+
],
|
|
156
147
|
},
|
|
157
148
|
],
|
|
158
149
|
}),
|
|
@@ -174,14 +165,6 @@ describe("ProjectStore Service", () => {
|
|
|
174
165
|
// Create a project directory
|
|
175
166
|
const projectPath = path.join(serverRootPath, projectName);
|
|
176
167
|
mkdirSync(projectPath, { recursive: true });
|
|
177
|
-
|
|
178
|
-
// Create connections file
|
|
179
|
-
const connectionsPath = path.join(
|
|
180
|
-
projectPath,
|
|
181
|
-
"publisher.connections.json",
|
|
182
|
-
);
|
|
183
|
-
writeFileSync(connectionsPath, JSON.stringify(testConnections));
|
|
184
|
-
|
|
185
168
|
// Create publisher config
|
|
186
169
|
const publisherConfigPath = path.join(
|
|
187
170
|
serverRootPath,
|
|
@@ -221,13 +204,6 @@ describe("ProjectStore Service", () => {
|
|
|
221
204
|
const projectPath = path.join(serverRootPath, projectName);
|
|
222
205
|
mkdirSync(projectPath, { recursive: true });
|
|
223
206
|
|
|
224
|
-
// Create connections file
|
|
225
|
-
const connectionsPath = path.join(
|
|
226
|
-
projectPath,
|
|
227
|
-
"publisher.connections.json",
|
|
228
|
-
);
|
|
229
|
-
writeFileSync(connectionsPath, JSON.stringify(testConnections));
|
|
230
|
-
|
|
231
207
|
// Create publisher config
|
|
232
208
|
const publisherConfigPath = path.join(
|
|
233
209
|
serverRootPath,
|
|
@@ -310,14 +286,6 @@ describe("ProjectStore Service", () => {
|
|
|
310
286
|
const projectPath = path.join(serverRootPath, projectName);
|
|
311
287
|
mkdirSync(projectPath, { recursive: true });
|
|
312
288
|
|
|
313
|
-
// Create connections file
|
|
314
|
-
const connectionsPath = path.join(
|
|
315
|
-
projectPath,
|
|
316
|
-
"publisher.connections.json",
|
|
317
|
-
);
|
|
318
|
-
writeFileSync(connectionsPath, JSON.stringify(testConnections));
|
|
319
|
-
|
|
320
|
-
// Create publisher config
|
|
321
289
|
const publisherConfigPath = path.join(
|
|
322
290
|
serverRootPath,
|
|
323
291
|
"publisher.config.json",
|
|
@@ -325,6 +293,7 @@ describe("ProjectStore Service", () => {
|
|
|
325
293
|
writeFileSync(
|
|
326
294
|
publisherConfigPath,
|
|
327
295
|
JSON.stringify({
|
|
296
|
+
frozenConfig: false,
|
|
328
297
|
projects: [
|
|
329
298
|
{
|
|
330
299
|
name: projectName,
|
|
@@ -334,11 +303,19 @@ describe("ProjectStore Service", () => {
|
|
|
334
303
|
location: projectPath,
|
|
335
304
|
},
|
|
336
305
|
],
|
|
306
|
+
connections: [
|
|
307
|
+
{
|
|
308
|
+
name: "testConnection",
|
|
309
|
+
type: "postgres",
|
|
310
|
+
},
|
|
311
|
+
],
|
|
337
312
|
},
|
|
338
313
|
],
|
|
339
314
|
}),
|
|
340
315
|
);
|
|
341
316
|
|
|
317
|
+
await projectStore.finishedInitialization;
|
|
318
|
+
|
|
342
319
|
// Test concurrent access to the same project
|
|
343
320
|
const promises = Array.from({ length: 5 }, () =>
|
|
344
321
|
projectStore.getProject(projectName),
|