@sanity/cli 6.0.0-alpha.3 → 6.0.0-alpha.5

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 (376) hide show
  1. package/dist/actions/auth/login/{index.js → login.js} +1 -1
  2. package/dist/actions/auth/login/{index.js.map → login.js.map} +1 -1
  3. package/dist/actions/dev/startStudioDevServer.js +3 -8
  4. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  5. package/dist/actions/dev/types.d.ts +1 -3
  6. package/dist/actions/dev/types.js.map +1 -1
  7. package/dist/actions/documents/validate.d.ts +0 -2
  8. package/dist/actions/documents/validate.js +21 -1
  9. package/dist/actions/documents/validate.js.map +1 -1
  10. package/dist/actions/exec/execScript.js +1 -1
  11. package/dist/actions/exec/execScript.js.map +1 -1
  12. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
  13. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
  14. package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
  15. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  16. package/dist/actions/manifest/extractManifest.js +1 -4
  17. package/dist/actions/manifest/extractManifest.js.map +1 -1
  18. package/dist/actions/organizations/getOrganizationChoices.d.ts +6 -0
  19. package/dist/actions/organizations/getOrganizationChoices.js +23 -0
  20. package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
  21. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +2 -0
  22. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
  23. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
  24. package/dist/actions/organizations/hasProjectAttachGrant.d.ts +1 -0
  25. package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
  26. package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
  27. package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
  28. package/dist/actions/schema/deleteSchemaAction.js +12 -17
  29. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  30. package/dist/actions/schema/deploySchemas.d.ts +15 -0
  31. package/dist/actions/schema/deploySchemas.js +98 -0
  32. package/dist/actions/schema/deploySchemas.js.map +1 -0
  33. package/dist/actions/schema/listSchemas.d.ts +12 -0
  34. package/dist/actions/schema/listSchemas.js +119 -0
  35. package/dist/actions/schema/listSchemas.js.map +1 -0
  36. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
  37. package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
  38. package/dist/actions/schema/utils/debug.d.ts +2 -0
  39. package/dist/actions/schema/utils/debug.js +5 -0
  40. package/dist/actions/schema/utils/debug.js.map +1 -0
  41. package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
  42. package/dist/actions/schema/utils/manifestExtractor.js +12 -17
  43. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  44. package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
  45. package/dist/actions/schema/utils/manifestReader.js +6 -12
  46. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  47. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
  48. package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
  49. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
  50. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
  51. package/dist/actions/schema/utils/schemaStoreValidation.js +40 -127
  52. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  53. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
  54. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  55. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  56. package/dist/actions/users/getMembersForProject.d.ts +1 -3
  57. package/dist/actions/users/getMembersForProject.js +6 -17
  58. package/dist/actions/users/getMembersForProject.js.map +1 -1
  59. package/dist/actions/users/types.d.ts +0 -11
  60. package/dist/actions/users/types.js.map +1 -1
  61. package/dist/commands/__tests__/debug.test.js +113 -220
  62. package/dist/commands/__tests__/debug.test.js.map +1 -1
  63. package/dist/commands/__tests__/deploy.test.js +325 -293
  64. package/dist/commands/__tests__/deploy.test.js.map +1 -1
  65. package/dist/commands/__tests__/dev.test.js +62 -19
  66. package/dist/commands/__tests__/dev.test.js.map +1 -1
  67. package/dist/commands/__tests__/init/init.authentication.test.js +73 -0
  68. package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -0
  69. package/dist/commands/__tests__/init/init.create-new-project.test.js +195 -0
  70. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -0
  71. package/dist/commands/__tests__/init/init.plan.test.js +279 -0
  72. package/dist/commands/__tests__/init/init.plan.test.js.map +1 -0
  73. package/dist/commands/__tests__/init/init.setup.test.js +335 -0
  74. package/dist/commands/__tests__/init/init.setup.test.js.map +1 -0
  75. package/dist/commands/__tests__/install.test.js +46 -22
  76. package/dist/commands/__tests__/install.test.js.map +1 -1
  77. package/dist/commands/__tests__/logout.test.js +8 -5
  78. package/dist/commands/__tests__/logout.test.js.map +1 -1
  79. package/dist/commands/__tests__/manage.test.js +29 -24
  80. package/dist/commands/__tests__/manage.test.js.map +1 -1
  81. package/dist/commands/__tests__/migration.test.js +119 -0
  82. package/dist/commands/__tests__/migration.test.js.map +1 -0
  83. package/dist/commands/__tests__/versions.test.js +22 -14
  84. package/dist/commands/__tests__/versions.test.js.map +1 -1
  85. package/dist/commands/backup/__tests__/disable.test.js +72 -75
  86. package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
  87. package/dist/commands/backup/__tests__/download.test.js +169 -80
  88. package/dist/commands/backup/__tests__/download.test.js.map +1 -1
  89. package/dist/commands/backup/__tests__/enable.test.js +109 -140
  90. package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
  91. package/dist/commands/backup/__tests__/list.test.js +84 -75
  92. package/dist/commands/backup/__tests__/list.test.js.map +1 -1
  93. package/dist/commands/backup/disable.js +5 -11
  94. package/dist/commands/backup/disable.js.map +1 -1
  95. package/dist/commands/backup/enable.js +5 -11
  96. package/dist/commands/backup/enable.js.map +1 -1
  97. package/dist/commands/backup/list.js +7 -8
  98. package/dist/commands/backup/list.js.map +1 -1
  99. package/dist/commands/cors/__tests__/add.test.js +68 -38
  100. package/dist/commands/cors/__tests__/add.test.js.map +1 -1
  101. package/dist/commands/cors/__tests__/delete.test.js +52 -37
  102. package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
  103. package/dist/commands/cors/__tests__/list.test.js +80 -57
  104. package/dist/commands/cors/__tests__/list.test.js.map +1 -1
  105. package/dist/commands/cors/add.js +5 -13
  106. package/dist/commands/cors/add.js.map +1 -1
  107. package/dist/commands/cors/delete.js +7 -15
  108. package/dist/commands/cors/delete.js.map +1 -1
  109. package/dist/commands/cors/list.js +2 -10
  110. package/dist/commands/cors/list.js.map +1 -1
  111. package/dist/commands/dataset/__tests__/copy.test.js +197 -89
  112. package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
  113. package/dist/commands/dataset/__tests__/create.test.js +147 -117
  114. package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
  115. package/dist/commands/dataset/__tests__/delete.test.js +75 -68
  116. package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
  117. package/dist/commands/dataset/__tests__/export.test.js +123 -83
  118. package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
  119. package/dist/commands/dataset/__tests__/import.test.js +2 -2
  120. package/dist/commands/dataset/__tests__/import.test.js.map +1 -1
  121. package/dist/commands/dataset/__tests__/list.test.js +107 -65
  122. package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
  123. package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
  124. package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
  125. package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
  126. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
  127. package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
  128. package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
  129. package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
  130. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
  131. package/dist/commands/dataset/export.js +4 -4
  132. package/dist/commands/dataset/export.js.map +1 -1
  133. package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
  134. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
  135. package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
  136. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
  137. package/dist/commands/dev.js +0 -1
  138. package/dist/commands/dev.js.map +1 -1
  139. package/dist/commands/docs/__tests__/search.test.js +8 -7
  140. package/dist/commands/docs/__tests__/search.test.js.map +1 -1
  141. package/dist/commands/documents/__tests__/create.test.js +328 -265
  142. package/dist/commands/documents/__tests__/create.test.js.map +1 -1
  143. package/dist/commands/documents/__tests__/delete.test.js +119 -87
  144. package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
  145. package/dist/commands/documents/__tests__/get.test.js +68 -95
  146. package/dist/commands/documents/__tests__/get.test.js.map +1 -1
  147. package/dist/commands/documents/__tests__/query.test.js +87 -192
  148. package/dist/commands/documents/__tests__/query.test.js.map +1 -1
  149. package/dist/commands/documents/__tests__/validate.test.js +52 -29
  150. package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
  151. package/dist/commands/documents/create.d.ts +1 -0
  152. package/dist/commands/documents/create.js +10 -9
  153. package/dist/commands/documents/create.js.map +1 -1
  154. package/dist/commands/documents/delete.js +2 -3
  155. package/dist/commands/documents/delete.js.map +1 -1
  156. package/dist/commands/documents/get.js +2 -3
  157. package/dist/commands/documents/get.js.map +1 -1
  158. package/dist/commands/documents/query.js +2 -3
  159. package/dist/commands/documents/query.js.map +1 -1
  160. package/dist/commands/documents/validate.js +0 -20
  161. package/dist/commands/documents/validate.js.map +1 -1
  162. package/dist/commands/graphql/__tests__/list.test.js +57 -45
  163. package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
  164. package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
  165. package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
  166. package/dist/commands/graphql/list.js +2 -2
  167. package/dist/commands/graphql/list.js.map +1 -1
  168. package/dist/commands/graphql/undeploy.js +4 -9
  169. package/dist/commands/graphql/undeploy.js.map +1 -1
  170. package/dist/commands/hook/__tests__/attempt.test.js +48 -33
  171. package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
  172. package/dist/commands/hook/__tests__/create.test.js +49 -51
  173. package/dist/commands/hook/__tests__/create.test.js.map +1 -1
  174. package/dist/commands/hook/__tests__/delete.test.js +43 -30
  175. package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
  176. package/dist/commands/hook/__tests__/list.test.js +38 -31
  177. package/dist/commands/hook/__tests__/list.test.js.map +1 -1
  178. package/dist/commands/hook/__tests__/logs.test.js +68 -40
  179. package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
  180. package/dist/commands/hook/create.js +2 -6
  181. package/dist/commands/hook/create.js.map +1 -1
  182. package/dist/commands/hook/delete.js +5 -17
  183. package/dist/commands/hook/delete.js.map +1 -1
  184. package/dist/commands/hook/list.js +2 -8
  185. package/dist/commands/hook/list.js.map +1 -1
  186. package/dist/commands/init.d.ts +4 -0
  187. package/dist/commands/init.js +151 -18
  188. package/dist/commands/init.js.map +1 -1
  189. package/dist/commands/login.js +1 -1
  190. package/dist/commands/login.js.map +1 -1
  191. package/dist/commands/manifest/__tests__/extract.test.js +22 -13
  192. package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
  193. package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
  194. package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
  195. package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
  196. package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
  197. package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
  198. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
  199. package/dist/commands/media/__tests__/export.test.js +365 -66
  200. package/dist/commands/media/__tests__/export.test.js.map +1 -1
  201. package/dist/commands/media/__tests__/import.test.js +171 -105
  202. package/dist/commands/media/__tests__/import.test.js.map +1 -1
  203. package/dist/commands/media/export.js +2 -2
  204. package/dist/commands/media/export.js.map +1 -1
  205. package/dist/commands/media/import.js +2 -2
  206. package/dist/commands/media/import.js.map +1 -1
  207. package/dist/commands/projects/__tests__/list.test.js +5 -4
  208. package/dist/commands/projects/__tests__/list.test.js.map +1 -1
  209. package/dist/commands/projects/list.js +2 -6
  210. package/dist/commands/projects/list.js.map +1 -1
  211. package/dist/commands/schema/__tests__/delete.test.js +396 -151
  212. package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
  213. package/dist/commands/schema/__tests__/deploy.test.js +348 -0
  214. package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
  215. package/dist/commands/schema/__tests__/extract.test.js +19 -11
  216. package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
  217. package/dist/commands/schema/__tests__/list.test.js +399 -0
  218. package/dist/commands/schema/__tests__/list.test.js.map +1 -0
  219. package/dist/commands/schema/__tests__/validate.test.js +27 -10
  220. package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
  221. package/dist/commands/schema/delete.d.ts +1 -1
  222. package/dist/commands/schema/delete.js +20 -23
  223. package/dist/commands/schema/delete.js.map +1 -1
  224. package/dist/commands/schema/deploy.d.ts +16 -0
  225. package/dist/commands/schema/deploy.js +98 -0
  226. package/dist/commands/schema/deploy.js.map +1 -0
  227. package/dist/commands/schema/list.d.ts +15 -0
  228. package/dist/commands/schema/list.js +104 -0
  229. package/dist/commands/schema/list.js.map +1 -0
  230. package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
  231. package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
  232. package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
  233. package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
  234. package/dist/commands/telemetry/__tests__/status.test.js +7 -5
  235. package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
  236. package/dist/commands/tokens/__tests__/add.test.js +55 -40
  237. package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
  238. package/dist/commands/tokens/__tests__/delete.test.js +72 -42
  239. package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
  240. package/dist/commands/tokens/__tests__/list.test.js +87 -60
  241. package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
  242. package/dist/commands/tokens/add.js +3 -5
  243. package/dist/commands/tokens/add.js.map +1 -1
  244. package/dist/commands/users/__tests__/invite.test.js +100 -79
  245. package/dist/commands/users/__tests__/invite.test.js.map +1 -1
  246. package/dist/commands/users/__tests__/list.test.js +186 -180
  247. package/dist/commands/users/__tests__/list.test.js.map +1 -1
  248. package/dist/commands/users/invite.js +6 -17
  249. package/dist/commands/users/invite.js.map +1 -1
  250. package/dist/commands/users/list.js +4 -7
  251. package/dist/commands/users/list.js.map +1 -1
  252. package/dist/config/createCliConfig.d.ts +4 -4
  253. package/dist/services/backup.d.ts +8 -0
  254. package/dist/services/backup.js +19 -0
  255. package/dist/services/backup.js.map +1 -1
  256. package/dist/services/cors.d.ts +23 -0
  257. package/dist/services/cors.js +38 -0
  258. package/dist/services/cors.js.map +1 -0
  259. package/dist/services/graphql.d.ts +7 -0
  260. package/dist/services/graphql.js +11 -0
  261. package/dist/services/graphql.js.map +1 -1
  262. package/dist/services/hooks.d.ts +2 -0
  263. package/dist/services/hooks.js +19 -0
  264. package/dist/services/hooks.js.map +1 -1
  265. package/dist/services/organizations.d.ts +40 -0
  266. package/dist/services/organizations.js +41 -0
  267. package/dist/services/organizations.js.map +1 -0
  268. package/dist/services/projects.d.ts +31 -0
  269. package/dist/services/projects.js +71 -1
  270. package/dist/services/projects.js.map +1 -1
  271. package/dist/services/schemas.d.ts +4 -0
  272. package/dist/services/schemas.js +40 -0
  273. package/dist/services/schemas.js.map +1 -0
  274. package/dist/services/user.d.ts +10 -0
  275. package/dist/services/user.js +24 -0
  276. package/dist/services/user.js.map +1 -0
  277. package/dist/util/__tests__/getCliVersion.test.js +2 -2
  278. package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
  279. package/dist/util/errorMessages.d.ts +1 -0
  280. package/dist/util/errorMessages.js +1 -0
  281. package/dist/util/errorMessages.js.map +1 -1
  282. package/dist/util/getCliVersion.js +1 -1
  283. package/dist/util/getCliVersion.js.map +1 -1
  284. package/dist/util/readPackageJson.d.ts +1 -15
  285. package/dist/util/readPackageJson.js +1 -1
  286. package/dist/util/readPackageJson.js.map +1 -1
  287. package/dist/util/uniqBy.d.ts +1 -0
  288. package/dist/util/uniqBy.js +14 -0
  289. package/dist/util/uniqBy.js.map +1 -0
  290. package/oclif.config.js +6 -1
  291. package/oclif.manifest.json +152 -158
  292. package/package.json +30 -31
  293. package/dist/actions/cors/constants.d.ts +0 -1
  294. package/dist/actions/cors/constants.js +0 -3
  295. package/dist/actions/cors/constants.js.map +0 -1
  296. package/dist/actions/cors/types.d.ts +0 -9
  297. package/dist/actions/cors/types.js +0 -3
  298. package/dist/actions/cors/types.js.map +0 -1
  299. package/dist/actions/migration/getMigrationRootDirectory.d.ts +0 -2
  300. package/dist/actions/migration/getMigrationRootDirectory.js +0 -14
  301. package/dist/actions/migration/getMigrationRootDirectory.js.map +0 -1
  302. package/dist/actions/migration/resolveMigrations.d.ts +0 -19
  303. package/dist/actions/migration/resolveMigrations.js +0 -43
  304. package/dist/actions/migration/resolveMigrations.js.map +0 -1
  305. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js +0 -65
  306. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js.map +0 -1
  307. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js +0 -145
  308. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js.map +0 -1
  309. package/dist/actions/migration/templates/__tests__/renameField.test.js +0 -63
  310. package/dist/actions/migration/templates/__tests__/renameField.test.js.map +0 -1
  311. package/dist/actions/migration/templates/__tests__/renameType.test.js +0 -61
  312. package/dist/actions/migration/templates/__tests__/renameType.test.js.map +0 -1
  313. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js +0 -87
  314. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js.map +0 -1
  315. package/dist/actions/migration/templates/index.d.ts +0 -5
  316. package/dist/actions/migration/templates/index.js +0 -7
  317. package/dist/actions/migration/templates/index.js.map +0 -1
  318. package/dist/actions/migration/templates/minimalAdvanced.d.ts +0 -4
  319. package/dist/actions/migration/templates/minimalAdvanced.js +0 -21
  320. package/dist/actions/migration/templates/minimalAdvanced.js.map +0 -1
  321. package/dist/actions/migration/templates/minimalSimple.d.ts +0 -4
  322. package/dist/actions/migration/templates/minimalSimple.js +0 -61
  323. package/dist/actions/migration/templates/minimalSimple.js.map +0 -1
  324. package/dist/actions/migration/templates/renameField.d.ts +0 -4
  325. package/dist/actions/migration/templates/renameField.js +0 -20
  326. package/dist/actions/migration/templates/renameField.js.map +0 -1
  327. package/dist/actions/migration/templates/renameType.d.ts +0 -4
  328. package/dist/actions/migration/templates/renameType.js +0 -19
  329. package/dist/actions/migration/templates/renameType.js.map +0 -1
  330. package/dist/actions/migration/templates/stringToPTE.d.ts +0 -4
  331. package/dist/actions/migration/templates/stringToPTE.js +0 -32
  332. package/dist/actions/migration/templates/stringToPTE.js.map +0 -1
  333. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
  334. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
  335. package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
  336. package/dist/actions/schema/schemaStoreConstants.js +0 -4
  337. package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
  338. package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
  339. package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
  340. package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
  341. package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
  342. package/dist/actions/schema/utils/schemaApiClient.js +0 -17
  343. package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
  344. package/dist/actions/users/apiVersion.d.ts +0 -6
  345. package/dist/actions/users/apiVersion.js +0 -7
  346. package/dist/actions/users/apiVersion.js.map +0 -1
  347. package/dist/commands/__tests__/init.test.js +0 -411
  348. package/dist/commands/__tests__/init.test.js.map +0 -1
  349. package/dist/commands/migration/__tests__/create.test.js +0 -296
  350. package/dist/commands/migration/__tests__/create.test.js.map +0 -1
  351. package/dist/commands/migration/__tests__/list.test.js +0 -166
  352. package/dist/commands/migration/__tests__/list.test.js.map +0 -1
  353. package/dist/commands/migration/__tests__/run.test.js +0 -481
  354. package/dist/commands/migration/__tests__/run.test.js.map +0 -1
  355. package/dist/commands/migration/create.d.ts +0 -17
  356. package/dist/commands/migration/create.js +0 -143
  357. package/dist/commands/migration/create.js.map +0 -1
  358. package/dist/commands/migration/list.d.ts +0 -9
  359. package/dist/commands/migration/list.js +0 -61
  360. package/dist/commands/migration/list.js.map +0 -1
  361. package/dist/commands/migration/run.d.ts +0 -26
  362. package/dist/commands/migration/run.js +0 -271
  363. package/dist/commands/migration/run.js.map +0 -1
  364. package/dist/util/migration/constants.d.ts +0 -3
  365. package/dist/util/migration/constants.js +0 -10
  366. package/dist/util/migration/constants.js.map +0 -1
  367. package/dist/util/migration/ensureApiVersionFormat.d.ts +0 -9
  368. package/dist/util/migration/ensureApiVersionFormat.js +0 -16
  369. package/dist/util/migration/ensureApiVersionFormat.js.map +0 -1
  370. package/dist/util/migration/prettyMutationFormatter.d.ts +0 -8
  371. package/dist/util/migration/prettyMutationFormatter.js +0 -141
  372. package/dist/util/migration/prettyMutationFormatter.js.map +0 -1
  373. package/dist/utils/migration/resolveMigrationScript.d.ts +0 -44
  374. package/dist/utils/migration/resolveMigrationScript.js +0 -74
  375. package/dist/utils/migration/resolveMigrationScript.js.map +0 -1
  376. /package/dist/actions/auth/login/{index.d.ts → login.d.ts} +0 -0
