@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 +1 @@
1
- {"version":3,"sources":["../../../../../src/commands/dataset/visibility/__tests__/get.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../../util/errorMessages.js'\nimport {DatasetVisibilityGetCommand} from '../get.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(),\n}))\n\nvi.mock('../../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock(import('../../../../../../cli-core/src/services/apiClient.js'), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\ndescribe('#dataset:visibility:get', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset visibility get', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Get the visibility of a dataset\n\n USAGE\n $ sanity dataset visibility get DATASET\n\n ARGUMENTS\n DATASET The name of the dataset to get visibility for\n\n DESCRIPTION\n Get the visibility of a dataset\n\n EXAMPLES\n Check the visibility of a dataset\n\n $ sanity dataset visibility get my-dataset\n\n \"\n `)\n })\n\n test('gets dataset visibility successfully', async () => {\n const mockDatasets = [{aclMode: 'private', name: 'my-dataset'}]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockResolvedValue(mockDatasets),\n },\n } as never)\n\n const {stdout} = await testCommand(DatasetVisibilityGetCommand, ['my-dataset'])\n\n expect(stdout).toContain('private')\n })\n\n test('shows error when dataset is not found', async () => {\n const mockDatasets = [{aclMode: 'public', name: 'other-dataset'}]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockResolvedValue(mockDatasets),\n },\n } as never)\n\n const {error} = await testCommand(DatasetVisibilityGetCommand, ['not-found'])\n\n expect(error?.message).toContain('Dataset not found: not-found')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('shows error for invalid dataset name', async () => {\n const invalidDatasetName = 'invalid-dataset-name!'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n const {error} = await testCommand(DatasetVisibilityGetCommand, [invalidDatasetName])\n\n expect(error?.message).toContain('Dataset name must only contain')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('shows error when no project ID is available', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(DatasetVisibilityGetCommand, ['my-dataset'])\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles error when listing datasets', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockRejectedValue(new Error('Network error')),\n },\n } as never)\n\n const {error} = await testCommand(DatasetVisibilityGetCommand, ['my-dataset'])\n\n expect(error?.message).toContain('Failed to list datasets')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DatasetVisibilityGetCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","getCliToken","importOriginal","actual","mockGetCliConfig","mocked","mockGetProjectCliClient","clearAllMocks","stdout","toMatchInlineSnapshot","mockDatasets","aclMode","name","api","projectId","datasets","list","toContain","error","message","oclif","exit","toBe","invalidDatasetName","undefined","mockRejectedValue","Error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/commands/dataset/visibility/__tests__/get.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../../util/errorMessages.js'\nimport {DatasetVisibilityGetCommand} from '../get.js'\n\nconst mockListDatasets = vi.hoisted(() => vi.fn())\n\nvi.mock('@sanity/cli-core', async (importOriginal) => {\n const actual = await importOriginal<typeof import('@sanity/cli-core')>()\n return {\n ...actual,\n getProjectCliClient: vi.fn().mockResolvedValue({\n datasets: {\n list: mockListDatasets,\n } as never,\n }),\n }\n})\n\nconst testProjectId = 'test-project'\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\ndescribe('#dataset:visibility:get', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset visibility get', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Get the visibility of a dataset\n\n USAGE\n $ sanity dataset visibility get DATASET\n\n ARGUMENTS\n DATASET The name of the dataset to get visibility for\n\n DESCRIPTION\n Get the visibility of a dataset\n\n EXAMPLES\n Check the visibility of a dataset\n\n $ sanity dataset visibility get my-dataset\n\n \"\n `)\n })\n\n test('gets dataset visibility successfully', async () => {\n mockListDatasets.mockResolvedValue([{aclMode: 'private', name: 'my-dataset'}] as never)\n\n const {stdout} = await testCommand(DatasetVisibilityGetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('private')\n })\n\n test('shows error when dataset is not found', async () => {\n mockListDatasets.mockResolvedValue([{aclMode: 'public', name: 'other-dataset'}] as never)\n\n const {error} = await testCommand(DatasetVisibilityGetCommand, ['not-found'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset not found: not-found')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('shows error for invalid dataset name', async () => {\n const invalidDatasetName = 'invalid-dataset-name!'\n\n const {error} = await testCommand(DatasetVisibilityGetCommand, [invalidDatasetName], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset name must only contain')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('shows error when no project ID is available', async () => {\n const {error} = await testCommand(DatasetVisibilityGetCommand, ['my-dataset'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles error when listing datasets', async () => {\n mockListDatasets.mockRejectedValue(new Error('Network error'))\n\n const {error} = await testCommand(DatasetVisibilityGetCommand, ['my-dataset'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to list datasets')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DatasetVisibilityGetCommand","mockListDatasets","hoisted","fn","mock","importOriginal","actual","getProjectCliClient","mockResolvedValue","datasets","list","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","clearAllMocks","stdout","toMatchInlineSnapshot","aclMode","name","mocks","toContain","error","message","oclif","exit","toBe","invalidDatasetName","undefined","mockRejectedValue","Error"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,SAAQC,WAAW,QAAO,mBAAkB;AAC5C,SAAQC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAE5D,SAAQC,aAAa,QAAO,oCAAmC;AAC/D,SAAQC,2BAA2B,QAAO,YAAW;AAErD,MAAMC,mBAAmBH,GAAGI,OAAO,CAAC,IAAMJ,GAAGK,EAAE;AAE/CL,GAAGM,IAAI,CAAC,oBAAoB,OAAOC;IACjC,MAAMC,SAAS,MAAMD;IACrB,OAAO;QACL,GAAGC,MAAM;QACTC,qBAAqBT,GAAGK,EAAE,GAAGK,iBAAiB,CAAC;YAC7CC,UAAU;gBACRC,MAAMT;YACR;QACF;IACF;AACF;AAEA,MAAMU,gBAAgB;AAEtB,MAAMC,eAAe;IACnBC,WAAW;QAACC,KAAK;YAACC,WAAWJ;QAAa;IAAC;IAC3CK,aAAa;QACXC,WAAW;QACXC,MAAM;QACNC,MAAM;IACR;IACAC,OAAO;AACT;AAEAzB,SAAS,2BAA2B;IAClCD,UAAU;QACRI,GAAGuB,aAAa;IAClB;IAEAxB,KAAK,gBAAgB;QACnB,MAAM,EAACyB,MAAM,EAAC,GAAG,MAAM9B,WAAW;YAAC;YAA0B;SAAS;QAEtEI,OAAO0B,QAAQC,qBAAqB,CAAC,CAAC;;;;;;;;;;;;;;;;;;IAkBtC,CAAC;IACH;IAEA1B,KAAK,wCAAwC;QAC3CI,iBAAiBO,iBAAiB,CAAC;YAAC;gBAACgB,SAAS;gBAAWC,MAAM;YAAY;SAAE;QAE7E,MAAM,EAACH,MAAM,EAAC,GAAG,MAAM7B,YAAYO,6BAA6B;YAAC;SAAa,EAAE;YAC9E0B,OAAOd;QACT;QAEAhB,OAAO0B,QAAQK,SAAS,CAAC;IAC3B;IAEA9B,KAAK,yCAAyC;QAC5CI,iBAAiBO,iBAAiB,CAAC;YAAC;gBAACgB,SAAS;gBAAUC,MAAM;YAAe;SAAE;QAE/E,MAAM,EAACG,KAAK,EAAC,GAAG,MAAMnC,YAAYO,6BAA6B;YAAC;SAAY,EAAE;YAC5E0B,OAAOd;QACT;QAEAhB,OAAOgC,OAAOC,SAASF,SAAS,CAAC;QACjC/B,OAAOgC,OAAOE,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEAnC,KAAK,wCAAwC;QAC3C,MAAMoC,qBAAqB;QAE3B,MAAM,EAACL,KAAK,EAAC,GAAG,MAAMnC,YAAYO,6BAA6B;YAACiC;SAAmB,EAAE;YACnFP,OAAOd;QACT;QAEAhB,OAAOgC,OAAOC,SAASF,SAAS,CAAC;QACjC/B,OAAOgC,OAAOE,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEAnC,KAAK,+CAA+C;QAClD,MAAM,EAAC+B,KAAK,EAAC,GAAG,MAAMnC,YAAYO,6BAA6B;YAAC;SAAa,EAAE;YAC7E0B,OAAO;gBACL,GAAGd,YAAY;gBACfC,WAAW;oBAACC,KAAK;wBAACC,WAAWmB;oBAAS;gBAAC;YACzC;QACF;QAEAtC,OAAOgC,OAAOC,SAASF,SAAS,CAAC5B;QACjCH,OAAOgC,OAAOE,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEAnC,KAAK,uCAAuC;QAC1CI,iBAAiBkC,iBAAiB,CAAC,IAAIC,MAAM;QAE7C,MAAM,EAACR,KAAK,EAAC,GAAG,MAAMnC,YAAYO,6BAA6B;YAAC;SAAa,EAAE;YAC7E0B,OAAOd;QACT;QAEAhB,OAAOgC,OAAOC,SAASF,SAAS,CAAC;QACjC/B,OAAOgC,OAAOE,OAAOC,MAAMC,IAAI,CAAC;IAClC;AACF"}
@@ -1,29 +1,37 @@
1
1
  import { runCommand } from '@oclif/test';
2
- import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
3
2
  import { testCommand } from '@sanity/cli-test';
4
3
  import { afterEach, describe, expect, test, vi } from 'vitest';
5
4
  import { NO_PROJECT_ID } from '../../../../util/errorMessages.js';
6
5
  import { DatasetVisibilitySetCommand } from '../set.js';
7
- vi.mock('../../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
8
- findProjectRoot: vi.fn().mockResolvedValue({
9
- directory: '/test/path',
10
- root: '/test/path',
11
- type: 'studio'
6
+ const mockListDatasets = vi.hoisted(()=>vi.fn());
7
+ const mockEditDatasetAcl = vi.hoisted(()=>vi.fn());
8
+ vi.mock('@sanity/cli-core', async (importOriginal)=>{
9
+ const actual = await importOriginal();
10
+ return {
11
+ ...actual,
12
+ getProjectCliClient: vi.fn().mockResolvedValue({
13
+ datasets: {
14
+ edit: mockEditDatasetAcl,
15
+ list: mockListDatasets
16
+ }
12
17
  })
13
- }));
14
- vi.mock('../../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
15
- getCliConfig: vi.fn()
16
- }));
17
- vi.mock('../../../../../../cli-core/src/services/getCliToken.js', ()=>({
18
- getCliToken: vi.fn().mockResolvedValue('test-token')
19
- }));
20
- vi.mock('../../../../../../cli-core/src/services/apiClient.js', ()=>({
21
- getProjectCliClient: vi.fn()
22
- }));
23
- const mockGetCliConfig = vi.mocked(getCliConfig);
24
- const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
18
+ };
19
+ });
20
+ const testProjectId = 'test-project';
21
+ const defaultMocks = {
22
+ cliConfig: {
23
+ api: {
24
+ projectId: testProjectId
25
+ }
26
+ },
27
+ projectRoot: {
28
+ directory: '/test/path',
29
+ path: '/test/path/sanity.config.ts',
30
+ type: 'studio'
31
+ },
32
+ token: 'test-token'
33
+ };
25
34
  describe('#dataset:visibility:set', ()=>{
26
- const mockEdit = vi.fn();
27
35
  afterEach(()=>{
28
36
  vi.clearAllMocks();
29
37
  });
@@ -58,185 +66,130 @@ describe('#dataset:visibility:set', ()=>{
58
66
  `);
59
67
  });
60
68
  test('sets dataset visibility to public successfully', async ()=>{
61
- const mockDatasets = [
69
+ mockListDatasets.mockResolvedValue([
62
70
  {
63
71
  aclMode: 'private',
64
72
  name: 'my-dataset'
65
73
  }
66
- ];
67
- mockGetCliConfig.mockResolvedValue({
68
- api: {
69
- projectId: 'test-project'
70
- }
71
- });
72
- mockGetProjectCliClient.mockResolvedValue({
73
- datasets: {
74
- edit: mockEdit.mockResolvedValue({}),
75
- list: vi.fn().mockResolvedValue(mockDatasets)
76
- }
77
- });
74
+ ]);
75
+ mockEditDatasetAcl.mockResolvedValue(undefined);
78
76
  const { stdout } = await testCommand(DatasetVisibilitySetCommand, [
79
77
  'my-dataset',
80
78
  'public'
81
- ]);
79
+ ], {
80
+ mocks: defaultMocks
81
+ });
82
82
  expect(stdout).toContain('Dataset visibility changed');
83
- expect(mockEdit).toHaveBeenCalledWith('my-dataset', {
83
+ expect(mockEditDatasetAcl).toHaveBeenCalledWith('my-dataset', {
84
84
  aclMode: 'public'
85
85
  });
86
86
  });
87
87
  test('sets dataset visibility to private successfully with warning', async ()=>{
88
- const mockDatasets = [
88
+ mockListDatasets.mockResolvedValue([
89
89
  {
90
90
  aclMode: 'public',
91
91
  name: 'my-dataset'
92
92
  }
93
- ];
94
- mockGetCliConfig.mockResolvedValue({
95
- api: {
96
- projectId: 'test-project'
97
- }
98
- });
99
- // Mock the client used by listDatasets action
100
- mockGetProjectCliClient.mockResolvedValue({
101
- datasets: {
102
- edit: mockEdit.mockResolvedValue({}),
103
- list: vi.fn().mockResolvedValue(mockDatasets)
104
- }
105
- });
93
+ ]);
94
+ mockEditDatasetAcl.mockResolvedValue(undefined);
106
95
  const { stdout } = await testCommand(DatasetVisibilitySetCommand, [
107
96
  'my-dataset',
108
97
  'private'
109
- ]);
98
+ ], {
99
+ mocks: defaultMocks
100
+ });
110
101
  expect(stdout).toContain('Please note that while documents are private, assets (files and images) are still public');
111
102
  expect(stdout).toContain('Dataset visibility changed');
112
- expect(mockEdit).toHaveBeenCalledWith('my-dataset', {
103
+ expect(mockEditDatasetAcl).toHaveBeenCalledWith('my-dataset', {
113
104
  aclMode: 'private'
114
105
  });
115
106
  });
116
107
  test('shows message when dataset is already in the specified mode', async ()=>{
117
- const mockDatasets = [
108
+ mockListDatasets.mockResolvedValue([
118
109
  {
119
110
  aclMode: 'private',
120
111
  name: 'my-dataset'
121
112
  }
122
- ];
123
- mockGetCliConfig.mockResolvedValue({
124
- api: {
125
- projectId: 'test-project'
126
- }
127
- });
128
- // Mock the client used by listDatasets action
129
- mockGetProjectCliClient.mockResolvedValue({
130
- datasets: {
131
- edit: mockEdit,
132
- list: vi.fn().mockResolvedValue(mockDatasets)
133
- }
134
- });
113
+ ]);
135
114
  const { stdout } = await testCommand(DatasetVisibilitySetCommand, [
136
115
  'my-dataset',
137
116
  'private'
138
- ]);
117
+ ], {
118
+ mocks: defaultMocks
119
+ });
139
120
  expect(stdout).toContain('Dataset already in "private" mode');
140
- expect(mockEdit).not.toHaveBeenCalled();
121
+ expect(mockEditDatasetAcl).not.toHaveBeenCalled();
141
122
  });
142
123
  test('shows error when dataset is not found', async ()=>{
143
- const mockDatasets = [
124
+ mockListDatasets.mockResolvedValue([
144
125
  {
145
126
  aclMode: 'public',
146
127
  name: 'other-dataset'
147
128
  }
148
- ];
149
- mockGetCliConfig.mockResolvedValue({
150
- api: {
151
- projectId: 'test-project'
152
- }
153
- });
154
- // Mock the client used by listDatasets action
155
- mockGetProjectCliClient.mockResolvedValue({
156
- datasets: {
157
- edit: mockEdit,
158
- list: vi.fn().mockResolvedValue(mockDatasets)
159
- }
160
- });
129
+ ]);
161
130
  const { error } = await testCommand(DatasetVisibilitySetCommand, [
162
131
  'not-found',
163
132
  'private'
164
- ]);
133
+ ], {
134
+ mocks: defaultMocks
135
+ });
165
136
  expect(error?.message).toContain('Dataset "not-found" not found');
166
- expect(mockEdit).not.toHaveBeenCalled();
137
+ expect(mockEditDatasetAcl).not.toHaveBeenCalled();
167
138
  expect(error?.oclif?.exit).toBe(1);
168
139
  });
169
140
  test('shows error for invalid dataset name', async ()=>{
170
141
  const invalidDatasetName = 'invalid-dataset-name!';
171
- mockGetCliConfig.mockResolvedValue({
172
- api: {
173
- projectId: 'test-project'
174
- }
175
- });
176
142
  const { error } = await testCommand(DatasetVisibilitySetCommand, [
177
143
  invalidDatasetName,
178
144
  'private'
179
- ]);
145
+ ], {
146
+ mocks: defaultMocks
147
+ });
180
148
  expect(error?.message).toContain('Dataset name must only contain');
181
149
  expect(error?.oclif?.exit).toBe(1);
182
150
  });
183
151
  test('handles error when listing datasets fails', async ()=>{
184
- const listError = new Error('Failed to fetch datasets');
185
- mockGetCliConfig.mockResolvedValue({
186
- api: {
187
- projectId: 'test-project'
188
- }
189
- });
190
- // Mock the client used by listDatasets action to throw an error
191
- mockGetProjectCliClient.mockResolvedValue({
192
- datasets: {
193
- edit: mockEdit,
194
- list: vi.fn().mockRejectedValue(listError)
195
- }
196
- });
152
+ mockListDatasets.mockRejectedValue(new Error('Failed to fetch datasets'));
197
153
  const { error } = await testCommand(DatasetVisibilitySetCommand, [
198
154
  'my-dataset',
199
155
  'private'
200
- ]);
156
+ ], {
157
+ mocks: defaultMocks
158
+ });
201
159
  expect(error?.message).toContain('Failed to list datasets: Failed to fetch datasets');
202
160
  expect(error?.oclif?.exit).toBe(1);
203
161
  });
204
162
  test('handles error when editing dataset fails', async ()=>{
205
- const mockDatasets = [
163
+ mockListDatasets.mockResolvedValue([
206
164
  {
207
165
  aclMode: 'public',
208
166
  name: 'my-dataset'
209
167
  }
210
- ];
211
- const editError = new Error('Failed to update dataset');
212
- mockGetCliConfig.mockResolvedValue({
213
- api: {
214
- projectId: 'test-project'
215
- }
216
- });
217
- mockGetProjectCliClient.mockResolvedValue({
218
- datasets: {
219
- edit: mockEdit.mockRejectedValue(editError),
220
- list: vi.fn().mockResolvedValue(mockDatasets)
221
- }
222
- });
168
+ ]);
169
+ mockEditDatasetAcl.mockRejectedValue(new Error('Failed to update dataset'));
223
170
  const { error } = await testCommand(DatasetVisibilitySetCommand, [
224
171
  'my-dataset',
225
172
  'private'
226
- ]);
173
+ ], {
174
+ mocks: defaultMocks
175
+ });
227
176
  expect(error?.message).toContain('Failed to edit dataset: Failed to update dataset');
228
177
  expect(error?.oclif?.exit).toBe(1);
229
178
  });
230
179
  test('shows error when no project ID is available', async ()=>{
231
- mockGetCliConfig.mockResolvedValue({
232
- api: {
233
- projectId: undefined
234
- }
235
- });
236
180
  const { error } = await testCommand(DatasetVisibilitySetCommand, [
237
181
  'my-dataset',
238
182
  'private'
239
- ]);
183
+ ], {
184
+ mocks: {
185
+ ...defaultMocks,
186
+ cliConfig: {
187
+ api: {
188
+ projectId: undefined
189
+ }
190
+ }
191
+ }
192
+ });
240
193
  expect(error?.message).toContain(NO_PROJECT_ID);
241
194
  expect(error?.oclif?.exit).toBe(1);
242
195
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/commands/dataset/visibility/__tests__/set.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../../util/errorMessages.js'\nimport {DatasetVisibilitySetCommand} from '../set.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(),\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\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\ndescribe('#dataset:visibility:set', () => {\n const mockEdit = vi.fn()\n\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset visibility set', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Set the visibility of a dataset\n\n USAGE\n $ sanity dataset visibility set DATASET MODE\n\n ARGUMENTS\n DATASET The name of the dataset to set visibility for\n MODE (public|private) The visibility mode to set\n\n DESCRIPTION\n Set the visibility of a dataset\n\n EXAMPLES\n Make a dataset private\n\n $ sanity dataset visibility set my-dataset private\n\n Make a dataset public\n\n $ sanity dataset visibility set my-dataset public\n\n \"\n `)\n })\n\n test('sets dataset visibility to public successfully', async () => {\n const mockDatasets = [{aclMode: 'private', name: 'my-dataset'}]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n edit: mockEdit.mockResolvedValue({}),\n list: vi.fn().mockResolvedValue(mockDatasets),\n },\n } as never)\n\n const {stdout} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'public'])\n\n expect(stdout).toContain('Dataset visibility changed')\n expect(mockEdit).toHaveBeenCalledWith('my-dataset', {aclMode: 'public'})\n })\n\n test('sets dataset visibility to private successfully with warning', async () => {\n const mockDatasets = [{aclMode: 'public', name: 'my-dataset'}]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n // Mock the client used by listDatasets action\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n edit: mockEdit.mockResolvedValue({}),\n list: vi.fn().mockResolvedValue(mockDatasets),\n },\n } as never)\n\n const {stdout} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'])\n\n expect(stdout).toContain(\n 'Please note that while documents are private, assets (files and images) are still public',\n )\n expect(stdout).toContain('Dataset visibility changed')\n expect(mockEdit).toHaveBeenCalledWith('my-dataset', {aclMode: 'private'})\n })\n\n test('shows message when dataset is already in the specified mode', async () => {\n const mockDatasets = [{aclMode: 'private', name: 'my-dataset'}]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n // Mock the client used by listDatasets action\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n edit: mockEdit,\n list: vi.fn().mockResolvedValue(mockDatasets),\n },\n } as never)\n\n const {stdout} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'])\n\n expect(stdout).toContain('Dataset already in \"private\" mode')\n expect(mockEdit).not.toHaveBeenCalled()\n })\n\n test('shows error when dataset is not found', async () => {\n const mockDatasets = [{aclMode: 'public', name: 'other-dataset'}]\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n // Mock the client used by listDatasets action\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n edit: mockEdit,\n list: vi.fn().mockResolvedValue(mockDatasets),\n },\n } as never)\n\n const {error} = await testCommand(DatasetVisibilitySetCommand, ['not-found', 'private'])\n\n expect(error?.message).toContain('Dataset \"not-found\" not found')\n expect(mockEdit).not.toHaveBeenCalled()\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('shows error for invalid dataset name', async () => {\n const invalidDatasetName = 'invalid-dataset-name!'\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n const {error} = await testCommand(DatasetVisibilitySetCommand, [invalidDatasetName, 'private'])\n\n expect(error?.message).toContain('Dataset name must only contain')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles error when listing datasets fails', async () => {\n const listError = new Error('Failed to fetch datasets')\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n // Mock the client used by listDatasets action to throw an error\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n edit: mockEdit,\n list: vi.fn().mockRejectedValue(listError),\n },\n } as never)\n\n const {error} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'])\n\n expect(error?.message).toContain('Failed to list datasets: Failed to fetch datasets')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles error when editing dataset fails', async () => {\n const mockDatasets = [{aclMode: 'public', name: 'my-dataset'}]\n const editError = new Error('Failed to update dataset')\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n edit: mockEdit.mockRejectedValue(editError),\n list: vi.fn().mockResolvedValue(mockDatasets),\n },\n } as never)\n\n const {error} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'])\n\n expect(error?.message).toContain('Failed to edit dataset: Failed to update dataset')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('shows error when no project ID is available', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'])\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DatasetVisibilitySetCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","getCliToken","mockGetCliConfig","mocked","mockGetProjectCliClient","mockEdit","clearAllMocks","stdout","toMatchInlineSnapshot","mockDatasets","aclMode","name","api","projectId","datasets","edit","list","toContain","toHaveBeenCalledWith","not","toHaveBeenCalled","error","message","oclif","exit","toBe","invalidDatasetName","listError","Error","mockRejectedValue","editError","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/commands/dataset/visibility/__tests__/set.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../../util/errorMessages.js'\nimport {DatasetVisibilitySetCommand} from '../set.js'\n\nconst mockListDatasets = vi.hoisted(() => vi.fn())\nconst mockEditDatasetAcl = vi.hoisted(() => vi.fn())\n\nvi.mock('@sanity/cli-core', async (importOriginal) => {\n const actual = await importOriginal<typeof import('@sanity/cli-core')>()\n return {\n ...actual,\n getProjectCliClient: vi.fn().mockResolvedValue({\n datasets: {\n edit: mockEditDatasetAcl,\n list: mockListDatasets,\n } as never,\n }),\n }\n})\n\nconst testProjectId = 'test-project'\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\ndescribe('#dataset:visibility:set', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['dataset visibility set', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Set the visibility of a dataset\n\n USAGE\n $ sanity dataset visibility set DATASET MODE\n\n ARGUMENTS\n DATASET The name of the dataset to set visibility for\n MODE (public|private) The visibility mode to set\n\n DESCRIPTION\n Set the visibility of a dataset\n\n EXAMPLES\n Make a dataset private\n\n $ sanity dataset visibility set my-dataset private\n\n Make a dataset public\n\n $ sanity dataset visibility set my-dataset public\n\n \"\n `)\n })\n\n test('sets dataset visibility to public successfully', async () => {\n mockListDatasets.mockResolvedValue([{aclMode: 'private', name: 'my-dataset'}] as never)\n mockEditDatasetAcl.mockResolvedValue(undefined as never)\n\n const {stdout} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'public'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Dataset visibility changed')\n expect(mockEditDatasetAcl).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'public',\n })\n })\n\n test('sets dataset visibility to private successfully with warning', async () => {\n mockListDatasets.mockResolvedValue([{aclMode: 'public', name: 'my-dataset'}] as never)\n mockEditDatasetAcl.mockResolvedValue(undefined as never)\n\n const {stdout} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain(\n 'Please note that while documents are private, assets (files and images) are still public',\n )\n expect(stdout).toContain('Dataset visibility changed')\n expect(mockEditDatasetAcl).toHaveBeenCalledWith('my-dataset', {\n aclMode: 'private',\n })\n })\n\n test('shows message when dataset is already in the specified mode', async () => {\n mockListDatasets.mockResolvedValue([{aclMode: 'private', name: 'my-dataset'}] as never)\n\n const {stdout} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Dataset already in \"private\" mode')\n expect(mockEditDatasetAcl).not.toHaveBeenCalled()\n })\n\n test('shows error when dataset is not found', async () => {\n mockListDatasets.mockResolvedValue([{aclMode: 'public', name: 'other-dataset'}] as never)\n\n const {error} = await testCommand(DatasetVisibilitySetCommand, ['not-found', 'private'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Dataset \"not-found\" not found')\n expect(mockEditDatasetAcl).not.toHaveBeenCalled()\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('shows error for invalid dataset name', async () => {\n const invalidDatasetName = 'invalid-dataset-name!'\n\n const {error} = await testCommand(\n DatasetVisibilitySetCommand,\n [invalidDatasetName, 'private'],\n {\n mocks: defaultMocks,\n },\n )\n\n expect(error?.message).toContain('Dataset name must only contain')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles error when listing datasets fails', async () => {\n mockListDatasets.mockRejectedValue(new Error('Failed to fetch datasets'))\n\n const {error} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to list datasets: Failed to fetch datasets')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles error when editing dataset fails', async () => {\n mockListDatasets.mockResolvedValue([{aclMode: 'public', name: 'my-dataset'}] as never)\n mockEditDatasetAcl.mockRejectedValue(new Error('Failed to update dataset'))\n\n const {error} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'], {\n mocks: defaultMocks,\n })\n\n expect(error?.message).toContain('Failed to edit dataset: Failed to update dataset')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('shows error when no project ID is available', async () => {\n const {error} = await testCommand(DatasetVisibilitySetCommand, ['my-dataset', 'private'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DatasetVisibilitySetCommand","mockListDatasets","hoisted","fn","mockEditDatasetAcl","mock","importOriginal","actual","getProjectCliClient","mockResolvedValue","datasets","edit","list","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","clearAllMocks","stdout","toMatchInlineSnapshot","aclMode","name","undefined","mocks","toContain","toHaveBeenCalledWith","not","toHaveBeenCalled","error","message","oclif","exit","toBe","invalidDatasetName","mockRejectedValue","Error"],"mappings":"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"}
@@ -43,7 +43,6 @@ export class DevCommand extends SanityCommand {
43
43
  }
44
44
  try {
45
45
  const result = await devAction({
46
- apiClient: this.getGlobalApiClient,
47
46
  cliConfig,
48
47
  flags,
49
48
  isApp,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/dev.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {devAction} from '../actions/dev/devAction.js'\nimport {devDebug} from '../actions/dev/devDebug.js'\nimport {determineIsApp} from '../util/determineIsApp.js'\n\nexport class DevCommand extends SanityCommand<typeof DevCommand> {\n static override description =\n 'Starts a local development server for Sanity Studio with live reloading'\n\n static override examples = [\n '<%= config.bin %> <%= command.id %> --host=0.0.0.0',\n '<%= config.bin %> <%= command.id %> --port=1942',\n '<%= config.bin %> <%= command.id %> --load-in-dashboard',\n ]\n\n static override flags = {\n 'auto-updates': Flags.boolean({\n allowNo: true,\n description: 'Automatically update Sanity Studio dependencies.',\n }),\n host: Flags.string({\n default: 'localhost',\n description: 'The local network interface at which to listen.',\n }),\n 'load-in-dashboard': Flags.boolean({\n allowNo: true,\n description: 'Load the app/studio in the Sanity dashboard.',\n }),\n port: Flags.string({\n default: '3333',\n description: 'TCP port to start server on.',\n }),\n }\n\n public async run(): Promise<{close?: () => Promise<void>}> {\n const {flags} = await this.parse(DevCommand)\n\n const workDir = (await this.getProjectRoot()).directory\n const cliConfig = await this.getCliConfig()\n const isApp = determineIsApp(cliConfig)\n\n // load-in-dashboard is defaulted to true for apps.\n if (isApp && flags['load-in-dashboard'] === undefined) {\n flags['load-in-dashboard'] = true\n } else if (flags['load-in-dashboard'] === undefined) {\n // For non-apps, load-in-dashboard is defaulted to false.\n flags['load-in-dashboard'] = false\n }\n\n try {\n const result = await devAction({\n apiClient: this.getGlobalApiClient,\n cliConfig,\n flags,\n isApp,\n output: this.output,\n workDir,\n })\n return result\n } catch (error) {\n devDebug(`Failed to start dev server`, error)\n this.output.error(chalk.red.bgBlack(`Failed to start dev server: ${error.message}`), {\n exit: 1,\n })\n }\n }\n}\n"],"names":["Flags","SanityCommand","chalk","devAction","devDebug","determineIsApp","DevCommand","description","examples","flags","boolean","allowNo","host","string","default","port","run","parse","workDir","getProjectRoot","directory","cliConfig","getCliConfig","isApp","undefined","result","apiClient","getGlobalApiClient","output","error","red","bgBlack","message","exit"],"mappings":"AAAA,SAAQA,KAAK,QAAO,cAAa;AACjC,SAAQC,aAAa,QAAO,mBAAkB;AAC9C,SAAQC,KAAK,QAAO,sBAAqB;AAEzC,SAAQC,SAAS,QAAO,8BAA6B;AACrD,SAAQC,QAAQ,QAAO,6BAA4B;AACnD,SAAQC,cAAc,QAAO,4BAA2B;AAExD,OAAO,MAAMC,mBAAmBL;IAC9B,OAAgBM,cACd,0EAAyE;IAE3E,OAAgBC,WAAW;QACzB;QACA;QACA;KACD,CAAA;IAED,OAAgBC,QAAQ;QACtB,gBAAgBT,MAAMU,OAAO,CAAC;YAC5BC,SAAS;YACTJ,aAAa;QACf;QACAK,MAAMZ,MAAMa,MAAM,CAAC;YACjBC,SAAS;YACTP,aAAa;QACf;QACA,qBAAqBP,MAAMU,OAAO,CAAC;YACjCC,SAAS;YACTJ,aAAa;QACf;QACAQ,MAAMf,MAAMa,MAAM,CAAC;YACjBC,SAAS;YACTP,aAAa;QACf;IACF,EAAC;IAED,MAAaS,MAA8C;QACzD,MAAM,EAACP,KAAK,EAAC,GAAG,MAAM,IAAI,CAACQ,KAAK,CAACX;QAEjC,MAAMY,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGC,SAAS;QACvD,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,MAAMC,QAAQlB,eAAegB;QAE7B,mDAAmD;QACnD,IAAIE,SAASd,KAAK,CAAC,oBAAoB,KAAKe,WAAW;YACrDf,KAAK,CAAC,oBAAoB,GAAG;QAC/B,OAAO,IAAIA,KAAK,CAAC,oBAAoB,KAAKe,WAAW;YACnD,yDAAyD;YACzDf,KAAK,CAAC,oBAAoB,GAAG;QAC/B;QAEA,IAAI;YACF,MAAMgB,SAAS,MAAMtB,UAAU;gBAC7BuB,WAAW,IAAI,CAACC,kBAAkB;gBAClCN;gBACAZ;gBACAc;gBACAK,QAAQ,IAAI,CAACA,MAAM;gBACnBV;YACF;YACA,OAAOO;QACT,EAAE,OAAOI,OAAO;YACdzB,SAAS,CAAC,0BAA0B,CAAC,EAAEyB;YACvC,IAAI,CAACD,MAAM,CAACC,KAAK,CAAC3B,MAAM4B,GAAG,CAACC,OAAO,CAAC,CAAC,4BAA4B,EAAEF,MAAMG,OAAO,EAAE,GAAG;gBACnFC,MAAM;YACR;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/commands/dev.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {devAction} from '../actions/dev/devAction.js'\nimport {devDebug} from '../actions/dev/devDebug.js'\nimport {determineIsApp} from '../util/determineIsApp.js'\n\nexport class DevCommand extends SanityCommand<typeof DevCommand> {\n static override description =\n 'Starts a local development server for Sanity Studio with live reloading'\n\n static override examples = [\n '<%= config.bin %> <%= command.id %> --host=0.0.0.0',\n '<%= config.bin %> <%= command.id %> --port=1942',\n '<%= config.bin %> <%= command.id %> --load-in-dashboard',\n ]\n\n static override flags = {\n 'auto-updates': Flags.boolean({\n allowNo: true,\n description: 'Automatically update Sanity Studio dependencies.',\n }),\n host: Flags.string({\n default: 'localhost',\n description: 'The local network interface at which to listen.',\n }),\n 'load-in-dashboard': Flags.boolean({\n allowNo: true,\n description: 'Load the app/studio in the Sanity dashboard.',\n }),\n port: Flags.string({\n default: '3333',\n description: 'TCP port to start server on.',\n }),\n }\n\n public async run(): Promise<{close?: () => Promise<void>}> {\n const {flags} = await this.parse(DevCommand)\n\n const workDir = (await this.getProjectRoot()).directory\n const cliConfig = await this.getCliConfig()\n const isApp = determineIsApp(cliConfig)\n\n // load-in-dashboard is defaulted to true for apps.\n if (isApp && flags['load-in-dashboard'] === undefined) {\n flags['load-in-dashboard'] = true\n } else if (flags['load-in-dashboard'] === undefined) {\n // For non-apps, load-in-dashboard is defaulted to false.\n flags['load-in-dashboard'] = false\n }\n\n try {\n const result = await devAction({\n cliConfig,\n flags,\n isApp,\n output: this.output,\n workDir,\n })\n return result\n } catch (error) {\n devDebug(`Failed to start dev server`, error)\n this.output.error(chalk.red.bgBlack(`Failed to start dev server: ${error.message}`), {\n exit: 1,\n })\n }\n }\n}\n"],"names":["Flags","SanityCommand","chalk","devAction","devDebug","determineIsApp","DevCommand","description","examples","flags","boolean","allowNo","host","string","default","port","run","parse","workDir","getProjectRoot","directory","cliConfig","getCliConfig","isApp","undefined","result","output","error","red","bgBlack","message","exit"],"mappings":"AAAA,SAAQA,KAAK,QAAO,cAAa;AACjC,SAAQC,aAAa,QAAO,mBAAkB;AAC9C,SAAQC,KAAK,QAAO,sBAAqB;AAEzC,SAAQC,SAAS,QAAO,8BAA6B;AACrD,SAAQC,QAAQ,QAAO,6BAA4B;AACnD,SAAQC,cAAc,QAAO,4BAA2B;AAExD,OAAO,MAAMC,mBAAmBL;IAC9B,OAAgBM,cACd,0EAAyE;IAE3E,OAAgBC,WAAW;QACzB;QACA;QACA;KACD,CAAA;IAED,OAAgBC,QAAQ;QACtB,gBAAgBT,MAAMU,OAAO,CAAC;YAC5BC,SAAS;YACTJ,aAAa;QACf;QACAK,MAAMZ,MAAMa,MAAM,CAAC;YACjBC,SAAS;YACTP,aAAa;QACf;QACA,qBAAqBP,MAAMU,OAAO,CAAC;YACjCC,SAAS;YACTJ,aAAa;QACf;QACAQ,MAAMf,MAAMa,MAAM,CAAC;YACjBC,SAAS;YACTP,aAAa;QACf;IACF,EAAC;IAED,MAAaS,MAA8C;QACzD,MAAM,EAACP,KAAK,EAAC,GAAG,MAAM,IAAI,CAACQ,KAAK,CAACX;QAEjC,MAAMY,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGC,SAAS;QACvD,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,MAAMC,QAAQlB,eAAegB;QAE7B,mDAAmD;QACnD,IAAIE,SAASd,KAAK,CAAC,oBAAoB,KAAKe,WAAW;YACrDf,KAAK,CAAC,oBAAoB,GAAG;QAC/B,OAAO,IAAIA,KAAK,CAAC,oBAAoB,KAAKe,WAAW;YACnD,yDAAyD;YACzDf,KAAK,CAAC,oBAAoB,GAAG;QAC/B;QAEA,IAAI;YACF,MAAMgB,SAAS,MAAMtB,UAAU;gBAC7BkB;gBACAZ;gBACAc;gBACAG,QAAQ,IAAI,CAACA,MAAM;gBACnBR;YACF;YACA,OAAOO;QACT,EAAE,OAAOE,OAAO;YACdvB,SAAS,CAAC,0BAA0B,CAAC,EAAEuB;YACvC,IAAI,CAACD,MAAM,CAACC,KAAK,CAACzB,MAAM0B,GAAG,CAACC,OAAO,CAAC,CAAC,4BAA4B,EAAEF,MAAMG,OAAO,EAAE,GAAG;gBACnFC,MAAM;YACR;QACF;IACF;AACF"}
@@ -1,5 +1,4 @@
1
1
  import { runCommand } from '@oclif/test';
2
- import { isInteractive } from '@sanity/cli-core';
3
2
  import { select } from '@sanity/cli-core/ux';
4
3
  import { testCommand } from '@sanity/cli-test';
5
4
  import nock from 'nock';
@@ -12,13 +11,15 @@ vi.mock('@sanity/cli-core/ux', async ()=>{
12
11
  select: vi.fn()
13
12
  };
14
13
  });
15
- vi.mock('../../../../../cli-core/src/util/isInteractive.js', async ()=>{
14
+ const mockedIsInteractive = vi.hoisted(()=>vi.fn());
15
+ vi.mock('@sanity/cli-core', async ()=>{
16
+ const actual = await vi.importActual('@sanity/cli-core');
16
17
  return {
17
- isInteractive: vi.fn()
18
+ ...actual,
19
+ isInteractive: mockedIsInteractive
18
20
  };
19
21
  });
20
22
  const mockedSelect = vi.mocked(select);
21
- const mockedIsInteractive = vi.mocked(isInteractive);
22
23
  afterEach(()=>{
23
24
  const pending = nock.pendingMocks();
24
25
  nock.cleanAll();
@@ -179,7 +180,6 @@ describe('#docs:search', ()=>{
179
180
  expect(stdout).not.toContain('Understanding Sanity schemas');
180
181
  });
181
182
  test('shows usage hints in non-interactive mode', async ()=>{
182
- mockedIsInteractive.mockReturnValue(false);
183
183
  const searchResponse = [
184
184
  {
185
185
  description: 'Learn how to install Sanity Studio',
@@ -190,6 +190,7 @@ describe('#docs:search', ()=>{
190
190
  nock('https://www.sanity.io').get('/docs/api/search/semantic').query({
191
191
  query: 'studio'
192
192
  }).reply(200, searchResponse);
193
+ mockedIsInteractive.mockReturnValue(false);
193
194
  const { stdout } = await testCommand(DocsSearchCommand, [
194
195
  'studio'
195
196
  ]);
@@ -208,7 +209,6 @@ describe('#docs:search', ()=>{
208
209
  expect(error.oclif?.exit).toBe(1);
209
210
  });
210
211
  test('handles interactive mode article selection', async ()=>{
211
- mockedIsInteractive.mockReturnValue(true);
212
212
  mockedSelect.mockResolvedValue(0);
213
213
  const searchResponse = [
214
214
  {
@@ -221,6 +221,7 @@ describe('#docs:search', ()=>{
221
221
  query: 'studio'
222
222
  }).reply(200, searchResponse);
223
223
  nock('https://www.sanity.io').get('/docs/studio/installation.md').reply(200, '# Studio Installation\n\nThis is how you install the studio.');
224
+ mockedIsInteractive.mockReturnValue(true);
224
225
  const { stdout } = await testCommand(DocsSearchCommand, [
225
226
  'studio'
226
227
  ]);
@@ -230,7 +231,6 @@ describe('#docs:search', ()=>{
230
231
  expect(stdout).toContain('This is how you install the studio.');
231
232
  });
232
233
  test('handles interactive mode exit selection', async ()=>{
233
- mockedIsInteractive.mockReturnValue(true);
234
234
  mockedSelect.mockResolvedValue(-1); // User selects exit option
235
235
  const searchResponse = [
236
236
  {
@@ -242,6 +242,7 @@ describe('#docs:search', ()=>{
242
242
  nock('https://www.sanity.io').get('/docs/api/search/semantic').query({
243
243
  query: 'studio'
244
244
  }).reply(200, searchResponse);
245
+ mockedIsInteractive.mockReturnValue(true);
245
246
  const { stdout } = await testCommand(DocsSearchCommand, [
246
247
  'studio'
247
248
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/docs/__tests__/search.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {isInteractive} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {DocsSearchCommand} from '../search.js'\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 select: vi.fn(),\n }\n})\n\nvi.mock('../../../../../cli-core/src/util/isInteractive.js', async () => {\n return {\n isInteractive: vi.fn(),\n }\n})\n\nconst mockedSelect = vi.mocked(select)\nconst mockedIsInteractive = vi.mocked(isInteractive)\n\nafterEach(() => {\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n vi.resetAllMocks()\n})\n\ndescribe('#docs:search', () => {\n test('--help works', async () => {\n const {stdout} = await runCommand('docs search --help')\n expect(stdout).toMatchInlineSnapshot(`\n \"Search Sanity docs\n\n USAGE\n $ sanity docs search QUERY [--limit <value>]\n\n ARGUMENTS\n QUERY Search query for documentation\n\n FLAGS\n --limit=<value> [default: 10] Maximum number of results to return\n\n DESCRIPTION\n Search Sanity docs\n\n EXAMPLES\n Search for documentation about schemas\n\n $ sanity docs search schema\n\n Search with phrase\n\n $ sanity docs search \"groq functions\"\n\n Limit search results\n\n $ sanity docs search \"deployment\" --limit=5\n\n \"\n `)\n })\n\n test('searches and displays results', async () => {\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Understanding Sanity schemas',\n path: '/docs/schemas/overview',\n title: 'Schema Overview',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Searching documentation for: \"studio\"')\n expect(stdout).toContain('Found 2 result(s):')\n expect(stdout).toContain('1. Studio Installation Guide')\n expect(stdout).toContain('URL: https://www.sanity.io/docs/studio/installation')\n expect(stdout).toContain('Learn how to install Sanity Studio')\n expect(stdout).toContain('2. Schema Overview')\n })\n\n test('handles no results', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'nonexistent'})\n .reply(200, [])\n\n const {stdout} = await testCommand(DocsSearchCommand, ['nonexistent'])\n\n expect(stdout).toContain('Searching documentation for: \"nonexistent\"')\n expect(stdout).toContain('No results found. Try a different search term.')\n })\n\n test('handles API errors', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'test'})\n .reply(500, 'Internal Server Error')\n\n const {error} = await testCommand(DocsSearchCommand, ['test']).catch((err) => err)\n expect(error.message).toBe(\n 'The documentation search API is currently unavailable. Please try again later.',\n )\n expect(error.oclif?.exit).toBe(1)\n })\n\n test('respects limit flag', async () => {\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio 1',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Learn how to install Sanity Studio 2',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Learn how to install Sanity Studio 3',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n\n {\n description: 'Learn how to install Sanity Studio 4',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Learn how to install Sanity Studio 5',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Learn how to install Sanity Studio 6',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio', '--limit=3'])\n\n expect(stdout).toContain('Found 3 result(s):')\n expect(stdout).toContain('1. Studio Installation Guide')\n expect(stdout).toContain('2. Studio Installation Guide')\n expect(stdout).toContain('3. Studio Installation Guide')\n })\n\n test('handles results with empty descriptions', async () => {\n const searchResponse = [\n {\n description: '', // Empty description\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: '', // Empty description\n path: '/docs/schemas/overview',\n title: 'Schema Overview',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Searching documentation for: \"studio\"')\n expect(stdout).toContain('Found 2 result(s):')\n expect(stdout).toContain('1. Studio Installation Guide')\n expect(stdout).toContain('URL: https://www.sanity.io/docs/studio/installation')\n expect(stdout).toContain('2. Schema Overview')\n // Should not show empty description lines\n expect(stdout).not.toContain('Learn how to install')\n expect(stdout).not.toContain('Understanding Sanity schemas')\n })\n\n test('shows usage hints in non-interactive mode', async () => {\n mockedIsInteractive.mockReturnValue(false)\n\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Found 1 result(s):')\n expect(stdout).toContain('Use `sanity docs read <url>` to read an article in terminal.')\n expect(stdout).toContain('Use `sanity docs read <path>` to follow links found within articles.')\n })\n\n test('handles network errors with default message', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'test'})\n .reply(500, 'Internal Server Error')\n\n const {error} = await testCommand(DocsSearchCommand, ['test']).catch((err) => err)\n expect(error.message).toBe(\n 'The documentation search API is currently unavailable. Please try again later.',\n )\n expect(error.oclif?.exit).toBe(1)\n })\n\n test('handles interactive mode article selection', async () => {\n mockedIsInteractive.mockReturnValue(true)\n mockedSelect.mockResolvedValue(0)\n\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n nock('https://www.sanity.io')\n .get('/docs/studio/installation.md')\n .reply(200, '# Studio Installation\\n\\nThis is how you install the studio.')\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Found 1 result(s):')\n expect(stdout).toContain('---')\n expect(stdout).toContain('# Studio Installation')\n expect(stdout).toContain('This is how you install the studio.')\n })\n\n test('handles interactive mode exit selection', async () => {\n mockedIsInteractive.mockReturnValue(true)\n mockedSelect.mockResolvedValue(-1) // User selects exit option\n\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Found 1 result(s):')\n expect(stdout).not.toContain('---') // Should not show article content\n expect(stdout).not.toContain('# Studio Installation')\n })\n})\n"],"names":["runCommand","isInteractive","select","testCommand","nock","afterEach","describe","expect","test","vi","DocsSearchCommand","mock","actual","importActual","fn","mockedSelect","mocked","mockedIsInteractive","pending","pendingMocks","cleanAll","toEqual","resetAllMocks","stdout","toMatchInlineSnapshot","searchResponse","description","path","title","get","query","reply","toContain","error","catch","err","message","toBe","oclif","exit","not","mockReturnValue","mockResolvedValue"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/docs/__tests__/search.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {select} from '@sanity/cli-core/ux'\nimport {testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {DocsSearchCommand} from '../search.js'\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 select: vi.fn(),\n }\n})\n\nconst mockedIsInteractive = vi.hoisted(() => vi.fn())\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core')>('@sanity/cli-core')\n return {\n ...actual,\n isInteractive: mockedIsInteractive,\n }\n})\n\nconst mockedSelect = vi.mocked(select)\n\nafterEach(() => {\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n vi.resetAllMocks()\n})\n\ndescribe('#docs:search', () => {\n test('--help works', async () => {\n const {stdout} = await runCommand('docs search --help')\n expect(stdout).toMatchInlineSnapshot(`\n \"Search Sanity docs\n\n USAGE\n $ sanity docs search QUERY [--limit <value>]\n\n ARGUMENTS\n QUERY Search query for documentation\n\n FLAGS\n --limit=<value> [default: 10] Maximum number of results to return\n\n DESCRIPTION\n Search Sanity docs\n\n EXAMPLES\n Search for documentation about schemas\n\n $ sanity docs search schema\n\n Search with phrase\n\n $ sanity docs search \"groq functions\"\n\n Limit search results\n\n $ sanity docs search \"deployment\" --limit=5\n\n \"\n `)\n })\n\n test('searches and displays results', async () => {\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Understanding Sanity schemas',\n path: '/docs/schemas/overview',\n title: 'Schema Overview',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Searching documentation for: \"studio\"')\n expect(stdout).toContain('Found 2 result(s):')\n expect(stdout).toContain('1. Studio Installation Guide')\n expect(stdout).toContain('URL: https://www.sanity.io/docs/studio/installation')\n expect(stdout).toContain('Learn how to install Sanity Studio')\n expect(stdout).toContain('2. Schema Overview')\n })\n\n test('handles no results', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'nonexistent'})\n .reply(200, [])\n\n const {stdout} = await testCommand(DocsSearchCommand, ['nonexistent'])\n\n expect(stdout).toContain('Searching documentation for: \"nonexistent\"')\n expect(stdout).toContain('No results found. Try a different search term.')\n })\n\n test('handles API errors', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'test'})\n .reply(500, 'Internal Server Error')\n\n const {error} = await testCommand(DocsSearchCommand, ['test']).catch((err) => err)\n expect(error.message).toBe(\n 'The documentation search API is currently unavailable. Please try again later.',\n )\n expect(error.oclif?.exit).toBe(1)\n })\n\n test('respects limit flag', async () => {\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio 1',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Learn how to install Sanity Studio 2',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Learn how to install Sanity Studio 3',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n\n {\n description: 'Learn how to install Sanity Studio 4',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Learn how to install Sanity Studio 5',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: 'Learn how to install Sanity Studio 6',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio', '--limit=3'])\n\n expect(stdout).toContain('Found 3 result(s):')\n expect(stdout).toContain('1. Studio Installation Guide')\n expect(stdout).toContain('2. Studio Installation Guide')\n expect(stdout).toContain('3. Studio Installation Guide')\n })\n\n test('handles results with empty descriptions', async () => {\n const searchResponse = [\n {\n description: '', // Empty description\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n {\n description: '', // Empty description\n path: '/docs/schemas/overview',\n title: 'Schema Overview',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Searching documentation for: \"studio\"')\n expect(stdout).toContain('Found 2 result(s):')\n expect(stdout).toContain('1. Studio Installation Guide')\n expect(stdout).toContain('URL: https://www.sanity.io/docs/studio/installation')\n expect(stdout).toContain('2. Schema Overview')\n // Should not show empty description lines\n expect(stdout).not.toContain('Learn how to install')\n expect(stdout).not.toContain('Understanding Sanity schemas')\n })\n\n test('shows usage hints in non-interactive mode', async () => {\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n mockedIsInteractive.mockReturnValue(false)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Found 1 result(s):')\n expect(stdout).toContain('Use `sanity docs read <url>` to read an article in terminal.')\n expect(stdout).toContain('Use `sanity docs read <path>` to follow links found within articles.')\n })\n\n test('handles network errors with default message', async () => {\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'test'})\n .reply(500, 'Internal Server Error')\n\n const {error} = await testCommand(DocsSearchCommand, ['test']).catch((err) => err)\n expect(error.message).toBe(\n 'The documentation search API is currently unavailable. Please try again later.',\n )\n expect(error.oclif?.exit).toBe(1)\n })\n\n test('handles interactive mode article selection', async () => {\n mockedSelect.mockResolvedValue(0)\n\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n nock('https://www.sanity.io')\n .get('/docs/studio/installation.md')\n .reply(200, '# Studio Installation\\n\\nThis is how you install the studio.')\n\n mockedIsInteractive.mockReturnValue(true)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Found 1 result(s):')\n expect(stdout).toContain('---')\n expect(stdout).toContain('# Studio Installation')\n expect(stdout).toContain('This is how you install the studio.')\n })\n\n test('handles interactive mode exit selection', async () => {\n mockedSelect.mockResolvedValue(-1) // User selects exit option\n\n const searchResponse = [\n {\n description: 'Learn how to install Sanity Studio',\n path: '/docs/studio/installation',\n title: 'Studio Installation Guide',\n },\n ]\n\n nock('https://www.sanity.io')\n .get('/docs/api/search/semantic')\n .query({query: 'studio'})\n .reply(200, searchResponse)\n\n mockedIsInteractive.mockReturnValue(true)\n\n const {stdout} = await testCommand(DocsSearchCommand, ['studio'])\n\n expect(stdout).toContain('Found 1 result(s):')\n expect(stdout).not.toContain('---') // Should not show article content\n expect(stdout).not.toContain('# Studio Installation')\n })\n})\n"],"names":["runCommand","select","testCommand","nock","afterEach","describe","expect","test","vi","DocsSearchCommand","mock","actual","importActual","fn","mockedIsInteractive","hoisted","isInteractive","mockedSelect","mocked","pending","pendingMocks","cleanAll","toEqual","resetAllMocks","stdout","toMatchInlineSnapshot","searchResponse","description","path","title","get","query","reply","toContain","error","catch","err","message","toBe","oclif","exit","not","mockReturnValue","mockResolvedValue"],"mappings":"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"}