@metabase/cli 0.1.0-alpha.workspaces-commands.c1d5eea → 0.1.0-alpha.workspaces-commands.d9c31ec

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 (189) hide show
  1. package/README.md +121 -100
  2. package/dist/{add-collection-Dsju7qPh.mjs → add-collection-8GuI25VU.mjs} +6 -6
  3. package/dist/add-collection-Dy0OMhKh.mjs +11 -0
  4. package/dist/{api-key-BU8wdQsz.mjs → api-key-bpZ0_40D.mjs} +1 -1
  5. package/dist/{archive-Dc8Ob7X2.mjs → archive-BAaYDw3P.mjs} +6 -6
  6. package/dist/{archive-C9nd1_nR.mjs → archive-BhqpKCm3.mjs} +7 -7
  7. package/dist/{archive-CT0qt-5r.mjs → archive-C17bfUgD.mjs} +6 -6
  8. package/dist/{archive-coFyGzcm.mjs → archive-Ci_l9wTo.mjs} +7 -7
  9. package/dist/auth-B2WfejxA.mjs +19 -0
  10. package/dist/{body-CFl-TxuS.mjs → body-DTkC7hZO.mjs} +3 -3
  11. package/dist/{branches-D84zM_wy.mjs → branches-CnlppPuF.mjs} +8 -8
  12. package/dist/{cancel-DbvPIFvO.mjs → cancel-CoZbsyqE.mjs} +5 -5
  13. package/dist/{cancel-task-CgdIriIr.mjs → cancel-task-VKO9ybMn.mjs} +9 -9
  14. package/dist/{card-BOGKT258.mjs → card-B2ZlGpQP.mjs} +3 -2
  15. package/dist/card-BgsQATFn.mjs +20 -0
  16. package/dist/{cards-Dfito_3s.mjs → cards-BLaa40uq.mjs} +6 -6
  17. package/dist/cli.mjs +24 -24
  18. package/dist/collection-wYJz_mCI.mjs +19 -0
  19. package/dist/{create-DbCWjP7O.mjs → create-1MX0T09Q.mjs} +8 -8
  20. package/dist/{create-B8-zmzDZ.mjs → create-B1NpGekI.mjs} +7 -7
  21. package/dist/{create-C45EtiVU.mjs → create-BJLX_cZo.mjs} +10 -9
  22. package/dist/{create-C9qNOUXt.mjs → create-CJxCVV2H.mjs} +24 -16
  23. package/dist/create-CRwWU9Pt.mjs +48 -0
  24. package/dist/{create-B0TZE4Hr.mjs → create-CVWAZRMp.mjs} +7 -7
  25. package/dist/{create-D2kaDG42.mjs → create-D3B8Fp4j.mjs} +7 -7
  26. package/dist/{create-D8iPEfcs.mjs → create-D3Ov4MEg.mjs} +10 -9
  27. package/dist/create-DnpGQ53I.mjs +48 -0
  28. package/dist/{create-branch-BHj7sWkz.mjs → create-branch-D3jzZxC4.mjs} +9 -9
  29. package/dist/{create-DdloUQrd.mjs → create-wWiNTJLy.mjs} +7 -7
  30. package/dist/{credentials-BXeWvbXs.mjs → credentials-DbTDsBkj.mjs} +8 -8
  31. package/dist/{current-task-t3ZYfeDJ.mjs → current-task-Bfhc8LzZ.mjs} +9 -9
  32. package/dist/dashboard-DICdcfPK.mjs +20 -0
  33. package/dist/{database-GbK7OAPX.mjs → database-DzcFix9u.mjs} +1 -1
  34. package/dist/{database-CCEjHEhb.mjs → database-ES40jkkB.mjs} +3 -3
  35. package/dist/db-CMrQrcFi.mjs +22 -0
  36. package/dist/{delete-BXnoOVMK.mjs → delete-B_pJNwBp.mjs} +7 -7
  37. package/dist/{delete-BgeI7Wzb.mjs → delete-hf1Mi3qy.mjs} +7 -7
  38. package/dist/{delete-runtime-CuaZEfPZ.mjs → delete-runtime-BMzvfj_B.mjs} +2 -2
  39. package/dist/{delete-table-Ba7JKvh7.mjs → delete-table-0sArY7go.mjs} +7 -7
  40. package/dist/{deprovision-DCtUz-YU.mjs → deprovision-DpmNjEEy.mjs} +11 -11
  41. package/dist/{dirty-2JmT5pZg.mjs → dirty-DiXL5WlS.mjs} +8 -8
  42. package/dist/{docker-DOCqIlti.mjs → docker-B-ckbz3m.mjs} +3 -3
  43. package/dist/{eid-CKrpg4jn.mjs → eid-bTxWg-gM.mjs} +1 -1
  44. package/dist/{export-CvPiPcDh.mjs → export-BzUsvMov.mjs} +11 -11
  45. package/dist/field-jFWcinu2.mjs +18 -0
  46. package/dist/{fields-CNaifB7g.mjs → fields-DET7ptiD.mjs} +7 -7
  47. package/dist/{flag-pair-DYOzdz6v.mjs → flag-pair-DtR1AiBQ.mjs} +1 -1
  48. package/dist/{get-CKkv8r_u.mjs → get-BECueuy8.mjs} +6 -6
  49. package/dist/{get-Bct3EBkp.mjs → get-BlYCHIJW.mjs} +6 -6
  50. package/dist/{get-CxmSDkJe.mjs → get-CELbZWrF.mjs} +6 -6
  51. package/dist/{get-DGmhriFO.mjs → get-CoFWjiiZ.mjs} +6 -6
  52. package/dist/{get-wC3HYX_n.mjs → get-Cu1nkuao.mjs} +8 -8
  53. package/dist/{get-DZ_tRfsn.mjs → get-D5jlfcMf.mjs} +6 -6
  54. package/dist/{get-D9OZkrQu.mjs → get-DGcusTgD.mjs} +6 -6
  55. package/dist/{get-Cp9pmC6J.mjs → get-DV1XjM5s.mjs} +6 -6
  56. package/dist/{get-Dyd0ggJ7.mjs → get-DbYGYs5c.mjs} +6 -6
  57. package/dist/get-Dm6Vm-8-.mjs +53 -0
  58. package/dist/{get-BHJt6xei.mjs → get-MHbeOynz.mjs} +6 -6
  59. package/dist/{get-run-DJDdFhZY.mjs → get-run-7hO_vClh.mjs} +6 -6
  60. package/dist/{get-Cc9CcZiV.mjs → get-ylnDN2Q8.mjs} +6 -6
  61. package/dist/{has-remote-changes-CIjJIIA-.mjs → has-remote-changes-DFARAyMl.mjs} +8 -8
  62. package/dist/{import-BdsWGGbT.mjs → import-CNi5I2EU.mjs} +11 -11
  63. package/dist/{input-fYkvqiUd.mjs → input-ikCiip6x.mjs} +1 -1
  64. package/dist/is-dirty-BFjDV_iH.mjs +10 -0
  65. package/dist/{is-dirty-CsqnEo7_.mjs → is-dirty-CPhiqe85.mjs} +5 -5
  66. package/dist/{items-CTpGfbiu.mjs → items-XPGeJSJ9.mjs} +8 -8
  67. package/dist/{key-Bb5PjkM7.mjs → key-NDEARu2L.mjs} +1 -1
  68. package/dist/{license-BG03M-I2.mjs → license-CBNy8WgI.mjs} +3 -3
  69. package/dist/{list-CHF7sQ6x.mjs → list-6myIKQLr.mjs} +4 -4
  70. package/dist/{list-C7lMxzzh.mjs → list-B-iAfasr.mjs} +5 -5
  71. package/dist/{list-E6wvq_SF.mjs → list-B15hTiuw.mjs} +5 -5
  72. package/dist/{list-CDZNFzoF.mjs → list-BGL8Z1JR.mjs} +5 -5
  73. package/dist/{list-lWJ2zBMg.mjs → list-BNtqsWab.mjs} +7 -7
  74. package/dist/{list-DS9R5u1C.mjs → list-BnRnm1Is.mjs} +5 -5
  75. package/dist/{list-D9ivyQsr.mjs → list-BoTtrGX2.mjs} +7 -7
  76. package/dist/{list-MDYtjA1Q.mjs → list-CrhFq5TH.mjs} +5 -5
  77. package/dist/{list-DcBCPK2O.mjs → list-D71fmTpn.mjs} +5 -5
  78. package/dist/{list-DWY1uNjV.mjs → list-DRBrOPpS.mjs} +5 -5
  79. package/dist/{list-CooT7UU7.mjs → list-DyBGj4yk.mjs} +5 -5
  80. package/dist/{list-DcnNRz2P.mjs → list-YXpUzQCL.mjs} +5 -5
  81. package/dist/{list-CdGj-vuH.mjs → list-ytrd005Z.mjs} +5 -5
  82. package/dist/{login-CXp0bxaB.mjs → login-BBHhoDPM.mjs} +6 -6
  83. package/dist/{logout-CnFQsbEt.mjs → logout-DMZkFSrC.mjs} +5 -5
  84. package/dist/{logs-1FNWPS2k.mjs → logs-Dusp0eIR.mjs} +6 -6
  85. package/dist/{manifest-CNNRftoC.mjs → manifest-VVjycZCe.mjs} +2 -2
  86. package/dist/measure-ol3ZlXbc.mjs +19 -0
  87. package/dist/{metadata-Cj9U2Vm6.mjs → metadata-BEPQuzQx.mjs} +8 -8
  88. package/dist/{metadata-CCE5TQqV.mjs → metadata-D1hGZxVH.mjs} +7 -7
  89. package/dist/{package-CbQKObcX.mjs → package-DwhGofpM.mjs} +1 -1
  90. package/dist/{paginate-CnTxzOh2.mjs → paginate-B9W7ZuBj.mjs} +2 -2
  91. package/dist/{parse-id-BgFi3UCN.mjs → parse-id-Di-wVtcP.mjs} +1 -1
  92. package/dist/{parse-ref-CzHgk0Hw.mjs → parse-ref-FBB8uGZw.mjs} +1 -1
  93. package/dist/{parse-schemas-CeeVtFhy.mjs → parse-schemas-DoQyoqgX.mjs} +2 -2
  94. package/dist/{poll-D1ZjdFr1.mjs → poll-BHFOOAGq.mjs} +2 -2
  95. package/dist/{poll-task-BP37zYAf.mjs → poll-task-CQ0jyN9p.mjs} +4 -4
  96. package/dist/{errors-CkVGRHrW.mjs → predicates-DiIiS3k7.mjs} +50 -7
  97. package/dist/preflight-7VrJgXMP.mjs +91 -0
  98. package/dist/{prompt-BiJFbHAV.mjs → prompt-Bf3DQ-qE.mjs} +1 -1
  99. package/dist/{provision-CAHqCCqN.mjs → provision-ChB9o8Vo.mjs} +12 -12
  100. package/dist/ps-D9xB9Ozi.mjs +10 -0
  101. package/dist/{ps-Csbckpzy.mjs → ps-DWjsRdjB.mjs} +3 -3
  102. package/dist/{query-DRkBg3wV.mjs → query-DLQsi5fQ.mjs} +6 -6
  103. package/dist/query-Xy_Hg05O.mjs +89 -0
  104. package/dist/remote-sync-C7sgxp7Q.mjs +28 -0
  105. package/dist/{remove-B8OV41WP.mjs → remove-Cw_fznOe.mjs} +5 -5
  106. package/dist/{remove-Cvk6y8BI.mjs → remove-DDmdEMUN.mjs} +8 -8
  107. package/dist/{remove-collection-Bm4M_Yss.mjs → remove-collection-CXSYFReG.mjs} +10 -10
  108. package/dist/{render-BblMa0Cg.mjs → render-DXv-D6fU.mjs} +2 -8
  109. package/dist/{rescan-values-CTN1kQ42.mjs → rescan-values-8gedBuRt.mjs} +8 -8
  110. package/dist/{run-G0ID7yHo.mjs → run-DiCxS7XF.mjs} +8 -8
  111. package/dist/{runs-DQwkAOj6.mjs → runs-BRZx2sjg.mjs} +7 -7
  112. package/dist/{runtime-DcczfJol.mjs → runtime-BY0yq43g.mjs} +59 -10
  113. package/dist/{schema-tables-kIynp5bQ.mjs → schema-tables-C2I8G64H.mjs} +7 -7
  114. package/dist/{schemas-CFFB2zpA.mjs → schemas-6OCy-dtZ.mjs} +5 -5
  115. package/dist/{search-GxIXyy0y.mjs → search-CADCabkh.mjs} +5 -5
  116. package/dist/segment-CGFQ7DQW.mjs +19 -0
  117. package/dist/{set-LivrVQWS.mjs → set-BvyvNejO.mjs} +6 -6
  118. package/dist/{set-Dw4chkYT.mjs → set-Ds3IVECR.mjs} +8 -8
  119. package/dist/{setting-DLkszd2Z.mjs → setting-BTgMc8H8.mjs} +3 -3
  120. package/dist/{setup-SjNjs7J0.mjs → setup-CCm7U1YU.mjs} +6 -6
  121. package/dist/snippet-DyoeUSIZ.mjs +19 -0
  122. package/dist/{start-3g0bvGr4.mjs → start-DrUCVDmu.mjs} +9 -9
  123. package/dist/{stash-DYIChkiQ.mjs → stash-BLRsdgxP.mjs} +9 -9
  124. package/dist/{status-DIaoIXv-.mjs → status-B4LY0-fS.mjs} +4 -4
  125. package/dist/{status-CK5qyGY4.mjs → status-Vc-Z4igY.mjs} +10 -10
  126. package/dist/{status-B72bjG8r.mjs → status-pFVwQsTF.mjs} +4 -4
  127. package/dist/{stop-Cjfs6eSc.mjs → stop-DsfVFTVy.mjs} +8 -8
  128. package/dist/{summary-ejyOKb2m.mjs → summary-M5WC7ttj.mjs} +6 -6
  129. package/dist/{sync-schema-BS5iqwmO.mjs → sync-schema-CkEohTrp.mjs} +8 -8
  130. package/dist/table-BXKV-RRl.mjs +19 -0
  131. package/dist/{table-DhB2_Dxd.mjs → table-Ck9sInse.mjs} +2 -2
  132. package/dist/transform-1rvuoPJE.mjs +24 -0
  133. package/dist/transform-job-ajyQmW3Z.mjs +19 -0
  134. package/dist/{translate-Btcr7JM7.mjs → translate-CtA59uzV.mjs} +7 -7
  135. package/dist/{tree-Bee3n9O2.mjs → tree-I_YkLcUL.mjs} +5 -5
  136. package/dist/{update-6Ng7wDHI.mjs → update-CADTPRV7.mjs} +12 -12
  137. package/dist/{update-CykTg7dz.mjs → update-COd94eCd.mjs} +8 -8
  138. package/dist/{update-ClOXgd6r.mjs → update-Cs8XYPu0.mjs} +13 -9
  139. package/dist/{update-CFsK-l0O.mjs → update-DGVAW1mn.mjs} +15 -10
  140. package/dist/{update-BGu-Xfs9.mjs → update-DU9fChpu.mjs} +11 -10
  141. package/dist/{update-BVnKMYi-.mjs → update-DppEfL1x.mjs} +9 -9
  142. package/dist/{update-FUHQBhNl.mjs → update-DwJ3NPY1.mjs} +11 -10
  143. package/dist/{update-YOvftU-I.mjs → update-HGyNITdd.mjs} +8 -8
  144. package/dist/{update-CudF7SIR.mjs → update-REiXbF-2.mjs} +15 -10
  145. package/dist/{update-dashcard--VnK1rU9.mjs → update-dashcard-D_AZjssC.mjs} +8 -8
  146. package/dist/{update-DuX9MHHw.mjs → update-jt_ybR9D.mjs} +8 -8
  147. package/dist/{url-MwoX0YYz.mjs → url-mxsHGJy8.mjs} +7 -7
  148. package/dist/{uuid-DUBsfCMS.mjs → uuid-Dz2jp9kb.mjs} +4 -4
  149. package/dist/{validate-query-VseSssGt.mjs → validate-GPoiblzw.mjs} +23 -125
  150. package/dist/validate-query-DQDzQCQv.mjs +37 -0
  151. package/dist/{values-DAPG4o1b.mjs → values-D0wz8xUT.mjs} +6 -6
  152. package/dist/{wait-ByIaTJfE.mjs → wait-B2wti_nF.mjs} +10 -10
  153. package/dist/{wait-B4MBOMM1.mjs → wait-BvriwUjY.mjs} +2 -2
  154. package/dist/{wait-flags-Cq5-5h6t.mjs → wait-flags-fyZuPGaW.mjs} +2 -2
  155. package/dist/workspace-Bj2YBuLj.mjs +24 -0
  156. package/dist/{workspace-credentials-Sl-qjCOb.mjs → workspace-credentials-B6BL-X0d.mjs} +1 -1
  157. package/package.json +1 -1
  158. package/dist/add-collection-D3o3iuV6.mjs +0 -11
  159. package/dist/auth-DDWFPOHE.mjs +0 -19
  160. package/dist/card-BLpzPLLD.mjs +0 -20
  161. package/dist/collection-BGMj95CP.mjs +0 -19
  162. package/dist/create-Cx6hzotV.mjs +0 -40
  163. package/dist/create-PWrAe2aX.mjs +0 -40
  164. package/dist/dashboard-nJ1dwYuB.mjs +0 -20
  165. package/dist/db-BKNI64nZ.mjs +0 -22
  166. package/dist/field-DGy3BZhm.mjs +0 -18
  167. package/dist/get-CQEYcyoK.mjs +0 -37
  168. package/dist/is-dirty-DW1j1P0B.mjs +0 -10
  169. package/dist/measure-qkBiyAN-.mjs +0 -19
  170. package/dist/ps-CmV4Fw-U.mjs +0 -10
  171. package/dist/query-vW-ws-hr.mjs +0 -93
  172. package/dist/segment-DLvpwQyO.mjs +0 -19
  173. package/dist/snippet-DLHBijDM.mjs +0 -19
  174. package/dist/sync-D3wsCLfY.mjs +0 -28
  175. package/dist/table-DHFb9SJU.mjs +0 -19
  176. package/dist/transform-DzEnER7v.mjs +0 -24
  177. package/dist/transform-job-CNNY-VWb.mjs +0 -19
  178. package/dist/workspace-CXHVXWXa.mjs +0 -24
  179. /package/dist/{collection-KWd1KZUC.mjs → collection-DFqH6N7s.mjs} +0 -0
  180. /package/dist/{dashboard-CztCJxke.mjs → dashboard-DyrRSbqQ.mjs} +0 -0
  181. /package/dist/{field-BakUM_Le.mjs → field-D6CJbmAR.mjs} +0 -0
  182. /package/dist/{measure-B1GKcZxO.mjs → measure-jbc7fsCs.mjs} +0 -0
  183. /package/dist/{revision-message-flag-BJiGjb5m.mjs → revision-message-flag-D4E1lKE5.mjs} +0 -0
  184. /package/dist/{segment-CQ5w3M_W.mjs → segment-BMrUBz94.mjs} +0 -0
  185. /package/dist/{setting-DIXJ2haa.mjs → setting-CTaAeMci.mjs} +0 -0
  186. /package/dist/{snippet-DRTklDg3.mjs → snippet-Dw0Sjzkr.mjs} +0 -0
  187. /package/dist/{transform-92odFxg-.mjs → transform-IEX4Mx3X.mjs} +0 -0
  188. /package/dist/{transform-job-DgApCViL.mjs → transform-job-DZ38Xc3k.mjs} +0 -0
  189. /package/dist/{workspace-C5FVNshq.mjs → workspace-jfsegcq8.mjs} +0 -0
