@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.
Files changed (290) hide show
  1. package/dist/app/assets/{index-TVOAGCOZ.js → index-BIibKHZO.js} +6 -6
  2. package/dist/app/assets/index-D4eYZfPc.js +287 -0
  3. package/dist/app/assets/{index-Bq29VQqL.js → index-SM0qJxoC.js} +241 -241
  4. package/dist/app/assets/{index.es162-DjehWeVi.js → index.es126-CKC26ttZ.js} +1 -1
  5. package/dist/app/assets/{index.es163-Cn6ymEKN.js → index.es127-CBKpWhIe.js} +1 -1
  6. package/dist/app/assets/{index.es166-Dz17gOib.js → index.es130-5z_n6lm6.js} +1 -1
  7. package/dist/app/assets/{index.es171-D0jXlw9l.js → index.es135-aJw1Xr-9.js} +1 -1
  8. package/dist/app/assets/{index.es179-CgGW5qRb.js → index.es143-CAt8G2AV.js} +1 -1
  9. package/dist/app/assets/{index.es180-DDBKIFdG.js → index.es144-CaWYrbVR.js} +1 -1
  10. package/dist/app/assets/{index.es183-CBW1fnbb.js → index.es147-B_4j3qbz.js} +1 -1
  11. package/dist/app/assets/{index.es187-DF7wmOI7.js → index.es151-Byg3j7QH.js} +1 -1
  12. package/dist/app/assets/{index.es190-DWgf4H-t.js → index.es154-D8PMiD5x.js} +1 -1
  13. package/dist/app/assets/{index.es193-xm_HeVIy.js → index.es157-qx6EMeW2.js} +1 -1
  14. package/dist/app/assets/{index.es194-DbZjE_Oe.js → index.es158-CJWvYXRx.js} +1 -1
  15. package/dist/app/assets/{index.es208-D1EDhCBL.js → index.es172-BamsV9CN.js} +1 -1
  16. package/dist/app/assets/{index.es209-358riOK7.js → index.es173-CXyGU58j.js} +1 -1
  17. package/dist/app/assets/{index.es210-BgthglSG.js → index.es174-C2o3B3o8.js} +1 -1
  18. package/dist/app/assets/{index.es212-CD-lrWnJ.js → index.es176-BB-1P5bb.js} +1 -1
  19. package/dist/app/assets/{index.es217-CJM4XQU4.js → index.es181-2PlTGcYG.js} +1 -1
  20. package/dist/app/assets/{index.es219-BAcq47kQ.js → index.es183-DgoVwe-N.js} +1 -1
  21. package/dist/app/assets/{index.es220-FIR0uO3Z.js → index.es184-Cmc38osU.js} +1 -1
  22. package/dist/app/assets/{index.es225-BW0QuDEU.js → index.es189-DuMu0KfI.js} +1 -1
  23. package/dist/app/assets/{index.es226-OZjmh8DW.js → index.es190-C117wYiK.js} +1 -1
  24. package/dist/app/assets/{index.es228-yL7UTgkg.js → index.es192-Bm2ZoxNH.js} +1 -1
  25. package/dist/app/assets/{index.es229-BxdgOaeI.js → index.es193-BBtnt1bZ.js} +1 -1
  26. package/dist/app/assets/{index.es230-D7qaa3vU.js → index.es194-CB2Nn3wg.js} +1 -1
  27. package/dist/app/assets/{index.es233-ChrWTqJS.js → index.es197-D91osx4R.js} +1 -1
  28. package/dist/app/assets/{index.es235-C_llaqlU.js → index.es199-BtpESJSS.js} +1 -1
  29. package/dist/app/assets/{index.es236-Bpao3w_n.js → index.es200-BeG9RRw_.js} +1 -1
  30. package/dist/app/assets/{index.es237-BspTzGnw.js → index.es201-k2nuCC3B.js} +1 -1
  31. package/dist/app/assets/{index.es243-Du-LtkxO.js → index.es207-C2uQegug.js} +1 -1
  32. package/dist/app/assets/{index.es244-Dmu8QZ0L.js → index.es208-BTucFWqR.js} +1 -1
  33. package/dist/app/assets/{index.es245-Cz7t32Qg.js → index.es209-4dK47W8o.js} +1 -1
  34. package/dist/app/assets/{index.es246-BOGVWhXq.js → index.es210-DO6X3-kz.js} +1 -1
  35. package/dist/app/assets/{index.es248-C8RgZFH6.js → index.es212-CFG-vrrr.js} +1 -1
  36. package/dist/app/assets/{index.es252-K5z2dppi.js → index.es216-TWO3Mhor.js} +1 -1
  37. package/dist/app/assets/{index.es253-CFVa6H-r.js → index.es217-0tHVUThG.js} +1 -1
  38. package/dist/app/assets/{index.es261-DKGfXt6W.js → index.es225-DHGKCs7a.js} +1 -1
  39. package/dist/app/assets/{index.es264-D-M46xK6.js → index.es228-Bz0ZvI5L.js} +1 -1
  40. package/dist/app/assets/{index.es50-RRV_pHUk.js → index.es23-Cifiq2N-.js} +2 -2
  41. package/dist/app/assets/{index.es267-bsSGk7Qt.js → index.es231-D1HdFvsl.js} +1 -1
  42. package/dist/app/assets/{index.es270-CAhgPSnC.js → index.es234-1j9jt1V9.js} +1 -1
  43. package/dist/app/assets/{index.es274-ByAjwomg.js → index.es238-DBm7c9HR.js} +1 -1
  44. package/dist/app/assets/{index.es276-CKlMO2Lw.js → index.es240-DCqDESzD.js} +1 -1
  45. package/dist/app/assets/{index.es284-CzLPtLDD.js → index.es248-BEYN2dFo.js} +1 -1
  46. package/dist/app/assets/{index.es285-DJKOnmR4.js → index.es249-DKdYiZA_.js} +1 -1
  47. package/dist/app/assets/{index.es292-C_XpFc3I.js → index.es256-CgBAGaDx.js} +1 -1
  48. package/dist/app/assets/{index.es293-CAMCK3pl.js → index.es257-DMI3dJGJ.js} +1 -1
  49. package/dist/app/assets/{index.es303-Kzndt26b.js → index.es267-B5ei8o6D.js} +1 -1
  50. package/dist/app/assets/{index.es307-uMHHp7AA.js → index.es271-DDBsSlrj.js} +1 -1
  51. package/dist/app/assets/{index.es313-gUL1Q7h-.js → index.es277-aI_iYBJv.js} +1 -1
  52. package/dist/app/assets/{index.es318-Dv9v9QNN.js → index.es282-DZQyCurk.js} +1 -1
  53. package/dist/app/assets/{index.es319-BxOEtECK.js → index.es283-DRQxI154.js} +1 -1
  54. package/dist/app/assets/{index.es321-CAohi0dV.js → index.es285-DrT3oe3D.js} +1 -1
  55. package/dist/app/assets/{index.es325-CDs1Kyg7.js → index.es289-CKYiktdr.js} +1 -1
  56. package/dist/app/assets/{index.es327-YD3xAAtq.js → index.es291-BRH8qn2R.js} +1 -1
  57. package/dist/app/assets/{index.es329-Dx_IcV_r.js → index.es293-B_x7Y2b5.js} +1 -1
  58. package/dist/app/assets/{index.es332-DoVSa19H.js → index.es296-CMhur-CK.js} +1 -1
  59. package/dist/app/assets/{index.es333-tJOdbEM5.js → index.es297-BY9kHC-p.js} +1 -1
  60. package/dist/app/assets/{index.es337-Ds206neg.js → index.es301-CmwjGLCv.js} +1 -1
  61. package/dist/app/assets/{index.es339-Cf3Qs-00.js → index.es303-BOa5F89I.js} +1 -1
  62. package/dist/app/assets/{index.es346-B6wL7HWb.js → index.es310-BF6kc0UE.js} +1 -1
  63. package/dist/app/assets/{index.es348-BrzYmfQN.js → index.es312-CoCT5fTV.js} +1 -1
  64. package/dist/app/assets/{index.es350-DaKzpwWB.js → index.es314-CMYE9lCS.js} +1 -1
  65. package/dist/app/assets/{index.es354-BNHh55LB.js → index.es318-C2_Stmju.js} +1 -1
  66. package/dist/app/assets/{index.es364-CeZwlyUV.js → index.es328-DxiHjjdV.js} +1 -1
  67. package/dist/app/assets/{index.es365-CtY1jSQJ.js → index.es329-D4H4qJV5.js} +1 -1
  68. package/dist/app/assets/{index.es372-Cjsc1C-R.js → index.es336-DMBcHb9l.js} +1 -1
  69. package/dist/app/assets/{index.es373-CfvIMr2S.js → index.es337-BOcmfyvS.js} +1 -1
  70. package/dist/app/assets/index.umd-DknWdzGi.js +2134 -0
  71. package/dist/app/index.html +1 -1
  72. package/dist/server.js +45 -31
  73. package/package.json +10 -10
  74. package/src/config.ts +6 -0
  75. package/src/constants.ts +7 -10
  76. package/src/controller/package.controller.ts +7 -5
  77. package/src/data_styles.ts +0 -1
  78. package/src/service/connection.ts +18 -28
  79. package/src/service/model.ts +0 -1
  80. package/src/service/project_store.ts +24 -7
  81. package/dist/app/assets/index-Dg-zTLb3.js +0 -211
  82. package/dist/app/assets/index.umd-BN4_E5KD.js +0 -2105
  83. /package/dist/app/assets/{index.es151-CG6Dc4jp.js → index.es115-CG6Dc4jp.js} +0 -0
  84. /package/dist/app/assets/{index.es159-DsBKuouk.js → index.es123-DsBKuouk.js} +0 -0
  85. /package/dist/app/assets/{index.es160-D_z4Izcz.js → index.es124-D_z4Izcz.js} +0 -0
  86. /package/dist/app/assets/{index.es161-727ZlQH0.js → index.es125-727ZlQH0.js} +0 -0
  87. /package/dist/app/assets/{index.es164-Dn00JSTd.js → index.es128-Dn00JSTd.js} +0 -0
  88. /package/dist/app/assets/{index.es165-COJ4H7py.js → index.es129-COJ4H7py.js} +0 -0
  89. /package/dist/app/assets/{index.es167-Bu5BbsvL.js → index.es131-Bu5BbsvL.js} +0 -0
  90. /package/dist/app/assets/{index.es168-7O62HKoU.js → index.es132-7O62HKoU.js} +0 -0
  91. /package/dist/app/assets/{index.es169-BPT9niGB.js → index.es133-BPT9niGB.js} +0 -0
  92. /package/dist/app/assets/{index.es170-Dhn9LcZ4.js → index.es134-Dhn9LcZ4.js} +0 -0
  93. /package/dist/app/assets/{index.es172-eg146-Ew.js → index.es136-eg146-Ew.js} +0 -0
  94. /package/dist/app/assets/{index.es173-Du268qiB.js → index.es137-Du268qiB.js} +0 -0
  95. /package/dist/app/assets/{index.es174-fje9CFhw.js → index.es138-fje9CFhw.js} +0 -0
  96. /package/dist/app/assets/{index.es175-BwXTMy5W.js → index.es139-BwXTMy5W.js} +0 -0
  97. /package/dist/app/assets/{index.es176-3xVqZejG.js → index.es140-3xVqZejG.js} +0 -0
  98. /package/dist/app/assets/{index.es177-xW4inM5L.js → index.es141-xW4inM5L.js} +0 -0
  99. /package/dist/app/assets/{index.es178-DHo0CJ0O.js → index.es142-DHo0CJ0O.js} +0 -0
  100. /package/dist/app/assets/{index.es181-C3t2pwGQ.js → index.es145-C3t2pwGQ.js} +0 -0
  101. /package/dist/app/assets/{index.es182-DNquZEk8.js → index.es146-DNquZEk8.js} +0 -0
  102. /package/dist/app/assets/{index.es184-BHOwM8T6.js → index.es148-BHOwM8T6.js} +0 -0
  103. /package/dist/app/assets/{index.es185-DxSadP1t.js → index.es149-DxSadP1t.js} +0 -0
  104. /package/dist/app/assets/{index.es186-DbXoA79R.js → index.es150-DbXoA79R.js} +0 -0
  105. /package/dist/app/assets/{index.es188-Bp6g37R7.js → index.es152-Bp6g37R7.js} +0 -0
  106. /package/dist/app/assets/{index.es189-sacFqUAJ.js → index.es153-sacFqUAJ.js} +0 -0
  107. /package/dist/app/assets/{index.es191-C7gG9l05.js → index.es155-C7gG9l05.js} +0 -0
  108. /package/dist/app/assets/{index.es192-Dsg_Bt_b.js → index.es156-Dsg_Bt_b.js} +0 -0
  109. /package/dist/app/assets/{index.es195-D9R-vmeu.js → index.es159-D9R-vmeu.js} +0 -0
  110. /package/dist/app/assets/{index.es196-BPhBrDlE.js → index.es160-BPhBrDlE.js} +0 -0
  111. /package/dist/app/assets/{index.es197-C-TU5hQ_.js → index.es161-C-TU5hQ_.js} +0 -0
  112. /package/dist/app/assets/{index.es198-DtFQj3wx.js → index.es162-DtFQj3wx.js} +0 -0
  113. /package/dist/app/assets/{index.es199-m2LEI-9-.js → index.es163-m2LEI-9-.js} +0 -0
  114. /package/dist/app/assets/{index.es200-BoXegm-a.js → index.es164-BoXegm-a.js} +0 -0
  115. /package/dist/app/assets/{index.es201-B9wLZaAG.js → index.es165-B9wLZaAG.js} +0 -0
  116. /package/dist/app/assets/{index.es202-ClGRhx96.js → index.es166-ClGRhx96.js} +0 -0
  117. /package/dist/app/assets/{index.es203-DEIpsLCJ.js → index.es167-DEIpsLCJ.js} +0 -0
  118. /package/dist/app/assets/{index.es204-BgYniUM_.js → index.es168-BgYniUM_.js} +0 -0
  119. /package/dist/app/assets/{index.es205-COcR7UxN.js → index.es169-COcR7UxN.js} +0 -0
  120. /package/dist/app/assets/{index.es206-BjQB5zDj.js → index.es170-BjQB5zDj.js} +0 -0
  121. /package/dist/app/assets/{index.es207-C-nORZOA.js → index.es171-C-nORZOA.js} +0 -0
  122. /package/dist/app/assets/{index.es211-BX77sIaO.js → index.es175-BX77sIaO.js} +0 -0
  123. /package/dist/app/assets/{index.es213-B-DoSBHF.js → index.es177-B-DoSBHF.js} +0 -0
  124. /package/dist/app/assets/{index.es214-bCA53EVm.js → index.es178-bCA53EVm.js} +0 -0
  125. /package/dist/app/assets/{index.es215-w-ucz2PV.js → index.es179-w-ucz2PV.js} +0 -0
  126. /package/dist/app/assets/{index.es216-Dayu4EKP.js → index.es180-Dayu4EKP.js} +0 -0
  127. /package/dist/app/assets/{index.es218-DKXYxT9g.js → index.es182-DKXYxT9g.js} +0 -0
  128. /package/dist/app/assets/{index.es221-DfxzS6Rs.js → index.es185-DfxzS6Rs.js} +0 -0
  129. /package/dist/app/assets/{index.es222-SKMF96pI.js → index.es186-SKMF96pI.js} +0 -0
  130. /package/dist/app/assets/{index.es223-ajMbGru0.js → index.es187-ajMbGru0.js} +0 -0
  131. /package/dist/app/assets/{index.es224--30QC5Em.js → index.es188--30QC5Em.js} +0 -0
  132. /package/dist/app/assets/{index.es227-B430Bg39.js → index.es191-B430Bg39.js} +0 -0
  133. /package/dist/app/assets/{index.es231-CM8KxXT1.js → index.es195-CM8KxXT1.js} +0 -0
  134. /package/dist/app/assets/{index.es232-B1SYOhNW.js → index.es196-B1SYOhNW.js} +0 -0
  135. /package/dist/app/assets/{index.es234-DkBy-JyN.js → index.es198-DkBy-JyN.js} +0 -0
  136. /package/dist/app/assets/{index.es238-BILxekzW.js → index.es202-BILxekzW.js} +0 -0
  137. /package/dist/app/assets/{index.es239-C5wWYbrZ.js → index.es203-C5wWYbrZ.js} +0 -0
  138. /package/dist/app/assets/{index.es240-HzYwdGDm.js → index.es204-HzYwdGDm.js} +0 -0
  139. /package/dist/app/assets/{index.es241-T-Tgc4AT.js → index.es205-T-Tgc4AT.js} +0 -0
  140. /package/dist/app/assets/{index.es242-ifBTmRxC.js → index.es206-ifBTmRxC.js} +0 -0
  141. /package/dist/app/assets/{index.es247-BMj5Y0dO.js → index.es211-BMj5Y0dO.js} +0 -0
  142. /package/dist/app/assets/{index.es249-BjABl1g7.js → index.es213-BjABl1g7.js} +0 -0
  143. /package/dist/app/assets/{index.es250-xI-RfyKK.js → index.es214-xI-RfyKK.js} +0 -0
  144. /package/dist/app/assets/{index.es251-ySlJ1b_l.js → index.es215-ySlJ1b_l.js} +0 -0
  145. /package/dist/app/assets/{index.es254-BQoSv7ci.js → index.es218-BQoSv7ci.js} +0 -0
  146. /package/dist/app/assets/{index.es255-w8dY5SsB.js → index.es219-w8dY5SsB.js} +0 -0
  147. /package/dist/app/assets/{index.es256-TU54ms6u.js → index.es220-TU54ms6u.js} +0 -0
  148. /package/dist/app/assets/{index.es257-DREVFZK8.js → index.es221-DREVFZK8.js} +0 -0
  149. /package/dist/app/assets/{index.es258-BfivnA6A.js → index.es222-BfivnA6A.js} +0 -0
  150. /package/dist/app/assets/{index.es259-P4WzXJd0.js → index.es223-P4WzXJd0.js} +0 -0
  151. /package/dist/app/assets/{index.es260-BAng5TT0.js → index.es224-BAng5TT0.js} +0 -0
  152. /package/dist/app/assets/{index.es262-B5lbUyaz.js → index.es226-B5lbUyaz.js} +0 -0
  153. /package/dist/app/assets/{index.es263-mebxcVVE.js → index.es227-mebxcVVE.js} +0 -0
  154. /package/dist/app/assets/{index.es265-XBlWyCtg.js → index.es229-XBlWyCtg.js} +0 -0
  155. /package/dist/app/assets/{index.es266-BfCpw3nA.js → index.es230-BfCpw3nA.js} +0 -0
  156. /package/dist/app/assets/{index.es268-Cc5clBb7.js → index.es232-Cc5clBb7.js} +0 -0
  157. /package/dist/app/assets/{index.es269-IuBKFhSY.js → index.es233-IuBKFhSY.js} +0 -0
  158. /package/dist/app/assets/{index.es271-Du5NY7AG.js → index.es235-Du5NY7AG.js} +0 -0
  159. /package/dist/app/assets/{index.es272-Bvotw-X0.js → index.es236-Bvotw-X0.js} +0 -0
  160. /package/dist/app/assets/{index.es273-UIAJJxZW.js → index.es237-UIAJJxZW.js} +0 -0
  161. /package/dist/app/assets/{index.es275-D9-PGadD.js → index.es239-D9-PGadD.js} +0 -0
  162. /package/dist/app/assets/{index.es277-sdHcTMYB.js → index.es241-sdHcTMYB.js} +0 -0
  163. /package/dist/app/assets/{index.es278-Ci6OQyBP.js → index.es242-Ci6OQyBP.js} +0 -0
  164. /package/dist/app/assets/{index.es279-BC5c_5Pe.js → index.es243-BC5c_5Pe.js} +0 -0
  165. /package/dist/app/assets/{index.es280-Tz6hzZYG.js → index.es244-Tz6hzZYG.js} +0 -0
  166. /package/dist/app/assets/{index.es281-DB_GagMm.js → index.es245-DB_GagMm.js} +0 -0
  167. /package/dist/app/assets/{index.es282-DLbgOhZU.js → index.es246-DLbgOhZU.js} +0 -0
  168. /package/dist/app/assets/{index.es283-B0XVJmRM.js → index.es247-B0XVJmRM.js} +0 -0
  169. /package/dist/app/assets/{index.es286-shcSOmrb.js → index.es250-shcSOmrb.js} +0 -0
  170. /package/dist/app/assets/{index.es287-D4Tzg5kh.js → index.es251-D4Tzg5kh.js} +0 -0
  171. /package/dist/app/assets/{index.es288-Deuh7S70.js → index.es252-Deuh7S70.js} +0 -0
  172. /package/dist/app/assets/{index.es289-BUEGK8hf.js → index.es253-BUEGK8hf.js} +0 -0
  173. /package/dist/app/assets/{index.es290-BNioltXt.js → index.es254-BNioltXt.js} +0 -0
  174. /package/dist/app/assets/{index.es291-JqZropPD.js → index.es255-JqZropPD.js} +0 -0
  175. /package/dist/app/assets/{index.es294-LKU2TuZ1.js → index.es258-LKU2TuZ1.js} +0 -0
  176. /package/dist/app/assets/{index.es295-BFLt1xDp.js → index.es259-BFLt1xDp.js} +0 -0
  177. /package/dist/app/assets/{index.es296-DKykz6zU.js → index.es260-DKykz6zU.js} +0 -0
  178. /package/dist/app/assets/{index.es297-B3ZDOciz.js → index.es261-B3ZDOciz.js} +0 -0
  179. /package/dist/app/assets/{index.es298-CSHBycmS.js → index.es262-CSHBycmS.js} +0 -0
  180. /package/dist/app/assets/{index.es299-BIEUsx6d.js → index.es263-BIEUsx6d.js} +0 -0
  181. /package/dist/app/assets/{index.es300-B48N-Iqd.js → index.es264-B48N-Iqd.js} +0 -0
  182. /package/dist/app/assets/{index.es301-BY-TUvya.js → index.es265-BY-TUvya.js} +0 -0
  183. /package/dist/app/assets/{index.es302-zocC4JxJ.js → index.es266-zocC4JxJ.js} +0 -0
  184. /package/dist/app/assets/{index.es304-Cza_XSSt.js → index.es268-Cza_XSSt.js} +0 -0
  185. /package/dist/app/assets/{index.es305-Bg-kzb6g.js → index.es269-Bg-kzb6g.js} +0 -0
  186. /package/dist/app/assets/{index.es306-DhUJRlN_.js → index.es270-DhUJRlN_.js} +0 -0
  187. /package/dist/app/assets/{index.es308-C8lEn-DE.js → index.es272-C8lEn-DE.js} +0 -0
  188. /package/dist/app/assets/{index.es309-DhMKtDLN.js → index.es273-DhMKtDLN.js} +0 -0
  189. /package/dist/app/assets/{index.es310-CwjWoCRV.js → index.es274-CwjWoCRV.js} +0 -0
  190. /package/dist/app/assets/{index.es311-CzouJOBO.js → index.es275-CzouJOBO.js} +0 -0
  191. /package/dist/app/assets/{index.es312-B1bQXN8T.js → index.es276-B1bQXN8T.js} +0 -0
  192. /package/dist/app/assets/{index.es314-5LuOXUq_.js → index.es278-5LuOXUq_.js} +0 -0
  193. /package/dist/app/assets/{index.es315-DWJ3fJO_.js → index.es279-DWJ3fJO_.js} +0 -0
  194. /package/dist/app/assets/{index.es316-DJlmqQ1C.js → index.es280-DJlmqQ1C.js} +0 -0
  195. /package/dist/app/assets/{index.es317-QhoSD0DR.js → index.es281-QhoSD0DR.js} +0 -0
  196. /package/dist/app/assets/{index.es320-Be6lgOlo.js → index.es284-Be6lgOlo.js} +0 -0
  197. /package/dist/app/assets/{index.es322-BJ4Li9vH.js → index.es286-BJ4Li9vH.js} +0 -0
  198. /package/dist/app/assets/{index.es323-DQVVAn-B.js → index.es287-DQVVAn-B.js} +0 -0
  199. /package/dist/app/assets/{index.es324-BJGe-b2p.js → index.es288-BJGe-b2p.js} +0 -0
  200. /package/dist/app/assets/{index.es326-BLhTXw86.js → index.es290-BLhTXw86.js} +0 -0
  201. /package/dist/app/assets/{index.es328-atvbtKCR.js → index.es292-atvbtKCR.js} +0 -0
  202. /package/dist/app/assets/{index.es330-DkLiglaE.js → index.es294-DkLiglaE.js} +0 -0
  203. /package/dist/app/assets/{index.es331-C1w2a3ep.js → index.es295-C1w2a3ep.js} +0 -0
  204. /package/dist/app/assets/{index.es334-Cf8iN4DR.js → index.es298-Cf8iN4DR.js} +0 -0
  205. /package/dist/app/assets/{index.es335-COK4E0Yg.js → index.es299-COK4E0Yg.js} +0 -0
  206. /package/dist/app/assets/{index.es336-BknIz3MU.js → index.es300-BknIz3MU.js} +0 -0
  207. /package/dist/app/assets/{index.es338-BeQkCIfX.js → index.es302-BeQkCIfX.js} +0 -0
  208. /package/dist/app/assets/{index.es340-BSxZ-RaX.js → index.es304-BSxZ-RaX.js} +0 -0
  209. /package/dist/app/assets/{index.es341-C7L56vO4.js → index.es305-C7L56vO4.js} +0 -0
  210. /package/dist/app/assets/{index.es342-CUnW07Te.js → index.es306-CUnW07Te.js} +0 -0
  211. /package/dist/app/assets/{index.es343-C1XDQQGZ.js → index.es307-C1XDQQGZ.js} +0 -0
  212. /package/dist/app/assets/{index.es344-CQjiPCtT.js → index.es308-CQjiPCtT.js} +0 -0
  213. /package/dist/app/assets/{index.es345-DQ1-QYvQ.js → index.es309-DQ1-QYvQ.js} +0 -0
  214. /package/dist/app/assets/{index.es347-BbSNqyBO.js → index.es311-BbSNqyBO.js} +0 -0
  215. /package/dist/app/assets/{index.es349-CB2ApiWb.js → index.es313-CB2ApiWb.js} +0 -0
  216. /package/dist/app/assets/{index.es351-B_m7g4N7.js → index.es315-B_m7g4N7.js} +0 -0
  217. /package/dist/app/assets/{index.es352-B6W0miNI.js → index.es316-B6W0miNI.js} +0 -0
  218. /package/dist/app/assets/{index.es353-BMR_PYu6.js → index.es317-BMR_PYu6.js} +0 -0
  219. /package/dist/app/assets/{index.es355-Dj6nwHGl.js → index.es319-Dj6nwHGl.js} +0 -0
  220. /package/dist/app/assets/{index.es356-BpWG_bgh.js → index.es320-BpWG_bgh.js} +0 -0
  221. /package/dist/app/assets/{index.es357-BVUVsWT6.js → index.es321-BVUVsWT6.js} +0 -0
  222. /package/dist/app/assets/{index.es358-CAQ2eGtk.js → index.es322-CAQ2eGtk.js} +0 -0
  223. /package/dist/app/assets/{index.es359-BFOHcciG.js → index.es323-BFOHcciG.js} +0 -0
  224. /package/dist/app/assets/{index.es360-CdO5JTpU.js → index.es324-CdO5JTpU.js} +0 -0
  225. /package/dist/app/assets/{index.es361-CJaU5se_.js → index.es325-CJaU5se_.js} +0 -0
  226. /package/dist/app/assets/{index.es362-DYoNaHQp.js → index.es326-DYoNaHQp.js} +0 -0
  227. /package/dist/app/assets/{index.es363-m4uW47V2.js → index.es327-m4uW47V2.js} +0 -0
  228. /package/dist/app/assets/{index.es366-nyqBNV6O.js → index.es330-nyqBNV6O.js} +0 -0
  229. /package/dist/app/assets/{index.es367-C6j12Q_x.js → index.es331-C6j12Q_x.js} +0 -0
  230. /package/dist/app/assets/{index.es368-7A4Fjokl.js → index.es332-7A4Fjokl.js} +0 -0
  231. /package/dist/app/assets/{index.es369-CB0Krxn9.js → index.es333-CB0Krxn9.js} +0 -0
  232. /package/dist/app/assets/{index.es370-DCE3LsBG.js → index.es334-DCE3LsBG.js} +0 -0
  233. /package/dist/app/assets/{index.es371-C3FkfJm5.js → index.es335-C3FkfJm5.js} +0 -0
  234. /package/dist/app/assets/{index.es374-CVw76BM1.js → index.es338-CVw76BM1.js} +0 -0
  235. /package/dist/app/assets/{index.es375-HnGAYVZD.js → index.es339-HnGAYVZD.js} +0 -0
  236. /package/dist/app/assets/{index.es376-BVz_zdnA.js → index.es340-BVz_zdnA.js} +0 -0
  237. /package/dist/app/assets/{index.es377-C3khCPGq.js → index.es341-C3khCPGq.js} +0 -0
  238. /package/dist/app/assets/{index.es378-D-2ljcwZ.js → index.es342-D-2ljcwZ.js} +0 -0
  239. /package/dist/app/assets/{index.es379-Cv9koXgw.js → index.es343-Cv9koXgw.js} +0 -0
  240. /package/dist/app/assets/{index.es380-CD_QflpE.js → index.es344-CD_QflpE.js} +0 -0
  241. /package/dist/app/assets/{index.es381-DRW-0cLl.js → index.es345-DRW-0cLl.js} +0 -0
  242. /package/dist/app/assets/{index.es382-C-_shW-Y.js → index.es346-C-_shW-Y.js} +0 -0
  243. /package/dist/app/assets/{index.es383-LGGdnPYs.js → index.es347-LGGdnPYs.js} +0 -0
  244. /package/dist/app/assets/{index.es384-C3mMm8J8.js → index.es348-C3mMm8J8.js} +0 -0
  245. /package/dist/app/assets/{index.es385-BzJJZx-M.js → index.es349-BzJJZx-M.js} +0 -0
  246. /package/dist/app/assets/{index.es386-BXkSAIEj.js → index.es350-BXkSAIEj.js} +0 -0
  247. /package/dist/app/assets/{index.es387-BgDCqdQA.js → index.es351-BgDCqdQA.js} +0 -0
  248. /package/dist/app/assets/{index.es388-C8M2exoo.js → index.es352-C8M2exoo.js} +0 -0
  249. /package/dist/app/assets/{index.es389-DHJKELXO.js → index.es353-DHJKELXO.js} +0 -0
  250. /package/dist/app/assets/{index.es390-Cuk6v7N8.js → index.es354-Cuk6v7N8.js} +0 -0
  251. /package/dist/app/assets/{index.es391-DH5Ifo-i.js → index.es355-DH5Ifo-i.js} +0 -0
  252. /package/dist/app/assets/{index.es392-E3gJ1_iC.js → index.es356-E3gJ1_iC.js} +0 -0
  253. /package/dist/app/assets/{index.es393-DAi9KRSo.js → index.es357-DAi9KRSo.js} +0 -0
  254. /package/dist/app/assets/{index.es394-D7oLnXFd.js → index.es358-D7oLnXFd.js} +0 -0
  255. /package/dist/app/assets/{index.es395-BfjtVDDH.js → index.es359-BfjtVDDH.js} +0 -0
  256. /package/dist/app/assets/{index.es396-DnULxvSX.js → index.es360-DnULxvSX.js} +0 -0
  257. /package/dist/app/assets/{index.es397-CkXjmgJE.js → index.es361-CkXjmgJE.js} +0 -0
  258. /package/dist/app/assets/{index.es398-CfQXZHmo.js → index.es362-CfQXZHmo.js} +0 -0
  259. /package/dist/app/assets/{index.es399-DWedfzmr.js → index.es363-DWedfzmr.js} +0 -0
  260. /package/dist/app/assets/{index.es400-DUszq2jm.js → index.es364-DUszq2jm.js} +0 -0
  261. /package/dist/app/assets/{index.es401-B7mTdjB0.js → index.es365-B7mTdjB0.js} +0 -0
  262. /package/dist/app/assets/{index.es402-D5KoaKCx.js → index.es366-D5KoaKCx.js} +0 -0
  263. /package/dist/app/assets/{index.es403-BfHTSMKl.js → index.es367-BfHTSMKl.js} +0 -0
  264. /package/dist/app/assets/{index.es404-B0m2ddpp.js → index.es368-B0m2ddpp.js} +0 -0
  265. /package/dist/app/assets/{index.es405-CyktbL80.js → index.es369-CyktbL80.js} +0 -0
  266. /package/dist/app/assets/{index.es406-Csfq5Kiy.js → index.es370-Csfq5Kiy.js} +0 -0
  267. /package/dist/app/assets/{index.es407-CafNBF8u.js → index.es371-CafNBF8u.js} +0 -0
  268. /package/dist/app/assets/{index.es408-CTRr51gU.js → index.es372-CTRr51gU.js} +0 -0
  269. /package/dist/app/assets/{index.es409-D4h5O-jR.js → index.es373-D4h5O-jR.js} +0 -0
  270. /package/dist/app/assets/{index.es410-C39BiMTA.js → index.es374-C39BiMTA.js} +0 -0
  271. /package/dist/app/assets/{index.es411-Ddv68eIx.js → index.es375-Ddv68eIx.js} +0 -0
  272. /package/dist/app/assets/{index.es412-GBQ2dnAY.js → index.es376-GBQ2dnAY.js} +0 -0
  273. /package/dist/app/assets/{index.es413-PoHY5YXO.js → index.es377-PoHY5YXO.js} +0 -0
  274. /package/dist/app/assets/{index.es414-3e1v2bzS.js → index.es378-3e1v2bzS.js} +0 -0
  275. /package/dist/app/assets/{index.es415-CS3Unz2-.js → index.es379-CS3Unz2-.js} +0 -0
  276. /package/dist/app/assets/{index.es416-bN70gL4F.js → index.es380-bN70gL4F.js} +0 -0
  277. /package/dist/app/assets/{index.es417-CmCqftbK.js → index.es381-CmCqftbK.js} +0 -0
  278. /package/dist/app/assets/{index.es418-Ds-gbosJ.js → index.es382-Ds-gbosJ.js} +0 -0
  279. /package/dist/app/assets/{index.es419-CjDtw9vr.js → index.es383-CjDtw9vr.js} +0 -0
  280. /package/dist/app/assets/{index.es420-BthQWCQV.js → index.es384-BthQWCQV.js} +0 -0
  281. /package/dist/app/assets/{index.es421-DqwNpetd.js → index.es385-DqwNpetd.js} +0 -0
  282. /package/dist/app/assets/{index.es422-Bw305WKR.js → index.es386-Bw305WKR.js} +0 -0
  283. /package/dist/app/assets/{index.es423-DXbdFlpD.js → index.es387-DXbdFlpD.js} +0 -0
  284. /package/dist/app/assets/{index.es424-L9t79GZl.js → index.es388-L9t79GZl.js} +0 -0
  285. /package/dist/app/assets/{index.es425-CbfX1IO0.js → index.es389-CbfX1IO0.js} +0 -0
  286. /package/dist/app/assets/{index.es426-DBQeEorK.js → index.es390-DBQeEorK.js} +0 -0
  287. /package/dist/app/assets/{index.es427-BEBZ7ncR.js → index.es391-BEBZ7ncR.js} +0 -0
  288. /package/dist/app/assets/{index.es428-Bkuqu6BP.js → index.es392-Bkuqu6BP.js} +0 -0
  289. /package/dist/app/assets/{index.es429-D0r3Knsf.js → index.es393-D0r3Knsf.js} +0 -0
  290. /package/dist/app/assets/{index.es430-CVO1_9PV.js → index.es394-CVO1_9PV.js} +0 -0
