@malloy-publisher/server 0.0.94 → 0.0.97
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/assets/{index-TVOAGCOZ.js → index-BIibKHZO.js} +6 -6
- package/dist/app/assets/index-D4eYZfPc.js +287 -0
- package/dist/app/assets/{index-Bq29VQqL.js → index-SM0qJxoC.js} +241 -241
- package/dist/app/assets/{index.es162-DjehWeVi.js → index.es126-CKC26ttZ.js} +1 -1
- package/dist/app/assets/{index.es163-Cn6ymEKN.js → index.es127-CBKpWhIe.js} +1 -1
- package/dist/app/assets/{index.es166-Dz17gOib.js → index.es130-5z_n6lm6.js} +1 -1
- package/dist/app/assets/{index.es171-D0jXlw9l.js → index.es135-aJw1Xr-9.js} +1 -1
- package/dist/app/assets/{index.es179-CgGW5qRb.js → index.es143-CAt8G2AV.js} +1 -1
- package/dist/app/assets/{index.es180-DDBKIFdG.js → index.es144-CaWYrbVR.js} +1 -1
- package/dist/app/assets/{index.es183-CBW1fnbb.js → index.es147-B_4j3qbz.js} +1 -1
- package/dist/app/assets/{index.es187-DF7wmOI7.js → index.es151-Byg3j7QH.js} +1 -1
- package/dist/app/assets/{index.es190-DWgf4H-t.js → index.es154-D8PMiD5x.js} +1 -1
- package/dist/app/assets/{index.es193-xm_HeVIy.js → index.es157-qx6EMeW2.js} +1 -1
- package/dist/app/assets/{index.es194-DbZjE_Oe.js → index.es158-CJWvYXRx.js} +1 -1
- package/dist/app/assets/{index.es208-D1EDhCBL.js → index.es172-BamsV9CN.js} +1 -1
- package/dist/app/assets/{index.es209-358riOK7.js → index.es173-CXyGU58j.js} +1 -1
- package/dist/app/assets/{index.es210-BgthglSG.js → index.es174-C2o3B3o8.js} +1 -1
- package/dist/app/assets/{index.es212-CD-lrWnJ.js → index.es176-BB-1P5bb.js} +1 -1
- package/dist/app/assets/{index.es217-CJM4XQU4.js → index.es181-2PlTGcYG.js} +1 -1
- package/dist/app/assets/{index.es219-BAcq47kQ.js → index.es183-DgoVwe-N.js} +1 -1
- package/dist/app/assets/{index.es220-FIR0uO3Z.js → index.es184-Cmc38osU.js} +1 -1
- package/dist/app/assets/{index.es225-BW0QuDEU.js → index.es189-DuMu0KfI.js} +1 -1
- package/dist/app/assets/{index.es226-OZjmh8DW.js → index.es190-C117wYiK.js} +1 -1
- package/dist/app/assets/{index.es228-yL7UTgkg.js → index.es192-Bm2ZoxNH.js} +1 -1
- package/dist/app/assets/{index.es229-BxdgOaeI.js → index.es193-BBtnt1bZ.js} +1 -1
- package/dist/app/assets/{index.es230-D7qaa3vU.js → index.es194-CB2Nn3wg.js} +1 -1
- package/dist/app/assets/{index.es233-ChrWTqJS.js → index.es197-D91osx4R.js} +1 -1
- package/dist/app/assets/{index.es235-C_llaqlU.js → index.es199-BtpESJSS.js} +1 -1
- package/dist/app/assets/{index.es236-Bpao3w_n.js → index.es200-BeG9RRw_.js} +1 -1
- package/dist/app/assets/{index.es237-BspTzGnw.js → index.es201-k2nuCC3B.js} +1 -1
- package/dist/app/assets/{index.es243-Du-LtkxO.js → index.es207-C2uQegug.js} +1 -1
- package/dist/app/assets/{index.es244-Dmu8QZ0L.js → index.es208-BTucFWqR.js} +1 -1
- package/dist/app/assets/{index.es245-Cz7t32Qg.js → index.es209-4dK47W8o.js} +1 -1
- package/dist/app/assets/{index.es246-BOGVWhXq.js → index.es210-DO6X3-kz.js} +1 -1
- package/dist/app/assets/{index.es248-C8RgZFH6.js → index.es212-CFG-vrrr.js} +1 -1
- package/dist/app/assets/{index.es252-K5z2dppi.js → index.es216-TWO3Mhor.js} +1 -1
- package/dist/app/assets/{index.es253-CFVa6H-r.js → index.es217-0tHVUThG.js} +1 -1
- package/dist/app/assets/{index.es261-DKGfXt6W.js → index.es225-DHGKCs7a.js} +1 -1
- package/dist/app/assets/{index.es264-D-M46xK6.js → index.es228-Bz0ZvI5L.js} +1 -1
- package/dist/app/assets/{index.es50-RRV_pHUk.js → index.es23-Cifiq2N-.js} +2 -2
- package/dist/app/assets/{index.es267-bsSGk7Qt.js → index.es231-D1HdFvsl.js} +1 -1
- package/dist/app/assets/{index.es270-CAhgPSnC.js → index.es234-1j9jt1V9.js} +1 -1
- package/dist/app/assets/{index.es274-ByAjwomg.js → index.es238-DBm7c9HR.js} +1 -1
- package/dist/app/assets/{index.es276-CKlMO2Lw.js → index.es240-DCqDESzD.js} +1 -1
- package/dist/app/assets/{index.es284-CzLPtLDD.js → index.es248-BEYN2dFo.js} +1 -1
- package/dist/app/assets/{index.es285-DJKOnmR4.js → index.es249-DKdYiZA_.js} +1 -1
- package/dist/app/assets/{index.es292-C_XpFc3I.js → index.es256-CgBAGaDx.js} +1 -1
- package/dist/app/assets/{index.es293-CAMCK3pl.js → index.es257-DMI3dJGJ.js} +1 -1
- package/dist/app/assets/{index.es303-Kzndt26b.js → index.es267-B5ei8o6D.js} +1 -1
- package/dist/app/assets/{index.es307-uMHHp7AA.js → index.es271-DDBsSlrj.js} +1 -1
- package/dist/app/assets/{index.es313-gUL1Q7h-.js → index.es277-aI_iYBJv.js} +1 -1
- package/dist/app/assets/{index.es318-Dv9v9QNN.js → index.es282-DZQyCurk.js} +1 -1
- package/dist/app/assets/{index.es319-BxOEtECK.js → index.es283-DRQxI154.js} +1 -1
- package/dist/app/assets/{index.es321-CAohi0dV.js → index.es285-DrT3oe3D.js} +1 -1
- package/dist/app/assets/{index.es325-CDs1Kyg7.js → index.es289-CKYiktdr.js} +1 -1
- package/dist/app/assets/{index.es327-YD3xAAtq.js → index.es291-BRH8qn2R.js} +1 -1
- package/dist/app/assets/{index.es329-Dx_IcV_r.js → index.es293-B_x7Y2b5.js} +1 -1
- package/dist/app/assets/{index.es332-DoVSa19H.js → index.es296-CMhur-CK.js} +1 -1
- package/dist/app/assets/{index.es333-tJOdbEM5.js → index.es297-BY9kHC-p.js} +1 -1
- package/dist/app/assets/{index.es337-Ds206neg.js → index.es301-CmwjGLCv.js} +1 -1
- package/dist/app/assets/{index.es339-Cf3Qs-00.js → index.es303-BOa5F89I.js} +1 -1
- package/dist/app/assets/{index.es346-B6wL7HWb.js → index.es310-BF6kc0UE.js} +1 -1
- package/dist/app/assets/{index.es348-BrzYmfQN.js → index.es312-CoCT5fTV.js} +1 -1
- package/dist/app/assets/{index.es350-DaKzpwWB.js → index.es314-CMYE9lCS.js} +1 -1
- package/dist/app/assets/{index.es354-BNHh55LB.js → index.es318-C2_Stmju.js} +1 -1
- package/dist/app/assets/{index.es364-CeZwlyUV.js → index.es328-DxiHjjdV.js} +1 -1
- package/dist/app/assets/{index.es365-CtY1jSQJ.js → index.es329-D4H4qJV5.js} +1 -1
- package/dist/app/assets/{index.es372-Cjsc1C-R.js → index.es336-DMBcHb9l.js} +1 -1
- package/dist/app/assets/{index.es373-CfvIMr2S.js → index.es337-BOcmfyvS.js} +1 -1
- package/dist/app/assets/index.umd-DknWdzGi.js +2134 -0
- package/dist/app/index.html +1 -1
- package/dist/server.js +45 -31
- package/package.json +10 -10
- package/src/config.ts +6 -0
- package/src/constants.ts +7 -10
- package/src/controller/package.controller.ts +7 -5
- package/src/data_styles.ts +0 -1
- package/src/service/connection.ts +18 -28
- package/src/service/model.ts +0 -1
- package/src/service/project_store.ts +24 -7
- package/dist/app/assets/index-Dg-zTLb3.js +0 -211
- package/dist/app/assets/index.umd-BN4_E5KD.js +0 -2105
- /package/dist/app/assets/{index.es151-CG6Dc4jp.js → index.es115-CG6Dc4jp.js} +0 -0
- /package/dist/app/assets/{index.es159-DsBKuouk.js → index.es123-DsBKuouk.js} +0 -0
- /package/dist/app/assets/{index.es160-D_z4Izcz.js → index.es124-D_z4Izcz.js} +0 -0
- /package/dist/app/assets/{index.es161-727ZlQH0.js → index.es125-727ZlQH0.js} +0 -0
- /package/dist/app/assets/{index.es164-Dn00JSTd.js → index.es128-Dn00JSTd.js} +0 -0
- /package/dist/app/assets/{index.es165-COJ4H7py.js → index.es129-COJ4H7py.js} +0 -0
- /package/dist/app/assets/{index.es167-Bu5BbsvL.js → index.es131-Bu5BbsvL.js} +0 -0
- /package/dist/app/assets/{index.es168-7O62HKoU.js → index.es132-7O62HKoU.js} +0 -0
- /package/dist/app/assets/{index.es169-BPT9niGB.js → index.es133-BPT9niGB.js} +0 -0
- /package/dist/app/assets/{index.es170-Dhn9LcZ4.js → index.es134-Dhn9LcZ4.js} +0 -0
- /package/dist/app/assets/{index.es172-eg146-Ew.js → index.es136-eg146-Ew.js} +0 -0
- /package/dist/app/assets/{index.es173-Du268qiB.js → index.es137-Du268qiB.js} +0 -0
- /package/dist/app/assets/{index.es174-fje9CFhw.js → index.es138-fje9CFhw.js} +0 -0
- /package/dist/app/assets/{index.es175-BwXTMy5W.js → index.es139-BwXTMy5W.js} +0 -0
- /package/dist/app/assets/{index.es176-3xVqZejG.js → index.es140-3xVqZejG.js} +0 -0
- /package/dist/app/assets/{index.es177-xW4inM5L.js → index.es141-xW4inM5L.js} +0 -0
- /package/dist/app/assets/{index.es178-DHo0CJ0O.js → index.es142-DHo0CJ0O.js} +0 -0
- /package/dist/app/assets/{index.es181-C3t2pwGQ.js → index.es145-C3t2pwGQ.js} +0 -0
- /package/dist/app/assets/{index.es182-DNquZEk8.js → index.es146-DNquZEk8.js} +0 -0
- /package/dist/app/assets/{index.es184-BHOwM8T6.js → index.es148-BHOwM8T6.js} +0 -0
- /package/dist/app/assets/{index.es185-DxSadP1t.js → index.es149-DxSadP1t.js} +0 -0
- /package/dist/app/assets/{index.es186-DbXoA79R.js → index.es150-DbXoA79R.js} +0 -0
- /package/dist/app/assets/{index.es188-Bp6g37R7.js → index.es152-Bp6g37R7.js} +0 -0
- /package/dist/app/assets/{index.es189-sacFqUAJ.js → index.es153-sacFqUAJ.js} +0 -0
- /package/dist/app/assets/{index.es191-C7gG9l05.js → index.es155-C7gG9l05.js} +0 -0
- /package/dist/app/assets/{index.es192-Dsg_Bt_b.js → index.es156-Dsg_Bt_b.js} +0 -0
- /package/dist/app/assets/{index.es195-D9R-vmeu.js → index.es159-D9R-vmeu.js} +0 -0
- /package/dist/app/assets/{index.es196-BPhBrDlE.js → index.es160-BPhBrDlE.js} +0 -0
- /package/dist/app/assets/{index.es197-C-TU5hQ_.js → index.es161-C-TU5hQ_.js} +0 -0
- /package/dist/app/assets/{index.es198-DtFQj3wx.js → index.es162-DtFQj3wx.js} +0 -0
- /package/dist/app/assets/{index.es199-m2LEI-9-.js → index.es163-m2LEI-9-.js} +0 -0
- /package/dist/app/assets/{index.es200-BoXegm-a.js → index.es164-BoXegm-a.js} +0 -0
- /package/dist/app/assets/{index.es201-B9wLZaAG.js → index.es165-B9wLZaAG.js} +0 -0
- /package/dist/app/assets/{index.es202-ClGRhx96.js → index.es166-ClGRhx96.js} +0 -0
- /package/dist/app/assets/{index.es203-DEIpsLCJ.js → index.es167-DEIpsLCJ.js} +0 -0
- /package/dist/app/assets/{index.es204-BgYniUM_.js → index.es168-BgYniUM_.js} +0 -0
- /package/dist/app/assets/{index.es205-COcR7UxN.js → index.es169-COcR7UxN.js} +0 -0
- /package/dist/app/assets/{index.es206-BjQB5zDj.js → index.es170-BjQB5zDj.js} +0 -0
- /package/dist/app/assets/{index.es207-C-nORZOA.js → index.es171-C-nORZOA.js} +0 -0
- /package/dist/app/assets/{index.es211-BX77sIaO.js → index.es175-BX77sIaO.js} +0 -0
- /package/dist/app/assets/{index.es213-B-DoSBHF.js → index.es177-B-DoSBHF.js} +0 -0
- /package/dist/app/assets/{index.es214-bCA53EVm.js → index.es178-bCA53EVm.js} +0 -0
- /package/dist/app/assets/{index.es215-w-ucz2PV.js → index.es179-w-ucz2PV.js} +0 -0
- /package/dist/app/assets/{index.es216-Dayu4EKP.js → index.es180-Dayu4EKP.js} +0 -0
- /package/dist/app/assets/{index.es218-DKXYxT9g.js → index.es182-DKXYxT9g.js} +0 -0
- /package/dist/app/assets/{index.es221-DfxzS6Rs.js → index.es185-DfxzS6Rs.js} +0 -0
- /package/dist/app/assets/{index.es222-SKMF96pI.js → index.es186-SKMF96pI.js} +0 -0
- /package/dist/app/assets/{index.es223-ajMbGru0.js → index.es187-ajMbGru0.js} +0 -0
- /package/dist/app/assets/{index.es224--30QC5Em.js → index.es188--30QC5Em.js} +0 -0
- /package/dist/app/assets/{index.es227-B430Bg39.js → index.es191-B430Bg39.js} +0 -0
- /package/dist/app/assets/{index.es231-CM8KxXT1.js → index.es195-CM8KxXT1.js} +0 -0
- /package/dist/app/assets/{index.es232-B1SYOhNW.js → index.es196-B1SYOhNW.js} +0 -0
- /package/dist/app/assets/{index.es234-DkBy-JyN.js → index.es198-DkBy-JyN.js} +0 -0
- /package/dist/app/assets/{index.es238-BILxekzW.js → index.es202-BILxekzW.js} +0 -0
- /package/dist/app/assets/{index.es239-C5wWYbrZ.js → index.es203-C5wWYbrZ.js} +0 -0
- /package/dist/app/assets/{index.es240-HzYwdGDm.js → index.es204-HzYwdGDm.js} +0 -0
- /package/dist/app/assets/{index.es241-T-Tgc4AT.js → index.es205-T-Tgc4AT.js} +0 -0
- /package/dist/app/assets/{index.es242-ifBTmRxC.js → index.es206-ifBTmRxC.js} +0 -0
- /package/dist/app/assets/{index.es247-BMj5Y0dO.js → index.es211-BMj5Y0dO.js} +0 -0
- /package/dist/app/assets/{index.es249-BjABl1g7.js → index.es213-BjABl1g7.js} +0 -0
- /package/dist/app/assets/{index.es250-xI-RfyKK.js → index.es214-xI-RfyKK.js} +0 -0
- /package/dist/app/assets/{index.es251-ySlJ1b_l.js → index.es215-ySlJ1b_l.js} +0 -0
- /package/dist/app/assets/{index.es254-BQoSv7ci.js → index.es218-BQoSv7ci.js} +0 -0
- /package/dist/app/assets/{index.es255-w8dY5SsB.js → index.es219-w8dY5SsB.js} +0 -0
- /package/dist/app/assets/{index.es256-TU54ms6u.js → index.es220-TU54ms6u.js} +0 -0
- /package/dist/app/assets/{index.es257-DREVFZK8.js → index.es221-DREVFZK8.js} +0 -0
- /package/dist/app/assets/{index.es258-BfivnA6A.js → index.es222-BfivnA6A.js} +0 -0
- /package/dist/app/assets/{index.es259-P4WzXJd0.js → index.es223-P4WzXJd0.js} +0 -0
- /package/dist/app/assets/{index.es260-BAng5TT0.js → index.es224-BAng5TT0.js} +0 -0
- /package/dist/app/assets/{index.es262-B5lbUyaz.js → index.es226-B5lbUyaz.js} +0 -0
- /package/dist/app/assets/{index.es263-mebxcVVE.js → index.es227-mebxcVVE.js} +0 -0
- /package/dist/app/assets/{index.es265-XBlWyCtg.js → index.es229-XBlWyCtg.js} +0 -0
- /package/dist/app/assets/{index.es266-BfCpw3nA.js → index.es230-BfCpw3nA.js} +0 -0
- /package/dist/app/assets/{index.es268-Cc5clBb7.js → index.es232-Cc5clBb7.js} +0 -0
- /package/dist/app/assets/{index.es269-IuBKFhSY.js → index.es233-IuBKFhSY.js} +0 -0
- /package/dist/app/assets/{index.es271-Du5NY7AG.js → index.es235-Du5NY7AG.js} +0 -0
- /package/dist/app/assets/{index.es272-Bvotw-X0.js → index.es236-Bvotw-X0.js} +0 -0
- /package/dist/app/assets/{index.es273-UIAJJxZW.js → index.es237-UIAJJxZW.js} +0 -0
- /package/dist/app/assets/{index.es275-D9-PGadD.js → index.es239-D9-PGadD.js} +0 -0
- /package/dist/app/assets/{index.es277-sdHcTMYB.js → index.es241-sdHcTMYB.js} +0 -0
- /package/dist/app/assets/{index.es278-Ci6OQyBP.js → index.es242-Ci6OQyBP.js} +0 -0
- /package/dist/app/assets/{index.es279-BC5c_5Pe.js → index.es243-BC5c_5Pe.js} +0 -0
- /package/dist/app/assets/{index.es280-Tz6hzZYG.js → index.es244-Tz6hzZYG.js} +0 -0
- /package/dist/app/assets/{index.es281-DB_GagMm.js → index.es245-DB_GagMm.js} +0 -0
- /package/dist/app/assets/{index.es282-DLbgOhZU.js → index.es246-DLbgOhZU.js} +0 -0
- /package/dist/app/assets/{index.es283-B0XVJmRM.js → index.es247-B0XVJmRM.js} +0 -0
- /package/dist/app/assets/{index.es286-shcSOmrb.js → index.es250-shcSOmrb.js} +0 -0
- /package/dist/app/assets/{index.es287-D4Tzg5kh.js → index.es251-D4Tzg5kh.js} +0 -0
- /package/dist/app/assets/{index.es288-Deuh7S70.js → index.es252-Deuh7S70.js} +0 -0
- /package/dist/app/assets/{index.es289-BUEGK8hf.js → index.es253-BUEGK8hf.js} +0 -0
- /package/dist/app/assets/{index.es290-BNioltXt.js → index.es254-BNioltXt.js} +0 -0
- /package/dist/app/assets/{index.es291-JqZropPD.js → index.es255-JqZropPD.js} +0 -0
- /package/dist/app/assets/{index.es294-LKU2TuZ1.js → index.es258-LKU2TuZ1.js} +0 -0
- /package/dist/app/assets/{index.es295-BFLt1xDp.js → index.es259-BFLt1xDp.js} +0 -0
- /package/dist/app/assets/{index.es296-DKykz6zU.js → index.es260-DKykz6zU.js} +0 -0
- /package/dist/app/assets/{index.es297-B3ZDOciz.js → index.es261-B3ZDOciz.js} +0 -0
- /package/dist/app/assets/{index.es298-CSHBycmS.js → index.es262-CSHBycmS.js} +0 -0
- /package/dist/app/assets/{index.es299-BIEUsx6d.js → index.es263-BIEUsx6d.js} +0 -0
- /package/dist/app/assets/{index.es300-B48N-Iqd.js → index.es264-B48N-Iqd.js} +0 -0
- /package/dist/app/assets/{index.es301-BY-TUvya.js → index.es265-BY-TUvya.js} +0 -0
- /package/dist/app/assets/{index.es302-zocC4JxJ.js → index.es266-zocC4JxJ.js} +0 -0
- /package/dist/app/assets/{index.es304-Cza_XSSt.js → index.es268-Cza_XSSt.js} +0 -0
- /package/dist/app/assets/{index.es305-Bg-kzb6g.js → index.es269-Bg-kzb6g.js} +0 -0
- /package/dist/app/assets/{index.es306-DhUJRlN_.js → index.es270-DhUJRlN_.js} +0 -0
- /package/dist/app/assets/{index.es308-C8lEn-DE.js → index.es272-C8lEn-DE.js} +0 -0
- /package/dist/app/assets/{index.es309-DhMKtDLN.js → index.es273-DhMKtDLN.js} +0 -0
- /package/dist/app/assets/{index.es310-CwjWoCRV.js → index.es274-CwjWoCRV.js} +0 -0
- /package/dist/app/assets/{index.es311-CzouJOBO.js → index.es275-CzouJOBO.js} +0 -0
- /package/dist/app/assets/{index.es312-B1bQXN8T.js → index.es276-B1bQXN8T.js} +0 -0
- /package/dist/app/assets/{index.es314-5LuOXUq_.js → index.es278-5LuOXUq_.js} +0 -0
- /package/dist/app/assets/{index.es315-DWJ3fJO_.js → index.es279-DWJ3fJO_.js} +0 -0
- /package/dist/app/assets/{index.es316-DJlmqQ1C.js → index.es280-DJlmqQ1C.js} +0 -0
- /package/dist/app/assets/{index.es317-QhoSD0DR.js → index.es281-QhoSD0DR.js} +0 -0
- /package/dist/app/assets/{index.es320-Be6lgOlo.js → index.es284-Be6lgOlo.js} +0 -0
- /package/dist/app/assets/{index.es322-BJ4Li9vH.js → index.es286-BJ4Li9vH.js} +0 -0
- /package/dist/app/assets/{index.es323-DQVVAn-B.js → index.es287-DQVVAn-B.js} +0 -0
- /package/dist/app/assets/{index.es324-BJGe-b2p.js → index.es288-BJGe-b2p.js} +0 -0
- /package/dist/app/assets/{index.es326-BLhTXw86.js → index.es290-BLhTXw86.js} +0 -0
- /package/dist/app/assets/{index.es328-atvbtKCR.js → index.es292-atvbtKCR.js} +0 -0
- /package/dist/app/assets/{index.es330-DkLiglaE.js → index.es294-DkLiglaE.js} +0 -0
- /package/dist/app/assets/{index.es331-C1w2a3ep.js → index.es295-C1w2a3ep.js} +0 -0
- /package/dist/app/assets/{index.es334-Cf8iN4DR.js → index.es298-Cf8iN4DR.js} +0 -0
- /package/dist/app/assets/{index.es335-COK4E0Yg.js → index.es299-COK4E0Yg.js} +0 -0
- /package/dist/app/assets/{index.es336-BknIz3MU.js → index.es300-BknIz3MU.js} +0 -0
- /package/dist/app/assets/{index.es338-BeQkCIfX.js → index.es302-BeQkCIfX.js} +0 -0
- /package/dist/app/assets/{index.es340-BSxZ-RaX.js → index.es304-BSxZ-RaX.js} +0 -0
- /package/dist/app/assets/{index.es341-C7L56vO4.js → index.es305-C7L56vO4.js} +0 -0
- /package/dist/app/assets/{index.es342-CUnW07Te.js → index.es306-CUnW07Te.js} +0 -0
- /package/dist/app/assets/{index.es343-C1XDQQGZ.js → index.es307-C1XDQQGZ.js} +0 -0
- /package/dist/app/assets/{index.es344-CQjiPCtT.js → index.es308-CQjiPCtT.js} +0 -0
- /package/dist/app/assets/{index.es345-DQ1-QYvQ.js → index.es309-DQ1-QYvQ.js} +0 -0
- /package/dist/app/assets/{index.es347-BbSNqyBO.js → index.es311-BbSNqyBO.js} +0 -0
- /package/dist/app/assets/{index.es349-CB2ApiWb.js → index.es313-CB2ApiWb.js} +0 -0
- /package/dist/app/assets/{index.es351-B_m7g4N7.js → index.es315-B_m7g4N7.js} +0 -0
- /package/dist/app/assets/{index.es352-B6W0miNI.js → index.es316-B6W0miNI.js} +0 -0
- /package/dist/app/assets/{index.es353-BMR_PYu6.js → index.es317-BMR_PYu6.js} +0 -0
- /package/dist/app/assets/{index.es355-Dj6nwHGl.js → index.es319-Dj6nwHGl.js} +0 -0
- /package/dist/app/assets/{index.es356-BpWG_bgh.js → index.es320-BpWG_bgh.js} +0 -0
- /package/dist/app/assets/{index.es357-BVUVsWT6.js → index.es321-BVUVsWT6.js} +0 -0
- /package/dist/app/assets/{index.es358-CAQ2eGtk.js → index.es322-CAQ2eGtk.js} +0 -0
- /package/dist/app/assets/{index.es359-BFOHcciG.js → index.es323-BFOHcciG.js} +0 -0
- /package/dist/app/assets/{index.es360-CdO5JTpU.js → index.es324-CdO5JTpU.js} +0 -0
- /package/dist/app/assets/{index.es361-CJaU5se_.js → index.es325-CJaU5se_.js} +0 -0
- /package/dist/app/assets/{index.es362-DYoNaHQp.js → index.es326-DYoNaHQp.js} +0 -0
- /package/dist/app/assets/{index.es363-m4uW47V2.js → index.es327-m4uW47V2.js} +0 -0
- /package/dist/app/assets/{index.es366-nyqBNV6O.js → index.es330-nyqBNV6O.js} +0 -0
- /package/dist/app/assets/{index.es367-C6j12Q_x.js → index.es331-C6j12Q_x.js} +0 -0
- /package/dist/app/assets/{index.es368-7A4Fjokl.js → index.es332-7A4Fjokl.js} +0 -0
- /package/dist/app/assets/{index.es369-CB0Krxn9.js → index.es333-CB0Krxn9.js} +0 -0
- /package/dist/app/assets/{index.es370-DCE3LsBG.js → index.es334-DCE3LsBG.js} +0 -0
- /package/dist/app/assets/{index.es371-C3FkfJm5.js → index.es335-C3FkfJm5.js} +0 -0
- /package/dist/app/assets/{index.es374-CVw76BM1.js → index.es338-CVw76BM1.js} +0 -0
- /package/dist/app/assets/{index.es375-HnGAYVZD.js → index.es339-HnGAYVZD.js} +0 -0
- /package/dist/app/assets/{index.es376-BVz_zdnA.js → index.es340-BVz_zdnA.js} +0 -0
- /package/dist/app/assets/{index.es377-C3khCPGq.js → index.es341-C3khCPGq.js} +0 -0
- /package/dist/app/assets/{index.es378-D-2ljcwZ.js → index.es342-D-2ljcwZ.js} +0 -0
- /package/dist/app/assets/{index.es379-Cv9koXgw.js → index.es343-Cv9koXgw.js} +0 -0
- /package/dist/app/assets/{index.es380-CD_QflpE.js → index.es344-CD_QflpE.js} +0 -0
- /package/dist/app/assets/{index.es381-DRW-0cLl.js → index.es345-DRW-0cLl.js} +0 -0
- /package/dist/app/assets/{index.es382-C-_shW-Y.js → index.es346-C-_shW-Y.js} +0 -0
- /package/dist/app/assets/{index.es383-LGGdnPYs.js → index.es347-LGGdnPYs.js} +0 -0
- /package/dist/app/assets/{index.es384-C3mMm8J8.js → index.es348-C3mMm8J8.js} +0 -0
- /package/dist/app/assets/{index.es385-BzJJZx-M.js → index.es349-BzJJZx-M.js} +0 -0
- /package/dist/app/assets/{index.es386-BXkSAIEj.js → index.es350-BXkSAIEj.js} +0 -0
- /package/dist/app/assets/{index.es387-BgDCqdQA.js → index.es351-BgDCqdQA.js} +0 -0
- /package/dist/app/assets/{index.es388-C8M2exoo.js → index.es352-C8M2exoo.js} +0 -0
- /package/dist/app/assets/{index.es389-DHJKELXO.js → index.es353-DHJKELXO.js} +0 -0
- /package/dist/app/assets/{index.es390-Cuk6v7N8.js → index.es354-Cuk6v7N8.js} +0 -0
- /package/dist/app/assets/{index.es391-DH5Ifo-i.js → index.es355-DH5Ifo-i.js} +0 -0
- /package/dist/app/assets/{index.es392-E3gJ1_iC.js → index.es356-E3gJ1_iC.js} +0 -0
- /package/dist/app/assets/{index.es393-DAi9KRSo.js → index.es357-DAi9KRSo.js} +0 -0
- /package/dist/app/assets/{index.es394-D7oLnXFd.js → index.es358-D7oLnXFd.js} +0 -0
- /package/dist/app/assets/{index.es395-BfjtVDDH.js → index.es359-BfjtVDDH.js} +0 -0
- /package/dist/app/assets/{index.es396-DnULxvSX.js → index.es360-DnULxvSX.js} +0 -0
- /package/dist/app/assets/{index.es397-CkXjmgJE.js → index.es361-CkXjmgJE.js} +0 -0
- /package/dist/app/assets/{index.es398-CfQXZHmo.js → index.es362-CfQXZHmo.js} +0 -0
- /package/dist/app/assets/{index.es399-DWedfzmr.js → index.es363-DWedfzmr.js} +0 -0
- /package/dist/app/assets/{index.es400-DUszq2jm.js → index.es364-DUszq2jm.js} +0 -0
- /package/dist/app/assets/{index.es401-B7mTdjB0.js → index.es365-B7mTdjB0.js} +0 -0
- /package/dist/app/assets/{index.es402-D5KoaKCx.js → index.es366-D5KoaKCx.js} +0 -0
- /package/dist/app/assets/{index.es403-BfHTSMKl.js → index.es367-BfHTSMKl.js} +0 -0
- /package/dist/app/assets/{index.es404-B0m2ddpp.js → index.es368-B0m2ddpp.js} +0 -0
- /package/dist/app/assets/{index.es405-CyktbL80.js → index.es369-CyktbL80.js} +0 -0
- /package/dist/app/assets/{index.es406-Csfq5Kiy.js → index.es370-Csfq5Kiy.js} +0 -0
- /package/dist/app/assets/{index.es407-CafNBF8u.js → index.es371-CafNBF8u.js} +0 -0
- /package/dist/app/assets/{index.es408-CTRr51gU.js → index.es372-CTRr51gU.js} +0 -0
- /package/dist/app/assets/{index.es409-D4h5O-jR.js → index.es373-D4h5O-jR.js} +0 -0
- /package/dist/app/assets/{index.es410-C39BiMTA.js → index.es374-C39BiMTA.js} +0 -0
- /package/dist/app/assets/{index.es411-Ddv68eIx.js → index.es375-Ddv68eIx.js} +0 -0
- /package/dist/app/assets/{index.es412-GBQ2dnAY.js → index.es376-GBQ2dnAY.js} +0 -0
- /package/dist/app/assets/{index.es413-PoHY5YXO.js → index.es377-PoHY5YXO.js} +0 -0
- /package/dist/app/assets/{index.es414-3e1v2bzS.js → index.es378-3e1v2bzS.js} +0 -0
- /package/dist/app/assets/{index.es415-CS3Unz2-.js → index.es379-CS3Unz2-.js} +0 -0
- /package/dist/app/assets/{index.es416-bN70gL4F.js → index.es380-bN70gL4F.js} +0 -0
- /package/dist/app/assets/{index.es417-CmCqftbK.js → index.es381-CmCqftbK.js} +0 -0
- /package/dist/app/assets/{index.es418-Ds-gbosJ.js → index.es382-Ds-gbosJ.js} +0 -0
- /package/dist/app/assets/{index.es419-CjDtw9vr.js → index.es383-CjDtw9vr.js} +0 -0
- /package/dist/app/assets/{index.es420-BthQWCQV.js → index.es384-BthQWCQV.js} +0 -0
- /package/dist/app/assets/{index.es421-DqwNpetd.js → index.es385-DqwNpetd.js} +0 -0
- /package/dist/app/assets/{index.es422-Bw305WKR.js → index.es386-Bw305WKR.js} +0 -0
- /package/dist/app/assets/{index.es423-DXbdFlpD.js → index.es387-DXbdFlpD.js} +0 -0
- /package/dist/app/assets/{index.es424-L9t79GZl.js → index.es388-L9t79GZl.js} +0 -0
- /package/dist/app/assets/{index.es425-CbfX1IO0.js → index.es389-CbfX1IO0.js} +0 -0
- /package/dist/app/assets/{index.es426-DBQeEorK.js → index.es390-DBQeEorK.js} +0 -0
- /package/dist/app/assets/{index.es427-BEBZ7ncR.js → index.es391-BEBZ7ncR.js} +0 -0
- /package/dist/app/assets/{index.es428-Bkuqu6BP.js → index.es392-Bkuqu6BP.js} +0 -0
- /package/dist/app/assets/{index.es429-D0r3Knsf.js → index.es393-D0r3Knsf.js} +0 -0
- /package/dist/app/assets/{index.es430-CVO1_9PV.js → index.es394-CVO1_9PV.js} +0 -0
package/dist/app/index.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap"
|
|
13
13
|
/>
|
|
14
14
|
<title>Malloy Publisher</title>
|
|
15
|
-
<script type="module" crossorigin src="/assets/index-
|
|
15
|
+
<script type="module" crossorigin src="/assets/index-BIibKHZO.js"></script>
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/vendor-c5ypKtDW.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/mui-UpaxdnvH.js">
|
|
18
18
|
<link rel="stylesheet" crossorigin href="/assets/index-CcIq0aEZ.css">
|
package/dist/server.js
CHANGED
|
@@ -231306,18 +231306,13 @@ var TEMP_DIR_PATH = import_os.default.tmpdir();
|
|
|
231306
231306
|
var publisherPath;
|
|
231307
231307
|
if (process.platform === "win32") {
|
|
231308
231308
|
publisherPath = import_path.default.join(process.env.PROGRAMDATA || "C:\\ProgramData", "publisher");
|
|
231309
|
-
try {
|
|
231310
|
-
import_fs.default.accessSync(publisherPath, import_fs.default.constants.W_OK);
|
|
231311
|
-
} catch {
|
|
231312
|
-
publisherPath = import_path.default.join(import_os.default.tmpdir(), "publisher");
|
|
231313
|
-
}
|
|
231314
231309
|
} else {
|
|
231315
231310
|
publisherPath = "/etc/publisher";
|
|
231316
|
-
|
|
231317
|
-
|
|
231318
|
-
|
|
231319
|
-
|
|
231320
|
-
|
|
231311
|
+
}
|
|
231312
|
+
try {
|
|
231313
|
+
import_fs.default.accessSync(publisherPath, import_fs.default.constants.W_OK);
|
|
231314
|
+
} catch {
|
|
231315
|
+
publisherPath = import_path.default.join(import_os.default.tmpdir(), "publisher");
|
|
231321
231316
|
}
|
|
231322
231317
|
|
|
231323
231318
|
// src/errors.ts
|
|
@@ -235087,8 +235082,8 @@ async function testConnectionConfig(connectionConfig) {
|
|
|
235087
235082
|
throw new Error("Invalid connection configuration. No postgres connection.");
|
|
235088
235083
|
}
|
|
235089
235084
|
const postgresConfig = connectionConfig.postgresConnection;
|
|
235090
|
-
if (!postgresConfig.host || !postgresConfig.port || !postgresConfig.userName || !postgresConfig.
|
|
235091
|
-
throw new Error("PostgreSQL connection requires: host, port, userName,
|
|
235085
|
+
if (!postgresConfig.host || !postgresConfig.port || !postgresConfig.userName || !postgresConfig.databaseName) {
|
|
235086
|
+
throw new Error("PostgreSQL connection requires: host, port, userName, and databaseName");
|
|
235092
235087
|
}
|
|
235093
235088
|
const configReader = async () => {
|
|
235094
235089
|
return {
|
|
@@ -235122,7 +235117,7 @@ async function testConnectionConfig(connectionConfig) {
|
|
|
235122
235117
|
throw new Error("Invalid connection configuration. No snowflake connection.");
|
|
235123
235118
|
}
|
|
235124
235119
|
const snowflakeConfig = connectionConfig.snowflakeConnection;
|
|
235125
|
-
if (!snowflakeConfig.account || !snowflakeConfig.username || !snowflakeConfig.password || !snowflakeConfig.warehouse
|
|
235120
|
+
if (!snowflakeConfig.account || !snowflakeConfig.username || !snowflakeConfig.password || !snowflakeConfig.warehouse) {
|
|
235126
235121
|
throw new Error("Snowflake connection requires: account, username, password, warehouse, database, and schema");
|
|
235127
235122
|
}
|
|
235128
235123
|
const snowflakeConnectionOptions = {
|
|
@@ -235158,12 +235153,12 @@ async function testConnectionConfig(connectionConfig) {
|
|
|
235158
235153
|
throw new Error("Invalid connection configuration. No bigquery connection.");
|
|
235159
235154
|
}
|
|
235160
235155
|
const bigqueryConfig = connectionConfig.bigqueryConnection;
|
|
235161
|
-
|
|
235162
|
-
throw new Error("BigQuery connection requires: serviceAccountKeyJson and defaultProjectId");
|
|
235163
|
-
}
|
|
235164
|
-
const serviceAccountKeyPath = import_path3.default.join(TEMP_DIR_PATH, `test-${v4_default()}-service-account-key.json`);
|
|
235156
|
+
let serviceAccountKeyPath = undefined;
|
|
235165
235157
|
try {
|
|
235166
|
-
|
|
235158
|
+
if (bigqueryConfig.serviceAccountKeyJson) {
|
|
235159
|
+
serviceAccountKeyPath = import_path3.default.join(TEMP_DIR_PATH, `test-${v4_default()}-service-account-key.json`);
|
|
235160
|
+
await import_promises.default.writeFile(serviceAccountKeyPath, bigqueryConfig.serviceAccountKeyJson);
|
|
235161
|
+
}
|
|
235167
235162
|
const bigqueryConnectionOptions = {
|
|
235168
235163
|
projectId: connectionConfig.bigqueryConnection.defaultProjectId,
|
|
235169
235164
|
serviceAccountKeyPath,
|
|
@@ -235187,7 +235182,9 @@ async function testConnectionConfig(connectionConfig) {
|
|
|
235187
235182
|
};
|
|
235188
235183
|
} finally {
|
|
235189
235184
|
try {
|
|
235190
|
-
|
|
235185
|
+
if (serviceAccountKeyPath) {
|
|
235186
|
+
await import_promises.default.unlink(serviceAccountKeyPath);
|
|
235187
|
+
}
|
|
235191
235188
|
} catch (cleanupError) {
|
|
235192
235189
|
logger2.warn(`Failed to cleanup temporary file ${serviceAccountKeyPath}:`, cleanupError);
|
|
235193
235190
|
}
|
|
@@ -235199,8 +235196,8 @@ async function testConnectionConfig(connectionConfig) {
|
|
|
235199
235196
|
throw new Error("Trino connection configuration is missing.");
|
|
235200
235197
|
}
|
|
235201
235198
|
const trinoConfig = connectionConfig.trinoConnection;
|
|
235202
|
-
if (!trinoConfig.server || !trinoConfig.port || !trinoConfig.catalog || !trinoConfig.schema || !trinoConfig.user
|
|
235203
|
-
throw new Error("Trino connection requires: server, port, catalog, schema,
|
|
235199
|
+
if (!trinoConfig.server || !trinoConfig.port || !trinoConfig.catalog || !trinoConfig.schema || !trinoConfig.user) {
|
|
235200
|
+
throw new Error("Trino connection requires: server, port, catalog, schema, and user");
|
|
235204
235201
|
}
|
|
235205
235202
|
const trinoConnectionOptions = {
|
|
235206
235203
|
server: trinoConfig.server,
|
|
@@ -235478,16 +235475,15 @@ class PackageController {
|
|
|
235478
235475
|
}
|
|
235479
235476
|
async downloadPackage(projectName, packageName, packageLocation) {
|
|
235480
235477
|
const absoluteTargetPath = `${publisherPath}/${projectName}/${packageName}`;
|
|
235478
|
+
const isCompressedFile = packageLocation.endsWith(".zip");
|
|
235481
235479
|
if (packageLocation.startsWith("https://") || packageLocation.startsWith("git@")) {
|
|
235482
235480
|
await this.projectStore.downloadGitHubDirectory(packageLocation, absoluteTargetPath);
|
|
235483
235481
|
} else if (packageLocation.startsWith("gs://")) {
|
|
235484
|
-
await this.projectStore.downloadGcsDirectory(packageLocation, projectName, absoluteTargetPath);
|
|
235482
|
+
await this.projectStore.downloadGcsDirectory(packageLocation, projectName, absoluteTargetPath, isCompressedFile);
|
|
235485
235483
|
} else if (packageLocation.startsWith("s3://")) {
|
|
235486
235484
|
await this.projectStore.downloadS3Directory(packageLocation, projectName, absoluteTargetPath);
|
|
235487
|
-
}
|
|
235488
|
-
|
|
235489
|
-
packageLocation = await this.projectStore.unzipProject(packageLocation);
|
|
235490
|
-
}
|
|
235485
|
+
}
|
|
235486
|
+
if (packageLocation.startsWith("/")) {
|
|
235491
235487
|
await this.projectStore.mountLocalDirectory(packageLocation, absoluteTargetPath, projectName, packageName);
|
|
235492
235488
|
}
|
|
235493
235489
|
}
|
|
@@ -241097,6 +241093,12 @@ var import_fs5 = __toESM(require("fs"));
|
|
|
241097
241093
|
var import_path4 = __toESM(require("path"));
|
|
241098
241094
|
var getPublisherConfig = (serverRoot) => {
|
|
241099
241095
|
const publisherConfigPath = import_path4.default.join(serverRoot, PUBLISHER_CONFIG_NAME);
|
|
241096
|
+
if (!import_fs5.default.existsSync(publisherConfigPath)) {
|
|
241097
|
+
return {
|
|
241098
|
+
frozenConfig: false,
|
|
241099
|
+
projects: []
|
|
241100
|
+
};
|
|
241101
|
+
}
|
|
241100
241102
|
const rawConfig = JSON.parse(import_fs5.default.readFileSync(publisherConfigPath, "utf8"));
|
|
241101
241103
|
if (rawConfig.projects && typeof rawConfig.projects === "object" && !Array.isArray(rawConfig.projects)) {
|
|
241102
241104
|
throw new Error("Config has changed. Please update your config to the new format.");
|
|
@@ -242645,10 +242647,11 @@ class ProjectStore {
|
|
|
242645
242647
|
return absoluteTargetPath;
|
|
242646
242648
|
}
|
|
242647
242649
|
async downloadOrMountLocation(location, targetPath, projectName, packageName) {
|
|
242650
|
+
const isCompressedFile = location.endsWith(".zip");
|
|
242648
242651
|
if (location.startsWith("gs://")) {
|
|
242649
242652
|
try {
|
|
242650
242653
|
logger2.info(`Downloading GCS directory from "${location}" to "${targetPath}"`);
|
|
242651
|
-
await this.downloadGcsDirectory(location, projectName, targetPath);
|
|
242654
|
+
await this.downloadGcsDirectory(location, projectName, targetPath, isCompressedFile);
|
|
242652
242655
|
return;
|
|
242653
242656
|
} catch (error) {
|
|
242654
242657
|
logger2.error(`Failed to download GCS directory "${location}"`, {
|
|
@@ -242715,7 +242718,7 @@ class ProjectStore {
|
|
|
242715
242718
|
throw new PackageNotFoundError(`Package ${packageName} for project ${projectName} not found in "${projectPath}"`);
|
|
242716
242719
|
}
|
|
242717
242720
|
}
|
|
242718
|
-
async downloadGcsDirectory(gcsPath, projectName, absoluteDirPath) {
|
|
242721
|
+
async downloadGcsDirectory(gcsPath, projectName, absoluteDirPath, isCompressedFile) {
|
|
242719
242722
|
const trimmedPath = gcsPath.slice(5);
|
|
242720
242723
|
const [bucketName, ...prefixParts] = trimmedPath.split("/");
|
|
242721
242724
|
const prefix = prefixParts.join("/");
|
|
@@ -242725,11 +242728,18 @@ class ProjectStore {
|
|
|
242725
242728
|
if (files.length === 0) {
|
|
242726
242729
|
throw new ProjectNotFoundError(`Project ${projectName} not found in ${gcsPath}`);
|
|
242727
242730
|
}
|
|
242728
|
-
|
|
242729
|
-
|
|
242731
|
+
if (!isCompressedFile) {
|
|
242732
|
+
await fs9.promises.rm(absoluteDirPath, {
|
|
242733
|
+
recursive: true,
|
|
242734
|
+
force: true
|
|
242735
|
+
});
|
|
242736
|
+
await fs9.promises.mkdir(absoluteDirPath, { recursive: true });
|
|
242737
|
+
} else {
|
|
242738
|
+
absoluteDirPath = `${absoluteDirPath}.zip`;
|
|
242739
|
+
}
|
|
242730
242740
|
await Promise.all(files.map(async (file) => {
|
|
242731
242741
|
const relativeFilePath = file.name.replace(prefix, "");
|
|
242732
|
-
const absoluteFilePath = path8.join(absoluteDirPath, relativeFilePath);
|
|
242742
|
+
const absoluteFilePath = isCompressedFile ? absoluteDirPath : path8.join(absoluteDirPath, relativeFilePath);
|
|
242733
242743
|
if (file.name.endsWith("/")) {
|
|
242734
242744
|
return;
|
|
242735
242745
|
}
|
|
@@ -242738,6 +242748,10 @@ class ProjectStore {
|
|
|
242738
242748
|
});
|
|
242739
242749
|
return fs9.promises.writeFile(absoluteFilePath, await file.download());
|
|
242740
242750
|
}));
|
|
242751
|
+
if (isCompressedFile) {
|
|
242752
|
+
await this.unzipProject(absoluteDirPath);
|
|
242753
|
+
}
|
|
242754
|
+
logger2.info(`Downloaded GCS directory ${gcsPath} to ${absoluteDirPath}`);
|
|
242741
242755
|
}
|
|
242742
242756
|
async downloadS3Directory(s3Path, projectName, absoluteDirPath) {
|
|
242743
242757
|
const trimmedPath = s3Path.slice(5);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@malloy-publisher/server",
|
|
3
3
|
"description": "Malloy Publisher Server",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.97",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"malloy-publisher": "dist/server.js"
|
|
@@ -23,15 +23,15 @@
|
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"@google-cloud/storage": "^7.16.0",
|
|
26
|
-
"@malloydata/db-bigquery": "^0.0.
|
|
27
|
-
"@malloydata/db-duckdb": "^0.0.
|
|
28
|
-
"@malloydata/db-mysql": "^0.0.
|
|
29
|
-
"@malloydata/db-postgres": "^0.0.
|
|
30
|
-
"@malloydata/db-snowflake": "^0.0.
|
|
31
|
-
"@malloydata/db-trino": "^0.0.
|
|
32
|
-
"@malloydata/malloy": "^0.0.
|
|
33
|
-
"@malloydata/malloy-sql": "^0.0.
|
|
34
|
-
"@malloydata/render": "^0.0.
|
|
26
|
+
"@malloydata/db-bigquery": "^0.0.307",
|
|
27
|
+
"@malloydata/db-duckdb": "^0.0.307",
|
|
28
|
+
"@malloydata/db-mysql": "^0.0.307",
|
|
29
|
+
"@malloydata/db-postgres": "^0.0.307",
|
|
30
|
+
"@malloydata/db-snowflake": "^0.0.307",
|
|
31
|
+
"@malloydata/db-trino": "^0.0.307",
|
|
32
|
+
"@malloydata/malloy": "^0.0.307",
|
|
33
|
+
"@malloydata/malloy-sql": "^0.0.307",
|
|
34
|
+
"@malloydata/render": "^0.0.307",
|
|
35
35
|
"@modelcontextprotocol/sdk": "^1.13.2",
|
|
36
36
|
"@opentelemetry/api": "^1.9.0",
|
|
37
37
|
"@opentelemetry/auto-instrumentations-node": "^0.57.0",
|
package/src/config.ts
CHANGED
|
@@ -22,6 +22,12 @@ export type PublisherConfig = {
|
|
|
22
22
|
|
|
23
23
|
export const getPublisherConfig = (serverRoot: string): PublisherConfig => {
|
|
24
24
|
const publisherConfigPath = path.join(serverRoot, PUBLISHER_CONFIG_NAME);
|
|
25
|
+
if (!fs.existsSync(publisherConfigPath)) {
|
|
26
|
+
return {
|
|
27
|
+
frozenConfig: false,
|
|
28
|
+
projects: [],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
25
31
|
const rawConfig = JSON.parse(fs.readFileSync(publisherConfigPath, "utf8"));
|
|
26
32
|
|
|
27
33
|
if (
|
package/src/constants.ts
CHANGED
|
@@ -10,6 +10,7 @@ export const MODEL_FILE_SUFFIX = ".malloy";
|
|
|
10
10
|
export const NOTEBOOK_FILE_SUFFIX = ".malloynb";
|
|
11
11
|
export const ROW_LIMIT = 1000;
|
|
12
12
|
export const TEMP_DIR_PATH = os.tmpdir();
|
|
13
|
+
|
|
13
14
|
export let publisherPath: string;
|
|
14
15
|
|
|
15
16
|
if (process.platform === "win32") {
|
|
@@ -17,16 +18,12 @@ if (process.platform === "win32") {
|
|
|
17
18
|
process.env.PROGRAMDATA || "C:\\ProgramData",
|
|
18
19
|
"publisher",
|
|
19
20
|
);
|
|
20
|
-
try {
|
|
21
|
-
fs.accessSync(publisherPath, fs.constants.W_OK);
|
|
22
|
-
} catch {
|
|
23
|
-
publisherPath = path.join(os.tmpdir(), "publisher");
|
|
24
|
-
}
|
|
25
21
|
} else {
|
|
26
22
|
publisherPath = "/etc/publisher";
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
fs.accessSync(publisherPath, fs.constants.W_OK);
|
|
27
|
+
} catch {
|
|
28
|
+
publisherPath = path.join(os.tmpdir(), "publisher");
|
|
32
29
|
}
|
|
@@ -74,6 +74,7 @@ export class PackageController {
|
|
|
74
74
|
packageLocation: string,
|
|
75
75
|
) {
|
|
76
76
|
const absoluteTargetPath = `${publisherPath}/${projectName}/${packageName}`;
|
|
77
|
+
const isCompressedFile = packageLocation.endsWith(".zip");
|
|
77
78
|
if (
|
|
78
79
|
packageLocation.startsWith("https://") ||
|
|
79
80
|
packageLocation.startsWith("git@")
|
|
@@ -87,6 +88,7 @@ export class PackageController {
|
|
|
87
88
|
packageLocation,
|
|
88
89
|
projectName,
|
|
89
90
|
absoluteTargetPath,
|
|
91
|
+
isCompressedFile,
|
|
90
92
|
);
|
|
91
93
|
} else if (packageLocation.startsWith("s3://")) {
|
|
92
94
|
await this.projectStore.downloadS3Directory(
|
|
@@ -94,11 +96,11 @@ export class PackageController {
|
|
|
94
96
|
projectName,
|
|
95
97
|
absoluteTargetPath,
|
|
96
98
|
);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (packageLocation.startsWith("/")) {
|
|
102
|
+
// Absolute paths from the publisher.config could be placed outside of /etc/publisher,
|
|
103
|
+
// so we need to mount them on the right place.
|
|
102
104
|
await this.projectStore.mountLocalDirectory(
|
|
103
105
|
packageLocation,
|
|
104
106
|
absoluteTargetPath,
|
package/src/data_styles.ts
CHANGED
|
@@ -277,11 +277,10 @@ export async function testConnectionConfig(
|
|
|
277
277
|
!postgresConfig.host ||
|
|
278
278
|
!postgresConfig.port ||
|
|
279
279
|
!postgresConfig.userName ||
|
|
280
|
-
!postgresConfig.password ||
|
|
281
280
|
!postgresConfig.databaseName
|
|
282
281
|
) {
|
|
283
282
|
throw new Error(
|
|
284
|
-
"PostgreSQL connection requires: host, port, userName,
|
|
283
|
+
"PostgreSQL connection requires: host, port, userName, and databaseName",
|
|
285
284
|
);
|
|
286
285
|
}
|
|
287
286
|
|
|
@@ -331,9 +330,7 @@ export async function testConnectionConfig(
|
|
|
331
330
|
!snowflakeConfig.account ||
|
|
332
331
|
!snowflakeConfig.username ||
|
|
333
332
|
!snowflakeConfig.password ||
|
|
334
|
-
!snowflakeConfig.warehouse
|
|
335
|
-
!snowflakeConfig.database ||
|
|
336
|
-
!snowflakeConfig.schema
|
|
333
|
+
!snowflakeConfig.warehouse
|
|
337
334
|
) {
|
|
338
335
|
throw new Error(
|
|
339
336
|
"Snowflake connection requires: account, username, password, warehouse, database, and schema",
|
|
@@ -381,26 +378,18 @@ export async function testConnectionConfig(
|
|
|
381
378
|
}
|
|
382
379
|
|
|
383
380
|
const bigqueryConfig = connectionConfig.bigqueryConnection;
|
|
384
|
-
|
|
385
|
-
!bigqueryConfig.serviceAccountKeyJson ||
|
|
386
|
-
!bigqueryConfig.defaultProjectId
|
|
387
|
-
) {
|
|
388
|
-
throw new Error(
|
|
389
|
-
"BigQuery connection requires: serviceAccountKeyJson and defaultProjectId",
|
|
390
|
-
);
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
const serviceAccountKeyPath = path.join(
|
|
394
|
-
TEMP_DIR_PATH,
|
|
395
|
-
`test-${uuidv4()}-service-account-key.json`,
|
|
396
|
-
);
|
|
397
|
-
|
|
381
|
+
let serviceAccountKeyPath = undefined;
|
|
398
382
|
try {
|
|
399
|
-
|
|
400
|
-
serviceAccountKeyPath
|
|
401
|
-
|
|
402
|
-
.
|
|
403
|
-
|
|
383
|
+
if (bigqueryConfig.serviceAccountKeyJson) {
|
|
384
|
+
serviceAccountKeyPath = path.join(
|
|
385
|
+
TEMP_DIR_PATH,
|
|
386
|
+
`test-${uuidv4()}-service-account-key.json`,
|
|
387
|
+
);
|
|
388
|
+
await fs.writeFile(
|
|
389
|
+
serviceAccountKeyPath,
|
|
390
|
+
bigqueryConfig.serviceAccountKeyJson as string,
|
|
391
|
+
);
|
|
392
|
+
}
|
|
404
393
|
|
|
405
394
|
const bigqueryConnectionOptions = {
|
|
406
395
|
projectId: connectionConfig.bigqueryConnection.defaultProjectId,
|
|
@@ -433,7 +422,9 @@ export async function testConnectionConfig(
|
|
|
433
422
|
};
|
|
434
423
|
} finally {
|
|
435
424
|
try {
|
|
436
|
-
|
|
425
|
+
if (serviceAccountKeyPath) {
|
|
426
|
+
await fs.unlink(serviceAccountKeyPath);
|
|
427
|
+
}
|
|
437
428
|
} catch (cleanupError) {
|
|
438
429
|
logger.warn(
|
|
439
430
|
`Failed to cleanup temporary file ${serviceAccountKeyPath}:`,
|
|
@@ -455,11 +446,10 @@ export async function testConnectionConfig(
|
|
|
455
446
|
!trinoConfig.port ||
|
|
456
447
|
!trinoConfig.catalog ||
|
|
457
448
|
!trinoConfig.schema ||
|
|
458
|
-
!trinoConfig.user
|
|
459
|
-
!trinoConfig.password
|
|
449
|
+
!trinoConfig.user
|
|
460
450
|
) {
|
|
461
451
|
throw new Error(
|
|
462
|
-
"Trino connection requires: server, port, catalog, schema,
|
|
452
|
+
"Trino connection requires: server, port, catalog, schema, and user",
|
|
463
453
|
);
|
|
464
454
|
}
|
|
465
455
|
|
package/src/service/model.ts
CHANGED
|
@@ -20,7 +20,6 @@ import {
|
|
|
20
20
|
MalloySQLStatementType,
|
|
21
21
|
} from "@malloydata/malloy-sql";
|
|
22
22
|
import malloyPackage from "@malloydata/malloy/package.json";
|
|
23
|
-
// @ts-expect-error until this gets merged https://github.com/malloydata/malloy/pull/2484
|
|
24
23
|
import { DataStyles } from "@malloydata/render";
|
|
25
24
|
import { metrics } from "@opentelemetry/api";
|
|
26
25
|
import * as fs from "fs/promises";
|
|
@@ -473,13 +473,19 @@ export class ProjectStore {
|
|
|
473
473
|
projectName: string,
|
|
474
474
|
packageName: string,
|
|
475
475
|
) {
|
|
476
|
+
const isCompressedFile = location.endsWith(".zip");
|
|
476
477
|
// Handle GCS paths
|
|
477
478
|
if (location.startsWith("gs://")) {
|
|
478
479
|
try {
|
|
479
480
|
logger.info(
|
|
480
481
|
`Downloading GCS directory from "${location}" to "${targetPath}"`,
|
|
481
482
|
);
|
|
482
|
-
await this.downloadGcsDirectory(
|
|
483
|
+
await this.downloadGcsDirectory(
|
|
484
|
+
location,
|
|
485
|
+
projectName,
|
|
486
|
+
targetPath,
|
|
487
|
+
isCompressedFile,
|
|
488
|
+
);
|
|
483
489
|
return;
|
|
484
490
|
} catch (error) {
|
|
485
491
|
logger.error(`Failed to download GCS directory "${location}"`, {
|
|
@@ -591,6 +597,7 @@ export class ProjectStore {
|
|
|
591
597
|
gcsPath: string,
|
|
592
598
|
projectName: string,
|
|
593
599
|
absoluteDirPath: string,
|
|
600
|
+
isCompressedFile: boolean,
|
|
594
601
|
) {
|
|
595
602
|
const trimmedPath = gcsPath.slice(5);
|
|
596
603
|
const [bucketName, ...prefixParts] = trimmedPath.split("/");
|
|
@@ -603,15 +610,21 @@ export class ProjectStore {
|
|
|
603
610
|
`Project ${projectName} not found in ${gcsPath}`,
|
|
604
611
|
);
|
|
605
612
|
}
|
|
606
|
-
|
|
607
|
-
|
|
613
|
+
if (!isCompressedFile) {
|
|
614
|
+
await fs.promises.rm(absoluteDirPath, {
|
|
615
|
+
recursive: true,
|
|
616
|
+
force: true,
|
|
617
|
+
});
|
|
618
|
+
await fs.promises.mkdir(absoluteDirPath, { recursive: true });
|
|
619
|
+
} else {
|
|
620
|
+
absoluteDirPath = `${absoluteDirPath}.zip`;
|
|
621
|
+
}
|
|
608
622
|
await Promise.all(
|
|
609
623
|
files.map(async (file) => {
|
|
610
624
|
const relativeFilePath = file.name.replace(prefix, "");
|
|
611
|
-
const absoluteFilePath =
|
|
612
|
-
absoluteDirPath
|
|
613
|
-
relativeFilePath
|
|
614
|
-
);
|
|
625
|
+
const absoluteFilePath = isCompressedFile
|
|
626
|
+
? absoluteDirPath
|
|
627
|
+
: path.join(absoluteDirPath, relativeFilePath);
|
|
615
628
|
if (file.name.endsWith("/")) {
|
|
616
629
|
return;
|
|
617
630
|
}
|
|
@@ -624,6 +637,10 @@ export class ProjectStore {
|
|
|
624
637
|
);
|
|
625
638
|
}),
|
|
626
639
|
);
|
|
640
|
+
if (isCompressedFile) {
|
|
641
|
+
await this.unzipProject(absoluteDirPath);
|
|
642
|
+
}
|
|
643
|
+
logger.info(`Downloaded GCS directory ${gcsPath} to ${absoluteDirPath}`);
|
|
627
644
|
}
|
|
628
645
|
|
|
629
646
|
async downloadS3Directory(
|