@@ -1,143 +0,0 @@
1
- import { access, mkdir, writeFile } from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { Args } from '@oclif/core';
4
- import { SanityCommand } from '@sanity/cli-core';
5
- import { chalk, confirm, input, select } from '@sanity/cli-core/ux';
6
- import { deburr } from 'lodash-es';
7
- import { getMigrationRootDirectory } from '../../actions/migration/getMigrationRootDirectory.js';
8
- import { minimalAdvanced, minimalSimple, renameField, renameType, stringToPTE } from '../../actions/migration/templates/index.js';
9
- import { MIGRATIONS_DIRECTORY } from '../../util/migration/constants.js';
10
- const TEMPLATES = [
11
- {
12
- name: 'Minimalistic migration to get you started',
13
- template: minimalSimple
14
- },
15
- {
16
- name: 'Rename an object type',
17
- template: renameType
18
- },
19
- {
20
- name: 'Rename a field',
21
- template: renameField
22
- },
23
- {
24
- name: 'Convert string field to Portable Text',
25
- template: stringToPTE
26
- },
27
- {
28
- name: 'Advanced template using async iterators providing more fine grained control',
29
- template: minimalAdvanced
30
- }
31
- ];
32
- export class CreateMigrationCommand extends SanityCommand {
33
- static args = {
34
- title: Args.string({
35
- description: 'Title of migration',
36
- required: false
37
- })
38
- };
39
- static description = 'Create a new migration within your project';
40
- static examples = [
41
- {
42
- command: '<%= config.bin %> <%= command.id %>',
43
- description: 'Create a new migration, prompting for title and options'
44
- },
45
- {
46
- command: '<%= config.bin %> <%= command.id %> "Rename field from location to address"',
47
- description: 'Create a new migration with the provided title, prompting for options'
48
- }
49
- ];
50
- async run() {
51
- const { args } = await this.parse(CreateMigrationCommand);
52
- const workDir = await getMigrationRootDirectory(this.output);
53
- const title = await this.promptForTitle(args.title);
54
- const types = await this.promptForDocumentTypes();
55
- const { template } = await this.promptForTemplate();
56
- const renderedTemplate = (template || minimalSimple)({
57
- documentTypes: types.split(',').map((t)=>t.trim()).filter(Boolean),
58
- migrationName: title
59
- });
60
- const sluggedName = deburr(title.toLowerCase()).replaceAll(/\s+/g, '-').replaceAll(/[^a-z0-9-]/g, '');
61
- const destDir = path.join(workDir, MIGRATIONS_DIRECTORY, sluggedName);
62
- const definitionFile = path.join(destDir, 'index.ts');
63
- const dirCreated = await this.createMigrationFile(destDir, definitionFile, renderedTemplate);
64
- if (dirCreated) {
65
- this.log();
66
- this.log(`${chalk.green('✓')} Migration created!`);
67
- this.log();
68
- this.log('Next steps:');
69
- this.log(`Open ${chalk.bold(definitionFile)} in your code editor and write the code for your migration.`);
70
- this.log(`Dry run the migration with:\n\`${chalk.bold(`sanity migration run ${sluggedName} --project=<projectId> --dataset <dataset> `)}\``);
71
- this.log(`Run the migration against a dataset with:\n \`${chalk.bold(`sanity migration run ${sluggedName} --project=<projectId> --dataset <dataset> --no-dry-run`)}\``);
72
- this.log();
73
- this.log(`👉 Learn more about schema and content migrations at ${chalk.bold('https://www.sanity.io/docs/schema-and-content-migrations')}`);
74
- }
75
- }
76
- async createMigrationFile(destDir, definitionFile, renderedTemplate) {
77
- const dirExists = await access(destDir).then(()=>true).catch(()=>false);
78
- if (dirExists) {
79
- const shouldOverwrite = await this.promptForOverwrite(destDir);
80
- if (!shouldOverwrite) return false;
81
- }
82
- try {
83
- await mkdir(destDir, {
84
- recursive: true
85
- });
86
- } catch (error) {
87
- const message = error instanceof Error ? error.message : String(error);
88
- this.error(`Failed to create migration directory: ${message}`, {
89
- exit: 1
90
- });
91
- }
92
- try {
93
- await writeFile(definitionFile, renderedTemplate);
94
- } catch (error) {
95
- const message = error instanceof Error ? error.message : String(error);
96
- this.error(`Failed to create migration file: ${message}`, {
97
- exit: 1
98
- });
99
- }
100
- return true;
101
- }
102
- async promptForDocumentTypes() {
103
- return input({
104
- message: 'Type of documents to migrate. You can add multiple types separated by comma (optional)'
105
- });
106
- }
107
- async promptForOverwrite(destDir) {
108
- return confirm({
109
- default: false,
110
- message: `Migration directory ${chalk.cyan(destDir)} already exists. Overwrite?`
111
- });
112
- }
113
- async promptForTemplate() {
114
- const templatesByName = Object.fromEntries(TEMPLATES.map((t)=>[
115
- t.name,
116
- t
117
- ]));
118
- const templateName = await select({
119
- choices: TEMPLATES.map((definedTemplate)=>({
120
- name: definedTemplate.name,
121
- value: definedTemplate.name
122
- })),
123
- message: 'Select a template'
124
- });
125
- return templatesByName[templateName];
126
- }
127
- async promptForTitle(providedTitle) {
128
- if (providedTitle?.trim()) {
129
- return providedTitle;
130
- }
131
- return input({
132
- message: 'Title of migration (e.g. "Rename field from location to address")',
133
- validate: (value)=>{
134
- if (!value.trim()) {
135
- return 'Title cannot be empty';
136
- }
137
- return true;
138
- }
139
- });
140
- }
141
- }
142
-
143
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/commands/migration/create.ts"],"sourcesContent":["import {access, mkdir, writeFile} from 'node:fs/promises'\nimport path from 'node:path'\n\nimport {Args} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport {chalk, confirm, input, select} from '@sanity/cli-core/ux'\nimport {deburr} from 'lodash-es'\n\nimport {getMigrationRootDirectory} from '../../actions/migration/getMigrationRootDirectory.js'\nimport {\n minimalAdvanced,\n minimalSimple,\n renameField,\n renameType,\n stringToPTE,\n} from '../../actions/migration/templates/index.js'\nimport {MIGRATIONS_DIRECTORY} from '../../util/migration/constants.js'\n\nconst TEMPLATES = [\n {name: 'Minimalistic migration to get you started', template: minimalSimple},\n {name: 'Rename an object type', template: renameType},\n {name: 'Rename a field', template: renameField},\n {name: 'Convert string field to Portable Text', template: stringToPTE},\n {\n name: 'Advanced template using async iterators providing more fine grained control',\n template: minimalAdvanced,\n },\n]\n\nexport class CreateMigrationCommand extends SanityCommand<typeof CreateMigrationCommand> {\n static override args = {\n title: Args.string({\n description: 'Title of migration',\n required: false,\n }),\n }\n\n static override description = 'Create a new migration within your project'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Create a new migration, prompting for title and options',\n },\n {\n command: '<%= config.bin %> <%= command.id %> \"Rename field from location to address\"',\n description: 'Create a new migration with the provided title, prompting for options',\n },\n ]\n\n public async run(): Promise<void> {\n const {args} = await this.parse(CreateMigrationCommand)\n const workDir = await getMigrationRootDirectory(this.output)\n\n const title = await this.promptForTitle(args.title)\n const types = await this.promptForDocumentTypes()\n const {template} = await this.promptForTemplate()\n\n const renderedTemplate = (template || minimalSimple)({\n documentTypes: types\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean),\n migrationName: title,\n })\n\n const sluggedName = deburr(title.toLowerCase())\n .replaceAll(/\\s+/g, '-')\n .replaceAll(/[^a-z0-9-]/g, '')\n\n const destDir = path.join(workDir, MIGRATIONS_DIRECTORY, sluggedName)\n const definitionFile = path.join(destDir, 'index.ts')\n\n const dirCreated = await this.createMigrationFile(destDir, definitionFile, renderedTemplate)\n\n if (dirCreated) {\n this.log()\n this.log(`${chalk.green('✓')} Migration created!`)\n this.log()\n this.log('Next steps:')\n this.log(\n `Open ${chalk.bold(\n definitionFile,\n )} in your code editor and write the code for your migration.`,\n )\n this.log(\n `Dry run the migration with:\\n\\`${chalk.bold(\n `sanity migration run ${sluggedName} --project=<projectId> --dataset <dataset> `,\n )}\\``,\n )\n this.log(\n `Run the migration against a dataset with:\\n \\`${chalk.bold(\n `sanity migration run ${sluggedName} --project=<projectId> --dataset <dataset> --no-dry-run`,\n )}\\``,\n )\n this.log()\n this.log(\n `👉 Learn more about schema and content migrations at ${chalk.bold(\n 'https://www.sanity.io/docs/schema-and-content-migrations',\n )}`,\n )\n }\n }\n\n private async createMigrationFile(\n destDir: string,\n definitionFile: string,\n renderedTemplate: string,\n ): Promise<boolean> {\n const dirExists = await access(destDir)\n .then(() => true)\n .catch(() => false)\n\n if (dirExists) {\n const shouldOverwrite = await this.promptForOverwrite(destDir)\n if (!shouldOverwrite) return false\n }\n\n try {\n await mkdir(destDir, {recursive: true})\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n this.error(`Failed to create migration directory: ${message}`, {exit: 1})\n }\n\n try {\n await writeFile(definitionFile, renderedTemplate)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n this.error(`Failed to create migration file: ${message}`, {exit: 1})\n }\n\n return true\n }\n\n private async promptForDocumentTypes(): Promise<string> {\n return input({\n message:\n 'Type of documents to migrate. You can add multiple types separated by comma (optional)',\n })\n }\n\n private async promptForOverwrite(destDir: string): Promise<boolean> {\n return confirm({\n default: false,\n message: `Migration directory ${chalk.cyan(destDir)} already exists. Overwrite?`,\n })\n }\n\n private async promptForTemplate(): Promise<{\n name: string\n template: (params: {documentTypes: string[]; migrationName: string}) => string\n }> {\n const templatesByName = Object.fromEntries(TEMPLATES.map((t) => [t.name, t]))\n const templateName = await select({\n choices: TEMPLATES.map((definedTemplate) => ({\n name: definedTemplate.name,\n value: definedTemplate.name,\n })),\n message: 'Select a template',\n })\n\n return templatesByName[templateName]\n }\n\n private async promptForTitle(providedTitle?: string): Promise<string> {\n if (providedTitle?.trim()) {\n return providedTitle\n }\n\n return input({\n message: 'Title of migration (e.g. \"Rename field from location to address\")',\n validate: (value) => {\n if (!value.trim()) {\n return 'Title cannot be empty'\n }\n\n return true\n },\n })\n }\n}\n"],"names":["access","mkdir","writeFile","path","Args","SanityCommand","chalk","confirm","input","select","deburr","getMigrationRootDirectory","minimalAdvanced","minimalSimple","renameField","renameType","stringToPTE","MIGRATIONS_DIRECTORY","TEMPLATES","name","template","CreateMigrationCommand","args","title","string","description","required","examples","command","run","parse","workDir","output","promptForTitle","types","promptForDocumentTypes","promptForTemplate","renderedTemplate","documentTypes","split","map","t","trim","filter","Boolean","migrationName","sluggedName","toLowerCase","replaceAll","destDir","join","definitionFile","dirCreated","createMigrationFile","log","green","bold","dirExists","then","catch","shouldOverwrite","promptForOverwrite","recursive","error","message","Error","String","exit","default","cyan","templatesByName","Object","fromEntries","templateName","choices","definedTemplate","value","providedTitle","validate"],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { SanityCommand } from '@sanity/cli-core';
2
- export declare class ListMigrationCommand extends SanityCommand<typeof ListMigrationCommand> {
3
- static description: string;
4
- static examples: {
5
- command: string;
6
- description: string;
7
- }[];
8
- run(): Promise<void>;
9
- }
@@ -1,61 +0,0 @@
1
- import { SanityCommand, subdebug } from '@sanity/cli-core';
2
- import { chalk } from '@sanity/cli-core/ux';
3
- import { Table } from 'console-table-printer';
4
- import { resolveMigrations } from '../../actions/migration/resolveMigrations.js';
5
- const listMigrationDebug = subdebug('migration:list');
6
- export class ListMigrationCommand extends SanityCommand {
7
- static description = 'List available migrations';
8
- static examples = [
9
- {
10
- command: '<%= config.bin %> <%= command.id %>',
11
- description: 'List all available migrations in the project'
12
- }
13
- ];
14
- async run() {
15
- const { directory: workDir } = await this.getProjectRoot();
16
- try {
17
- const migrations = await resolveMigrations(workDir);
18
- if (migrations.length === 0) {
19
- this.log('No migrations found in migrations folder of the project');
20
- this.log(`\nRun ${chalk.green('`sanity migration create <NAME>`')} to create a new migration`);
21
- return;
22
- }
23
- const table = new Table({
24
- columns: [
25
- {
26
- alignment: 'left',
27
- name: 'id',
28
- title: 'ID'
29
- },
30
- {
31
- alignment: 'left',
32
- name: 'title',
33
- title: 'Title'
34
- }
35
- ],
36
- title: `Found ${migrations.length} migrations in project`
37
- });
38
- for (const definedMigration of migrations){
39
- table.addRow({
40
- id: definedMigration.id,
41
- title: definedMigration.migration.title
42
- });
43
- }
44
- table.printTable();
45
- this.log('\nRun `sanity migration run <ID>` to run a migration');
46
- listMigrationDebug(`Successfully listed ${migrations.length} migrations`);
47
- } catch (error) {
48
- if (error.code === 'ENOENT') {
49
- this.log('No migrations folder found in the project');
50
- this.log(`\nRun ${chalk.green('`sanity migration create <NAME>`')} to create a new migration`);
51
- return;
52
- }
53
- listMigrationDebug('Failed to list migrations:', error);
54
- this.error(`List migrations failed: ${error instanceof Error ? error.message : String(error)}`, {
55
- exit: 1
56
- });
57
- }
58
- }
59
- }
60
-
61
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/commands/migration/list.ts"],"sourcesContent":["import {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {Table} from 'console-table-printer'\n\nimport {resolveMigrations} from '../../actions/migration/resolveMigrations.js'\n\nconst listMigrationDebug = subdebug('migration:list')\n\nexport class ListMigrationCommand extends SanityCommand<typeof ListMigrationCommand> {\n static override description = 'List available migrations'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'List all available migrations in the project',\n },\n ]\n\n public async run(): Promise<void> {\n const {directory: workDir} = await this.getProjectRoot()\n\n try {\n const migrations = await resolveMigrations(workDir)\n\n if (migrations.length === 0) {\n this.log('No migrations found in migrations folder of the project')\n this.log(\n `\\nRun ${chalk.green('`sanity migration create <NAME>`')} to create a new migration`,\n )\n return\n }\n\n const table = new Table({\n columns: [\n {alignment: 'left', name: 'id', title: 'ID'},\n {alignment: 'left', name: 'title', title: 'Title'},\n ],\n title: `Found ${migrations.length} migrations in project`,\n })\n\n for (const definedMigration of migrations) {\n table.addRow({id: definedMigration.id, title: definedMigration.migration.title})\n }\n table.printTable()\n this.log('\\nRun `sanity migration run <ID>` to run a migration')\n listMigrationDebug(`Successfully listed ${migrations.length} migrations`)\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n this.log('No migrations folder found in the project')\n this.log(\n `\\nRun ${chalk.green('`sanity migration create <NAME>`')} to create a new migration`,\n )\n return\n }\n listMigrationDebug('Failed to list migrations:', error)\n this.error(\n `List migrations failed: ${error instanceof Error ? error.message : String(error)}`,\n {\n exit: 1,\n },\n )\n }\n }\n}\n"],"names":["SanityCommand","subdebug","chalk","Table","resolveMigrations","listMigrationDebug","ListMigrationCommand","description","examples","command","run","directory","workDir","getProjectRoot","migrations","length","log","green","table","columns","alignment","name","title","definedMigration","addRow","id","migration","printTable","error","code","Error","message","String","exit"],"mappings":"AAAA,SAAQA,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AACxD,SAAQC,KAAK,QAAO,sBAAqB;AACzC,SAAQC,KAAK,QAAO,wBAAuB;AAE3C,SAAQC,iBAAiB,QAAO,+CAA8C;AAE9E,MAAMC,qBAAqBJ,SAAS;AAEpC,OAAO,MAAMK,6BAA6BN;IACxC,OAAgBO,cAAc,4BAA2B;IAEzD,OAAgBC,WAAW;QACzB;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,MAAaG,MAAqB;QAChC,MAAM,EAACC,WAAWC,OAAO,EAAC,GAAG,MAAM,IAAI,CAACC,cAAc;QAEtD,IAAI;YACF,MAAMC,aAAa,MAAMV,kBAAkBQ;YAE3C,IAAIE,WAAWC,MAAM,KAAK,GAAG;gBAC3B,IAAI,CAACC,GAAG,CAAC;gBACT,IAAI,CAACA,GAAG,CACN,CAAC,MAAM,EAAEd,MAAMe,KAAK,CAAC,oCAAoC,0BAA0B,CAAC;gBAEtF;YACF;YAEA,MAAMC,QAAQ,IAAIf,MAAM;gBACtBgB,SAAS;oBACP;wBAACC,WAAW;wBAAQC,MAAM;wBAAMC,OAAO;oBAAI;oBAC3C;wBAACF,WAAW;wBAAQC,MAAM;wBAASC,OAAO;oBAAO;iBAClD;gBACDA,OAAO,CAAC,MAAM,EAAER,WAAWC,MAAM,CAAC,sBAAsB,CAAC;YAC3D;YAEA,KAAK,MAAMQ,oBAAoBT,WAAY;gBACzCI,MAAMM,MAAM,CAAC;oBAACC,IAAIF,iBAAiBE,EAAE;oBAAEH,OAAOC,iBAAiBG,SAAS,CAACJ,KAAK;gBAAA;YAChF;YACAJ,MAAMS,UAAU;YAChB,IAAI,CAACX,GAAG,CAAC;YACTX,mBAAmB,CAAC,oBAAoB,EAAES,WAAWC,MAAM,CAAC,WAAW,CAAC;QAC1E,EAAE,OAAOa,OAAO;YACd,IAAI,AAACA,MAAgCC,IAAI,KAAK,UAAU;gBACtD,IAAI,CAACb,GAAG,CAAC;gBACT,IAAI,CAACA,GAAG,CACN,CAAC,MAAM,EAAEd,MAAMe,KAAK,CAAC,oCAAoC,0BAA0B,CAAC;gBAEtF;YACF;YACAZ,mBAAmB,8BAA8BuB;YACjD,IAAI,CAACA,KAAK,CACR,CAAC,wBAAwB,EAAEA,iBAAiBE,QAAQF,MAAMG,OAAO,GAAGC,OAAOJ,QAAQ,EACnF;gBACEK,MAAM;YACR;QAEJ;IACF;AACF"}
@@ -1,26 +0,0 @@
1
- import { SanityCommand } from '@sanity/cli-core';
2
- export type RunMigrationFlags = RunMigrationCommand['flags'];
3
- export declare class RunMigrationCommand extends SanityCommand<typeof RunMigrationCommand> {
4
- static args: {
5
- id: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
6
- };
7
- static description: string;
8
- static examples: {
9
- command: string;
10
- description: string;
11
- }[];
12
- static flags: {
13
- 'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
- concurrency: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
15
- confirm: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
- dataset: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
- 'from-export': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
- progress: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
- project: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
- };
22
- run(): Promise<void>;
23
- private createProgress;
24
- private dryRunHandler;
25
- private promptConfirmMigrate;
26
- }
@@ -1,271 +0,0 @@
1
- import path from 'node:path';
2
- import { Args, Flags } from '@oclif/core';
3
- import { SanityCommand, subdebug } from '@sanity/cli-core';
4
- import { chalk, confirm, spinner } from '@sanity/cli-core/ux';
5
- import { DEFAULT_MUTATION_CONCURRENCY, dryRun, MAX_MUTATION_CONCURRENCY, run } from '@sanity/migrate';
6
- import { Table } from 'console-table-printer';
7
- import { getMigrationRootDirectory } from '../../actions/migration/getMigrationRootDirectory.js';
8
- import { resolveMigrations } from '../../actions/migration/resolveMigrations.js';
9
- import { DEFAULT_API_VERSION, MIGRATIONS_DIRECTORY } from '../../util/migration/constants.js';
10
- import { ensureApiVersionFormat } from '../../util/migration/ensureApiVersionFormat.js';
11
- import { prettyFormat } from '../../util/migration/prettyMutationFormatter.js';
12
- import { isLoadableMigrationScript, resolveMigrationScript } from '../../utils/migration/resolveMigrationScript.js';
13
- const runMigrationDebug = subdebug('migration:run');
14
- export class RunMigrationCommand extends SanityCommand {
15
- static args = {
16
- id: Args.string({
17
- description: 'ID',
18
- required: false
19
- })
20
- };
21
- static description = 'Run a migration against a dataset';
22
- static examples = [
23
- {
24
- command: '<%= config.bin %> <%= command.id %> <id>',
25
- description: 'dry run the migration'
26
- },
27
- {
28
- command: '<%= config.bin %> <%= command.id %> <id> --no-dry-run --project xyz --dataset staging',
29
- description: 'execute the migration against a dataset'
30
- },
31
- {
32
- command: '<%= config.bin %> <%= command.id %> <id> --from-export=production.tar.gz --no-dry-run --project xyz --dataset staging',
33
- description: 'execute the migration using a dataset export as the source'
34
- }
35
- ];
36
- static flags = {
37
- 'api-version': Flags.string({
38
- description: `API version to use when migrating. Defaults to ${DEFAULT_API_VERSION}.`
39
- }),
40
- concurrency: Flags.integer({
41
- default: DEFAULT_MUTATION_CONCURRENCY,
42
- description: `How many mutation requests to run in parallel. Must be between 1 and ${MAX_MUTATION_CONCURRENCY}. Default: ${DEFAULT_MUTATION_CONCURRENCY}.`
43
- }),
44
- confirm: Flags.boolean({
45
- allowNo: true,
46
- default: true,
47
- description: 'Prompt for confirmation before running the migration (default: true). Use --no-confirm to skip.'
48
- }),
49
- dataset: Flags.string({
50
- description: 'Dataset to migrate. Defaults to the dataset configured in your Sanity CLI config.'
51
- }),
52
- 'dry-run': Flags.boolean({
53
- allowNo: true,
54
- default: true,
55
- description: 'By default the migration runs in dry mode. Use --no-dry-run to migrate dataset.'
56
- }),
57
- 'from-export': Flags.string({
58
- description: 'Use a local dataset export as source for migration instead of calling the Sanity API. Note: this is only supported for dry runs.'
59
- }),
60
- progress: Flags.boolean({
61
- allowNo: true,
62
- default: true,
63
- description: 'Display progress during migration (default: true). Use --no-progress to hide output.'
64
- }),
65
- project: Flags.string({
66
- description: 'Project ID of the dataset to migrate. Defaults to the projectId configured in your Sanity CLI config.'
67
- })
68
- };
69
- async run() {
70
- const { args, flags } = await this.parse(RunMigrationCommand);
71
- const cliConfig = await this.getCliConfig();
72
- const projectId = await this.getProjectId();
73
- const datasetFromConfig = cliConfig.api?.dataset;
74
- const workDir = await getMigrationRootDirectory(this.output);
75
- const id = args.id;
76
- const migrationsDirectoryPath = path.join(workDir, MIGRATIONS_DIRECTORY);
77
- const fromExport = flags['from-export'];
78
- const dry = flags['dry-run'];
79
- const dataset = flags.dataset;
80
- const project = flags.project;
81
- const apiVersion = ensureApiVersionFormat(flags['api-version'] ?? DEFAULT_API_VERSION);
82
- if (dataset && !project || project && !dataset) {
83
- this.error('If either --dataset or --project is provided, both must be provided', {
84
- exit: 1
85
- });
86
- }
87
- if (!project && !projectId) {
88
- this.error('sanity.cli.js does not contain a project identifier ("api.projectId") and no --project option was provided.', {
89
- exit: 1
90
- });
91
- }
92
- if (!dataset && !datasetFromConfig) {
93
- this.error('sanity.cli.js does not contain a dataset identifier ("api.dataset") and no --dataset option was provided.', {
94
- exit: 1
95
- });
96
- }
97
- if (!id) {
98
- this.warn(chalk.red('Error: Migration ID must be provided'));
99
- const migrations = await resolveMigrations(workDir);
100
- const table = new Table({
101
- columns: [
102
- {
103
- alignment: 'left',
104
- name: 'id',
105
- title: 'ID'
106
- },
107
- {
108
- alignment: 'left',
109
- name: 'title',
110
- title: 'Title'
111
- }
112
- ],
113
- title: `Migrations found in project`
114
- });
115
- for (const definedMigration of migrations){
116
- table.addRow({
117
- id: definedMigration.id,
118
- title: definedMigration.migration.title
119
- });
120
- }
121
- table.printTable();
122
- this.log('\nRun `sanity migration run <ID>` to run a migration');
123
- this.exit(1);
124
- }
125
- const candidates = await resolveMigrationScript(workDir, id);
126
- const resolvedScripts = candidates.filter((candidate)=>isLoadableMigrationScript(candidate));
127
- if (resolvedScripts.length > 1) {
128
- // todo: consider prompt user about which one to run? note: it's likely a mistake if multiple files resolve to the same name
129
- this.error(`Found multiple migrations for "${id}" in ${chalk.cyan(migrationsDirectoryPath)}: \n - ${candidates.map((candidate)=>path.relative(migrationsDirectoryPath, candidate.absolutePath)).join('\n - ')}`, {
130
- exit: 1
131
- });
132
- }
133
- const script = resolvedScripts[0];
134
- if (!script) {
135
- this.error(`No migration found for "${id}" in ${chalk.cyan(chalk.cyan(migrationsDirectoryPath))}. Make sure that the migration file exists and exports a valid migration as its default export.\n
136
- Tried the following files:\n - ${candidates.map((candidate)=>path.relative(migrationsDirectoryPath, candidate.absolutePath)).join('\n - ')}`, {
137
- exit: 1
138
- });
139
- }
140
- const mod = script.mod;
141
- if ('up' in mod || 'down' in mod) {
142
- // todo: consider adding support for up/down as separate named exports
143
- // For now, make sure we reserve the names for future use
144
- this.error('Only "up" migrations are supported at this time, please use a default export', {
145
- exit: 1
146
- });
147
- }
148
- const migration = mod.default;
149
- if (fromExport && !dry) {
150
- this.error('Can only dry run migrations from a dataset export file', {
151
- exit: 1
152
- });
153
- }
154
- const concurrency = flags.concurrency;
155
- if (concurrency !== undefined) {
156
- if (concurrency > MAX_MUTATION_CONCURRENCY) {
157
- this.error(`Concurrency exceeds the maximum allowed value of ${MAX_MUTATION_CONCURRENCY}`, {
158
- exit: 1
159
- });
160
- }
161
- if (concurrency < 1) {
162
- this.error(`Concurrency must be a positive number, got ${concurrency}`, {
163
- exit: 1
164
- });
165
- }
166
- }
167
- const projectClient = await this.getProjectApiClient({
168
- apiVersion: apiVersion,
169
- projectId: project ?? projectId,
170
- requireUser: true
171
- });
172
- const projectConfig = projectClient.config();
173
- const apiConfig = {
174
- apiHost: projectConfig.apiHost,
175
- apiVersion: apiVersion,
176
- dataset: dataset ?? datasetFromConfig,
177
- projectId: project ?? projectId,
178
- token: projectConfig.token
179
- };
180
- if (dry) {
181
- this.dryRunHandler(id, migration, apiConfig, fromExport);
182
- return;
183
- }
184
- this.log(`\n${chalk.yellow(chalk.bold('Note: During migrations, your webhooks stay active.'))}`);
185
- this.log(`To adjust them, launch the management interface with ${chalk.cyan('sanity manage')}, navigate to the API settings, and toggle the webhooks before and after the migration as needed.\n`);
186
- if (flags.confirm) {
187
- await this.promptConfirmMigrate(apiConfig);
188
- }
189
- const spin = spinner(`Running migration "${id}"`).start();
190
- await run({
191
- api: apiConfig,
192
- concurrency,
193
- onProgress: this.createProgress(spin, flags, id, dry, apiConfig, migration)
194
- }, migration);
195
- spin.stop();
196
- }
197
- createProgress(progressSpinner, flags, id, dry, apiConfig, migration) {
198
- return function onProgress(progress) {
199
- if (!flags.progress) {
200
- progressSpinner.stop();
201
- return;
202
- }
203
- if (progress.done) {
204
- progressSpinner.text = `Migration "${id}" completed.
205
-
206
- Project id: ${chalk.bold(apiConfig.projectId)}
207
- Dataset: ${chalk.bold(apiConfig.dataset)}
208
-
209
- ${progress.documents} documents processed.
210
- ${progress.mutations} mutations generated.
211
- ${chalk.green(progress.completedTransactions.length)} transactions committed.`;
212
- progressSpinner.stopAndPersist({
213
- symbol: chalk.green('✔')
214
- });
215
- return;
216
- }
217
- for (const transaction of [
218
- null,
219
- ...progress.currentTransactions
220
- ]){
221
- progressSpinner.text = `Running migration "${id}" ${dry ? 'in dry mode...' : '...'}
222
-
223
- Project id: ${chalk.bold(apiConfig.projectId)}
224
- Dataset: ${chalk.bold(apiConfig.dataset)}
225
- Document type: ${chalk.bold(migration.documentTypes?.join(','))}
226
-
227
- ${progress.documents} documents processed…
228
- ${progress.mutations} mutations generated…
229
- ${chalk.blue(progress.pending)} requests pending…
230
- ${chalk.green(progress.completedTransactions.length)} transactions committed.
231
-
232
- ${transaction && !progress.done ? `» ${prettyFormat({
233
- indentSize: 2,
234
- migration,
235
- subject: transaction
236
- })}` : ''}`;
237
- }
238
- };
239
- }
240
- async dryRunHandler(id, migration, apiConfig, fromExport) {
241
- this.log(`Running migration "${id}" in dry mode`);
242
- if (fromExport) {
243
- this.log(`Using export ${chalk.cyan(fromExport)}`);
244
- }
245
- this.log();
246
- this.log(`Project id: ${chalk.bold(apiConfig.projectId)}`);
247
- this.log(`Dataset: ${chalk.bold(apiConfig.dataset)}`);
248
- for await (const mutation of dryRun({
249
- api: apiConfig,
250
- exportPath: fromExport
251
- }, migration)){
252
- if (!mutation) continue;
253
- this.log();
254
- this.log(prettyFormat({
255
- migration,
256
- subject: mutation
257
- }));
258
- }
259
- }
260
- async promptConfirmMigrate(apiConfig) {
261
- const response = await confirm({
262
- message: `This migration will run on the ${chalk.yellow(chalk.bold(apiConfig.dataset))} dataset in ${chalk.yellow(chalk.bold(apiConfig.projectId))} project. Are you sure?`
263
- });
264
- if (!response) {
265
- runMigrationDebug('User aborted migration');
266
- this.exit(1);
267
- }
268
- }
269
- }
270
-
271
- //# sourceMappingURL=run.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/commands/migration/run.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk, confirm, spinner} from '@sanity/cli-core/ux'\nimport {\n APIConfig,\n DEFAULT_MUTATION_CONCURRENCY,\n dryRun,\n MAX_MUTATION_CONCURRENCY,\n type Migration,\n type MigrationProgress,\n run,\n} from '@sanity/migrate'\nimport {Table} from 'console-table-printer'\n\nimport {getMigrationRootDirectory} from '../../actions/migration/getMigrationRootDirectory.js'\nimport {resolveMigrations} from '../../actions/migration/resolveMigrations.js'\nimport {DEFAULT_API_VERSION, MIGRATIONS_DIRECTORY} from '../../util/migration/constants.js'\nimport {ensureApiVersionFormat} from '../../util/migration/ensureApiVersionFormat.js'\nimport {prettyFormat} from '../../util/migration/prettyMutationFormatter.js'\nimport {\n isLoadableMigrationScript,\n resolveMigrationScript,\n} from '../../utils/migration/resolveMigrationScript.js'\n\nconst runMigrationDebug = subdebug('migration:run')\n\nexport type RunMigrationFlags = RunMigrationCommand['flags']\n\nexport class RunMigrationCommand extends SanityCommand<typeof RunMigrationCommand> {\n static override args = {\n id: Args.string({\n description: 'ID',\n required: false,\n }),\n }\n\n static override description = 'Run a migration against a dataset'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> <id>',\n description: 'dry run the migration',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> <id> --no-dry-run --project xyz --dataset staging',\n description: 'execute the migration against a dataset',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> <id> --from-export=production.tar.gz --no-dry-run --project xyz --dataset staging',\n description: 'execute the migration using a dataset export as the source',\n },\n ]\n\n static override flags = {\n 'api-version': Flags.string({\n description: `API version to use when migrating. Defaults to ${DEFAULT_API_VERSION}.`,\n }),\n concurrency: Flags.integer({\n default: DEFAULT_MUTATION_CONCURRENCY,\n description: `How many mutation requests to run in parallel. Must be between 1 and ${MAX_MUTATION_CONCURRENCY}. Default: ${DEFAULT_MUTATION_CONCURRENCY}.`,\n }),\n confirm: Flags.boolean({\n allowNo: true,\n default: true,\n description:\n 'Prompt for confirmation before running the migration (default: true). Use --no-confirm to skip.',\n }),\n dataset: Flags.string({\n description:\n 'Dataset to migrate. Defaults to the dataset configured in your Sanity CLI config.',\n }),\n 'dry-run': Flags.boolean({\n allowNo: true,\n default: true,\n description:\n 'By default the migration runs in dry mode. Use --no-dry-run to migrate dataset.',\n }),\n 'from-export': Flags.string({\n description:\n 'Use a local dataset export as source for migration instead of calling the Sanity API. Note: this is only supported for dry runs.',\n }),\n progress: Flags.boolean({\n allowNo: true,\n default: true,\n description:\n 'Display progress during migration (default: true). Use --no-progress to hide output.',\n }),\n project: Flags.string({\n description:\n 'Project ID of the dataset to migrate. Defaults to the projectId configured in your Sanity CLI config.',\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(RunMigrationCommand)\n const cliConfig = await this.getCliConfig()\n const projectId = await this.getProjectId()\n const datasetFromConfig = cliConfig.api?.dataset\n\n const workDir = await getMigrationRootDirectory(this.output)\n const id = args.id\n const migrationsDirectoryPath = path.join(workDir, MIGRATIONS_DIRECTORY)\n\n const fromExport = flags['from-export']\n const dry = flags['dry-run']\n const dataset = flags.dataset\n const project = flags.project\n const apiVersion = ensureApiVersionFormat(flags['api-version'] ?? DEFAULT_API_VERSION)\n\n if ((dataset && !project) || (project && !dataset)) {\n this.error('If either --dataset or --project is provided, both must be provided', {exit: 1})\n }\n\n if (!project && !projectId) {\n this.error(\n 'sanity.cli.js does not contain a project identifier (\"api.projectId\") and no --project option was provided.',\n {exit: 1},\n )\n }\n\n if (!dataset && !datasetFromConfig) {\n this.error(\n 'sanity.cli.js does not contain a dataset identifier (\"api.dataset\") and no --dataset option was provided.',\n {exit: 1},\n )\n }\n\n if (!id) {\n this.warn(chalk.red('Error: Migration ID must be provided'))\n\n const migrations = await resolveMigrations(workDir)\n const table = new Table({\n columns: [\n {alignment: 'left', name: 'id', title: 'ID'},\n {alignment: 'left', name: 'title', title: 'Title'},\n ],\n title: `Migrations found in project`,\n })\n\n for (const definedMigration of migrations) {\n table.addRow({id: definedMigration.id, title: definedMigration.migration.title})\n }\n table.printTable()\n this.log('\\nRun `sanity migration run <ID>` to run a migration')\n\n this.exit(1)\n }\n\n const candidates = await resolveMigrationScript(workDir, id)\n const resolvedScripts = candidates.filter((candidate) => isLoadableMigrationScript(candidate))\n\n if (resolvedScripts.length > 1) {\n // todo: consider prompt user about which one to run? note: it's likely a mistake if multiple files resolve to the same name\n this.error(\n `Found multiple migrations for \"${id}\" in ${chalk.cyan(migrationsDirectoryPath)}: \\n - ${candidates\n .map((candidate) => path.relative(migrationsDirectoryPath, candidate.absolutePath))\n .join('\\n - ')}`,\n {exit: 1},\n )\n }\n\n const script = resolvedScripts[0]\n if (!script) {\n this.error(\n `No migration found for \"${id}\" in ${chalk.cyan(chalk.cyan(migrationsDirectoryPath))}. Make sure that the migration file exists and exports a valid migration as its default export.\\n\n Tried the following files:\\n - ${candidates\n .map((candidate) => path.relative(migrationsDirectoryPath, candidate.absolutePath))\n .join('\\n - ')}`,\n {exit: 1},\n )\n }\n\n const mod = script.mod\n if ('up' in mod || 'down' in mod) {\n // todo: consider adding support for up/down as separate named exports\n // For now, make sure we reserve the names for future use\n this.error('Only \"up\" migrations are supported at this time, please use a default export', {\n exit: 1,\n })\n }\n\n const migration: Migration = mod.default\n\n if (fromExport && !dry) {\n this.error('Can only dry run migrations from a dataset export file', {exit: 1})\n }\n\n const concurrency = flags.concurrency\n if (concurrency !== undefined) {\n if (concurrency > MAX_MUTATION_CONCURRENCY) {\n this.error(`Concurrency exceeds the maximum allowed value of ${MAX_MUTATION_CONCURRENCY}`, {\n exit: 1,\n })\n }\n\n if (concurrency < 1) {\n this.error(`Concurrency must be a positive number, got ${concurrency}`, {exit: 1})\n }\n }\n\n const projectClient = await this.getProjectApiClient({\n apiVersion: apiVersion,\n projectId: (project ?? projectId)!,\n requireUser: true,\n })\n const projectConfig = projectClient.config()\n\n const apiConfig: APIConfig = {\n apiHost: projectConfig.apiHost,\n apiVersion: apiVersion,\n dataset: (dataset ?? datasetFromConfig)!,\n projectId: (project ?? projectId)!,\n token: projectConfig.token!,\n } as const\n if (dry) {\n this.dryRunHandler(id, migration, apiConfig, fromExport)\n return\n }\n\n this.log(`\\n${chalk.yellow(chalk.bold('Note: During migrations, your webhooks stay active.'))}`)\n this.log(\n `To adjust them, launch the management interface with ${chalk.cyan('sanity manage')}, navigate to the API settings, and toggle the webhooks before and after the migration as needed.\\n`,\n )\n\n if (flags.confirm) {\n await this.promptConfirmMigrate(apiConfig)\n }\n\n const spin = spinner(`Running migration \"${id}\"`).start()\n await run(\n {\n api: apiConfig,\n concurrency,\n onProgress: this.createProgress(spin, flags, id, dry, apiConfig, migration),\n },\n migration,\n )\n spin.stop()\n }\n\n private createProgress(\n progressSpinner: ReturnType<typeof spinner>,\n flags: RunMigrationFlags,\n id: string,\n dry: boolean,\n apiConfig: APIConfig,\n migration: Migration,\n ) {\n return function onProgress(progress: MigrationProgress) {\n if (!flags.progress) {\n progressSpinner.stop()\n return\n }\n if (progress.done) {\n progressSpinner.text = `Migration \"${id}\" completed.\n\n Project id: ${chalk.bold(apiConfig.projectId)}\n Dataset: ${chalk.bold(apiConfig.dataset)}\n\n ${progress.documents} documents processed.\n ${progress.mutations} mutations generated.\n ${chalk.green(progress.completedTransactions.length)} transactions committed.`\n progressSpinner.stopAndPersist({symbol: chalk.green('✔')})\n return\n }\n\n for (const transaction of [null, ...progress.currentTransactions]) {\n progressSpinner.text = `Running migration \"${id}\" ${dry ? 'in dry mode...' : '...'}\n\n Project id: ${chalk.bold(apiConfig.projectId)}\n Dataset: ${chalk.bold(apiConfig.dataset)}\n Document type: ${chalk.bold(migration.documentTypes?.join(','))}\n\n ${progress.documents} documents processed…\n ${progress.mutations} mutations generated…\n ${chalk.blue(progress.pending)} requests pending…\n ${chalk.green(progress.completedTransactions.length)} transactions committed.\n\n ${\n transaction && !progress.done\n ? `» ${prettyFormat({indentSize: 2, migration, subject: transaction})}`\n : ''\n }`\n }\n }\n }\n\n private async dryRunHandler(\n id: string,\n migration: Migration,\n apiConfig: APIConfig,\n fromExport: string | undefined,\n ) {\n this.log(`Running migration \"${id}\" in dry mode`)\n\n if (fromExport) {\n this.log(`Using export ${chalk.cyan(fromExport)}`)\n }\n\n this.log()\n this.log(`Project id: ${chalk.bold(apiConfig.projectId)}`)\n this.log(`Dataset: ${chalk.bold(apiConfig.dataset)}`)\n\n for await (const mutation of dryRun({api: apiConfig, exportPath: fromExport}, migration)) {\n if (!mutation) continue\n this.log()\n this.log(\n prettyFormat({\n migration,\n subject: mutation,\n }),\n )\n }\n }\n\n private async promptConfirmMigrate(apiConfig: APIConfig) {\n const response = await confirm({\n message: `This migration will run on the ${chalk.yellow(\n chalk.bold(apiConfig.dataset),\n )} dataset in ${chalk.yellow(chalk.bold(apiConfig.projectId))} project. Are you sure?`,\n })\n\n if (!response) {\n runMigrationDebug('User aborted migration')\n this.exit(1)\n }\n }\n}\n"],"names":["path","Args","Flags","SanityCommand","subdebug","chalk","confirm","spinner","DEFAULT_MUTATION_CONCURRENCY","dryRun","MAX_MUTATION_CONCURRENCY","run","Table","getMigrationRootDirectory","resolveMigrations","DEFAULT_API_VERSION","MIGRATIONS_DIRECTORY","ensureApiVersionFormat","prettyFormat","isLoadableMigrationScript","resolveMigrationScript","runMigrationDebug","RunMigrationCommand","args","id","string","description","required","examples","command","flags","concurrency","integer","default","boolean","allowNo","dataset","progress","project","parse","cliConfig","getCliConfig","projectId","getProjectId","datasetFromConfig","api","workDir","output","migrationsDirectoryPath","join","fromExport","dry","apiVersion","error","exit","warn","red","migrations","table","columns","alignment","name","title","definedMigration","addRow","migration","printTable","log","candidates","resolvedScripts","filter","candidate","length","cyan","map","relative","absolutePath","script","mod","undefined","projectClient","getProjectApiClient","requireUser","projectConfig","config","apiConfig","apiHost","token","dryRunHandler","yellow","bold","promptConfirmMigrate","spin","start","onProgress","createProgress","stop","progressSpinner","done","text","documents","mutations","green","completedTransactions","stopAndPersist","symbol","transaction","currentTransactions","documentTypes","blue","pending","indentSize","subject","mutation","exportPath","response","message"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare const MIGRATIONS_DIRECTORY = "migrations";
2
- export declare const MIGRATION_SCRIPT_EXTENSIONS: string[];
3
- export declare const DEFAULT_API_VERSION = "v2024-01-29";
@@ -1,10 +0,0 @@
1
- export const MIGRATIONS_DIRECTORY = 'migrations';
2
- export const MIGRATION_SCRIPT_EXTENSIONS = [
3
- 'mjs',
4
- 'js',
5
- 'ts',
6
- 'cjs'
7
- ];
8
- export const DEFAULT_API_VERSION = 'v2024-01-29';
9
-
10
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/util/migration/constants.ts"],"sourcesContent":["export const MIGRATIONS_DIRECTORY = 'migrations'\nexport const MIGRATION_SCRIPT_EXTENSIONS = ['mjs', 'js', 'ts', 'cjs']\nexport const DEFAULT_API_VERSION = 'v2024-01-29'\n"],"names":["MIGRATIONS_DIRECTORY","MIGRATION_SCRIPT_EXTENSIONS","DEFAULT_API_VERSION"],"mappings":"AAAA,OAAO,MAAMA,uBAAuB,aAAY;AAChD,OAAO,MAAMC,8BAA8B;IAAC;IAAO;IAAM;IAAM;CAAM,CAAA;AACrE,OAAO,MAAMC,sBAAsB,cAAa"}
@@ -1,9 +0,0 @@
1
- import { type APIConfig } from '@sanity/migrate';
2
- type ApiVersion = APIConfig['apiVersion'];
3
- /**
4
- * Ensures that the provided API version string is in the correct format.
5
- * If the version does not start with 'v', it will be prefixed with 'v'.
6
- * If the version does not match the expected pattern, an error will be thrown.
7
- */
8
- export declare function ensureApiVersionFormat(version: string): ApiVersion;
9
- export {};
@@ -1,16 +0,0 @@
1
- const VERSION_PATTERN = /^v\d+-\d+-\d+$|^vX$/ // Matches version strings like vYYYY-MM-DD or vX
2
- ;
3
- /**
4
- * Ensures that the provided API version string is in the correct format.
5
- * If the version does not start with 'v', it will be prefixed with 'v'.
6
- * If the version does not match the expected pattern, an error will be thrown.
7
- */ export function ensureApiVersionFormat(version) {
8
- const normalizedVersion = version.startsWith('v') ? version : `v${version}`;
9
- // Check if the version matches the expected pattern
10
- if (!VERSION_PATTERN.test(normalizedVersion)) {
11
- throw new Error(`Invalid API version format: ${normalizedVersion}. Expected format: vYYYY-MM-DD or vX`);
12
- }
13
- return normalizedVersion;
14
- }
15
-
16
- //# sourceMappingURL=ensureApiVersionFormat.js.map