@@ -1,13 +1,13 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import { TransformJob, TransformJobUpdateInput, transformJobView } from "./transform-job-DgApCViL.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import { TransformJob, TransformJobUpdateInput, transformJobView } from "./transform-job-DZ38Xc3k.mjs";
11
11
 
12
12
  //#region src/commands/transform-job/update.ts
13
13
  var update_default = defineMetabaseCommand({
@@ -1,19 +1,22 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import { DashboardDetail, DashboardUpdateInput, dashboardView } from "./dashboard-CztCJxke.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import "./card-B2ZlGpQP.mjs";
11
+ import "./validate-GPoiblzw.mjs";
12
+ import { DashboardDetail, DashboardUpdateInput, dashboardView } from "./dashboard-DyrRSbqQ.mjs";
13
+ import { preflightDashcardCardReferences } from "./preflight-7VrJgXMP.mjs";
11
14
 
12
15
  //#region src/commands/dashboard/update.ts
13
16
  var update_default = defineMetabaseCommand({
14
17
  meta: {
15
18
  name: "update",
16
- description: "Update a dashboard (and optionally its dashcards/tabs) by id"
19
+ description: "Update a dashboard (and optionally its dashcards/tabs) by id; any positive card_id referenced from dashcards is pre-flight-validated against /api/card/:id (exists, not archived) before the PUT"
17
20
  },
18
21
  args: {
19
22
  ...outputFlags,
@@ -40,6 +43,7 @@ var update_default = defineMetabaseCommand({
40
43
  file: args.file
41
44
  }, DashboardUpdateInput);
42
45
  const client = await getClient();
46
+ await preflightDashcardCardReferences(client, body.dashcards);
43
47
  const updated = await client.requestParsed(DashboardDetail, `/api/dashboard/${id}`, {
44
48
  method: "PUT",
45
49
  body
@@ -1,25 +1,28 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import { Measure, MeasureUpdateInput, measureView } from "./measure-B1GKcZxO.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import "./validate-GPoiblzw.mjs";
11
+ import { MEASURE_DEFINITION_LABELS, preflightMbql5Query, skipValidateFlag } from "./validate-query-DQDzQCQv.mjs";
12
+ import { Measure, MeasureUpdateInput, measureView } from "./measure-jbc7fsCs.mjs";
11
13
 
12
14
  //#region src/commands/measure/update.ts
13
15
  var update_default = defineMetabaseCommand({
14
16
  meta: {
15
17
  name: "update",
16
- description: "Update a measure by id; body must include revision_message (audit-logged with the change)"
18
+ description: "Update a measure by id; body must include revision_message (audit-logged with the change). If definition is MBQL 5 (lib/type: mbql/query) it is pre-flight-validated against the same schema as `metabase query` (see `metabase query --print-schema`)"
17
19
  },
18
20
  args: {
19
21
  ...outputFlags,
20
22
  ...profileFlag,
21
23
  ...connectionFlags,
22
24
  ...bodyInputFlags,
25
+ ...skipValidateFlag,
23
26
  id: {
24
27
  type: "positional",
25
28
  description: "Measure id",
@@ -30,7 +33,8 @@ var update_default = defineMetabaseCommand({
30
33
  examples: [
31
34
  "cat patch.json | metabase measure update 1",
32
35
  "metabase measure update 1 --file patch.json",
33
- "metabase measure update 1 --body '{\"name\":\"renamed\",\"revision_message\":\"rename\"}'"
36
+ "metabase measure update 1 --body '{\"name\":\"renamed\",\"revision_message\":\"rename\"}'",
37
+ "metabase measure update 1 --file patch.json --skip-validate"
34
38
  ],
35
39
  async run({ args, ctx, getClient }) {
36
40
  const id = parseId(args.id);
@@ -38,6 +42,7 @@ var update_default = defineMetabaseCommand({
38
42
  flag: args.body,
39
43
  file: args.file
40
44
  }, MeasureUpdateInput);
45
+ preflightMbql5Query(body.definition, MEASURE_DEFINITION_LABELS, { skip: args["skip-validate"] === true });
41
46
  const client = await getClient();
42
47
  const updated = await client.requestParsed(Measure, `/api/measure/${id}`, {
43
48
  method: "PUT",
@@ -1,14 +1,15 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import { Card, CardUpdateInput, cardView } from "./card-BOGKT258.mjs";
11
- import { preflightInternalMbql5Query, skipValidateFlag } from "./validate-query-VseSssGt.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import { Card, CardUpdateInput, cardView } from "./card-B2ZlGpQP.mjs";
11
+ import "./validate-GPoiblzw.mjs";
12
+ import { CARD_DATASET_QUERY_LABELS, preflightMbql5Query, skipValidateFlag } from "./validate-query-DQDzQCQv.mjs";
12
13
 
13
14
  //#region src/commands/card/update.ts
14
15
  var update_default = defineMetabaseCommand({
@@ -43,7 +44,7 @@ var update_default = defineMetabaseCommand({
43
44
  flag: args.body,
44
45
  file: args.file
45
46
  }, CardUpdateInput);
46
- preflightInternalMbql5Query(body.dataset_query, "card.dataset_query validation failed", { skip: args["skip-validate"] === true });
47
+ preflightMbql5Query(body.dataset_query, CARD_DATASET_QUERY_LABELS, { skip: args["skip-validate"] === true });
47
48
  const client = await getClient();
48
49
  const updated = await client.requestParsed(Card, `/api/card/${id}`, {
49
50
  method: "PUT",
@@ -1,14 +1,14 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import "./field-BakUM_Le.mjs";
11
- import { Table, TableUpdateInput, tableView } from "./table-DhB2_Dxd.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import "./field-D6CJbmAR.mjs";
11
+ import { Table, TableUpdateInput, tableView } from "./table-Ck9sInse.mjs";
12
12
 
13
13
  //#region src/commands/table/update.ts
14
14
  var update_default = defineMetabaseCommand({
@@ -1,14 +1,15 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import { preflightInternalMbql5Query, skipValidateFlag } from "./validate-query-VseSssGt.mjs";
11
- import { Transform, TransformUpdateInput, transformView } from "./transform-92odFxg-.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import "./validate-GPoiblzw.mjs";
11
+ import { TRANSFORM_SOURCE_QUERY_LABELS, preflightMbql5Query, skipValidateFlag } from "./validate-query-DQDzQCQv.mjs";
12
+ import { Transform, TransformUpdateInput, transformView } from "./transform-IEX4Mx3X.mjs";
12
13
 
13
14
  //#region src/commands/transform/update.ts
14
15
  var update_default = defineMetabaseCommand({
@@ -41,7 +42,7 @@ var update_default = defineMetabaseCommand({
41
42
  flag: args.body,
42
43
  file: args.file
43
44
  }, TransformUpdateInput);
44
- if (body.source !== void 0 && body.source.type === "query") preflightInternalMbql5Query(body.source.query, "transform.source.query validation failed", { skip: args["skip-validate"] === true });
45
+ if (body.source !== void 0 && body.source.type === "query") preflightMbql5Query(body.source.query, TRANSFORM_SOURCE_QUERY_LABELS, { skip: args["skip-validate"] === true });
45
46
  const client = await getClient();
46
47
  const updated = await client.requestParsed(Transform, `/api/transform/${id}`, {
47
48
  method: "PUT",
@@ -1,13 +1,13 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import { Field, FieldUpdateInput, fieldView } from "./field-BakUM_Le.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import { Field, FieldUpdateInput, fieldView } from "./field-D6CJbmAR.mjs";
11
11
 
12
12
  //#region src/commands/field/update.ts
13
13
  var update_default = defineMetabaseCommand({
@@ -1,25 +1,28 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import { Segment, SegmentUpdateInput, segmentView } from "./segment-CQ5w3M_W.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import "./validate-GPoiblzw.mjs";
11
+ import { SEGMENT_DEFINITION_LABELS, preflightMbql5Query, skipValidateFlag } from "./validate-query-DQDzQCQv.mjs";
12
+ import { Segment, SegmentUpdateInput, segmentView } from "./segment-BMrUBz94.mjs";
11
13
 
12
14
  //#region src/commands/segment/update.ts
13
15
  var update_default = defineMetabaseCommand({
14
16
  meta: {
15
17
  name: "update",
16
- description: "Update a segment by id; body must include revision_message (audit-logged with the change)"
18
+ description: "Update a segment by id; body must include revision_message (audit-logged with the change). If definition is MBQL 5 (lib/type: mbql/query) it is pre-flight-validated against the same schema as `metabase query` (see `metabase query --print-schema`)"
17
19
  },
18
20
  args: {
19
21
  ...outputFlags,
20
22
  ...profileFlag,
21
23
  ...connectionFlags,
22
24
  ...bodyInputFlags,
25
+ ...skipValidateFlag,
23
26
  id: {
24
27
  type: "positional",
25
28
  description: "Segment id",
@@ -30,7 +33,8 @@ var update_default = defineMetabaseCommand({
30
33
  examples: [
31
34
  "cat patch.json | metabase segment update 1",
32
35
  "metabase segment update 1 --file patch.json",
33
- "metabase segment update 1 --body '{\"name\":\"renamed\",\"revision_message\":\"rename\"}'"
36
+ "metabase segment update 1 --body '{\"name\":\"renamed\",\"revision_message\":\"rename\"}'",
37
+ "metabase segment update 1 --file patch.json --skip-validate"
34
38
  ],
35
39
  async run({ args, ctx, getClient }) {
36
40
  const id = parseId(args.id);
@@ -38,6 +42,7 @@ var update_default = defineMetabaseCommand({
38
42
  flag: args.body,
39
43
  file: args.file
40
44
  }, SegmentUpdateInput);
45
+ preflightMbql5Query(body.definition, SEGMENT_DEFINITION_LABELS, { skip: args["skip-validate"] === true });
41
46
  const client = await getClient();
42
47
  const updated = await client.requestParsed(Segment, `/api/segment/${id}`, {
43
48
  method: "PUT",
@@ -1,13 +1,13 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import { ConfigError } from "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import { ConfigError } from "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import { DashboardDetail, Dashcard, DashcardPatchInput, dashcardView } from "./dashboard-CztCJxke.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import { DashboardDetail, Dashcard, DashcardPatchInput, dashcardView } from "./dashboard-DyrRSbqQ.mjs";
11
11
 
12
12
  //#region src/commands/dashboard/update-dashcard.ts
13
13
  var update_dashcard_default = defineMetabaseCommand({
@@ -1,13 +1,13 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import "./input-fYkvqiUd.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-DcczfJol.mjs";
7
- import { readBody } from "./body-CFl-TxuS.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./input-ikCiip6x.mjs";
6
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-BY0yq43g.mjs";
7
+ import { readBody } from "./body-DTkC7hZO.mjs";
8
8
  import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
10
- import { Snippet, SnippetUpdateInput, snippetView } from "./snippet-DRTklDg3.mjs";
9
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
10
+ import { Snippet, SnippetUpdateInput, snippetView } from "./snippet-Dw0Sjzkr.mjs";
11
11
 
12
12
  //#region src/commands/snippet/update.ts
13
13
  var update_default = defineMetabaseCommand({
@@ -1,11 +1,11 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-BblMa0Cg.mjs";
4
- import "./errors-CkVGRHrW.mjs";
5
- import { defineMetabaseCommand, localUrl, outputFlags } from "./runtime-DcczfJol.mjs";
6
- import { parseId } from "./parse-id-BgFi3UCN.mjs";
7
- import "./poll-D1ZjdFr1.mjs";
8
- import { checkDockerReady, requireWorkspaceContainerLocation } from "./docker-DOCqIlti.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { defineMetabaseCommand, localUrl, outputFlags } from "./runtime-BY0yq43g.mjs";
6
+ import { parseId } from "./parse-id-Di-wVtcP.mjs";
7
+ import "./poll-BHFOOAGq.mjs";
8
+ import { checkDockerReady, requireWorkspaceContainerLocation } from "./docker-B-ckbz3m.mjs";
9
9
  import { z } from "zod";
10
10
 
11
11
  //#region src/commands/workspace/url.ts
@@ -1,8 +1,8 @@
1
- import "./package-CbQKObcX.mjs";
1
+ import "./package-DwhGofpM.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { writeJson, writeText } from "./render-BblMa0Cg.mjs";
4
- import { ConfigError } from "./errors-CkVGRHrW.mjs";
5
- import { defineMetabaseCommand, outputFlags, parseInteger } from "./runtime-DcczfJol.mjs";
3
+ import { writeJson, writeText } from "./render-DXv-D6fU.mjs";
4
+ import { ConfigError } from "./predicates-DiIiS3k7.mjs";
5
+ import { defineMetabaseCommand, outputFlags, parseInteger } from "./runtime-BY0yq43g.mjs";
6
6
  import { z } from "zod";
7
7
  import { randomUUID } from "node:crypto";
8
8
 
@@ -1,82 +1,8 @@
1
- import { isPlainObject, writeJson } from "./render-BblMa0Cg.mjs";
2
- import { ConfigError } from "./errors-CkVGRHrW.mjs";
1
+ import { ConfigError, escapeJsonPointerSegment, isPlainObject } from "./predicates-DiIiS3k7.mjs";
3
2
  import { z } from "zod";
4
3
  import Ajv2020 from "ajv/dist/2020.js";
5
4
  import addFormats from "ajv-formats";
6
5
 
7
- //#region src/core/schema/data/schemas/common/id.json
8
- var title$4 = "ID";
9
- var description$4 = "Shared type definitions for entity identifiers and foreign keys.";
10
- var $defs$4 = {
11
- "entity_id": {
12
- "type": "string",
13
- "description": "NanoID identifier (21 characters, alphabet A-Za-z0-9_-)",
14
- "pattern": "^[A-Za-z0-9_-]{21}$"
15
- },
16
- "user_id": {
17
- "type": "string",
18
- "description": "User FK (email address)",
19
- "format": "email"
20
- },
21
- "database_id": {
22
- "type": "string",
23
- "description": "Database FK (database name)"
24
- },
25
- "table_id": {
26
- "type": "array",
27
- "description": "Table FK [database, schema, table]",
28
- "prefixItems": [
29
- {
30
- "type": "string",
31
- "description": "Database name"
32
- },
33
- {
34
- "type": ["string", "null"],
35
- "description": "Schema name (null for schemaless databases)"
36
- },
37
- {
38
- "type": "string",
39
- "description": "Table name"
40
- }
41
- ],
42
- "minItems": 3,
43
- "maxItems": 3
44
- },
45
- "field_id": {
46
- "type": "array",
47
- "description": "Field FK [database, schema, table, field] for regular fields, or [database, schema, table, parent, child, ...] for JSON-unfolded fields.\n",
48
- "prefixItems": [
49
- {
50
- "type": "string",
51
- "description": "Database name"
52
- },
53
- {
54
- "type": ["string", "null"],
55
- "description": "Schema name (null for schemaless databases)"
56
- },
57
- {
58
- "type": "string",
59
- "description": "Table name"
60
- },
61
- {
62
- "type": "string",
63
- "description": "Field name (or first JSON path segment)"
64
- }
65
- ],
66
- "items": {
67
- "type": "string",
68
- "description": "Additional JSON path segments"
69
- },
70
- "minItems": 4
71
- }
72
- };
73
- var id_default = {
74
- title: title$4,
75
- description: description$4,
76
- $defs: $defs$4
77
- };
78
-
79
- //#endregion
80
6
  //#region src/core/schema/data/schemas/common/parameter.json
81
7
  var title$3 = "Parameter";
82
8
  var description$3 = "A filter control parameter for cards and dashboards. Parameters allow users to interactively filter data via UI controls.\n";
@@ -1413,9 +1339,9 @@ const POSITIVE_INTEGER = {
1413
1339
  type: "integer",
1414
1340
  minimum: 1
1415
1341
  };
1416
- const internalIdSchema = {
1417
- title: "ID (internal)",
1418
- description: "Internal-MBQL identifier overrides — every ID is a positive integer.",
1342
+ const idSchema = {
1343
+ title: "ID",
1344
+ description: "MBQL identifier $defs — every id is a positive integer.",
1419
1345
  $defs: {
1420
1346
  entity_id: POSITIVE_INTEGER,
1421
1347
  user_id: POSITIVE_INTEGER,
@@ -1424,31 +1350,24 @@ const internalIdSchema = {
1424
1350
  field_id: POSITIVE_INTEGER
1425
1351
  }
1426
1352
  };
1427
- let externalValidator = null;
1428
- let internalValidator = null;
1429
- function buildAjv(idVariant) {
1353
+ let validator = null;
1354
+ function getValidator() {
1355
+ if (validator !== null) return validator;
1430
1356
  const ajv = new Ajv2020({
1431
1357
  allErrors: true,
1432
1358
  strictTuples: false,
1433
1359
  allowUnionTypes: true
1434
1360
  });
1435
1361
  addFormats(ajv);
1436
- ajv.addSchema(idVariant, "id.yaml");
1362
+ ajv.addSchema(idSchema, "id.yaml");
1437
1363
  ajv.addSchema(parameter_default, "parameter.yaml");
1438
1364
  ajv.addSchema(ref_default, "ref.yaml");
1439
1365
  ajv.addSchema(temporal_bucketing_default, "temporal_bucketing.yaml");
1440
1366
  ajv.addSchema(query_default, "query.yaml");
1441
1367
  const compiled = ajv.getSchema("query.yaml");
1442
1368
  if (compiled === void 0) throw new Error("internal: query.yaml validator not registered");
1443
- return compiled;
1444
- }
1445
- function getExternalValidator() {
1446
- if (externalValidator === null) externalValidator = buildAjv(id_default);
1447
- return externalValidator;
1448
- }
1449
- function getInternalValidator() {
1450
- if (internalValidator === null) internalValidator = buildAjv(internalIdSchema);
1451
- return internalValidator;
1369
+ validator = compiled;
1370
+ return validator;
1452
1371
  }
1453
1372
  const UUID_HINT_MESSAGE = "must be a UUID v4 (RFC 4122) — run `metabase uuid` (or `metabase uuid --count N`) to mint one. The MBQL 5 schema rejects placeholder strings (`a1`, `uuid-1`, etc.); agents must call the CLI for UUIDs rather than authoring them.";
1454
1373
  const FIELD_SLOT1_HINT_MESSAGE = "must be the field options object — MBQL 5 field refs are [\"field\", {options}, fieldId]; the legacy MBQL 4 shape [\"field\", id, opts] is not accepted here. (Tip: `metabase uuid` mints `lib/uuid` strings if you need them.)";
@@ -1461,13 +1380,13 @@ function isUuidFormatIssue(issue) {
1461
1380
  const parsed = FormatErrorParams.safeParse(issue.params);
1462
1381
  return parsed.success && parsed.data.format === "uuid";
1463
1382
  }
1464
- function runValidator(validator, value) {
1465
- if (validator(value)) return {
1383
+ function runValidator(validatorFn, value) {
1384
+ if (validatorFn(value)) return {
1466
1385
  ok: true,
1467
1386
  errors: []
1468
1387
  };
1469
1388
  const overrides = collectMessageOverrides(value);
1470
- const issues = validator.errors ?? [];
1389
+ const issues = validatorFn.errors ?? [];
1471
1390
  const errors = issues.map((issue) => {
1472
1391
  if (issue.message === void 0) throw new Error(`Ajv issue at ${issue.instancePath} has no message`);
1473
1392
  const path = issue.instancePath === "" ? "/" : issue.instancePath;
@@ -1500,10 +1419,7 @@ function collectMessageOverrides(root) {
1500
1419
  return;
1501
1420
  }
1502
1421
  if (!isPlainObject(node)) return;
1503
- for (const key of Object.keys(node)) {
1504
- const segment = key.replace(/~/g, "~0").replace(/\//g, "~1");
1505
- visit(node[key], `${path}/${segment}`);
1506
- }
1422
+ for (const key of Object.keys(node)) visit(node[key], `${path}/${escapeJsonPointerSegment(key)}`);
1507
1423
  }
1508
1424
  }
1509
1425
  function clauseSlot1Message(clause) {
@@ -1536,11 +1452,8 @@ function describeJsonValue(value) {
1536
1452
  if (typeof value === "number" || typeof value === "boolean") return `${typeof value} ${String(value)}`;
1537
1453
  return typeof value;
1538
1454
  }
1539
- function validateExternalQuery(value) {
1540
- return runValidator(getExternalValidator(), value);
1541
- }
1542
- function validateInternalQuery(value) {
1543
- return runValidator(getInternalValidator(), value);
1455
+ function validateQuery(value) {
1456
+ return runValidator(getValidator(), value);
1544
1457
  }
1545
1458
  function isMbql5Query(value) {
1546
1459
  if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
@@ -1554,9 +1467,11 @@ function isLegacyEnvelopeWrappingMbql5(value) {
1554
1467
  if (typeof inner !== "object" || inner === null || Array.isArray(inner)) return false;
1555
1468
  return "lib/type" in inner && inner["lib/type"] === "mbql/query";
1556
1469
  }
1557
- const SchemaMode = z.enum(["external", "internal"]);
1470
+ function assertNotLegacyEnvelopeWrappingMbql5(value, options) {
1471
+ if (!isLegacyEnvelopeWrappingMbql5(value)) return;
1472
+ throw new ConfigError(`${options.contextLabel}: MBQL 5 query nested inside a legacy {type:"query", query:…} envelope. For MBQL 5, ${options.bodyNoun} is the mbql/query value itself: {"lib/type":"mbql/query", database:N, stages:[…]}.`);
1473
+ }
1558
1474
  const QuerySchemaBundle = z.object({
1559
- mode: SchemaMode,
1560
1475
  schema: z.unknown(),
1561
1476
  defs: z.object({
1562
1477
  "id.yaml": z.unknown(),
@@ -1565,12 +1480,11 @@ const QuerySchemaBundle = z.object({
1565
1480
  "temporal_bucketing.yaml": z.unknown()
1566
1481
  })
1567
1482
  });
1568
- function getQuerySchemaBundle(mode) {
1483
+ function getQuerySchemaBundle() {
1569
1484
  return {
1570
- mode,
1571
1485
  schema: query_default,
1572
1486
  defs: {
1573
- "id.yaml": mode === "internal" ? internalIdSchema : id_default,
1487
+ "id.yaml": idSchema,
1574
1488
  "parameter.yaml": parameter_default,
1575
1489
  "ref.yaml": ref_default,
1576
1490
  "temporal_bucketing.yaml": temporal_bucketing_default
@@ -1579,20 +1493,4 @@ function getQuerySchemaBundle(mode) {
1579
1493
  }
1580
1494
 
1581
1495
  //#endregion
1582
- //#region src/commands/validate-query.ts
1583
- const skipValidateFlag = { "skip-validate": {
1584
- type: "boolean",
1585
- description: "Skip the local MBQL 5 pre-flight validation; let the server be the authority. Use only when the bundled schema disagrees with what the server accepts."
1586
- } };
1587
- function preflightInternalMbql5Query(query, contextLabel, options) {
1588
- if (options.skip) return;
1589
- if (isLegacyEnvelopeWrappingMbql5(query)) throw new ConfigError(`${contextLabel}: MBQL 5 query nested inside a legacy {type:"query", query:…} envelope. For MBQL 5, dataset_query is the mbql/query value itself: {"lib/type":"mbql/query", database:N, stages:[…]}.`);
1590
- if (!isMbql5Query(query)) return;
1591
- const outcome = validateInternalQuery(query);
1592
- if (outcome.ok) return;
1593
- writeJson(outcome);
1594
- throw new ConfigError(`${contextLabel}: ${outcome.errors.length} error(s) — pass valid MBQL 5 or use the legacy format`);
1595
- }
1596
-
1597
- //#endregion
1598
- export { getQuerySchemaBundle, preflightInternalMbql5Query, skipValidateFlag, validateExternalQuery, validateInternalQuery };
1496
+ export { assertNotLegacyEnvelopeWrappingMbql5, getQuerySchemaBundle, isMbql5Query, validateQuery };
@@ -0,0 +1,37 @@
1
+ import { writeJson } from "./render-DXv-D6fU.mjs";
2
+ import { ConfigError } from "./predicates-DiIiS3k7.mjs";
3
+ import { assertNotLegacyEnvelopeWrappingMbql5, isMbql5Query, validateQuery } from "./validate-GPoiblzw.mjs";
4
+
5
+ //#region src/commands/validate-query.ts
6
+ const skipValidateFlag = { "skip-validate": {
7
+ type: "boolean",
8
+ description: "Skip the local MBQL 5 pre-flight validation; let the server be the authority. Use only when the bundled schema disagrees with what the server accepts."
9
+ } };
10
+ const CARD_DATASET_QUERY_LABELS = {
11
+ contextLabel: "card.dataset_query validation failed",
12
+ bodyNoun: "dataset_query"
13
+ };
14
+ const TRANSFORM_SOURCE_QUERY_LABELS = {
15
+ contextLabel: "transform.source.query validation failed",
16
+ bodyNoun: "source.query"
17
+ };
18
+ const MEASURE_DEFINITION_LABELS = {
19
+ contextLabel: "measure.definition validation failed",
20
+ bodyNoun: "definition"
21
+ };
22
+ const SEGMENT_DEFINITION_LABELS = {
23
+ contextLabel: "segment.definition validation failed",
24
+ bodyNoun: "definition"
25
+ };
26
+ function preflightMbql5Query(query, labels, options) {
27
+ if (options.skip) return;
28
+ assertNotLegacyEnvelopeWrappingMbql5(query, labels);
29
+ if (!isMbql5Query(query)) return;
30
+ const outcome = validateQuery(query);
31
+ if (outcome.ok) return;
32
+ writeJson(outcome);
33
+ throw new ConfigError(`${labels.contextLabel}: ${outcome.errors.length} error(s) — pass valid MBQL 5 or use the legacy format`);
34
+ }
35
+
36
+ //#endregion
37
+ export { CARD_DATASET_QUERY_LABELS, MEASURE_DEFINITION_LABELS, SEGMENT_DEFINITION_LABELS, TRANSFORM_SOURCE_QUERY_LABELS, preflightMbql5Query, skipValidateFlag };