@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,30 +1,32 @@
1
1
  import { runCommand } from '@oclif/test';
2
2
  import { input, select } from '@sanity/cli-core/ux';
3
- import { testCommand } from '@sanity/cli-test';
3
+ import { createTestClient, mockApi, testCommand } from '@sanity/cli-test';
4
+ import nock from 'nock';
4
5
  import { afterEach, describe, expect, test, vi } from 'vitest';
5
- import { getCliConfig } from '../../../../../cli-core/src/config/cli/getCliConfig.js';
6
- import { getProjectCliClient } from '../../../../../cli-core/src/services/apiClient.js';
6
+ import { PROJECT_FEATURES_API_VERSION } from '../../../services/getProjectFeatures.js';
7
7
  import { CreateDatasetCommand } from '../create.js';
8
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
9
- findProjectRoot: vi.fn().mockResolvedValue({
10
- directory: '/test/path',
11
- root: '/test/path',
12
- type: 'studio'
13
- })
14
- }));
15
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
16
- getCliConfig: vi.fn().mockResolvedValue({
17
- api: {
18
- projectId: 'test-project'
19
- }
8
+ const mockListDatasets = vi.hoisted(()=>vi.fn());
9
+ const mockCreateDataset = vi.hoisted(()=>vi.fn());
10
+ const testProjectId = vi.hoisted(()=>'test-project');
11
+ const testToken = vi.hoisted(()=>'test-token');
12
+ vi.mock('@sanity/cli-core', async ()=>{
13
+ const actual = await vi.importActual('@sanity/cli-core');
14
+ const testClient = createTestClient({
15
+ apiVersion: 'v2025-09-16',
16
+ projectId: testProjectId,
17
+ token: testToken
18
+ });
19
+ return {
20
+ ...actual,
21
+ getProjectCliClient: vi.fn().mockResolvedValue({
22
+ datasets: {
23
+ create: mockCreateDataset,
24
+ list: mockListDatasets
25
+ },
26
+ request: testClient.request
20
27
  })
21
- }));
22
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
23
- getCliToken: vi.fn().mockResolvedValue('test-token')
24
- }));
25
- vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
26
- getProjectCliClient: vi.fn()
27
- }));
28
+ };
29
+ });
28
30
  vi.mock('@sanity/cli-core/ux', async ()=>{
29
31
  const actual = await vi.importActual('@sanity/cli-core/ux');
30
32
  return {
@@ -33,28 +35,27 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
33
35
  select: vi.fn()
34
36
  };
35
37
  });
36
- const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
37
- const mockGetCliConfig = vi.mocked(getCliConfig);
38
+ const defaultMocks = {
39
+ cliConfig: {
40
+ api: {
41
+ projectId: testProjectId
42
+ }
43
+ },
44
+ projectRoot: {
45
+ directory: '/test/path',
46
+ path: '/test/path/sanity.config.ts',
47
+ type: 'studio'
48
+ },
49
+ token: 'test-token'
50
+ };
38
51
  const mockInput = vi.mocked(input);
39
52
  const mockSelect = vi.mocked(select);