@@ -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-TVOAGCOZ.js"></script>
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
- try {
231317
- import_fs.default.accessSync(publisherPath, import_fs.default.constants.W_OK);
231318
- } catch {
231319
- publisherPath = import_path.default.join(import_os.default.tmpdir(), "publisher");
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.password || !postgresConfig.databaseName) {
235091
- throw new Error("PostgreSQL connection requires: host, port, userName, password, and databaseName");
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 || !snowflakeConfig.database || !snowflakeConfig.schema) {
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
- if (!bigqueryConfig.serviceAccountKeyJson || !bigqueryConfig.defaultProjectId) {
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
- await import_promises.default.writeFile(serviceAccountKeyPath, connectionConfig.bigqueryConnection.serviceAccountKeyJson);
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
- await import_promises.default.unlink(serviceAccountKeyPath);
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 || !trinoConfig.password) {
235203
- throw new Error("Trino connection requires: server, port, catalog, schema, user, and password");
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
- } else if (packageLocation.startsWith("/")) {
235488
- if (packageLocation.endsWith(".zip")) {
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
- await fs9.promises.rm(absoluteDirPath, { recursive: true, force: true });
242729
- await fs9.promises.mkdir(absoluteDirPath, { recursive: true });
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.94",
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.295",
27
- "@malloydata/db-duckdb": "^0.0.295",
28
- "@malloydata/db-mysql": "^0.0.295",
29
- "@malloydata/db-postgres": "^0.0.295",
30
- "@malloydata/db-snowflake": "^0.0.295",
31
- "@malloydata/db-trino": "^0.0.295",
32
- "@malloydata/malloy": "^0.0.295",
33
- "@malloydata/malloy-sql": "^0.0.295",
34
- "@malloydata/render": "^0.0.295",
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
- try {
28
- fs.accessSync(publisherPath, fs.constants.W_OK);
29
- } catch {
30
- publisherPath = path.join(os.tmpdir(), "publisher");
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
- } else if (packageLocation.startsWith("/")) {
98
- if (packageLocation.endsWith(".zip")) {
99
- packageLocation =
100
- await this.projectStore.unzipProject(packageLocation);
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,
@@ -1,5 +1,4 @@
1
1
  import { URLReader } from "@malloydata/malloy";
2
- // @ts-expect-error until this gets merged https://github.com/malloydata/malloy/pull/2484
3
2
  import { DataStyles } from "@malloydata/render";
4
3
  import { logger } from "./logger";
5
4
 
@@ -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, password, and databaseName",
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
- if (
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
- await fs.writeFile(
400
- serviceAccountKeyPath,
401
- connectionConfig.bigqueryConnection
402
- .serviceAccountKeyJson as string,
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
- await fs.unlink(serviceAccountKeyPath);
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, user, and password",
452
+ "Trino connection requires: server, port, catalog, schema, and user",
463
453
  );
464
454
  }
465
455
 
@@ -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(location, projectName, targetPath);
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
- await fs.promises.rm(absoluteDirPath, { recursive: true, force: true });
607
- await fs.promises.mkdir(absoluteDirPath, { recursive: true });
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 = path.join(
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(