40
- const createMockClient = (overrides = {})=>{
41
- const defaultDatasets = {
42
- create: vi.fn().mockResolvedValue(undefined),
43
- list: vi.fn().mockResolvedValue([])
44
- };
45
- const datasetsOverrides = overrides.datasets;
46
- return {
47
- datasets: datasetsOverrides ? {
48
- ...defaultDatasets,
49
- ...datasetsOverrides
50
- } : defaultDatasets,
51
- request: vi.fn().mockResolvedValue([]),
52
- ...overrides
53
- };
54
- };
55
53
  describe('#dataset:create', ()=>{
56
54
  afterEach(()=>{
57
55
  vi.clearAllMocks();
56
+ const pending = nock.pendingMocks();
57
+ nock.cleanAll();
58
+ expect(pending, 'pending mocks').toEqual([]);
58
59
  });
59
60
  test('--help works', async ()=>{
60
61
  const { stdout } = await runCommand([
@@ -94,26 +95,42 @@ describe('#dataset:create', ()=>{
94
95
  `);
95
96
  });
96
97
  test('creates dataset with provided name', async ()=>{
97
- const mockClient = createMockClient();
98
- mockGetProjectCliClient.mockResolvedValue(mockClient);
98
+ mockListDatasets.mockResolvedValue([]);
99
+ mockApi({
100
+ apiHost: `https://${testProjectId}.api.sanity.io`,
101
+ apiVersion: PROJECT_FEATURES_API_VERSION,
102
+ method: 'get',
103
+ uri: '/features'
104
+ }).reply(200, []);
105
+ mockCreateDataset.mockResolvedValue(undefined);
99
106
  const { stdout } = await testCommand(CreateDatasetCommand, [
100
107
  'my-dataset'
101
- ]);
102
- expect(mockClient.datasets.create).toHaveBeenCalledWith('my-dataset', {
108
+ ], {
109
+ mocks: defaultMocks
110
+ });
111
+ expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {
103
112
  aclMode: 'public'
104
113
  });
105
114
  expect(stdout).toContain('Dataset created successfully');
106
115
  });
107
116
  test('prompts for dataset name when not provided', async ()=>{
108
- const mockClient = createMockClient();
109
- mockGetProjectCliClient.mockResolvedValue(mockClient);
117
+ mockListDatasets.mockResolvedValue([]);
118
+ mockApi({
119
+ apiHost: `https://${testProjectId}.api.sanity.io`,
120
+ apiVersion: PROJECT_FEATURES_API_VERSION,
121
+ method: 'get',
122
+ uri: '/features'
123
+ }).reply(200, []);
124
+ mockCreateDataset.mockResolvedValue(undefined);
110
125
  mockInput.mockResolvedValue('test-dataset');
111
- const { stdout } = await testCommand(CreateDatasetCommand, []);
126
+ const { stdout } = await testCommand(CreateDatasetCommand, [], {
127
+ mocks: defaultMocks
128
+ });
112
129
  expect(mockInput).toHaveBeenCalledWith({
113
130
  message: 'Dataset name:',
114
131
  validate: expect.any(Function)
115
132
  });
116
- expect(mockClient.datasets.create).toHaveBeenCalledWith('test-dataset', {
133
+ expect(mockCreateDataset).toHaveBeenCalledWith('test-dataset', {
117
134
  aclMode: 'public'
118
135
  });
119
136
  expect(stdout).toContain('Dataset created successfully');
@@ -121,32 +138,36 @@ describe('#dataset:create', ()=>{
121
138
  test('errors when dataset name is invalid', async ()=>{
122
139
  const { error } = await testCommand(CreateDatasetCommand, [
123
140
  'Invalid-Dataset-Name'
124
- ]);
141
+ ], {
142
+ mocks: defaultMocks
143
+ });
125
144
  expect(error?.message).toContain('must be all lowercase');
126
145
  expect(error?.oclif?.exit).toBe(1);
127
146
  });
128
147
  test('errors when dataset already exists', async ()=>{
129
- const mockClient = createMockClient({
130
- datasets: {
131
- create: vi.fn(),
132
- list: vi.fn().mockResolvedValue([
133
- {
134
- aclMode: 'public',
135
- addonFor: null,
136
- createdAt: '2023-01-01T00:00:00Z',
137
- createdByUserId: 'user1',
138
- datasetProfile: 'default',
139
- features: [],
140
- name: 'production',
141
- tags: []
142
- }
143
- ])
148
+ mockListDatasets.mockResolvedValue([
149
+ {
150
+ aclMode: 'public',
151
+ addonFor: null,
152
+ createdAt: '2023-01-01T00:00:00Z',
153
+ createdByUserId: 'user1',
154
+ datasetProfile: 'default',
155
+ features: [],
156
+ name: 'production',
157
+ tags: []
144
158
  }
145
- });
146
- mockGetProjectCliClient.mockResolvedValue(mockClient);
159
+ ]);
160
+ mockApi({
161
+ apiHost: `https://${testProjectId}.api.sanity.io`,
162
+ apiVersion: PROJECT_FEATURES_API_VERSION,
163
+ method: 'get',
164
+ uri: '/features'
165
+ }).reply(200, []);
147
166
  const { error } = await testCommand(CreateDatasetCommand, [
148
167
  'production'
149
- ]);
168
+ ], {
169
+ mocks: defaultMocks
170
+ });
150
171
  expect(error?.message).toContain('Dataset "production" already exists');
151
172
  expect(error?.oclif?.exit).toBe(1);
152
173
  });
@@ -155,49 +176,46 @@ describe('#dataset:create', ()=>{
155
176
  'my-dataset',
156
177
  '--visibility',
157
178
  'invalid'
158
- ]);
179
+ ], {
180
+ mocks: defaultMocks
181
+ });
159
182
  expect(error?.message).toContain('Expected --visibility=invalid to be one of: custom, private, public');
160
183
  expect(error?.oclif?.exit).toBe(2);
161
184
  });
162
185
  test('handles dataset creation errors', async ()=>{
163
- const mockClient = createMockClient({
164
- datasets: {
165
- create: vi.fn().mockRejectedValue(new Error('API Error')),
166
- list: vi.fn().mockResolvedValue([])
167
- }
168
- });
169
- mockGetProjectCliClient.mockResolvedValue(mockClient);
186
+ mockListDatasets.mockResolvedValue([]);
187
+ mockApi({
188
+ apiHost: `https://${testProjectId}.api.sanity.io`,
189
+ apiVersion: PROJECT_FEATURES_API_VERSION,
190
+ method: 'get',
191
+ uri: '/features'
192
+ }).reply(200, []);
193
+ mockCreateDataset.mockRejectedValue(new Error('API Error'));
170
194
  const { error } = await testCommand(CreateDatasetCommand, [
171
195
  'my-dataset'
172
- ]);
173
- expect(error?.message).toContain('Dataset creation failed: API Error');
174
- expect(error?.oclif?.exit).toBe(1);
175
- });
176
- test('handles fetch project data errors', async ()=>{
177
- const mockClient = createMockClient({
178
- datasets: {
179
- create: vi.fn(),
180
- list: vi.fn().mockRejectedValue(new Error('Network error'))
181
- }
196
+ ], {
197
+ mocks: defaultMocks
182
198
  });
183
- mockGetProjectCliClient.mockResolvedValue(mockClient);
184
- const { error } = await testCommand(CreateDatasetCommand, [
185
- 'my-dataset-fail'
186
- ]);
187
- expect(error?.message).toContain('Failed to fetch project data: Network error');
199
+ expect(error?.message).toContain('Dataset creation failed: API Error');
188
200
  expect(error?.oclif?.exit).toBe(1);
189
201
  });
190
202
  test('prompts for dataset visibility when private datasets available and no flag provided', async ()=>{
191
- const mockClient = createMockClient({
192
- request: vi.fn().mockResolvedValue([
193
- 'privateDataset'
194
- ])
195
- });
196
- mockGetProjectCliClient.mockResolvedValue(mockClient);
203
+ mockListDatasets.mockResolvedValue([]);
204
+ mockApi({
205
+ apiHost: `https://${testProjectId}.api.sanity.io`,
206
+ apiVersion: PROJECT_FEATURES_API_VERSION,
207
+ method: 'get',
208
+ uri: '/features'
209
+ }).reply(200, [
210
+ 'privateDataset'
211
+ ]);
212
+ mockCreateDataset.mockResolvedValue(undefined);
197
213
  mockSelect.mockResolvedValue('private');
198
214
  const { stderr, stdout } = await testCommand(CreateDatasetCommand, [
199
215
  'my-dataset'
200
- ]);
216
+ ], {
217
+ mocks: defaultMocks
218
+ });
201
219
  expect(mockSelect).toHaveBeenCalledWith({
202
220
  choices: [
203
221
  {
@@ -211,7 +229,7 @@ describe('#dataset:create', ()=>{
211
229
  ],
212
230
  message: 'Dataset visibility'
213
231
  });
214
- expect(mockClient.datasets.create).toHaveBeenCalledWith('my-dataset', {
232
+ expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {
215
233
  aclMode: 'private'
216
234
  });
217
235
  expect(stdout).toContain('Dataset created successfully');
@@ -262,18 +280,24 @@ describe('#dataset:create', ()=>{
262
280
  visibility: 'custom'
263
281
  }
264
282
  ])('$testName', async ({ expectedAclMode, expectWarning, hasPrivateFeature, visibility })=>{
265
- const mockClient = createMockClient({
266
- request: vi.fn().mockResolvedValue(hasPrivateFeature ? [
267
- 'privateDataset'
268
- ] : [])
269
- });
270
- mockGetProjectCliClient.mockResolvedValue(mockClient);
283
+ mockListDatasets.mockResolvedValue([]);
284
+ mockApi({
285
+ apiHost: `https://${testProjectId}.api.sanity.io`,
286
+ apiVersion: PROJECT_FEATURES_API_VERSION,
287
+ method: 'get',
288
+ uri: '/features'
289
+ }).reply(200, hasPrivateFeature ? [
290
+ 'privateDataset'
291
+ ] : []);
292
+ mockCreateDataset.mockResolvedValue(undefined);
271
293
  const { stderr, stdout } = await testCommand(CreateDatasetCommand, [
272
294
  'my-dataset',
273
295
  '--visibility',
274
296
  visibility
275
- ]);
276
- expect(mockClient.datasets.create).toHaveBeenCalledWith('my-dataset', {
297
+ ], {
298
+ mocks: defaultMocks
299
+ });
300
+ expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {
277
301
  aclMode: expectedAclMode
278
302
  });
279
303
  expect(stdout).toContain('Dataset created successfully');
@@ -283,27 +307,33 @@ describe('#dataset:create', ()=>{
283
307
  });
284
308
  });
285
309
  test('handles client request failure independently from listDatasets', async ()=>{
286
- const mockClient = createMockClient({
287
- datasets: {
288
- create: vi.fn(),
289
- list: vi.fn().mockResolvedValue([])
290
- },
291
- request: vi.fn().mockRejectedValue(new Error('Features API error'))
310
+ mockApi({
311
+ apiHost: `https://${testProjectId}.api.sanity.io`,
312
+ apiVersion: PROJECT_FEATURES_API_VERSION,
313
+ method: 'get',
314
+ uri: '/features'
315
+ }).reply(500, {
316
+ error: 'Features API error'
292
317
  });
293
- mockGetProjectCliClient.mockResolvedValue(mockClient);
294
318
  const { error } = await testCommand(CreateDatasetCommand, [
295
319
  'my-dataset'
296
- ]);
320
+ ], {
321
+ mocks: defaultMocks
322
+ });
297
323
  expect(error?.message).toContain('Failed to fetch project data: Features API error');
298
324
  expect(error?.oclif?.exit).toBe(1);
299
325
  });
300
326
  test('errors when no project ID is found', async ()=>{
301
- mockGetCliConfig.mockResolvedValueOnce({
302
- api: undefined
303
- });
304
327
  const { error } = await testCommand(CreateDatasetCommand, [
305
328
  'my-dataset'
306
- ]);
329
+ ], {
330
+ mocks: {
331
+ ...defaultMocks,
332
+ cliConfig: {
333
+ api: undefined
334
+ }
335
+ }
336
+ });
307
337
  expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier');
308
338
  expect(error?.oclif?.exit).toBe(1);
309
339
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/dataset/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {getCliConfig} from '../../../../../cli-core/src/config/cli/getCliConfig.js'\nimport {getProjectCliClient} from '../../../../../cli-core/src/services/apiClient.js'\nimport {CreateDatasetCommand} from '../create.js'\n\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n input: vi.fn(),\n select: vi.fn(),\n }\n})\n\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockInput = vi.mocked(input)\nconst mockSelect = vi.mocked(select)\n\nconst createMockClient = (overrides: Record<string, unknown> = {}) => {\n const defaultDatasets = {\n create: vi.fn().mockResolvedValue(undefined),\n list: vi.fn().mockResolvedValue([]),\n }\n\n const datasetsOverrides = overrides.datasets as Record<string, unknown> | undefined\n\n return {\n datasets: datasetsOverrides ? {...defaultDatasets, ...datasetsOverrides} : defaultDatasets,\n request: vi.fn().mockResolvedValue([]),\n ...overrides,\n }\n}\n\ndescribe('#dataset:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a new dataset within your project\n\n USAGE\n $ sanity dataset create [NAME] [--visibility custom|private|public]\n\n ARGUMENTS\n [NAME] Name of the dataset to create\n\n FLAGS\n --visibility=<option> Set visibility for this dataset (custom/private/public)\n <options: custom|private|public>\n\n DESCRIPTION\n Create a new dataset within your project\n\n EXAMPLES\n Interactively create a dataset\n\n $ sanity dataset create\n\n Create a dataset named \"my-dataset\"\n\n $ sanity dataset create my-dataset\n\n Create a private dataset named \"my-dataset\"\n\n $ sanity dataset create my-dataset --visibility private\n\n \"\n `)\n })\n\n test('creates dataset with provided name', async () => {\n const mockClient = createMockClient()\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {stdout} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(mockClient.datasets.create).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'public',\n })\n expect(stdout).toContain('Dataset created successfully')\n })\n\n test('prompts for dataset name when not provided', async () => {\n const mockClient = createMockClient()\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n mockInput.mockResolvedValue('test-dataset')\n\n const {stdout} = await testCommand(CreateDatasetCommand, [])\n\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Dataset name:',\n validate: expect.any(Function),\n })\n expect(mockClient.datasets.create).toHaveBeenCalledWith('test-dataset', {\n aclMode: 'public',\n })\n expect(stdout).toContain('Dataset created successfully')\n })\n\n test('errors when dataset name is invalid', async () => {\n const {error} = await testCommand(CreateDatasetCommand, ['Invalid-Dataset-Name'])\n\n expect(error?.message).toContain('must be all lowercase')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors when dataset already exists', async () => {\n const mockClient = createMockClient({\n datasets: {\n create: vi.fn(),\n list: vi.fn().mockResolvedValue([\n {\n aclMode: 'public',\n addonFor: null,\n createdAt: '2023-01-01T00:00:00Z',\n createdByUserId: 'user1',\n datasetProfile: 'default',\n features: [],\n name: 'production',\n tags: [],\n },\n ]),\n },\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['production'])\n\n expect(error?.message).toContain('Dataset \"production\" already exists')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors with invalid visibility flag', async () => {\n const {error} = await testCommand(CreateDatasetCommand, [\n 'my-dataset',\n '--visibility',\n 'invalid',\n ])\n\n expect(error?.message).toContain(\n 'Expected --visibility=invalid to be one of: custom, private, public',\n )\n expect(error?.oclif?.exit).toBe(2)\n })\n\n test('handles dataset creation errors', async () => {\n const mockClient = createMockClient({\n datasets: {\n create: vi.fn().mockRejectedValue(new Error('API Error')),\n list: vi.fn().mockResolvedValue([]),\n },\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(error?.message).toContain('Dataset creation failed: API Error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles fetch project data errors', async () => {\n const mockClient = createMockClient({\n datasets: {\n create: vi.fn(),\n list: vi.fn().mockRejectedValue(new Error('Network error')),\n },\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset-fail'])\n\n expect(error?.message).toContain('Failed to fetch project data: Network error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('prompts for dataset visibility when private datasets available and no flag provided', async () => {\n const mockClient = createMockClient({\n request: vi.fn().mockResolvedValue(['privateDataset']),\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n mockSelect.mockResolvedValue('private')\n\n const {stderr, stdout} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {\n name: 'Public (world readable)',\n value: 'public',\n },\n {\n name: 'Private (Authenticated user or token needed)',\n value: 'private',\n },\n ],\n message: 'Dataset visibility',\n })\n expect(mockClient.datasets.create).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'private',\n })\n expect(stdout).toContain('Dataset created successfully')\n expect(stderr).toContain('Please note that while documents are private')\n })\n\n describe('visibility flag handling', () => {\n test.each([\n {\n expectedAclMode: 'public',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates public dataset when privateDataset feature available',\n visibility: 'public',\n },\n {\n expectedAclMode: 'private',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates private dataset when privateDataset feature available',\n visibility: 'private',\n },\n {\n expectedAclMode: 'custom',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates custom dataset when privateDataset feature available',\n visibility: 'custom',\n },\n {\n expectedAclMode: 'public',\n expectWarning: false,\n hasPrivateFeature: false,\n testName: 'creates public dataset when privateDataset feature not available',\n visibility: 'public',\n },\n {\n expectedAclMode: 'public',\n expectWarning: true,\n hasPrivateFeature: false,\n testName: 'creates public dataset with warning when private requested but not available',\n visibility: 'private',\n },\n {\n expectedAclMode: 'custom',\n expectWarning: false,\n hasPrivateFeature: false,\n testName: 'creates custom dataset when privateDataset feature not available',\n visibility: 'custom',\n },\n ])('$testName', async ({expectedAclMode, expectWarning, hasPrivateFeature, visibility}) => {\n const mockClient = createMockClient({\n request: vi.fn().mockResolvedValue(hasPrivateFeature ? ['privateDataset'] : []),\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {stderr, stdout} = await testCommand(CreateDatasetCommand, [\n 'my-dataset',\n '--visibility',\n visibility,\n ])\n\n expect(mockClient.datasets.create).toHaveBeenCalledWith('my-dataset', {\n aclMode: expectedAclMode,\n })\n expect(stdout).toContain('Dataset created successfully')\n\n if (expectWarning) {\n expect(stderr).toContain('Private datasets are not available for this project')\n }\n })\n })\n\n test('handles client request failure independently from listDatasets', async () => {\n const mockClient = createMockClient({\n datasets: {\n create: vi.fn(),\n list: vi.fn().mockResolvedValue([]),\n },\n request: vi.fn().mockRejectedValue(new Error('Features API error')), // This fails\n })\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(error?.message).toContain('Failed to fetch project data: Features API error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors when no project ID is found', async () => {\n mockGetCliConfig.mockResolvedValueOnce({\n api: undefined,\n } as never)\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'])\n\n expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","input","select","testCommand","afterEach","describe","expect","test","vi","getCliConfig","getProjectCliClient","CreateDatasetCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","projectId","getCliToken","actual","importActual","mockGetProjectCliClient","mocked","mockGetCliConfig","mockInput","mockSelect","createMockClient","overrides","defaultDatasets","create","undefined","list","datasetsOverrides","datasets","request","clearAllMocks","stdout","toMatchInlineSnapshot","mockClient","toHaveBeenCalledWith","aclMode","toContain","message","validate","any","Function","error","oclif","exit","toBe","addonFor","createdAt","createdByUserId","datasetProfile","features","name","tags","mockRejectedValue","Error","stderr","choices","value","each","expectedAclMode","expectWarning","hasPrivateFeature","testName","visibility","mockResolvedValueOnce"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/dataset/__tests__/create.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {input, select} from '@sanity/cli-core/ux'\nimport {createTestClient, mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {PROJECT_FEATURES_API_VERSION} from '../../../services/getProjectFeatures.js'\nimport {CreateDatasetCommand} from '../create.js'\n\nconst mockListDatasets = vi.hoisted(() => vi.fn())\nconst mockCreateDataset = vi.hoisted(() => vi.fn())\nconst testProjectId = vi.hoisted(() => 'test-project')\nconst testToken = vi.hoisted(() => 'test-token')\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n\n const testClient = createTestClient({\n apiVersion: 'v2025-09-16',\n projectId: testProjectId,\n token: testToken,\n })\n\n return {\n ...actual,\n getProjectCliClient: vi.fn().mockResolvedValue({\n datasets: {\n create: mockCreateDataset,\n list: mockListDatasets,\n } as never,\n request: testClient.request,\n }),\n }\n})\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n input: vi.fn(),\n select: vi.fn(),\n }\n})\n\nconst defaultMocks = {\n cliConfig: {api: {projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\nconst mockInput = vi.mocked(input)\nconst mockSelect = vi.mocked(select)\n\ndescribe('#dataset:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create a new dataset within your project\n\n USAGE\n $ sanity dataset create [NAME] [--visibility custom|private|public]\n\n ARGUMENTS\n [NAME] Name of the dataset to create\n\n FLAGS\n --visibility=<option> Set visibility for this dataset (custom/private/public)\n <options: custom|private|public>\n\n DESCRIPTION\n Create a new dataset within your project\n\n EXAMPLES\n Interactively create a dataset\n\n $ sanity dataset create\n\n Create a dataset named \"my-dataset\"\n\n $ sanity dataset create my-dataset\n\n Create a private dataset named \"my-dataset\"\n\n $ sanity dataset create my-dataset --visibility private\n\n \"\n `)\n })\n\n test('creates dataset with provided name', async () => {\n mockListDatasets.mockResolvedValue([])\n\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(200, [])\n mockCreateDataset.mockResolvedValue(undefined as never)\n\n const {stdout} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'public',\n })\n expect(stdout).toContain('Dataset created successfully')\n })\n\n test('prompts for dataset name when not provided', async () => {\n mockListDatasets.mockResolvedValue([])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(200, [])\n mockCreateDataset.mockResolvedValue(undefined as never)\n mockInput.mockResolvedValue('test-dataset')\n\n const {stdout} = await testCommand(CreateDatasetCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(mockInput).toHaveBeenCalledWith({\n message: 'Dataset name:',\n validate: expect.any(Function),\n })\n expect(mockCreateDataset).toHaveBeenCalledWith('test-dataset', {\n aclMode: 'public',\n })\n expect(stdout).toContain('Dataset created successfully')\n })\n\n test('errors when dataset name is invalid', async () => {\n const {error} = await testCommand(CreateDatasetCommand, ['Invalid-Dataset-Name'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('must be all lowercase')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors when dataset already exists', async () => {\n mockListDatasets.mockResolvedValue([\n {\n aclMode: 'public',\n addonFor: null,\n createdAt: '2023-01-01T00:00:00Z',\n createdByUserId: 'user1',\n datasetProfile: 'default',\n features: [],\n name: 'production',\n tags: [],\n },\n ])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(200, [])\n\n const {error} = await testCommand(CreateDatasetCommand, ['production'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset \"production\" already exists')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors with invalid visibility flag', async () => {\n const {error} = await testCommand(\n CreateDatasetCommand,\n ['my-dataset', '--visibility', 'invalid'],\n {mocks: defaultMocks},\n )\n\n expect(error?.message).toContain(\n 'Expected --visibility=invalid to be one of: custom, private, public',\n )\n expect(error?.oclif?.exit).toBe(2)\n })\n\n test('handles dataset creation errors', async () => {\n mockListDatasets.mockResolvedValue([])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(200, [])\n mockCreateDataset.mockRejectedValue(new Error('API Error'))\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset creation failed: API Error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('prompts for dataset visibility when private datasets available and no flag provided', async () => {\n mockListDatasets.mockResolvedValue([])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(200, ['privateDataset'])\n mockCreateDataset.mockResolvedValue(undefined as never)\n mockSelect.mockResolvedValue('private')\n\n const {stderr, stdout} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {\n name: 'Public (world readable)',\n value: 'public',\n },\n {\n name: 'Private (Authenticated user or token needed)',\n value: 'private',\n },\n ],\n message: 'Dataset visibility',\n })\n expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'private',\n })\n expect(stdout).toContain('Dataset created successfully')\n expect(stderr).toContain('Please note that while documents are private')\n })\n\n describe('visibility flag handling', () => {\n test.each([\n {\n expectedAclMode: 'public',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates public dataset when privateDataset feature available',\n visibility: 'public',\n },\n {\n expectedAclMode: 'private',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates private dataset when privateDataset feature available',\n visibility: 'private',\n },\n {\n expectedAclMode: 'custom',\n expectWarning: false,\n hasPrivateFeature: true,\n testName: 'creates custom dataset when privateDataset feature available',\n visibility: 'custom',\n },\n {\n expectedAclMode: 'public',\n expectWarning: false,\n hasPrivateFeature: false,\n testName: 'creates public dataset when privateDataset feature not available',\n visibility: 'public',\n },\n {\n expectedAclMode: 'public',\n expectWarning: true,\n hasPrivateFeature: false,\n testName: 'creates public dataset with warning when private requested but not available',\n visibility: 'private',\n },\n {\n expectedAclMode: 'custom',\n expectWarning: false,\n hasPrivateFeature: false,\n testName: 'creates custom dataset when privateDataset feature not available',\n visibility: 'custom',\n },\n ])('$testName', async ({expectedAclMode, expectWarning, hasPrivateFeature, visibility}) => {\n mockListDatasets.mockResolvedValue([])\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(200, hasPrivateFeature ? ['privateDataset'] : [])\n mockCreateDataset.mockResolvedValue(undefined as never)\n\n const {stderr, stdout} = await testCommand(\n CreateDatasetCommand,\n ['my-dataset', '--visibility', visibility],\n {mocks: defaultMocks},\n )\n\n expect(mockCreateDataset).toHaveBeenCalledWith('my-dataset', {\n aclMode: expectedAclMode,\n })\n expect(stdout).toContain('Dataset created successfully')\n\n if (expectWarning) {\n expect(stderr).toContain('Private datasets are not available for this project')\n }\n })\n })\n\n test('handles client request failure independently from listDatasets', async () => {\n mockApi({\n apiHost: `https://${testProjectId}.api.sanity.io`,\n apiVersion: PROJECT_FEATURES_API_VERSION,\n method: 'get',\n uri: '/features',\n }).reply(500, {error: 'Features API error'})\n\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to fetch project data: Features API error')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('errors when no project ID is found', async () => {\n const {error} = await testCommand(CreateDatasetCommand, ['my-dataset'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: undefined},\n },\n })\n\n expect(error?.message).toContain('sanity.cli.ts does not contain a project identifier')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","input","select","createTestClient","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","PROJECT_FEATURES_API_VERSION","CreateDatasetCommand","mockListDatasets","hoisted","fn","mockCreateDataset","testProjectId","testToken","mock","actual","importActual","testClient","apiVersion","projectId","token","getProjectCliClient","mockResolvedValue","datasets","create","list","request","defaultMocks","cliConfig","api","projectRoot","directory","path","type","mockInput","mocked","mockSelect","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toMatchInlineSnapshot","apiHost","method","uri","reply","undefined","mocks","toHaveBeenCalledWith","aclMode","toContain","message","validate","any","Function","error","oclif","exit","toBe","addonFor","createdAt","createdByUserId","datasetProfile","features","name","tags","mockRejectedValue","Error","stderr","choices","value","each","expectedAclMode","expectWarning","hasPrivateFeature","testName","visibility"],"mappings":"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"}