@sanity/cli 6.0.0-alpha.7 → 6.0.0-alpha.9

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 (758) hide show
  1. package/README.md +240 -114
  2. package/dist/actions/auth/login/login.js +13 -5
  3. package/dist/actions/auth/login/login.js.map +1 -1
  4. package/dist/actions/build/buildApp.js +12 -12
  5. package/dist/actions/build/buildApp.js.map +1 -1
  6. package/dist/actions/build/buildStudio.js +12 -12
  7. package/dist/actions/build/buildStudio.js.map +1 -1
  8. package/dist/actions/build/getStudioEnvironmentVariables.js +1 -1
  9. package/dist/actions/build/getStudioEnvironmentVariables.js.map +1 -1
  10. package/dist/actions/build/getViteConfig.js +1 -1
  11. package/dist/actions/build/getViteConfig.js.map +1 -1
  12. package/dist/actions/build/renderDocument.js +3 -3
  13. package/dist/actions/build/renderDocument.js.map +1 -1
  14. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js +2 -1
  15. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js.map +1 -1
  16. package/dist/actions/build/shouldAutoUpdate.js +3 -3
  17. package/dist/actions/build/shouldAutoUpdate.js.map +1 -1
  18. package/dist/actions/build/writeSanityRuntime.js +2 -2
  19. package/dist/actions/build/writeSanityRuntime.js.map +1 -1
  20. package/dist/actions/dataset/create.js +3 -5
  21. package/dist/actions/dataset/create.js.map +1 -1
  22. package/dist/actions/deploy/deployApp.js +11 -7
  23. package/dist/actions/deploy/deployApp.js.map +1 -1
  24. package/dist/actions/deploy/deployStudio.js +5 -4
  25. package/dist/actions/deploy/deployStudio.js.map +1 -1
  26. package/dist/actions/dev/startAppDevServer.js +5 -2
  27. package/dist/actions/dev/startAppDevServer.js.map +1 -1
  28. package/dist/actions/dev/startStudioDevServer.js +10 -6
  29. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  30. package/dist/actions/documents/types.js.map +1 -1
  31. package/dist/actions/documents/validate.js +4 -15
  32. package/dist/actions/documents/validate.js.map +1 -1
  33. package/dist/{threads/validateDocuments.js → actions/documents/validateDocuments.worker.js} +35 -35
  34. package/dist/actions/documents/validateDocuments.worker.js.map +1 -0
  35. package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -1
  36. package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -1
  37. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +8 -7
  38. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map +1 -1
  39. package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.js.map +1 -1
  40. package/dist/{threads/configClient.js → actions/exec/configClient.worker.js} +2 -2
  41. package/dist/actions/exec/configClient.worker.js.map +1 -0
  42. package/dist/actions/exec/execScript.js +29 -25
  43. package/dist/actions/exec/execScript.js.map +1 -1
  44. package/dist/{threads/registerBrowserEnv.js → actions/exec/registerBrowserEnv.worker.js} +1 -1
  45. package/dist/actions/exec/registerBrowserEnv.worker.js.map +1 -0
  46. package/dist/actions/graphql/SchemaError.js +37 -0
  47. package/dist/actions/graphql/SchemaError.js.map +1 -0
  48. package/dist/actions/graphql/extractFromSanitySchema.js +659 -0
  49. package/dist/actions/graphql/extractFromSanitySchema.js.map +1 -0
  50. package/dist/actions/graphql/gen1/generateTypeFilters.js +226 -0
  51. package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -0
  52. package/dist/actions/graphql/gen1/generateTypeQueries.js +85 -0
  53. package/dist/actions/graphql/gen1/generateTypeQueries.js.map +1 -0
  54. package/dist/actions/graphql/gen1/index.js +19 -0
  55. package/dist/actions/graphql/gen1/index.js.map +1 -0
  56. package/dist/actions/graphql/gen2/filters/booleanFilters.js +26 -0
  57. package/dist/actions/graphql/gen2/filters/booleanFilters.js.map +1 -0
  58. package/dist/actions/graphql/gen2/filters/dateFilters.js +46 -0
  59. package/dist/actions/graphql/gen2/filters/dateFilters.js.map +1 -0
  60. package/dist/actions/graphql/gen2/filters/dateTimeFilters.js +46 -0
  61. package/dist/actions/graphql/gen2/filters/dateTimeFilters.js.map +1 -0
  62. package/dist/actions/graphql/gen2/filters/documentFilters.js +21 -0
  63. package/dist/actions/graphql/gen2/filters/documentFilters.js.map +1 -0
  64. package/dist/actions/graphql/gen2/filters/floatFilters.js +46 -0
  65. package/dist/actions/graphql/gen2/filters/floatFilters.js.map +1 -0
  66. package/dist/actions/graphql/gen2/filters/idFilters.js +44 -0
  67. package/dist/actions/graphql/gen2/filters/idFilters.js.map +1 -0
  68. package/dist/actions/graphql/gen2/filters/integerFilters.js +46 -0
  69. package/dist/actions/graphql/gen2/filters/integerFilters.js.map +1 -0
  70. package/dist/actions/graphql/gen2/filters/stringFilters.js +49 -0
  71. package/dist/actions/graphql/gen2/filters/stringFilters.js.map +1 -0
  72. package/dist/actions/graphql/gen2/generateTypeFilters.js +85 -0
  73. package/dist/actions/graphql/gen2/generateTypeFilters.js.map +1 -0
  74. package/dist/actions/graphql/gen2/generateTypeQueries.js +107 -0
  75. package/dist/actions/graphql/gen2/generateTypeQueries.js.map +1 -0
  76. package/dist/actions/graphql/gen2/generateTypeSortings.js +70 -0
  77. package/dist/actions/graphql/gen2/generateTypeSortings.js.map +1 -0
  78. package/dist/actions/graphql/gen2/index.js +22 -0
  79. package/dist/actions/graphql/gen2/index.js.map +1 -0
  80. package/dist/actions/graphql/gen3/filters/documentFilters.js +21 -0
  81. package/dist/actions/graphql/gen3/filters/documentFilters.js.map +1 -0
  82. package/dist/actions/graphql/gen3/generateTypeFilters.js +101 -0
  83. package/dist/actions/graphql/gen3/generateTypeFilters.js.map +1 -0
  84. package/dist/actions/graphql/gen3/generateTypeQueries.js +104 -0
  85. package/dist/actions/graphql/gen3/generateTypeQueries.js.map +1 -0
  86. package/dist/actions/graphql/gen3/generateTypeSortings.js +70 -0
  87. package/dist/actions/graphql/gen3/generateTypeSortings.js.map +1 -0
  88. package/dist/actions/graphql/gen3/index.js +31 -0
  89. package/dist/actions/graphql/gen3/index.js.map +1 -0
  90. package/dist/actions/graphql/gen3/utils.js +12 -0
  91. package/dist/actions/graphql/gen3/utils.js.map +1 -0
  92. package/dist/actions/graphql/getGraphQLAPIs.worker.js +1 -1
  93. package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -1
  94. package/dist/actions/graphql/graphqlDebug.js +4 -0
  95. package/dist/actions/graphql/graphqlDebug.js.map +1 -0
  96. package/dist/actions/graphql/helpUrls.js +3 -0
  97. package/dist/actions/graphql/helpUrls.js.map +1 -0
  98. package/dist/actions/graphql/helpers.js +11 -0
  99. package/dist/actions/graphql/helpers.js.map +1 -0
  100. package/dist/actions/graphql/resolveApiGeneration.js +43 -0
  101. package/dist/actions/graphql/resolveApiGeneration.js.map +1 -0
  102. package/dist/actions/graphql/types.js +1 -1
  103. package/dist/actions/graphql/types.js.map +1 -1
  104. package/dist/actions/init/bootstrapLocalTemplate.js +137 -0
  105. package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -0
  106. package/dist/actions/init/bootstrapRemoteTemplate.js +109 -0
  107. package/dist/actions/init/bootstrapRemoteTemplate.js.map +1 -0
  108. package/dist/actions/init/bootstrapTemplate.js +32 -0
  109. package/dist/actions/init/bootstrapTemplate.js.map +1 -0
  110. package/dist/actions/init/checkNextJsReactCompatibility.js +21 -0
  111. package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -0
  112. package/dist/actions/init/countNestedFolders.js +6 -0
  113. package/dist/actions/init/countNestedFolders.js.map +1 -0
  114. package/dist/actions/init/createAppCliConfig.js +19 -0
  115. package/dist/actions/init/createAppCliConfig.js.map +1 -0
  116. package/dist/actions/init/createCliConfig.js +27 -0
  117. package/dist/actions/init/createCliConfig.js.map +1 -0
  118. package/dist/actions/init/createPackageManifest.js +86 -0
  119. package/dist/actions/init/createPackageManifest.js.map +1 -0
  120. package/dist/actions/init/createStudioConfig.js +41 -0
  121. package/dist/actions/init/createStudioConfig.js.map +1 -0
  122. package/dist/actions/init/env/createOrAppendEnvVars.js +25 -0
  123. package/dist/actions/init/env/createOrAppendEnvVars.js.map +1 -0
  124. package/dist/actions/init/env/parseAndUpdateEnvVars.js +42 -0
  125. package/dist/actions/init/env/parseAndUpdateEnvVars.js.map +1 -0
  126. package/dist/actions/init/env/writeEnvVarsToFile.js +49 -0
  127. package/dist/actions/init/env/writeEnvVarsToFile.js.map +1 -0
  128. package/dist/actions/init/fetchPostInitPrompt.js +30 -0
  129. package/dist/actions/init/fetchPostInitPrompt.js.map +1 -0
  130. package/dist/actions/init/git.js +65 -0
  131. package/dist/actions/init/git.js.map +1 -0
  132. package/dist/actions/init/processTemplate.js +56 -0
  133. package/dist/actions/init/processTemplate.js.map +1 -0
  134. package/dist/actions/init/remoteTemplate.js +2 -40
  135. package/dist/actions/init/remoteTemplate.js.map +1 -1
  136. package/dist/actions/init/resolvePackageManager.js +20 -0
  137. package/dist/actions/init/resolvePackageManager.js.map +1 -0
  138. package/dist/actions/init/templates/appQuickstart.js +28 -0
  139. package/dist/actions/init/templates/appQuickstart.js.map +1 -0
  140. package/dist/actions/init/templates/appSanityUi.js +30 -0
  141. package/dist/actions/init/templates/appSanityUi.js.map +1 -0
  142. package/dist/actions/init/templates/blog.js +4 -0
  143. package/dist/actions/init/templates/blog.js.map +1 -0
  144. package/dist/actions/init/templates/clean.js +4 -0
  145. package/dist/actions/init/templates/clean.js.map +1 -0
  146. package/dist/actions/init/templates/getStarted.js +35 -0
  147. package/dist/actions/init/templates/getStarted.js.map +1 -0
  148. package/dist/actions/init/templates/index.js +23 -0
  149. package/dist/actions/init/templates/index.js.map +1 -0
  150. package/dist/actions/init/templates/moviedb.js +34 -0
  151. package/dist/actions/init/templates/moviedb.js.map +1 -0
  152. package/dist/actions/init/templates/nextjs/index.js +213 -0
  153. package/dist/actions/init/templates/nextjs/index.js.map +1 -0
  154. package/dist/actions/init/templates/nextjs/schemaTypes/blog.js +247 -0
  155. package/dist/actions/init/templates/nextjs/schemaTypes/blog.js.map +1 -0
  156. package/dist/actions/init/templates/quickstart.js +4 -0
  157. package/dist/actions/init/templates/quickstart.js.map +1 -0
  158. package/dist/actions/init/templates/shopify.js +77 -0
  159. package/dist/actions/init/templates/shopify.js.map +1 -0
  160. package/dist/actions/init/templates/shopifyOnline.js +49 -0
  161. package/dist/actions/init/templates/shopifyOnline.js.map +1 -0
  162. package/dist/actions/init/types.js.map +1 -0
  163. package/dist/actions/init/updateInitialTemplateMetadata.js +17 -0
  164. package/dist/actions/init/updateInitialTemplateMetadata.js.map +1 -0
  165. package/dist/actions/mcp/detectAvailableEditors.js +64 -59
  166. package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
  167. package/dist/actions/mcp/editorConfigs.js +147 -0
  168. package/dist/actions/mcp/editorConfigs.js.map +1 -0
  169. package/dist/actions/mcp/promptForMCPSetup.js +24 -0
  170. package/dist/actions/mcp/promptForMCPSetup.js.map +1 -0
  171. package/dist/actions/mcp/setupMCP.js +88 -0
  172. package/dist/actions/mcp/setupMCP.js.map +1 -0
  173. package/dist/actions/mcp/types.js +3 -0
  174. package/dist/actions/mcp/types.js.map +1 -0
  175. package/dist/actions/mcp/writeMCPConfig.js +24 -29
  176. package/dist/actions/mcp/writeMCPConfig.js.map +1 -1
  177. package/dist/actions/media/importMedia.js +2 -2
  178. package/dist/actions/media/importMedia.js.map +1 -1
  179. package/dist/actions/organizations/getOrganization.js +67 -0
  180. package/dist/actions/organizations/getOrganization.js.map +1 -0
  181. package/dist/actions/organizations/hasProjectAttachGrant.js +1 -1
  182. package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -1
  183. package/dist/actions/organizations/validateOrganizationName.js +10 -0
  184. package/dist/actions/organizations/validateOrganizationName.js.map +1 -0
  185. package/dist/actions/preview/previewAction.js +2 -1
  186. package/dist/actions/preview/previewAction.js.map +1 -1
  187. package/dist/actions/projects/getManageUrl.js +7 -0
  188. package/dist/actions/projects/getManageUrl.js.map +1 -0
  189. package/dist/actions/projects/validateProjectName.js +11 -0
  190. package/dist/actions/projects/validateProjectName.js.map +1 -0
  191. package/dist/actions/schema/deleteSchemaAction.js +2 -2
  192. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  193. package/dist/actions/schema/deploySchemas.js +5 -5
  194. package/dist/actions/schema/deploySchemas.js.map +1 -1
  195. package/dist/actions/schema/extractSanitySchema.worker.js +38 -0
  196. package/dist/actions/schema/extractSanitySchema.worker.js.map +1 -0
  197. package/dist/actions/schema/extractSchema.js +77 -0
  198. package/dist/actions/schema/extractSchema.js.map +1 -0
  199. package/dist/actions/schema/formatSchemaValidation.js +17 -5
  200. package/dist/actions/schema/formatSchemaValidation.js.map +1 -1
  201. package/dist/actions/schema/listSchemas.js +4 -4
  202. package/dist/actions/schema/listSchemas.js.map +1 -1
  203. package/dist/actions/schema/metafile.js.map +1 -1
  204. package/dist/actions/schema/types.js +9 -0
  205. package/dist/actions/schema/types.js.map +1 -0
  206. package/dist/actions/schema/utils/debug.js +1 -0
  207. package/dist/actions/schema/utils/debug.js.map +1 -1
  208. package/dist/actions/schema/utils/extractValidationFromSchemaError.js +12 -0
  209. package/dist/actions/schema/utils/extractValidationFromSchemaError.js.map +1 -0
  210. package/dist/actions/schema/utils/manifestExtractor.js +2 -2
  211. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  212. package/dist/actions/schema/utils/manifestReader.js +2 -2
  213. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  214. package/dist/actions/schema/validateAction.js +7 -17
  215. package/dist/actions/schema/validateAction.js.map +1 -1
  216. package/dist/{threads/validateSchema.js → actions/schema/validateSchema.worker.js} +35 -26
  217. package/dist/actions/schema/validateSchema.worker.js.map +1 -0
  218. package/dist/actions/telemetry/getLearnMoreMessage.js.map +1 -1
  219. package/dist/actions/telemetry/getStatusDisplay.js.map +1 -1
  220. package/dist/actions/telemetry/getStatusMessage.js.map +1 -1
  221. package/dist/actions/telemetry/resolveConsent.js +1 -2
  222. package/dist/actions/telemetry/resolveConsent.js.map +1 -1
  223. package/dist/actions/telemetry/setConsent.js +1 -1
  224. package/dist/actions/telemetry/setConsent.js.map +1 -1
  225. package/dist/actions/telemetry/telemetryDisclosure.js +3 -3
  226. package/dist/actions/telemetry/telemetryDisclosure.js.map +1 -1
  227. package/dist/actions/versions/getFormatters.js +2 -2
  228. package/dist/actions/versions/getFormatters.js.map +1 -1
  229. package/dist/commands/backup/disable.js +4 -3
  230. package/dist/commands/backup/disable.js.map +1 -1
  231. package/dist/commands/backup/download.js +7 -7
  232. package/dist/commands/backup/download.js.map +1 -1
  233. package/dist/commands/backup/enable.js +3 -3
  234. package/dist/commands/backup/enable.js.map +1 -1
  235. package/dist/commands/cors/add.js +13 -9
  236. package/dist/commands/cors/add.js.map +1 -1
  237. package/dist/commands/dataset/copy.js +6 -5
  238. package/dist/commands/dataset/copy.js.map +1 -1
  239. package/dist/commands/dataset/create.js +14 -7
  240. package/dist/commands/dataset/create.js.map +1 -1
  241. package/dist/commands/dataset/delete.js +12 -2
  242. package/dist/commands/dataset/delete.js.map +1 -1
  243. package/dist/commands/dataset/export.js +1 -2
  244. package/dist/commands/dataset/export.js.map +1 -1
  245. package/dist/commands/debug.js +5 -5
  246. package/dist/commands/debug.js.map +1 -1
  247. package/dist/commands/dev.js +5 -2
  248. package/dist/commands/dev.js.map +1 -1
  249. package/dist/commands/docs/search.js +3 -2
  250. package/dist/commands/docs/search.js.map +1 -1
  251. package/dist/commands/documents/validate.js +44 -40
  252. package/dist/commands/documents/validate.js.map +1 -1
  253. package/dist/commands/graphql/deploy.js +429 -0
  254. package/dist/commands/graphql/deploy.js.map +1 -0
  255. package/dist/commands/graphql/list.js +6 -6
  256. package/dist/commands/graphql/list.js.map +1 -1
  257. package/dist/commands/hook/logs.js +4 -4
  258. package/dist/commands/hook/logs.js.map +1 -1
  259. package/dist/commands/init.js +607 -86
  260. package/dist/commands/init.js.map +1 -1
  261. package/dist/commands/login.js +2 -2
  262. package/dist/commands/login.js.map +1 -1
  263. package/dist/commands/manage.js +2 -1
  264. package/dist/commands/manage.js.map +1 -1
  265. package/dist/commands/mcp/configure.js +13 -74
  266. package/dist/commands/mcp/configure.js.map +1 -1
  267. package/dist/commands/media/create-aspect.js +7 -6
  268. package/dist/commands/media/create-aspect.js.map +1 -1
  269. package/dist/commands/media/delete-aspect.js +5 -4
  270. package/dist/commands/media/delete-aspect.js.map +1 -1
  271. package/dist/commands/media/deploy-aspect.js +9 -8
  272. package/dist/commands/media/deploy-aspect.js.map +1 -1
  273. package/dist/commands/media/export.js +1 -2
  274. package/dist/commands/media/export.js.map +1 -1
  275. package/dist/commands/media/import.js +4 -4
  276. package/dist/commands/media/import.js.map +1 -1
  277. package/dist/commands/preview.js +10 -24
  278. package/dist/commands/preview.js.map +1 -1
  279. package/dist/commands/projects/create.js +181 -0
  280. package/dist/commands/projects/create.js.map +1 -0
  281. package/dist/commands/projects/list.js +2 -2
  282. package/dist/commands/projects/list.js.map +1 -1
  283. package/dist/commands/schema/extract.js +7 -12
  284. package/dist/commands/schema/extract.js.map +1 -1
  285. package/dist/commands/schema/validate.js +10 -2
  286. package/dist/commands/schema/validate.js.map +1 -1
  287. package/dist/commands/undeploy.js +9 -8
  288. package/dist/commands/undeploy.js.map +1 -1
  289. package/dist/commands/users/list.js +3 -3
  290. package/dist/commands/users/list.js.map +1 -1
  291. package/dist/commands/versions.js +2 -2
  292. package/dist/commands/versions.js.map +1 -1
  293. package/dist/config/createCliConfig.js +1 -0
  294. package/dist/config/createCliConfig.js.map +1 -1
  295. package/dist/hooks/prerun/flushTelemetry.worker.js +1 -1
  296. package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -1
  297. package/dist/hooks/prerun/injectEnvVariables.js +31 -0
  298. package/dist/hooks/prerun/injectEnvVariables.js.map +1 -0
  299. package/dist/hooks/prerun/setupTelemetry.js +6 -5
  300. package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
  301. package/dist/hooks/prerun/warnings.js +6 -0
  302. package/dist/hooks/prerun/warnings.js.map +1 -0
  303. package/dist/index.d.ts +2326 -6
  304. package/dist/index.js +0 -1
  305. package/dist/index.js.map +1 -1
  306. package/dist/prompts/init/nextjs.js +56 -0
  307. package/dist/prompts/init/nextjs.js.map +1 -0
  308. package/dist/prompts/init/promptForTypescript.js +0 -6
  309. package/dist/prompts/init/promptForTypescript.js.map +1 -1
  310. package/dist/prompts/promptForDefaultConfig.js +12 -0
  311. package/dist/prompts/promptForDefaultConfig.js.map +1 -0
  312. package/dist/prompts/promptForOrganizationName.js +11 -0
  313. package/dist/prompts/promptForOrganizationName.js.map +1 -0
  314. package/dist/prompts/promptForProjectName.js +11 -0
  315. package/dist/prompts/promptForProjectName.js.map +1 -0
  316. package/dist/server/previewServer.js +15 -9
  317. package/dist/server/previewServer.js.map +1 -1
  318. package/dist/services/documents.js +56 -0
  319. package/dist/services/documents.js.map +1 -0
  320. package/dist/services/getUrlHeaders.js +36 -0
  321. package/dist/services/getUrlHeaders.js.map +1 -0
  322. package/dist/services/graphql.js +64 -0
  323. package/dist/services/graphql.js.map +1 -1
  324. package/dist/services/mcp.js +16 -0
  325. package/dist/services/mcp.js.map +1 -1
  326. package/dist/services/organizations.js +1 -1
  327. package/dist/services/organizations.js.map +1 -1
  328. package/dist/services/projects.js +37 -0
  329. package/dist/services/projects.js.map +1 -1
  330. package/dist/services/telemetry.js +62 -2
  331. package/dist/services/telemetry.js.map +1 -1
  332. package/dist/studioDependencies.js +24 -0
  333. package/dist/studioDependencies.js.map +1 -0
  334. package/dist/telemetry/build.telemetry.js +13 -0
  335. package/dist/telemetry/build.telemetry.js.map +1 -0
  336. package/dist/telemetry/extractSchema.telemetry.js +8 -0
  337. package/dist/telemetry/extractSchema.telemetry.js.map +1 -0
  338. package/dist/telemetry/init.telemetry.js +8 -0
  339. package/dist/telemetry/init.telemetry.js.map +1 -0
  340. package/dist/telemetry/login.telemetry.js +8 -0
  341. package/dist/telemetry/login.telemetry.js.map +1 -0
  342. package/dist/telemetry/mcp.telemetry.js +8 -0
  343. package/dist/telemetry/mcp.telemetry.js.map +1 -0
  344. package/dist/types.js +3 -1
  345. package/dist/types.js.map +1 -1
  346. package/dist/typings/deepSortObject.d.js +2 -0
  347. package/dist/typings/deepSortObject.d.js.map +1 -0
  348. package/dist/util/appId.js +5 -5
  349. package/dist/util/appId.js.map +1 -1
  350. package/dist/util/cliClient.js +8 -7
  351. package/dist/util/cliClient.js.map +1 -1
  352. package/dist/util/copy.js +37 -0
  353. package/dist/util/copy.js.map +1 -0
  354. package/dist/util/formatSize.js +2 -2
  355. package/dist/util/formatSize.js.map +1 -1
  356. package/dist/util/frameworkPort.js +61 -0
  357. package/dist/util/frameworkPort.js.map +1 -0
  358. package/dist/util/fsUtils.js +34 -0
  359. package/dist/util/fsUtils.js.map +1 -0
  360. package/dist/util/getProjectDefaults.js +77 -0
  361. package/dist/util/getProjectDefaults.js.map +1 -0
  362. package/dist/util/getSanityEnv.js +3 -0
  363. package/dist/util/getSanityEnv.js.map +1 -0
  364. package/dist/util/importStudioConfig.js +0 -3
  365. package/dist/util/importStudioConfig.js.map +1 -1
  366. package/dist/util/loadEnv.js +1 -6
  367. package/dist/util/loadEnv.js.map +1 -1
  368. package/dist/util/packageManager/packageManagerChoice.js +8 -0
  369. package/dist/util/packageManager/packageManagerChoice.js.map +1 -1
  370. package/dist/util/readPackageJson.js +3 -1
  371. package/dist/util/readPackageJson.js.map +1 -1
  372. package/dist/util/readdirRecursive.js +24 -0
  373. package/dist/util/readdirRecursive.js.map +1 -0
  374. package/dist/util/resolveLatestVersions.js +21 -0
  375. package/dist/util/resolveLatestVersions.js.map +1 -0
  376. package/dist/util/warnAboutMissingAppId.js +6 -2
  377. package/dist/util/warnAboutMissingAppId.js.map +1 -1
  378. package/dist/util/warnOnNonProductionEnvironment.js +18 -0
  379. package/dist/util/warnOnNonProductionEnvironment.js.map +1 -0
  380. package/oclif.config.js +6 -1
  381. package/oclif.manifest.json +200 -3
  382. package/package.json +48 -35
  383. package/dist/SanityHelp.d.ts +0 -4
  384. package/dist/actions/auth/authServer.d.ts +0 -33
  385. package/dist/actions/auth/getProviderName.d.ts +0 -8
  386. package/dist/actions/auth/login/getProvider.d.ts +0 -15
  387. package/dist/actions/auth/login/getSSOProvider.d.ts +0 -13
  388. package/dist/actions/auth/login/login.d.ts +0 -20
  389. package/dist/actions/auth/login/promptProviders.d.ts +0 -10
  390. package/dist/actions/auth/login/samlProviderToLoginProvider.d.ts +0 -9
  391. package/dist/actions/auth/types.d.ts +0 -26
  392. package/dist/actions/backup/archiveDir.d.ts +0 -10
  393. package/dist/actions/backup/assertDatasetExist.d.ts +0 -8
  394. package/dist/actions/backup/backupDownloadDebug.d.ts +0 -1
  395. package/dist/actions/backup/cleanupTmpDir.d.ts +0 -6
  396. package/dist/actions/backup/constants.d.ts +0 -1
  397. package/dist/actions/backup/downloadAsset.d.ts +0 -9
  398. package/dist/actions/backup/downloadDocument.d.ts +0 -7
  399. package/dist/actions/backup/fetchNextBackupPage.d.ts +0 -23
  400. package/dist/actions/backup/progressSpinner.d.ts +0 -14
  401. package/dist/actions/build/buildApp.d.ts +0 -7
  402. package/dist/actions/build/buildDebug.d.ts +0 -1
  403. package/dist/actions/build/buildStaticFiles.d.ts +0 -35
  404. package/dist/actions/build/buildStudio.d.ts +0 -7
  405. package/dist/actions/build/buildVendorDependencies.d.ts +0 -11
  406. package/dist/actions/build/checkRequiredDependencies.d.ts +0 -22
  407. package/dist/actions/build/checkStudioDependencyVersions.d.ts +0 -2
  408. package/dist/actions/build/createExternalFromImportMap.d.ts +0 -11
  409. package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.d.ts +0 -6
  410. package/dist/actions/build/decorateIndexWithBridgeScript.d.ts +0 -8
  411. package/dist/actions/build/determineBasePath.d.ts +0 -7
  412. package/dist/actions/build/generateWebManifest.d.ts +0 -15
  413. package/dist/actions/build/getAppEnvVars.d.ts +0 -6
  414. package/dist/actions/build/getAutoUpdatesImportMap.d.ts +0 -21
  415. package/dist/actions/build/getEntryModule.d.ts +0 -7
  416. package/dist/actions/build/getPossibleDocumentComponentLocations.d.ts +0 -4
  417. package/dist/actions/build/getStudioEnvVars.d.ts +0 -6
  418. package/dist/actions/build/getStudioEnvironmentVariables.d.ts +0 -52
  419. package/dist/actions/build/getViteConfig.d.ts +0 -66
  420. package/dist/actions/build/normalizeBasePath.d.ts +0 -6
  421. package/dist/actions/build/renderDocument.d.ts +0 -15
  422. package/dist/actions/build/renderDocument.worker.d.ts +0 -1
  423. package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.d.ts +0 -6
  424. package/dist/actions/build/renderDocumentWorker/components/BasicDocument.d.ts +0 -19
  425. package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.d.ts +0 -13
  426. package/dist/actions/build/renderDocumentWorker/components/Favicons.d.ts +0 -2
  427. package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.d.ts +0 -3
  428. package/dist/actions/build/renderDocumentWorker/components/NoJavascript.d.ts +0 -3
  429. package/dist/actions/build/renderDocumentWorker/getDocumentComponent.d.ts +0 -5
  430. package/dist/actions/build/renderDocumentWorker/getDocumentHtml.d.ts +0 -8
  431. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.d.ts +0 -21
  432. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.d.ts +0 -8
  433. package/dist/actions/build/renderDocumentWorker/types.d.ts +0 -8
  434. package/dist/actions/build/shouldAutoUpdate.d.ts +0 -16
  435. package/dist/actions/build/types.d.ts +0 -13
  436. package/dist/actions/build/writeFavicons.d.ts +0 -1
  437. package/dist/actions/build/writeSanityRuntime.d.ts +0 -19
  438. package/dist/actions/build/writeWebManifest.d.ts +0 -4
  439. package/dist/actions/codemods/deskRename.d.ts +0 -2
  440. package/dist/actions/codemods/index.d.ts +0 -5
  441. package/dist/actions/codemods/partsTypeDirective.d.ts +0 -2
  442. package/dist/actions/codemods/reactIconsV3.d.ts +0 -2
  443. package/dist/actions/codemods/types.d.ts +0 -8
  444. package/dist/actions/cors/filterAndValidateOrigin.d.ts +0 -7
  445. package/dist/actions/dataset/create.d.ts +0 -49
  446. package/dist/actions/dataset/determineDatasetAclMode.d.ts +0 -37
  447. package/dist/actions/dataset/processAliasName.d.ts +0 -9
  448. package/dist/actions/dataset/validateDatasetAliasName.d.ts +0 -1
  449. package/dist/actions/dataset/validateDatasetName.d.ts +0 -13
  450. package/dist/actions/debug/gatherDebugInfo.d.ts +0 -2
  451. package/dist/actions/debug/getGlobalConfigLocation.d.ts +0 -1
  452. package/dist/actions/debug/types.d.ts +0 -30
  453. package/dist/actions/deploy/checkDir.d.ts +0 -8
  454. package/dist/actions/deploy/createStudioUserApplication.d.ts +0 -2
  455. package/dist/actions/deploy/createUserApplicationForApp.d.ts +0 -2
  456. package/dist/actions/deploy/deployApp.d.ts +0 -7
  457. package/dist/actions/deploy/deployDebug.d.ts +0 -1
  458. package/dist/actions/deploy/deployStudio.d.ts +0 -2
  459. package/dist/actions/deploy/findUserApplicationForApp.d.ts +0 -15
  460. package/dist/actions/deploy/findUserApplicationForStudio.d.ts +0 -13
  461. package/dist/actions/deploy/types.d.ts +0 -11
  462. package/dist/actions/dev/devAction.d.ts +0 -4
  463. package/dist/actions/dev/devDebug.d.ts +0 -1
  464. package/dist/actions/dev/getCoreAppUrl.d.ts +0 -5
  465. package/dist/actions/dev/getDevServerConfig.d.ts +0 -9
  466. package/dist/actions/dev/startAppDevServer.d.ts +0 -4
  467. package/dist/actions/dev/startStudioDevServer.d.ts +0 -4
  468. package/dist/actions/dev/types.d.ts +0 -10
  469. package/dist/actions/docs/normalizeDocsPath.d.ts +0 -8
  470. package/dist/actions/documents/constants.d.ts +0 -1
  471. package/dist/actions/documents/editor.d.ts +0 -11
  472. package/dist/actions/documents/types.d.ts +0 -2
  473. package/dist/actions/documents/validate.d.ts +0 -26
  474. package/dist/actions/documents/validation/reporters/index.d.ts +0 -5
  475. package/dist/actions/documents/validation/reporters/jsonReporter.d.ts +0 -2
  476. package/dist/actions/documents/validation/reporters/ndjsonReporter.d.ts +0 -2
  477. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.d.ts +0 -10
  478. package/dist/actions/documents/validation/reporters/prettyReporter/index.d.ts +0 -1
  479. package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.d.ts +0 -5
  480. package/dist/actions/documents/validation/reporters/prettyReporter/util.d.ts +0 -53
  481. package/dist/actions/exec/execScript.d.ts +0 -11
  482. package/dist/actions/graphql/getGraphQLAPIs.d.ts +0 -2
  483. package/dist/actions/graphql/getGraphQLAPIs.worker.d.ts +0 -1
  484. package/dist/actions/graphql/types.d.ts +0 -68
  485. package/dist/actions/hook/constants.d.ts +0 -1
  486. package/dist/actions/hook/formatFailure.d.ts +0 -4
  487. package/dist/actions/hook/types.d.ts +0 -78
  488. package/dist/actions/init/constants.d.ts +0 -1
  489. package/dist/actions/init/determineAppTemplate.d.ts +0 -9
  490. package/dist/actions/init/remoteTemplate.d.ts +0 -23
  491. package/dist/actions/manifest/SchemaIcon.d.ts +0 -9
  492. package/dist/actions/manifest/extractAppManifest.d.ts +0 -20
  493. package/dist/actions/manifest/extractManifest.d.ts +0 -14
  494. package/dist/actions/manifest/extractWorkspaceManifest.d.ts +0 -3
  495. package/dist/actions/manifest/purifyConfig.d.ts +0 -10
  496. package/dist/actions/manifest/schemaTypeHelpers.d.ts +0 -17
  497. package/dist/actions/manifest/types.d.ts +0 -119
  498. package/dist/actions/mcp/detectAvailableEditors.d.ts +0 -8
  499. package/dist/actions/mcp/getEditorsWithExistingConfig.d.ts +0 -8
  500. package/dist/actions/mcp/getEditorsWithExistingConfig.js +0 -29
  501. package/dist/actions/mcp/getEditorsWithExistingConfig.js.map +0 -1
  502. package/dist/actions/mcp/writeMCPConfig.d.ts +0 -9
  503. package/dist/actions/media/getMediaLibraryConfig.d.ts +0 -2
  504. package/dist/actions/media/importAspects.d.ts +0 -52
  505. package/dist/actions/media/importMedia.d.ts +0 -55
  506. package/dist/actions/media/importMediaDebug.d.ts +0 -1
  507. package/dist/actions/organizations/getOrganizationChoices.d.ts +0 -6
  508. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +0 -2
  509. package/dist/actions/organizations/hasProjectAttachGrant.d.ts +0 -1
  510. package/dist/actions/preview/getPreviewServerConfig.d.ts +0 -15
  511. package/dist/actions/preview/previewAction.d.ts +0 -10
  512. package/dist/actions/preview/types.d.ts +0 -2
  513. package/dist/actions/schema/deleteSchemaAction.d.ts +0 -23
  514. package/dist/actions/schema/deploySchemas.d.ts +0 -15
  515. package/dist/actions/schema/extract.d.ts +0 -7
  516. package/dist/actions/schema/extract.js +0 -38
  517. package/dist/actions/schema/extract.js.map +0 -1
  518. package/dist/actions/schema/formatSchemaValidation.d.ts +0 -3
  519. package/dist/actions/schema/listSchemas.d.ts +0 -12
  520. package/dist/actions/schema/metafile.d.ts +0 -21
  521. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -18
  522. package/dist/actions/schema/utils/debug.d.ts +0 -2
  523. package/dist/actions/schema/utils/manifestExtractor.d.ts +0 -9
  524. package/dist/actions/schema/utils/manifestReader.d.ts +0 -17
  525. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -2
  526. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +0 -29
  527. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +0 -14
  528. package/dist/actions/schema/utils/workspaceSchemaId.d.ts +0 -8
  529. package/dist/actions/schema/validateAction.d.ts +0 -11
  530. package/dist/actions/telemetry/fetchTelemetryConsent.d.ts +0 -11
  531. package/dist/actions/telemetry/fetchTelemetryConsent.js +0 -38
  532. package/dist/actions/telemetry/fetchTelemetryConsent.js.map +0 -1
  533. package/dist/actions/telemetry/getLearnMoreMessage.d.ts +0 -2
  534. package/dist/actions/telemetry/getStatusDisplay.d.ts +0 -2
  535. package/dist/actions/telemetry/getStatusMessage.d.ts +0 -2
  536. package/dist/actions/telemetry/isValidApiConsentStatus.d.ts +0 -20
  537. package/dist/actions/telemetry/isValidApiConsentStatus.js +0 -25
  538. package/dist/actions/telemetry/isValidApiConsentStatus.js.map +0 -1
  539. package/dist/actions/telemetry/resolveConsent.d.ts +0 -2
  540. package/dist/actions/telemetry/setConsent.d.ts +0 -13
  541. package/dist/actions/telemetry/telemetryDebug.d.ts +0 -1
  542. package/dist/actions/telemetry/telemetryDisclosure.d.ts +0 -1
  543. package/dist/actions/telemetry/telemetryLearnMoreMessage.d.ts +0 -2
  544. package/dist/actions/telemetry/types.d.ts +0 -14
  545. package/dist/actions/telemetry/types.js.map +0 -1
  546. package/dist/actions/tokens/constants.d.ts +0 -4
  547. package/dist/actions/tokens/types.d.ts +0 -32
  548. package/dist/actions/tokens/validateRole.d.ts +0 -9
  549. package/dist/actions/undeploy/getStudioOrAppUserApplication.d.ts +0 -9
  550. package/dist/actions/users/getMembersForProject.d.ts +0 -24
  551. package/dist/actions/users/getPendingInvitations.d.ts +0 -13
  552. package/dist/actions/users/types.d.ts +0 -39
  553. package/dist/actions/users/usersDebug.d.ts +0 -1
  554. package/dist/actions/users/validateEmail.d.ts +0 -1
  555. package/dist/actions/versions/buildPackageArray.d.ts +0 -18
  556. package/dist/actions/versions/filterSanityModules.d.ts +0 -8
  557. package/dist/actions/versions/findSanityModulesVersions.d.ts +0 -14
  558. package/dist/actions/versions/getFormatters.d.ts +0 -17
  559. package/dist/actions/versions/tryFindLatestVersion.d.ts +0 -8
  560. package/dist/actions/versions/types.d.ts +0 -14
  561. package/dist/actions/versions/versionsDebug.d.ts +0 -1
  562. package/dist/commands/backup/disable.d.ts +0 -13
  563. package/dist/commands/backup/download.d.ts +0 -21
  564. package/dist/commands/backup/enable.d.ts +0 -12
  565. package/dist/commands/backup/list.d.ts +0 -19
  566. package/dist/commands/build.d.ts +0 -18
  567. package/dist/commands/codemod.d.ts +0 -19
  568. package/dist/commands/cors/add.d.ts +0 -29
  569. package/dist/commands/cors/delete.d.ts +0 -13
  570. package/dist/commands/cors/list.d.ts +0 -9
  571. package/dist/commands/dataset/alias/create.d.ts +0 -13
  572. package/dist/commands/dataset/alias/delete.d.ts +0 -16
  573. package/dist/commands/dataset/alias/link.d.ts +0 -17
  574. package/dist/commands/dataset/alias/unlink.d.ts +0 -16
  575. package/dist/commands/dataset/copy.d.ts +0 -27
  576. package/dist/commands/dataset/create.d.ts +0 -15
  577. package/dist/commands/dataset/delete.d.ts +0 -15
  578. package/dist/commands/dataset/export.d.ts +0 -26
  579. package/dist/commands/dataset/import.d.ts +0 -1
  580. package/dist/commands/dataset/list.d.ts +0 -9
  581. package/dist/commands/dataset/visibility/get.d.ts +0 -12
  582. package/dist/commands/dataset/visibility/set.d.ts +0 -13
  583. package/dist/commands/debug.d.ts +0 -9
  584. package/dist/commands/deploy.d.ts +0 -23
  585. package/dist/commands/dev.d.ts +0 -14
  586. package/dist/commands/docs/browse.d.ts +0 -6
  587. package/dist/commands/docs/read.d.ts +0 -15
  588. package/dist/commands/docs/search.d.ts +0 -15
  589. package/dist/commands/documents/create.d.ts +0 -39
  590. package/dist/commands/documents/delete.d.ts +0 -17
  591. package/dist/commands/documents/get.d.ts +0 -16
  592. package/dist/commands/documents/query.d.ts +0 -19
  593. package/dist/commands/documents/validate.d.ts +0 -29
  594. package/dist/commands/exec.d.ts +0 -19
  595. package/dist/commands/graphql/list.d.ts +0 -9
  596. package/dist/commands/graphql/undeploy.d.ts +0 -16
  597. package/dist/commands/hook/attempt.d.ts +0 -13
  598. package/dist/commands/hook/create.d.ts +0 -9
  599. package/dist/commands/hook/delete.d.ts +0 -13
  600. package/dist/commands/hook/list.d.ts +0 -9
  601. package/dist/commands/hook/logs.d.ts +0 -19
  602. package/dist/commands/init.d.ts +0 -55
  603. package/dist/commands/install.d.ts +0 -10
  604. package/dist/commands/learn.d.ts +0 -6
  605. package/dist/commands/login.d.ts +0 -13
  606. package/dist/commands/logout.d.ts +0 -6
  607. package/dist/commands/manage.d.ts +0 -6
  608. package/dist/commands/manifest/extract.d.ts +0 -12
  609. package/dist/commands/mcp/configure.d.ts +0 -9
  610. package/dist/commands/media/create-aspect.d.ts +0 -9
  611. package/dist/commands/media/delete-aspect.d.ts +0 -16
  612. package/dist/commands/media/deploy-aspect.d.ts +0 -20
  613. package/dist/commands/media/export.d.ts +0 -21
  614. package/dist/commands/media/import.d.ts +0 -18
  615. package/dist/commands/openapi/get.d.ts +0 -17
  616. package/dist/commands/openapi/list.d.ts +0 -14
  617. package/dist/commands/preview.d.ts +0 -17
  618. package/dist/commands/projects/list.d.ts +0 -13
  619. package/dist/commands/schema/delete.d.ts +0 -16
  620. package/dist/commands/schema/deploy.d.ts +0 -16
  621. package/dist/commands/schema/extract.d.ts +0 -15
  622. package/dist/commands/schema/list.d.ts +0 -15
  623. package/dist/commands/schema/validate.d.ts +0 -15
  624. package/dist/commands/telemetry/disable.d.ts +0 -8
  625. package/dist/commands/telemetry/enable.d.ts +0 -8
  626. package/dist/commands/telemetry/status.d.ts +0 -8
  627. package/dist/commands/tokens/add.d.ts +0 -19
  628. package/dist/commands/tokens/delete.d.ts +0 -17
  629. package/dist/commands/tokens/list.d.ts +0 -12
  630. package/dist/commands/undeploy.d.ts +0 -8
  631. package/dist/commands/users/invite.d.ts +0 -17
  632. package/dist/commands/users/list.d.ts +0 -16
  633. package/dist/commands/versions.d.ts +0 -6
  634. package/dist/config/createCliConfig.d.ts +0 -73
  635. package/dist/config/defineCliConfig.d.ts +0 -3
  636. package/dist/hooks/prerun/flushTelemetry.worker.d.ts +0 -2
  637. package/dist/hooks/prerun/setupTelemetry.d.ts +0 -2
  638. package/dist/prompts/init/promptForTypescript.d.ts +0 -2
  639. package/dist/prompts/promptForDataset.d.ts +0 -17
  640. package/dist/prompts/promptForDatasetAclMode.d.ts +0 -9
  641. package/dist/prompts/promptForDatasetAliasName.d.ts +0 -4
  642. package/dist/prompts/promptForDatasetName.d.ts +0 -4
  643. package/dist/prompts/promptForMediaLibrary.d.ts +0 -15
  644. package/dist/prompts/selectDataset.d.ts +0 -3
  645. package/dist/prompts/selectMediaLibrary.d.ts +0 -5
  646. package/dist/server/devServer.d.ts +0 -24
  647. package/dist/server/gracefulServerDeath.d.ts +0 -3
  648. package/dist/server/previewServer.d.ts +0 -19
  649. package/dist/server/serverDebug.d.ts +0 -1
  650. package/dist/server/vite/plugin-sanity-basepath-redirect.d.ts +0 -2
  651. package/dist/server/vite/plugin-sanity-build-entries.d.ts +0 -9
  652. package/dist/server/vite/plugin-sanity-favicons.d.ts +0 -17
  653. package/dist/server/vite/plugin-sanity-runtime-rewrite.d.ts +0 -2
  654. package/dist/services/auth.d.ts +0 -2
  655. package/dist/services/backup.d.ts +0 -37
  656. package/dist/services/cors.d.ts +0 -23
  657. package/dist/services/datasetAliases.d.ts +0 -31
  658. package/dist/services/datasets.d.ts +0 -64
  659. package/dist/services/docs.d.ts +0 -15
  660. package/dist/services/getProjectFeatures.d.ts +0 -5
  661. package/dist/services/graphql.d.ts +0 -23
  662. package/dist/services/hooks.d.ts +0 -16
  663. package/dist/services/mcp.d.ts +0 -29
  664. package/dist/services/mediaLibraries.d.ts +0 -52
  665. package/dist/services/organizations.d.ts +0 -42
  666. package/dist/services/plans.d.ts +0 -2
  667. package/dist/services/projects.d.ts +0 -33
  668. package/dist/services/schemas.d.ts +0 -4
  669. package/dist/services/telemetry.d.ts +0 -2
  670. package/dist/services/tokens.d.ts +0 -43
  671. package/dist/services/user.d.ts +0 -15
  672. package/dist/services/userApplications.d.ts +0 -77
  673. package/dist/telemetry/cli.telemetry.d.ts +0 -20
  674. package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +0 -5
  675. package/dist/telemetry/store/cleanupOldTelemetryFiles.js +0 -30
  676. package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +0 -1
  677. package/dist/telemetry/store/createTelemetryStore.d.ts +0 -39
  678. package/dist/telemetry/store/createTelemetryStore.js +0 -95
  679. package/dist/telemetry/store/createTelemetryStore.js.map +0 -1
  680. package/dist/telemetry/store/createTraceId.d.ts +0 -10
  681. package/dist/telemetry/store/createTraceId.js +0 -10
  682. package/dist/telemetry/store/createTraceId.js.map +0 -1
  683. package/dist/telemetry/store/debug.d.ts +0 -5
  684. package/dist/telemetry/store/debug.js +0 -7
  685. package/dist/telemetry/store/debug.js.map +0 -1
  686. package/dist/telemetry/store/findTelemetryFiles.d.ts +0 -13
  687. package/dist/telemetry/store/findTelemetryFiles.js +0 -34
  688. package/dist/telemetry/store/findTelemetryFiles.js.map +0 -1
  689. package/dist/telemetry/store/flushTelemetryFiles.d.ts +0 -20
  690. package/dist/telemetry/store/flushTelemetryFiles.js +0 -107
  691. package/dist/telemetry/store/flushTelemetryFiles.js.map +0 -1
  692. package/dist/telemetry/store/generateTelemetryFilePath.d.ts +0 -17
  693. package/dist/telemetry/store/generateTelemetryFilePath.js +0 -30
  694. package/dist/telemetry/store/generateTelemetryFilePath.js.map +0 -1
  695. package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +0 -27
  696. package/dist/telemetry/store/getTelemetryBaseInfo.js +0 -34
  697. package/dist/telemetry/store/getTelemetryBaseInfo.js.map +0 -1
  698. package/dist/telemetry/store/logger.d.ts +0 -6
  699. package/dist/telemetry/store/logger.js +0 -54
  700. package/dist/telemetry/store/logger.js.map +0 -1
  701. package/dist/telemetry/store/trace.d.ts +0 -6
  702. package/dist/telemetry/store/trace.js +0 -150
  703. package/dist/telemetry/store/trace.js.map +0 -1
  704. package/dist/telemetry/utils/readNDJSON.d.ts +0 -10
  705. package/dist/telemetry/utils/readNDJSON.js +0 -18
  706. package/dist/telemetry/utils/readNDJSON.js.map +0 -1
  707. package/dist/threads/configClient.d.ts +0 -1
  708. package/dist/threads/configClient.js.map +0 -1
  709. package/dist/threads/registerBrowserEnv.d.ts +0 -1
  710. package/dist/threads/registerBrowserEnv.js.map +0 -1
  711. package/dist/threads/validateDocuments.d.ts +0 -45
  712. package/dist/threads/validateDocuments.js.map +0 -1
  713. package/dist/threads/validateSchema.d.ts +0 -35
  714. package/dist/threads/validateSchema.js.map +0 -1
  715. package/dist/types.d.ts +0 -16
  716. package/dist/util/absolutify.d.ts +0 -6
  717. package/dist/util/appId.d.ts +0 -18
  718. package/dist/util/canLaunchBrowser.d.ts +0 -1
  719. package/dist/util/cliClient.d.ts +0 -13
  720. package/dist/util/compareDependencyVersions.d.ts +0 -35
  721. package/dist/util/copyDir.d.ts +0 -20
  722. package/dist/util/detectRuntime.d.ts +0 -8
  723. package/dist/util/determineIsApp.d.ts +0 -7
  724. package/dist/util/dirIsEmptyOrNonExistent.d.ts +0 -1
  725. package/dist/util/ensureTrailingSlash.d.ts +0 -9
  726. package/dist/util/errorMessages.d.ts +0 -4
  727. package/dist/util/extractDocumentsFromNdjsonOrTarball.d.ts +0 -6
  728. package/dist/util/findNdjsonEntry.d.ts +0 -7
  729. package/dist/util/formatSize.d.ts +0 -6
  730. package/dist/util/getCliVersion.d.ts +0 -7
  731. package/dist/util/getErrorMessage.d.ts +0 -8
  732. package/dist/util/getLocalPackageVersion.d.ts +0 -9
  733. package/dist/util/getSharedServerConfig.d.ts +0 -30
  734. package/dist/util/getWorkspace.d.ts +0 -3
  735. package/dist/util/humanFileSize.d.ts +0 -1
  736. package/dist/util/importStudioConfig.d.ts +0 -1
  737. package/dist/util/isPathDirName.d.ts +0 -1
  738. package/dist/util/isSanityDocumentish.d.ts +0 -19
  739. package/dist/util/isStaging.d.ts +0 -7
  740. package/dist/util/isStaging.js +0 -10
  741. package/dist/util/isStaging.js.map +0 -1
  742. package/dist/util/loadEnv.d.ts +0 -1
  743. package/dist/util/moduleFormatUtils.d.ts +0 -3
  744. package/dist/util/packageManager/installPackages.d.ts +0 -18
  745. package/dist/util/packageManager/packageManagerChoice.d.ts +0 -29
  746. package/dist/util/packageManager/upgradePackages.d.ts +0 -17
  747. package/dist/util/parseArguments.d.ts +0 -35
  748. package/dist/util/pluralize.d.ts +0 -8
  749. package/dist/util/readModuleVersion.d.ts +0 -8
  750. package/dist/util/readPackageJson.d.ts +0 -31
  751. package/dist/util/readPackageManifest.d.ts +0 -21
  752. package/dist/util/toInt.d.ts +0 -1
  753. package/dist/util/trimHashFromVersion.d.ts +0 -5
  754. package/dist/util/uniqBy.d.ts +0 -1
  755. package/dist/util/validation/validateDocumentsUtils.d.ts +0 -12
  756. package/dist/util/warnAboutMissingAppId.d.ts +0 -7
  757. package/dist/util/workerChannels.d.ts +0 -59
  758. /package/dist/actions/{telemetry → init}/types.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/dataset/copy.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {exit} from '@oclif/core/errors'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk, spinner} from '@sanity/cli-core/ux'\nimport {Table} from 'console-table-printer'\nimport {formatDistance, formatDistanceToNow, parseISO} from 'date-fns'\n\nimport {validateDatasetName} from '../../actions/dataset/validateDatasetName.js'\nimport {promptForDataset} from '../../prompts/promptForDataset.js'\nimport {promptForDatasetName} from '../../prompts/promptForDatasetName.js'\nimport {\n copyDataset,\n type CopyJobProgressEvent,\n type DatasetCopyJob,\n followCopyJobProgress,\n listDatasetCopyJobs,\n listDatasets,\n} from '../../services/datasets.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst copyDatasetDebug = subdebug('dataset:copy')\n\nexport class CopyDatasetCommand extends SanityCommand<typeof CopyDatasetCommand> {\n static override args = {\n source: Args.string({\n description: 'Name of the dataset to copy from',\n required: false,\n }),\n target: Args.string({\n description: 'Name of the dataset to copy to',\n required: false,\n }),\n }\n\n static override description =\n 'Manages dataset copying, including starting a new copy job, listing copy jobs and following the progress of a running copy job'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively copy a dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> source-dataset',\n description: 'Copy from source-dataset (prompts for target)',\n },\n {\n command: '<%= config.bin %> <%= command.id %> source-dataset target-dataset',\n description: 'Copy from source-dataset to target-dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --skip-history source target',\n description: 'Copy without preserving document history (faster for large datasets)',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --detach source target',\n description: 'Start copy job without waiting for completion',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --attach <job-id>',\n description: 'Attach to a running copy job to follow progress',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --list',\n description: 'List all dataset copy jobs',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --list --offset 2 --limit 10',\n description: 'List copy jobs with pagination',\n },\n ]\n\n static override flags = {\n attach: Flags.string({\n description: 'Attach to the running copy process to show progress',\n exclusive: ['list', 'detach', 'skip-history'],\n required: false,\n }),\n detach: Flags.boolean({\n description: 'Start the copy without waiting for it to finish',\n exclusive: ['list', 'attach'],\n required: false,\n }),\n limit: Flags.integer({\n dependsOn: ['list'],\n description: 'Maximum number of jobs returned (default 10, max 1000)',\n max: 1000,\n required: false,\n }),\n list: Flags.boolean({\n description: 'Lists all dataset copy jobs',\n exclusive: ['attach', 'detach', 'skip-history'],\n required: false,\n }),\n offset: Flags.integer({\n dependsOn: ['list'],\n description: 'Start position in the list of jobs (default 0)',\n required: false,\n }),\n 'skip-history': Flags.boolean({\n description: \"Don't preserve document history on copy\",\n exclusive: ['list', 'attach'],\n required: false,\n }),\n }\n\n private projectId!: string\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(CopyDatasetCommand)\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n this.projectId = projectId\n\n // Route to appropriate mode\n if (flags.list) {\n return this.handleListMode(flags)\n }\n\n if (flags.attach) {\n return this.handleAttachMode(flags.attach)\n }\n\n return this.handleCopyMode(args, flags)\n }\n\n private displayCopyJobsTable(jobs: DatasetCopyJob[]): void {\n const table = new Table({\n columns: [\n {alignment: 'left', name: 'id', title: 'Job ID'},\n {alignment: 'left', name: 'sourceDataset', title: 'Source Dataset'},\n {alignment: 'left', name: 'targetDataset', title: 'Target Dataset'},\n {alignment: 'left', name: 'state', title: 'State'},\n {alignment: 'left', name: 'withHistory', title: 'With history'},\n {alignment: 'left', name: 'timeStarted', title: 'Time started'},\n {alignment: 'left', name: 'timeTaken', title: 'Time taken'},\n ],\n title: 'Dataset copy jobs for this project in descending order',\n })\n\n for (const job of jobs) {\n const {createdAt, id, sourceDataset, state, targetDataset, updatedAt, withHistory} = job\n\n let timeStarted = ''\n if (createdAt !== '') {\n timeStarted = formatDistanceToNow(parseISO(createdAt))\n }\n\n let timeTaken = ''\n if (updatedAt !== '') {\n timeTaken = formatDistance(parseISO(updatedAt), parseISO(createdAt))\n }\n\n let color: '' | 'green' | 'red' | 'yellow' = ''\n switch (state) {\n case 'completed': {\n color = 'green'\n break\n }\n case 'failed': {\n color = 'red'\n break\n }\n case 'pending': {\n color = 'yellow'\n break\n }\n default: {\n color = ''\n }\n }\n\n table.addRow(\n {\n id,\n sourceDataset,\n state,\n targetDataset,\n timeStarted: `${timeStarted} ago`,\n timeTaken,\n withHistory,\n },\n {color},\n )\n }\n\n table.printTable()\n }\n\n private async handleAttachMode(jobId: string): Promise<void> {\n copyDatasetDebug('Attaching to copy job %s', jobId)\n\n if (!jobId || typeof jobId !== 'string' || jobId.trim() === '') {\n this.error('Please supply a valid jobId', {exit: 1})\n }\n\n try {\n await this.subscribeToProgress(jobId)\n this.log(`Job ${chalk.green(jobId)} completed`)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n copyDatasetDebug('Failed to attach to copy job: %s', message, error)\n this.error(`Failed to attach to copy job: ${message}`, {exit: 1})\n }\n }\n\n private async handleCopyMode(\n args: {source?: string; target?: string},\n flags: {detach?: boolean; 'skip-history'?: boolean},\n ): Promise<void> {\n copyDatasetDebug('Starting copy mode')\n\n const skipHistory = Boolean(flags['skip-history'])\n\n // Get and validate source dataset\n let sourceDataset = args.source\n if (sourceDataset) {\n const nameError = validateDatasetName(sourceDataset)\n if (nameError) {\n this.error(nameError, {exit: 1})\n }\n }\n\n let datasetsResponse\n try {\n datasetsResponse = await listDatasets(this.projectId)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n copyDatasetDebug('Failed to fetch datasets: %s', message, error)\n this.error(`Failed to fetch datasets: ${message}`, {exit: 1})\n }\n\n const datasetNames = new Set(datasetsResponse.map((ds) => ds.name))\n\n // Prompt for source if not provided\n if (!sourceDataset) {\n sourceDataset = await promptForDataset({\n datasets: datasetsResponse,\n })\n }\n\n if (!datasetNames.has(sourceDataset)) {\n this.error(`Source dataset \"${sourceDataset}\" doesn't exist`, {exit: 1})\n }\n\n // Get and validate target dataset\n let targetDataset = args.target\n if (targetDataset) {\n const nameError = validateDatasetName(targetDataset)\n if (nameError) {\n this.error(nameError, {exit: 1})\n }\n } else {\n targetDataset = await promptForDatasetName({\n message: 'Target dataset name:',\n })\n }\n\n if (datasetNames.has(targetDataset)) {\n this.error(`Target dataset \"${targetDataset}\" already exists`, {exit: 1})\n }\n\n // Start the copy job\n try {\n this.log(`Copying dataset ${chalk.green(sourceDataset)} to ${chalk.green(targetDataset)}...`)\n\n if (!skipHistory) {\n this.log(\n `Note: You can run this command with flag '--skip-history'. The flag will reduce copy time in larger datasets.`,\n )\n }\n\n const response = await copyDataset({\n projectId: this.projectId,\n skipHistory,\n sourceDataset,\n targetDataset,\n })\n\n this.log(`Job ${chalk.green(response.jobId)} started`)\n\n if (flags.detach) {\n return\n }\n\n await this.subscribeToProgress(response.jobId)\n this.log(`Job ${chalk.green(response.jobId)} completed`)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n copyDatasetDebug('Dataset copying failed: %s', message, error)\n this.error(`Dataset copying failed: ${message}`, {exit: 1})\n }\n }\n\n private async handleListMode(flags: {limit?: number; offset?: number}): Promise<void> {\n copyDatasetDebug('Listing dataset copy jobs')\n\n try {\n const jobs = await listDatasetCopyJobs({\n limit: flags.limit,\n offset: flags.offset,\n projectId: this.projectId,\n })\n\n if (jobs.length === 0) {\n this.log(\"This project doesn't have any dataset copy jobs\")\n return\n }\n\n this.displayCopyJobsTable(jobs)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n copyDatasetDebug('Failed to list dataset copy jobs: %s', message, error)\n this.error(`Failed to list dataset copy jobs: ${message}`, {exit: 1})\n }\n }\n\n private async subscribeToProgress(jobId: string): Promise<void> {\n let currentProgress = 0\n const spin = spinner('').start()\n\n return new Promise<void>((resolve, reject) => {\n const subscription = followCopyJobProgress({jobId, projectId: this.projectId}).subscribe({\n complete: () => {\n spin.succeed('Copy finished.')\n resolve()\n },\n error: (err) => {\n spin.fail('Copy failed.')\n reject(err)\n },\n next: (event: CopyJobProgressEvent) => {\n if (typeof event.progress === 'number') {\n currentProgress = event.progress\n }\n spin.text = `Copy in progress: ${currentProgress}%`\n },\n })\n\n // Cleanup on process termination - use 'once' to prevent memory leaks\n process.once('SIGINT', () => {\n subscription.unsubscribe()\n spin.fail('Copy interrupted.')\n exit(130)\n })\n })\n }\n}\n"],"names":["Args","Flags","exit","SanityCommand","subdebug","chalk","spinner","Table","formatDistance","formatDistanceToNow","parseISO","validateDatasetName","promptForDataset","promptForDatasetName","copyDataset","followCopyJobProgress","listDatasetCopyJobs","listDatasets","NO_PROJECT_ID","copyDatasetDebug","CopyDatasetCommand","args","source","string","description","required","target","examples","command","flags","attach","exclusive","detach","boolean","limit","integer","dependsOn","max","list","offset","projectId","run","parse","getProjectId","error","handleListMode","handleAttachMode","handleCopyMode","displayCopyJobsTable","jobs","table","columns","alignment","name","title","job","createdAt","id","sourceDataset","state","targetDataset","updatedAt","withHistory","timeStarted","timeTaken","color","addRow","printTable","jobId","trim","subscribeToProgress","log","green","message","Error","String","skipHistory","Boolean","nameError","datasetsResponse","datasetNames","Set","map","ds","datasets","has","response","length","currentProgress","spin","start","Promise","resolve","reject","subscription","subscribe","complete","succeed","err","fail","next","event","progress","text","process","once","unsubscribe"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/dataset/copy.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {exit} from '@oclif/core/errors'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\nimport {Table} from 'console-table-printer'\nimport {formatDistance, formatDistanceToNow, parseISO} from 'date-fns'\n\nimport {validateDatasetName} from '../../actions/dataset/validateDatasetName.js'\nimport {promptForDataset} from '../../prompts/promptForDataset.js'\nimport {promptForDatasetName} from '../../prompts/promptForDatasetName.js'\nimport {\n copyDataset,\n type CopyJobProgressEvent,\n type DatasetCopyJob,\n followCopyJobProgress,\n listDatasetCopyJobs,\n listDatasets,\n} from '../../services/datasets.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst copyDatasetDebug = subdebug('dataset:copy')\n\nexport class CopyDatasetCommand extends SanityCommand<typeof CopyDatasetCommand> {\n static override args = {\n source: Args.string({\n description: 'Name of the dataset to copy from',\n required: false,\n }),\n target: Args.string({\n description: 'Name of the dataset to copy to',\n required: false,\n }),\n }\n\n static override description =\n 'Manages dataset copying, including starting a new copy job, listing copy jobs and following the progress of a running copy job'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively copy a dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> source-dataset',\n description: 'Copy from source-dataset (prompts for target)',\n },\n {\n command: '<%= config.bin %> <%= command.id %> source-dataset target-dataset',\n description: 'Copy from source-dataset to target-dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --skip-history source target',\n description: 'Copy without preserving document history (faster for large datasets)',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --detach source target',\n description: 'Start copy job without waiting for completion',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --attach <job-id>',\n description: 'Attach to a running copy job to follow progress',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --list',\n description: 'List all dataset copy jobs',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --list --offset 2 --limit 10',\n description: 'List copy jobs with pagination',\n },\n ]\n\n static override flags = {\n attach: Flags.string({\n description: 'Attach to the running copy process to show progress',\n exclusive: ['list', 'detach', 'skip-history'],\n required: false,\n }),\n detach: Flags.boolean({\n description: 'Start the copy without waiting for it to finish',\n exclusive: ['list', 'attach'],\n required: false,\n }),\n limit: Flags.integer({\n dependsOn: ['list'],\n description: 'Maximum number of jobs returned (default 10, max 1000)',\n max: 1000,\n required: false,\n }),\n list: Flags.boolean({\n description: 'Lists all dataset copy jobs',\n exclusive: ['attach', 'detach', 'skip-history'],\n required: false,\n }),\n offset: Flags.integer({\n dependsOn: ['list'],\n description: 'Start position in the list of jobs (default 0)',\n required: false,\n }),\n 'skip-history': Flags.boolean({\n description: \"Don't preserve document history on copy\",\n exclusive: ['list', 'attach'],\n required: false,\n }),\n }\n\n private projectId!: string\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(CopyDatasetCommand)\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n this.projectId = projectId\n\n // Route to appropriate mode\n if (flags.list) {\n return this.handleListMode(flags)\n }\n\n if (flags.attach) {\n return this.handleAttachMode(flags.attach)\n }\n\n return this.handleCopyMode(args, flags)\n }\n\n private displayCopyJobsTable(jobs: DatasetCopyJob[]): void {\n const table = new Table({\n columns: [\n {alignment: 'left', name: 'id', title: 'Job ID'},\n {alignment: 'left', name: 'sourceDataset', title: 'Source Dataset'},\n {alignment: 'left', name: 'targetDataset', title: 'Target Dataset'},\n {alignment: 'left', name: 'state', title: 'State'},\n {alignment: 'left', name: 'withHistory', title: 'With history'},\n {alignment: 'left', name: 'timeStarted', title: 'Time started'},\n {alignment: 'left', name: 'timeTaken', title: 'Time taken'},\n ],\n title: 'Dataset copy jobs for this project in descending order',\n })\n\n for (const job of jobs) {\n const {createdAt, id, sourceDataset, state, targetDataset, updatedAt, withHistory} = job\n\n let timeStarted = ''\n if (createdAt !== '') {\n timeStarted = formatDistanceToNow(parseISO(createdAt))\n }\n\n let timeTaken = ''\n if (updatedAt !== '') {\n timeTaken = formatDistance(parseISO(updatedAt), parseISO(createdAt))\n }\n\n let color: '' | 'green' | 'red' | 'yellow' = ''\n switch (state) {\n case 'completed': {\n color = 'green'\n break\n }\n case 'failed': {\n color = 'red'\n break\n }\n case 'pending': {\n color = 'yellow'\n break\n }\n default: {\n color = ''\n }\n }\n\n table.addRow(\n {\n id,\n sourceDataset,\n state,\n targetDataset,\n timeStarted: `${timeStarted} ago`,\n timeTaken,\n withHistory,\n },\n {color},\n )\n }\n\n table.printTable()\n }\n\n private async handleAttachMode(jobId: string): Promise<void> {\n copyDatasetDebug('Attaching to copy job %s', jobId)\n\n if (!jobId || typeof jobId !== 'string' || jobId.trim() === '') {\n this.error('Please supply a valid jobId', {exit: 1})\n }\n\n try {\n await this.subscribeToProgress(jobId)\n this.log(`Job ${styleText('green', jobId)} completed`)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n copyDatasetDebug('Failed to attach to copy job: %s', message, error)\n this.error(`Failed to attach to copy job: ${message}`, {exit: 1})\n }\n }\n\n private async handleCopyMode(\n args: {source?: string; target?: string},\n flags: {detach?: boolean; 'skip-history'?: boolean},\n ): Promise<void> {\n copyDatasetDebug('Starting copy mode')\n\n const skipHistory = Boolean(flags['skip-history'])\n\n // Get and validate source dataset\n let sourceDataset = args.source\n if (sourceDataset) {\n const nameError = validateDatasetName(sourceDataset)\n if (nameError) {\n this.error(nameError, {exit: 1})\n }\n }\n\n let datasetsResponse\n try {\n datasetsResponse = await listDatasets(this.projectId)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n copyDatasetDebug('Failed to fetch datasets: %s', message, error)\n this.error(`Failed to fetch datasets: ${message}`, {exit: 1})\n }\n\n const datasetNames = new Set(datasetsResponse.map((ds) => ds.name))\n\n // Prompt for source if not provided\n if (!sourceDataset) {\n sourceDataset = await promptForDataset({\n datasets: datasetsResponse,\n })\n }\n\n if (!datasetNames.has(sourceDataset)) {\n this.error(`Source dataset \"${sourceDataset}\" doesn't exist`, {exit: 1})\n }\n\n // Get and validate target dataset\n let targetDataset = args.target\n if (targetDataset) {\n const nameError = validateDatasetName(targetDataset)\n if (nameError) {\n this.error(nameError, {exit: 1})\n }\n } else {\n targetDataset = await promptForDatasetName({\n message: 'Target dataset name:',\n })\n }\n\n if (datasetNames.has(targetDataset)) {\n this.error(`Target dataset \"${targetDataset}\" already exists`, {exit: 1})\n }\n\n // Start the copy job\n try {\n this.log(\n `Copying dataset ${styleText('green', sourceDataset)} to ${styleText('green', targetDataset)}...`,\n )\n\n if (!skipHistory) {\n this.log(\n `Note: You can run this command with flag '--skip-history'. The flag will reduce copy time in larger datasets.`,\n )\n }\n\n const response = await copyDataset({\n projectId: this.projectId,\n skipHistory,\n sourceDataset,\n targetDataset,\n })\n\n this.log(`Job ${styleText('green', response.jobId)} started`)\n\n if (flags.detach) {\n return\n }\n\n await this.subscribeToProgress(response.jobId)\n this.log(`Job ${styleText('green', response.jobId)} completed`)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n copyDatasetDebug('Dataset copying failed: %s', message, error)\n this.error(`Dataset copying failed: ${message}`, {exit: 1})\n }\n }\n\n private async handleListMode(flags: {limit?: number; offset?: number}): Promise<void> {\n copyDatasetDebug('Listing dataset copy jobs')\n\n try {\n const jobs = await listDatasetCopyJobs({\n limit: flags.limit,\n offset: flags.offset,\n projectId: this.projectId,\n })\n\n if (jobs.length === 0) {\n this.log(\"This project doesn't have any dataset copy jobs\")\n return\n }\n\n this.displayCopyJobsTable(jobs)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n copyDatasetDebug('Failed to list dataset copy jobs: %s', message, error)\n this.error(`Failed to list dataset copy jobs: ${message}`, {exit: 1})\n }\n }\n\n private async subscribeToProgress(jobId: string): Promise<void> {\n let currentProgress = 0\n const spin = spinner('').start()\n\n return new Promise<void>((resolve, reject) => {\n const subscription = followCopyJobProgress({jobId, projectId: this.projectId}).subscribe({\n complete: () => {\n spin.succeed('Copy finished.')\n resolve()\n },\n error: (err) => {\n spin.fail('Copy failed.')\n reject(err)\n },\n next: (event: CopyJobProgressEvent) => {\n if (typeof event.progress === 'number') {\n currentProgress = event.progress\n }\n spin.text = `Copy in progress: ${currentProgress}%`\n },\n })\n\n // Cleanup on process termination - use 'once' to prevent memory leaks\n process.once('SIGINT', () => {\n subscription.unsubscribe()\n spin.fail('Copy interrupted.')\n exit(130)\n })\n })\n }\n}\n"],"names":["styleText","Args","Flags","exit","SanityCommand","subdebug","spinner","Table","formatDistance","formatDistanceToNow","parseISO","validateDatasetName","promptForDataset","promptForDatasetName","copyDataset","followCopyJobProgress","listDatasetCopyJobs","listDatasets","NO_PROJECT_ID","copyDatasetDebug","CopyDatasetCommand","args","source","string","description","required","target","examples","command","flags","attach","exclusive","detach","boolean","limit","integer","dependsOn","max","list","offset","projectId","run","parse","getProjectId","error","handleListMode","handleAttachMode","handleCopyMode","displayCopyJobsTable","jobs","table","columns","alignment","name","title","job","createdAt","id","sourceDataset","state","targetDataset","updatedAt","withHistory","timeStarted","timeTaken","color","addRow","printTable","jobId","trim","subscribeToProgress","log","message","Error","String","skipHistory","Boolean","nameError","datasetsResponse","datasetNames","Set","map","ds","datasets","has","response","length","currentProgress","spin","start","Promise","resolve","reject","subscription","subscribe","complete","succeed","err","fail","next","event","progress","text","process","once","unsubscribe"],"mappings":"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"}
@@ -86,13 +86,20 @@ export class CreateDatasetCommand extends SanityCommand {
86
86
  }
87
87
  const canCreatePrivate = projectFeatures.includes('privateDataset');
88
88
  createDatasetDebug('%s create private datasets', canCreatePrivate ? 'Can' : 'Cannot');
89
- await createDataset({
90
- datasetName,
91
- output: this.output,
92
- projectFeatures,
93
- projectId,
94
- visibility
95
- });
89
+ try {
90
+ await createDataset({
91
+ datasetName,
92
+ output: this.output,
93
+ projectFeatures,
94
+ projectId,
95
+ visibility
96
+ });
97
+ } catch (error) {
98
+ const message = error instanceof Error ? error.message : String(error);
99
+ this.error(`Failed to create dataset: ${message}`, {
100
+ exit: 1
101
+ });
102
+ }
96
103
  }
97
104
  }
98
105
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/dataset/create.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {createDataset} from '../../actions/dataset/create.js'\nimport {validateDatasetName} from '../../actions/dataset/validateDatasetName.js'\nimport {promptForDatasetName} from '../../prompts/promptForDatasetName.js'\nimport {listDatasets} from '../../services/datasets.js'\nimport {getProjectFeatures} from '../../services/getProjectFeatures.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst createDatasetDebug = subdebug('dataset:create')\n\nconst ALLOWED_ACL_MODES = ['custom', 'private', 'public']\n\nexport class CreateDatasetCommand extends SanityCommand<typeof CreateDatasetCommand> {\n static override args = {\n name: Args.string({\n description: 'Name of the dataset to create',\n required: false,\n }),\n }\n\n static override description = 'Create a new dataset within your project'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively create a dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset',\n description: 'Create a dataset named \"my-dataset\"',\n },\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset --visibility private',\n description: 'Create a private dataset named \"my-dataset\"',\n },\n ]\n\n static override flags = {\n visibility: Flags.string({\n description: 'Set visibility for this dataset (custom/private/public)',\n options: ALLOWED_ACL_MODES,\n required: false,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(CreateDatasetCommand)\n const {visibility} = flags\n\n // Ensure we have project context\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n // Get dataset name from args or prompt\n let {name: datasetName} = args\n if (datasetName) {\n const nameError = validateDatasetName(datasetName)\n if (nameError) {\n this.error(nameError, {exit: 1})\n }\n } else {\n datasetName = await promptForDatasetName()\n }\n\n let datasets: string[]\n let projectFeatures: string[]\n\n try {\n const [datasetsResponse, featuresResponse] = await Promise.all([\n listDatasets(projectId),\n getProjectFeatures(projectId),\n ])\n datasets = datasetsResponse.map((ds) => ds.name)\n projectFeatures = featuresResponse\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n createDatasetDebug(`Failed to fetch project data: ${message}`, error)\n this.error(`Failed to fetch project data: ${message}`, {exit: 1})\n }\n\n if (datasets.includes(datasetName)) {\n this.error(`Dataset \"${datasetName}\" already exists`, {exit: 1})\n }\n\n const canCreatePrivate = projectFeatures.includes('privateDataset')\n createDatasetDebug('%s create private datasets', canCreatePrivate ? 'Can' : 'Cannot')\n\n await createDataset({\n datasetName,\n output: this.output,\n projectFeatures,\n projectId,\n visibility,\n })\n }\n}\n"],"names":["Args","Flags","SanityCommand","subdebug","createDataset","validateDatasetName","promptForDatasetName","listDatasets","getProjectFeatures","NO_PROJECT_ID","createDatasetDebug","ALLOWED_ACL_MODES","CreateDatasetCommand","args","name","string","description","required","examples","command","flags","visibility","options","run","parse","projectId","getProjectId","error","exit","datasetName","nameError","datasets","projectFeatures","datasetsResponse","featuresResponse","Promise","all","map","ds","message","Error","String","includes","canCreatePrivate","output"],"mappings":"AAAA,SAAQA,IAAI,EAAEC,KAAK,QAAO,cAAa;AACvC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAExD,SAAQC,aAAa,QAAO,kCAAiC;AAC7D,SAAQC,mBAAmB,QAAO,+CAA8C;AAChF,SAAQC,oBAAoB,QAAO,wCAAuC;AAC1E,SAAQC,YAAY,QAAO,6BAA4B;AACvD,SAAQC,kBAAkB,QAAO,uCAAsC;AACvE,SAAQC,aAAa,QAAO,8BAA6B;AAEzD,MAAMC,qBAAqBP,SAAS;AAEpC,MAAMQ,oBAAoB;IAAC;IAAU;IAAW;CAAS;AAEzD,OAAO,MAAMC,6BAA6BV;IACxC,OAAgBW,OAAO;QACrBC,MAAMd,KAAKe,MAAM,CAAC;YAChBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,2CAA0C;IAExE,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,OAAgBI,QAAQ;QACtBC,YAAYpB,MAAMc,MAAM,CAAC;YACvBC,aAAa;YACbM,SAASX;YACTM,UAAU;QACZ;IACF,EAAC;IAED,MAAaM,MAAqB;QAChC,MAAM,EAACV,IAAI,EAAEO,KAAK,EAAC,GAAG,MAAM,IAAI,CAACI,KAAK,CAACZ;QACvC,MAAM,EAACS,UAAU,EAAC,GAAGD;QAErB,iCAAiC;QACjC,MAAMK,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAAClB,eAAe;gBAACmB,MAAM;YAAC;QACpC;QAEA,uCAAuC;QACvC,IAAI,EAACd,MAAMe,WAAW,EAAC,GAAGhB;QAC1B,IAAIgB,aAAa;YACf,MAAMC,YAAYzB,oBAAoBwB;YACtC,IAAIC,WAAW;gBACb,IAAI,CAACH,KAAK,CAACG,WAAW;oBAACF,MAAM;gBAAC;YAChC;QACF,OAAO;YACLC,cAAc,MAAMvB;QACtB;QAEA,IAAIyB;QACJ,IAAIC;QAEJ,IAAI;YACF,MAAM,CAACC,kBAAkBC,iBAAiB,GAAG,MAAMC,QAAQC,GAAG,CAAC;gBAC7D7B,aAAakB;gBACbjB,mBAAmBiB;aACpB;YACDM,WAAWE,iBAAiBI,GAAG,CAAC,CAACC,KAAOA,GAAGxB,IAAI;YAC/CkB,kBAAkBE;QACpB,EAAE,OAAOP,OAAO;YACd,MAAMY,UAAUZ,iBAAiBa,QAAQb,MAAMY,OAAO,GAAGE,OAAOd;YAChEjB,mBAAmB,CAAC,8BAA8B,EAAE6B,SAAS,EAAEZ;YAC/D,IAAI,CAACA,KAAK,CAAC,CAAC,8BAA8B,EAAEY,SAAS,EAAE;gBAACX,MAAM;YAAC;QACjE;QAEA,IAAIG,SAASW,QAAQ,CAACb,cAAc;YAClC,IAAI,CAACF,KAAK,CAAC,CAAC,SAAS,EAAEE,YAAY,gBAAgB,CAAC,EAAE;gBAACD,MAAM;YAAC;QAChE;QAEA,MAAMe,mBAAmBX,gBAAgBU,QAAQ,CAAC;QAClDhC,mBAAmB,8BAA8BiC,mBAAmB,QAAQ;QAE5E,MAAMvC,cAAc;YAClByB;YACAe,QAAQ,IAAI,CAACA,MAAM;YACnBZ;YACAP;YACAJ;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/dataset/create.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {createDataset} from '../../actions/dataset/create.js'\nimport {validateDatasetName} from '../../actions/dataset/validateDatasetName.js'\nimport {promptForDatasetName} from '../../prompts/promptForDatasetName.js'\nimport {listDatasets} from '../../services/datasets.js'\nimport {getProjectFeatures} from '../../services/getProjectFeatures.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst createDatasetDebug = subdebug('dataset:create')\n\nconst ALLOWED_ACL_MODES = ['custom', 'private', 'public']\n\nexport class CreateDatasetCommand extends SanityCommand<typeof CreateDatasetCommand> {\n static override args = {\n name: Args.string({\n description: 'Name of the dataset to create',\n required: false,\n }),\n }\n\n static override description = 'Create a new dataset within your project'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively create a dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset',\n description: 'Create a dataset named \"my-dataset\"',\n },\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset --visibility private',\n description: 'Create a private dataset named \"my-dataset\"',\n },\n ]\n\n static override flags = {\n visibility: Flags.string({\n description: 'Set visibility for this dataset (custom/private/public)',\n options: ALLOWED_ACL_MODES,\n required: false,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(CreateDatasetCommand)\n const {visibility} = flags\n\n // Ensure we have project context\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n // Get dataset name from args or prompt\n let {name: datasetName} = args\n if (datasetName) {\n const nameError = validateDatasetName(datasetName)\n if (nameError) {\n this.error(nameError, {exit: 1})\n }\n } else {\n datasetName = await promptForDatasetName()\n }\n\n let datasets: string[]\n let projectFeatures: string[]\n\n try {\n const [datasetsResponse, featuresResponse] = await Promise.all([\n listDatasets(projectId),\n getProjectFeatures(projectId),\n ])\n datasets = datasetsResponse.map((ds) => ds.name)\n projectFeatures = featuresResponse\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n createDatasetDebug(`Failed to fetch project data: ${message}`, error)\n this.error(`Failed to fetch project data: ${message}`, {exit: 1})\n }\n\n if (datasets.includes(datasetName)) {\n this.error(`Dataset \"${datasetName}\" already exists`, {exit: 1})\n }\n\n const canCreatePrivate = projectFeatures.includes('privateDataset')\n createDatasetDebug('%s create private datasets', canCreatePrivate ? 'Can' : 'Cannot')\n\n try {\n await createDataset({\n datasetName,\n output: this.output,\n projectFeatures,\n projectId,\n visibility,\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n this.error(`Failed to create dataset: ${message}`, {exit: 1})\n }\n }\n}\n"],"names":["Args","Flags","SanityCommand","subdebug","createDataset","validateDatasetName","promptForDatasetName","listDatasets","getProjectFeatures","NO_PROJECT_ID","createDatasetDebug","ALLOWED_ACL_MODES","CreateDatasetCommand","args","name","string","description","required","examples","command","flags","visibility","options","run","parse","projectId","getProjectId","error","exit","datasetName","nameError","datasets","projectFeatures","datasetsResponse","featuresResponse","Promise","all","map","ds","message","Error","String","includes","canCreatePrivate","output"],"mappings":"AAAA,SAAQA,IAAI,EAAEC,KAAK,QAAO,cAAa;AACvC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAExD,SAAQC,aAAa,QAAO,kCAAiC;AAC7D,SAAQC,mBAAmB,QAAO,+CAA8C;AAChF,SAAQC,oBAAoB,QAAO,wCAAuC;AAC1E,SAAQC,YAAY,QAAO,6BAA4B;AACvD,SAAQC,kBAAkB,QAAO,uCAAsC;AACvE,SAAQC,aAAa,QAAO,8BAA6B;AAEzD,MAAMC,qBAAqBP,SAAS;AAEpC,MAAMQ,oBAAoB;IAAC;IAAU;IAAW;CAAS;AAEzD,OAAO,MAAMC,6BAA6BV;IACxC,OAAgBW,OAAO;QACrBC,MAAMd,KAAKe,MAAM,CAAC;YAChBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,2CAA0C;IAExE,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,OAAgBI,QAAQ;QACtBC,YAAYpB,MAAMc,MAAM,CAAC;YACvBC,aAAa;YACbM,SAASX;YACTM,UAAU;QACZ;IACF,EAAC;IAED,MAAaM,MAAqB;QAChC,MAAM,EAACV,IAAI,EAAEO,KAAK,EAAC,GAAG,MAAM,IAAI,CAACI,KAAK,CAACZ;QACvC,MAAM,EAACS,UAAU,EAAC,GAAGD;QAErB,iCAAiC;QACjC,MAAMK,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAAClB,eAAe;gBAACmB,MAAM;YAAC;QACpC;QAEA,uCAAuC;QACvC,IAAI,EAACd,MAAMe,WAAW,EAAC,GAAGhB;QAC1B,IAAIgB,aAAa;YACf,MAAMC,YAAYzB,oBAAoBwB;YACtC,IAAIC,WAAW;gBACb,IAAI,CAACH,KAAK,CAACG,WAAW;oBAACF,MAAM;gBAAC;YAChC;QACF,OAAO;YACLC,cAAc,MAAMvB;QACtB;QAEA,IAAIyB;QACJ,IAAIC;QAEJ,IAAI;YACF,MAAM,CAACC,kBAAkBC,iBAAiB,GAAG,MAAMC,QAAQC,GAAG,CAAC;gBAC7D7B,aAAakB;gBACbjB,mBAAmBiB;aACpB;YACDM,WAAWE,iBAAiBI,GAAG,CAAC,CAACC,KAAOA,GAAGxB,IAAI;YAC/CkB,kBAAkBE;QACpB,EAAE,OAAOP,OAAO;YACd,MAAMY,UAAUZ,iBAAiBa,QAAQb,MAAMY,OAAO,GAAGE,OAAOd;YAChEjB,mBAAmB,CAAC,8BAA8B,EAAE6B,SAAS,EAAEZ;YAC/D,IAAI,CAACA,KAAK,CAAC,CAAC,8BAA8B,EAAEY,SAAS,EAAE;gBAACX,MAAM;YAAC;QACjE;QAEA,IAAIG,SAASW,QAAQ,CAACb,cAAc;YAClC,IAAI,CAACF,KAAK,CAAC,CAAC,SAAS,EAAEE,YAAY,gBAAgB,CAAC,EAAE;gBAACD,MAAM;YAAC;QAChE;QAEA,MAAMe,mBAAmBX,gBAAgBU,QAAQ,CAAC;QAClDhC,mBAAmB,8BAA8BiC,mBAAmB,QAAQ;QAE5E,IAAI;YACF,MAAMvC,cAAc;gBAClByB;gBACAe,QAAQ,IAAI,CAACA,MAAM;gBACnBZ;gBACAP;gBACAJ;YACF;QACF,EAAE,OAAOM,OAAO;YACd,MAAMY,UAAUZ,iBAAiBa,QAAQb,MAAMY,OAAO,GAAGE,OAAOd;YAChE,IAAI,CAACA,KAAK,CAAC,CAAC,0BAA0B,EAAEY,SAAS,EAAE;gBAACX,MAAM;YAAC;QAC7D;IACF;AACF"}
@@ -1,6 +1,7 @@
1
+ import { styleText } from 'node:util';
1
2
  import { Args, Flags } from '@oclif/core';
2
3
  import { SanityCommand, subdebug } from '@sanity/cli-core';
3
- import { chalk, input, logSymbols } from '@sanity/cli-core/ux';
4
+ import { input, logSymbols } from '@sanity/cli-core/ux';
4
5
  import { validateDatasetName } from '../../actions/dataset/validateDatasetName.js';
5
6
  import { deleteDataset } from '../../services/datasets.js';
6
7
  import { getProjectById } from '../../services/projects.js';
@@ -51,7 +52,16 @@ export class DeleteDatasetCommand extends SanityCommand {
51
52
  } else {
52
53
  try {
53
54
  const project = await getProjectById(projectId);
54
- this.log(chalk.yellow(`${logSymbols.warning} Deleting dataset "${chalk.bold(chalk.underline(datasetName))}" from project "${chalk.bold(chalk.underline(project.displayName))} (${chalk.bold(chalk.underline(project.id))})"\n`));
55
+ this.log(styleText('yellow', `${logSymbols.warning} Deleting dataset "${styleText([
56
+ 'bold',
57
+ 'underline'
58
+ ], datasetName)}" from project "${styleText([
59
+ 'bold',
60
+ 'underline'
61
+ ], project.displayName)} (${styleText([
62
+ 'bold',
63
+ 'underline'
64
+ ], project.id)})"\n`));
55
65
  } catch (error) {
56
66
  const err = error instanceof Error ? error : new Error(`${error}`);
57
67
  deleteDatasetDebug(`Error getting project ${projectId}`, err);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/dataset/delete.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk, input, logSymbols} from '@sanity/cli-core/ux'\n\nimport {validateDatasetName} from '../../actions/dataset/validateDatasetName.js'\nimport {deleteDataset} from '../../services/datasets.js'\nimport {getProjectById} from '../../services/projects.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst deleteDatasetDebug = subdebug('dataset:delete')\n\nexport class DeleteDatasetCommand extends SanityCommand<typeof DeleteDatasetCommand> {\n static override args = {\n datasetName: Args.string({\n description: 'Dataset name to delete',\n required: true,\n }),\n }\n\n static override description = 'Delete a dataset within your project'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset',\n description: 'Delete a specific dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset --force',\n description: 'Delete a specific dataset without confirmation',\n },\n ]\n\n static override flags = {\n force: Flags.boolean({\n description: 'Do not prompt for delete confirmation - forcefully delete',\n required: false,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(DeleteDatasetCommand)\n const {force} = flags\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n const datasetName = args.datasetName\n\n const dsError = validateDatasetName(datasetName)\n if (dsError) {\n this.error(dsError, {exit: 1})\n }\n\n if (force) {\n this.warn(`'--force' used: skipping confirmation, deleting dataset \"${datasetName}\"`)\n } else {\n try {\n const project = await getProjectById(projectId)\n this.log(\n chalk.yellow(\n `${logSymbols.warning} Deleting dataset \"${chalk.bold(chalk.underline(datasetName))}\" from project \"${chalk.bold(chalk.underline(project.displayName))} (${chalk.bold(chalk.underline(project.id))})\"\\n`,\n ),\n )\n } catch (error) {\n const err = error instanceof Error ? error : new Error(`${error}`)\n deleteDatasetDebug(`Error getting project ${projectId}`, err)\n this.error(`Project retrieval failed: ${err.message}`, {exit: 1})\n }\n\n try {\n await input({\n message:\n 'Are you ABSOLUTELY sure you want to delete this dataset?\\n Type the name of the dataset to confirm delete:',\n validate: (input) => {\n const trimmed = input.trim()\n return trimmed === datasetName || 'Incorrect dataset name. Ctrl + C to cancel delete.'\n },\n })\n } catch (error) {\n const err = error instanceof Error ? error : new Error(`${error}`)\n deleteDatasetDebug(`User cancelled`, err)\n this.error(`User cancelled`, {exit: 1})\n }\n }\n\n try {\n await deleteDataset({datasetName, projectId})\n this.log('Dataset deleted successfully')\n } catch (error) {\n const err = error instanceof Error ? error : new Error(`${error}`)\n deleteDatasetDebug(`Error deleting dataset ${datasetName}`, err)\n this.error(`Dataset deletion failed: ${err.message}`, {exit: 1})\n }\n }\n}\n"],"names":["Args","Flags","SanityCommand","subdebug","chalk","input","logSymbols","validateDatasetName","deleteDataset","getProjectById","NO_PROJECT_ID","deleteDatasetDebug","DeleteDatasetCommand","args","datasetName","string","description","required","examples","command","flags","force","boolean","run","parse","projectId","getProjectId","error","exit","dsError","warn","project","log","yellow","warning","bold","underline","displayName","id","err","Error","message","validate","trimmed","trim"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/dataset/delete.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {input, logSymbols} from '@sanity/cli-core/ux'\n\nimport {validateDatasetName} from '../../actions/dataset/validateDatasetName.js'\nimport {deleteDataset} from '../../services/datasets.js'\nimport {getProjectById} from '../../services/projects.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst deleteDatasetDebug = subdebug('dataset:delete')\n\nexport class DeleteDatasetCommand extends SanityCommand<typeof DeleteDatasetCommand> {\n static override args = {\n datasetName: Args.string({\n description: 'Dataset name to delete',\n required: true,\n }),\n }\n\n static override description = 'Delete a dataset within your project'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset',\n description: 'Delete a specific dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset --force',\n description: 'Delete a specific dataset without confirmation',\n },\n ]\n\n static override flags = {\n force: Flags.boolean({\n description: 'Do not prompt for delete confirmation - forcefully delete',\n required: false,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(DeleteDatasetCommand)\n const {force} = flags\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n const datasetName = args.datasetName\n\n const dsError = validateDatasetName(datasetName)\n if (dsError) {\n this.error(dsError, {exit: 1})\n }\n\n if (force) {\n this.warn(`'--force' used: skipping confirmation, deleting dataset \"${datasetName}\"`)\n } else {\n try {\n const project = await getProjectById(projectId)\n this.log(\n styleText(\n 'yellow',\n `${logSymbols.warning} Deleting dataset \"${styleText(['bold', 'underline'], datasetName)}\" from project \"${styleText(['bold', 'underline'], project.displayName)} (${styleText(['bold', 'underline'], project.id)})\"\\n`,\n ),\n )\n } catch (error) {\n const err = error instanceof Error ? error : new Error(`${error}`)\n deleteDatasetDebug(`Error getting project ${projectId}`, err)\n this.error(`Project retrieval failed: ${err.message}`, {exit: 1})\n }\n\n try {\n await input({\n message:\n 'Are you ABSOLUTELY sure you want to delete this dataset?\\n Type the name of the dataset to confirm delete:',\n validate: (input) => {\n const trimmed = input.trim()\n return trimmed === datasetName || 'Incorrect dataset name. Ctrl + C to cancel delete.'\n },\n })\n } catch (error) {\n const err = error instanceof Error ? error : new Error(`${error}`)\n deleteDatasetDebug(`User cancelled`, err)\n this.error(`User cancelled`, {exit: 1})\n }\n }\n\n try {\n await deleteDataset({datasetName, projectId})\n this.log('Dataset deleted successfully')\n } catch (error) {\n const err = error instanceof Error ? error : new Error(`${error}`)\n deleteDatasetDebug(`Error deleting dataset ${datasetName}`, err)\n this.error(`Dataset deletion failed: ${err.message}`, {exit: 1})\n }\n }\n}\n"],"names":["styleText","Args","Flags","SanityCommand","subdebug","input","logSymbols","validateDatasetName","deleteDataset","getProjectById","NO_PROJECT_ID","deleteDatasetDebug","DeleteDatasetCommand","args","datasetName","string","description","required","examples","command","flags","force","boolean","run","parse","projectId","getProjectId","error","exit","dsError","warn","project","log","warning","displayName","id","err","Error","message","validate","trimmed","trim"],"mappings":"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"}
@@ -2,9 +2,8 @@ import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { Args, Flags } from '@oclif/core';
4
4
  import { getProjectCliClient, SanityCommand, subdebug } from '@sanity/cli-core';
5
- import { input, spinner } from '@sanity/cli-core/ux';
5
+ import { boxen, input, spinner } from '@sanity/cli-core/ux';
6
6
  import { exportDataset } from '@sanity/export';
7
- import boxen from 'boxen';
8
7
  import prettyMs from 'pretty-ms';
9
8
  import { validateDatasetName } from '../../actions/dataset/validateDatasetName.js';
10
9
  import { promptForDataset } from '../../prompts/promptForDataset.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/dataset/export.ts"],"sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport {type Writable} from 'node:stream'\n\nimport {Args, Flags} from '@oclif/core'\nimport {getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {input, spinner} from '@sanity/cli-core/ux'\nimport {type DatasetsResponse} from '@sanity/client'\nimport {exportDataset, type ExportOptions, type ExportProgress} from '@sanity/export'\nimport boxen from 'boxen'\nimport prettyMs from 'pretty-ms'\n\nimport {validateDatasetName} from '../../actions/dataset/validateDatasetName.js'\nimport {promptForDataset} from '../../prompts/promptForDataset.js'\nimport {listDatasets} from '../../services/datasets.js'\nimport {absolutify} from '../../util/absolutify.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst noop = () => null\nconst exportDebug = subdebug('dataset:export')\n\nexport class DatasetExportCommand extends SanityCommand<typeof DatasetExportCommand> {\n static override args = {\n name: Args.string({\n description: 'Name of the dataset to export',\n }),\n // Args are order dependent\n // eslint-disable-next-line perfectionist/sort-objects\n destination: Args.string({\n description: 'Output destination file path',\n }),\n }\n\n static override description =\n 'Export dataset to local filesystem as a gzipped tarball. Assets failing with HTTP status codes 401, 403 and 404 upon download are ignored and excluded from export.'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> moviedb localPath.tar.gz',\n description: 'Export dataset \"moviedb\" to localPath.tar.gz',\n },\n {\n command: '<%= config.bin %> <%= command.id %> moviedb assetless.tar.gz --no-assets',\n description: 'Export dataset without assets',\n },\n {\n command: '<%= config.bin %> <%= command.id %> staging staging.tar.gz --raw',\n description: 'Export raw documents without asset reference rewriting',\n },\n {\n command: '<%= config.bin %> <%= command.id %> staging staging.tar.gz --types products,shops',\n description: 'Export specific document types',\n },\n ]\n\n static override flags = {\n 'asset-concurrency': Flags.integer({\n default: 8,\n description: 'Concurrent number of asset downloads',\n }),\n mode: Flags.string({\n default: 'stream',\n description:\n 'Mode to export documents with `cursor` might be more performant for larger datasets, but might not be as accurate if the dataset is being modified during export',\n options: ['stream', 'cursor'],\n }),\n 'no-assets': Flags.boolean({\n default: false,\n description: 'Export only non-asset documents and remove references to image assets',\n }),\n 'no-compress': Flags.boolean({\n default: false,\n description: 'Skips compressing tarball entries (still generates a gzip file)',\n }),\n 'no-drafts': Flags.boolean({\n default: false,\n description: 'Export only published versions of documents',\n }),\n overwrite: Flags.boolean({\n default: false,\n description: 'Overwrite any file with the same name',\n }),\n raw: Flags.boolean({\n default: false,\n description: 'Extract only documents, without rewriting asset references',\n }),\n types: Flags.string({\n description: 'Defines which document types to export (comma-separated)',\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(DatasetExportCommand)\n const {destination: targetDestination, name: targetDataset} = args\n\n // Get project configuration\n const cliConfig = await this.getCliConfig()\n const projectId = await this.getProjectId()\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {\n exit: 1,\n })\n }\n\n const projectClient = await getProjectCliClient({\n apiVersion: '2023-05-26',\n projectId,\n requireUser: true,\n })\n\n let datasets: DatasetsResponse\n\n try {\n datasets = await listDatasets(projectId)\n } catch (error) {\n exportDebug('Error listing datasets', error)\n this.error(`Failed to list datasets:\\n${error instanceof Error ? error.message : error}`, {\n exit: 1,\n })\n }\n\n // Determine dataset name\n let dataset = targetDataset\n try {\n if (!dataset) {\n // Get default dataset from config\n const defaultDataset = cliConfig.api?.dataset\n if (defaultDataset) {\n dataset = defaultDataset\n this.log(`Using default dataset: ${dataset}`)\n } else {\n dataset = await promptForDataset({allowCreation: false, datasets})\n }\n }\n } catch (error) {\n exportDebug('Error selecting dataset', error)\n this.error(`Failed to select dataset:\\n${error instanceof Error ? error.message : error}`, {\n exit: 1,\n })\n }\n\n // Validate dataset name\n const dsError = validateDatasetName(dataset)\n if (dsError) {\n this.error(dsError, {exit: 1})\n }\n\n // Verify existence of dataset before trying to export from it\n if (!datasets.some((set) => set.name === dataset)) {\n this.error(`Dataset with name \"${dataset}\" not found`, {exit: 1})\n }\n\n this.log(\n boxen(\n `Exporting from:\nprojectId: ${projectId.padEnd(44)}\ndataset: ${dataset.padEnd(46)}`,\n {\n borderColor: 'yellow',\n borderStyle: 'round',\n },\n ),\n )\n\n // Determine output path\n let destinationPath = targetDestination\n if (!destinationPath) {\n destinationPath = await this.promptForDestination({dataset})\n }\n\n const outputPath = await this.getOutputPath(destinationPath, dataset, flags)\n if (!outputPath) {\n this.error('Cancelled', {exit: 1})\n }\n\n // Prepare export options\n const {fail, onProgress, succeed} = this.createProgressHandler()\n const exportOptions: ExportOptions = {\n assetConcurrency: flags['asset-concurrency'],\n assets: !flags['no-assets'],\n client: projectClient,\n compress: !flags['no-compress'],\n dataset,\n drafts: !flags['no-drafts'],\n mode: flags.mode === 'cursor' || flags.mode === 'stream' ? flags.mode : undefined,\n onProgress,\n outputPath,\n raw: flags.raw,\n types: flags.types ? flags.types.split(',') : undefined,\n }\n\n const start = Date.now()\n try {\n await exportDataset(exportOptions)\n succeed()\n this.log(`Export finished (${prettyMs(Date.now() - start)})`)\n } catch (error) {\n fail()\n const err = error instanceof Error ? error : new Error(String(error))\n exportDebug('Export failed', err)\n this.error(`Export failed: ${err.message}`, {exit: 1})\n }\n }\n\n private createProgressHandler() {\n let currentSpinner: ReturnType<typeof spinner> | null = null\n let currentStep = ''\n\n const onProgress = (progress: ExportProgress) => {\n if (progress.step !== currentStep) {\n // Complete previous step\n succeed()\n\n // Start new step\n currentStep = progress.step\n currentSpinner = spinner(progress.step).start()\n } else if (progress.step === currentStep && progress.update && currentSpinner) {\n // Update current step with progress info\n currentSpinner.text = `${progress.step} (${progress.current}/${progress.total})`\n }\n }\n\n const succeed = () => {\n currentSpinner?.succeed()\n }\n\n const fail = () => {\n currentSpinner?.fail()\n }\n\n return {fail, onProgress, succeed}\n }\n\n private async getOutputPath(\n destination: string,\n dataset: string,\n flags: {overwrite?: boolean},\n ): Promise<string | Writable> {\n if (destination === '-') {\n return process.stdout\n }\n\n const dstPath = path.isAbsolute(destination)\n ? destination\n : path.resolve(process.cwd(), destination)\n\n const dstStats = await fs.stat(dstPath).catch(noop)\n const looksLikeFile = dstStats ? dstStats.isFile() : path.basename(dstPath).includes('.')\n\n if (!dstStats) {\n const createPath = looksLikeFile ? path.dirname(dstPath) : dstPath\n try {\n await fs.mkdir(createPath, {recursive: true})\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n const errorWithCode = err as Error & {code?: string}\n if (errorWithCode.code === 'EACCES') {\n this.error(\n `Permission denied: Cannot create directory \"${createPath}\". Please check write permissions.`,\n {\n exit: 1,\n },\n )\n } else {\n this.error(`Failed to create directory \"${createPath}\": ${err.message}`, {\n exit: 1,\n })\n }\n }\n }\n\n const finalPath = looksLikeFile ? dstPath : path.join(dstPath, `${dataset}.tar.gz`)\n const finalPathStats = await fs.stat(finalPath).catch(noop)\n\n if (!flags.overwrite && finalPathStats && finalPathStats.isFile()) {\n this.error(`File \"${finalPath}\" already exists. Use --overwrite flag to overwrite it.`, {\n exit: 1,\n })\n }\n\n return finalPath\n }\n\n private promptForDestination(options: {dataset: string; workDir?: string}): Promise<string> {\n const {dataset, workDir = process.cwd()} = options\n\n const defaultPath = path.join(workDir, `${dataset}.tar.gz`)\n\n return input({\n default: defaultPath,\n message: 'Output path:',\n transformer: (value: string) => absolutify(value.trim()),\n validate: (value: string) => {\n const trimmed = value.trim()\n if (!trimmed) {\n return 'Please provide a valid output path'\n }\n return true\n },\n })\n }\n}\n"],"names":["fs","path","Args","Flags","getProjectCliClient","SanityCommand","subdebug","input","spinner","exportDataset","boxen","prettyMs","validateDatasetName","promptForDataset","listDatasets","absolutify","NO_PROJECT_ID","noop","exportDebug","DatasetExportCommand","args","name","string","description","destination","examples","command","flags","integer","default","mode","options","boolean","overwrite","raw","types","run","parse","targetDestination","targetDataset","cliConfig","getCliConfig","projectId","getProjectId","error","exit","projectClient","apiVersion","requireUser","datasets","Error","message","dataset","defaultDataset","api","log","allowCreation","dsError","some","set","padEnd","borderColor","borderStyle","destinationPath","promptForDestination","outputPath","getOutputPath","fail","onProgress","succeed","createProgressHandler","exportOptions","assetConcurrency","assets","client","compress","drafts","undefined","split","start","Date","now","err","String","currentSpinner","currentStep","progress","step","update","text","current","total","process","stdout","dstPath","isAbsolute","resolve","cwd","dstStats","stat","catch","looksLikeFile","isFile","basename","includes","createPath","dirname","mkdir","recursive","errorWithCode","code","finalPath","join","finalPathStats","workDir","defaultPath","transformer","value","trim","validate","trimmed"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/dataset/export.ts"],"sourcesContent":["import fs from 'node:fs/promises'\nimport path from 'node:path'\nimport {type Writable} from 'node:stream'\n\nimport {Args, Flags} from '@oclif/core'\nimport {getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {boxen, input, spinner} from '@sanity/cli-core/ux'\nimport {type DatasetsResponse} from '@sanity/client'\nimport {exportDataset, type ExportOptions, type ExportProgress} from '@sanity/export'\nimport prettyMs from 'pretty-ms'\n\nimport {validateDatasetName} from '../../actions/dataset/validateDatasetName.js'\nimport {promptForDataset} from '../../prompts/promptForDataset.js'\nimport {listDatasets} from '../../services/datasets.js'\nimport {absolutify} from '../../util/absolutify.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst noop = () => null\nconst exportDebug = subdebug('dataset:export')\n\nexport class DatasetExportCommand extends SanityCommand<typeof DatasetExportCommand> {\n static override args = {\n name: Args.string({\n description: 'Name of the dataset to export',\n }),\n // Args are order dependent\n // eslint-disable-next-line perfectionist/sort-objects\n destination: Args.string({\n description: 'Output destination file path',\n }),\n }\n\n static override description =\n 'Export dataset to local filesystem as a gzipped tarball. Assets failing with HTTP status codes 401, 403 and 404 upon download are ignored and excluded from export.'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> moviedb localPath.tar.gz',\n description: 'Export dataset \"moviedb\" to localPath.tar.gz',\n },\n {\n command: '<%= config.bin %> <%= command.id %> moviedb assetless.tar.gz --no-assets',\n description: 'Export dataset without assets',\n },\n {\n command: '<%= config.bin %> <%= command.id %> staging staging.tar.gz --raw',\n description: 'Export raw documents without asset reference rewriting',\n },\n {\n command: '<%= config.bin %> <%= command.id %> staging staging.tar.gz --types products,shops',\n description: 'Export specific document types',\n },\n ]\n\n static override flags = {\n 'asset-concurrency': Flags.integer({\n default: 8,\n description: 'Concurrent number of asset downloads',\n }),\n mode: Flags.string({\n default: 'stream',\n description:\n 'Mode to export documents with `cursor` might be more performant for larger datasets, but might not be as accurate if the dataset is being modified during export',\n options: ['stream', 'cursor'],\n }),\n 'no-assets': Flags.boolean({\n default: false,\n description: 'Export only non-asset documents and remove references to image assets',\n }),\n 'no-compress': Flags.boolean({\n default: false,\n description: 'Skips compressing tarball entries (still generates a gzip file)',\n }),\n 'no-drafts': Flags.boolean({\n default: false,\n description: 'Export only published versions of documents',\n }),\n overwrite: Flags.boolean({\n default: false,\n description: 'Overwrite any file with the same name',\n }),\n raw: Flags.boolean({\n default: false,\n description: 'Extract only documents, without rewriting asset references',\n }),\n types: Flags.string({\n description: 'Defines which document types to export (comma-separated)',\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(DatasetExportCommand)\n const {destination: targetDestination, name: targetDataset} = args\n\n // Get project configuration\n const cliConfig = await this.getCliConfig()\n const projectId = await this.getProjectId()\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {\n exit: 1,\n })\n }\n\n const projectClient = await getProjectCliClient({\n apiVersion: '2023-05-26',\n projectId,\n requireUser: true,\n })\n\n let datasets: DatasetsResponse\n\n try {\n datasets = await listDatasets(projectId)\n } catch (error) {\n exportDebug('Error listing datasets', error)\n this.error(`Failed to list datasets:\\n${error instanceof Error ? error.message : error}`, {\n exit: 1,\n })\n }\n\n // Determine dataset name\n let dataset = targetDataset\n try {\n if (!dataset) {\n // Get default dataset from config\n const defaultDataset = cliConfig.api?.dataset\n if (defaultDataset) {\n dataset = defaultDataset\n this.log(`Using default dataset: ${dataset}`)\n } else {\n dataset = await promptForDataset({allowCreation: false, datasets})\n }\n }\n } catch (error) {\n exportDebug('Error selecting dataset', error)\n this.error(`Failed to select dataset:\\n${error instanceof Error ? error.message : error}`, {\n exit: 1,\n })\n }\n\n // Validate dataset name\n const dsError = validateDatasetName(dataset)\n if (dsError) {\n this.error(dsError, {exit: 1})\n }\n\n // Verify existence of dataset before trying to export from it\n if (!datasets.some((set) => set.name === dataset)) {\n this.error(`Dataset with name \"${dataset}\" not found`, {exit: 1})\n }\n\n this.log(\n boxen(\n `Exporting from:\nprojectId: ${projectId.padEnd(44)}\ndataset: ${dataset.padEnd(46)}`,\n {\n borderColor: 'yellow',\n borderStyle: 'round',\n },\n ),\n )\n\n // Determine output path\n let destinationPath = targetDestination\n if (!destinationPath) {\n destinationPath = await this.promptForDestination({dataset})\n }\n\n const outputPath = await this.getOutputPath(destinationPath, dataset, flags)\n if (!outputPath) {\n this.error('Cancelled', {exit: 1})\n }\n\n // Prepare export options\n const {fail, onProgress, succeed} = this.createProgressHandler()\n const exportOptions: ExportOptions = {\n assetConcurrency: flags['asset-concurrency'],\n assets: !flags['no-assets'],\n client: projectClient,\n compress: !flags['no-compress'],\n dataset,\n drafts: !flags['no-drafts'],\n mode: flags.mode === 'cursor' || flags.mode === 'stream' ? flags.mode : undefined,\n onProgress,\n outputPath,\n raw: flags.raw,\n types: flags.types ? flags.types.split(',') : undefined,\n }\n\n const start = Date.now()\n try {\n await exportDataset(exportOptions)\n succeed()\n this.log(`Export finished (${prettyMs(Date.now() - start)})`)\n } catch (error) {\n fail()\n const err = error instanceof Error ? error : new Error(String(error))\n exportDebug('Export failed', err)\n this.error(`Export failed: ${err.message}`, {exit: 1})\n }\n }\n\n private createProgressHandler() {\n let currentSpinner: ReturnType<typeof spinner> | null = null\n let currentStep = ''\n\n const onProgress = (progress: ExportProgress) => {\n if (progress.step !== currentStep) {\n // Complete previous step\n succeed()\n\n // Start new step\n currentStep = progress.step\n currentSpinner = spinner(progress.step).start()\n } else if (progress.step === currentStep && progress.update && currentSpinner) {\n // Update current step with progress info\n currentSpinner.text = `${progress.step} (${progress.current}/${progress.total})`\n }\n }\n\n const succeed = () => {\n currentSpinner?.succeed()\n }\n\n const fail = () => {\n currentSpinner?.fail()\n }\n\n return {fail, onProgress, succeed}\n }\n\n private async getOutputPath(\n destination: string,\n dataset: string,\n flags: {overwrite?: boolean},\n ): Promise<string | Writable> {\n if (destination === '-') {\n return process.stdout\n }\n\n const dstPath = path.isAbsolute(destination)\n ? destination\n : path.resolve(process.cwd(), destination)\n\n const dstStats = await fs.stat(dstPath).catch(noop)\n const looksLikeFile = dstStats ? dstStats.isFile() : path.basename(dstPath).includes('.')\n\n if (!dstStats) {\n const createPath = looksLikeFile ? path.dirname(dstPath) : dstPath\n try {\n await fs.mkdir(createPath, {recursive: true})\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error))\n const errorWithCode = err as Error & {code?: string}\n if (errorWithCode.code === 'EACCES') {\n this.error(\n `Permission denied: Cannot create directory \"${createPath}\". Please check write permissions.`,\n {\n exit: 1,\n },\n )\n } else {\n this.error(`Failed to create directory \"${createPath}\": ${err.message}`, {\n exit: 1,\n })\n }\n }\n }\n\n const finalPath = looksLikeFile ? dstPath : path.join(dstPath, `${dataset}.tar.gz`)\n const finalPathStats = await fs.stat(finalPath).catch(noop)\n\n if (!flags.overwrite && finalPathStats && finalPathStats.isFile()) {\n this.error(`File \"${finalPath}\" already exists. Use --overwrite flag to overwrite it.`, {\n exit: 1,\n })\n }\n\n return finalPath\n }\n\n private promptForDestination(options: {dataset: string; workDir?: string}): Promise<string> {\n const {dataset, workDir = process.cwd()} = options\n\n const defaultPath = path.join(workDir, `${dataset}.tar.gz`)\n\n return input({\n default: defaultPath,\n message: 'Output path:',\n transformer: (value: string) => absolutify(value.trim()),\n validate: (value: string) => {\n const trimmed = value.trim()\n if (!trimmed) {\n return 'Please provide a valid output path'\n }\n return true\n },\n })\n }\n}\n"],"names":["fs","path","Args","Flags","getProjectCliClient","SanityCommand","subdebug","boxen","input","spinner","exportDataset","prettyMs","validateDatasetName","promptForDataset","listDatasets","absolutify","NO_PROJECT_ID","noop","exportDebug","DatasetExportCommand","args","name","string","description","destination","examples","command","flags","integer","default","mode","options","boolean","overwrite","raw","types","run","parse","targetDestination","targetDataset","cliConfig","getCliConfig","projectId","getProjectId","error","exit","projectClient","apiVersion","requireUser","datasets","Error","message","dataset","defaultDataset","api","log","allowCreation","dsError","some","set","padEnd","borderColor","borderStyle","destinationPath","promptForDestination","outputPath","getOutputPath","fail","onProgress","succeed","createProgressHandler","exportOptions","assetConcurrency","assets","client","compress","drafts","undefined","split","start","Date","now","err","String","currentSpinner","currentStep","progress","step","update","text","current","total","process","stdout","dstPath","isAbsolute","resolve","cwd","dstStats","stat","catch","looksLikeFile","isFile","basename","includes","createPath","dirname","mkdir","recursive","errorWithCode","code","finalPath","join","finalPathStats","workDir","defaultPath","transformer","value","trim","validate","trimmed"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import path from 'node:path';
2
+ import { styleText } from 'node:util';
2
3
  import { Flags } from '@oclif/core';
3
4
  import { formatObject, printKeyValue, SanityCommand } from '@sanity/cli-core';
4
- import { chalk } from '@sanity/cli-core/ux';
5
5
  import { omit, padStart } from 'lodash-es';
6
6
  import { gatherDebugInfo } from '../actions/debug/gatherDebugInfo.js';
7
7
  import { getGlobalConfigLocation } from '../actions/debug/getGlobalConfigLocation.js';
@@ -30,7 +30,7 @@ export class Debug extends SanityCommand {
30
30
  });
31
31
  this.output.log('\nUser:');
32
32
  if (user instanceof Error) {
33
- this.log(` ${chalk.red(user.message)}\n`);
33
+ this.log(` ${styleText('red', user.message)}\n`);
34
34
  } else if (user) {
35
35
  printKeyValue({
36
36
  ID: user.id,
@@ -61,7 +61,7 @@ export class Debug extends SanityCommand {
61
61
  }
62
62
  }
63
63
  // Global configuration (user home dir config file)
64
- this.log(`Global config (${chalk.yellow(getGlobalConfigLocation())}):`);
64
+ this.log(`Global config (${styleText('yellow', getGlobalConfigLocation())}):`);
65
65
  const globalCfg = omit(globalConfig, [
66
66
  'authType',
67
67
  'authToken'
@@ -69,7 +69,7 @@ export class Debug extends SanityCommand {
69
69
  this.log(` ${formatObject(globalCfg).replaceAll('\n', '\n ')}\n`);
70
70
  // Project configuration (projectDir/sanity.json)
71
71
  if (projectConfig) {
72
- const configLocation = projectConfig ? ` (${chalk.yellow(path.relative(process.cwd(), projectRoot.path))})` : '';
72
+ const configLocation = projectConfig ? ` (${styleText('yellow', path.relative(process.cwd(), projectRoot.path))})` : '';
73
73
  this.log(`Project config${configLocation}:`);
74
74
  this.log(` ${formatObject(projectConfig).replaceAll('\n', '\n ')}`);
75
75
  }
@@ -79,7 +79,7 @@ export class Debug extends SanityCommand {
79
79
  const { formatName, versionLength } = getFormatters(versions);
80
80
  for (const mod of versions){
81
81
  const version = padStart(mod.installed || '<missing>', versionLength);
82
- const latest = mod.installed === mod.latest ? chalk.green('(up to date)') : `(latest: ${chalk.yellow(mod.latest)})`;
82
+ const latest = mod.installed === mod.latest ? styleText('green', '(up to date)') : `(latest: ${styleText('yellow', mod.latest)})`;
83
83
  this.log(`${formatName(getDisplayName(mod))} ${version} ${latest}`);
84
84
  }
85
85
  this.log('');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/debug.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {Flags} from '@oclif/core'\nimport {formatObject, printKeyValue, SanityCommand} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {omit, padStart} from 'lodash-es'\n\nimport {gatherDebugInfo} from '../actions/debug/gatherDebugInfo.js'\nimport {getGlobalConfigLocation} from '../actions/debug/getGlobalConfigLocation.js'\nimport {getDisplayName, getFormatters} from '../actions/versions/getFormatters.js'\n\nexport class Debug extends SanityCommand<typeof Debug> {\n static override description = 'Provides diagnostic info for Sanity Studio troubleshooting'\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n '<%= config.bin %> <%= command.id %> --secrets',\n ]\n\n static override flags = {\n secrets: Flags.boolean({\n default: false,\n description: 'Include API keys in output',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = this\n\n try {\n const projectRoot = await this.getProjectRoot()\n const cliConfig = await this.getCliConfig()\n\n const {auth, globalConfig, project, projectConfig, user, versions} = await gatherDebugInfo({\n cliConfig,\n includeSecrets: flags.secrets,\n projectRoot,\n })\n\n this.output.log('\\nUser:')\n if (user instanceof Error) {\n this.log(` ${chalk.red(user.message)}\\n`)\n } else if (user) {\n printKeyValue({\n ID: user.id,\n Name: user.name,\n // eslint-disable-next-line perfectionist/sort-objects\n Email: user.email,\n Roles: project && 'userRoles' in project ? project.userRoles : undefined,\n })\n }\n\n // Project info (API-based)\n if (project && 'id' in project) {\n this.log('Project:')\n printKeyValue({\n ID: project.id,\n // eslint-disable-next-line perfectionist/sort-objects\n 'Display name': project.displayName,\n })\n }\n\n // Auth info\n if (auth.hasToken) {\n this.log('Authentication:')\n printKeyValue({\n 'Auth token': flags.secrets ? auth.authToken : `<redacted>`,\n 'User type': globalConfig.authType || 'normal',\n })\n\n if (!flags.secrets) {\n this.log(' (run with --secrets to reveal token)\\n')\n }\n }\n\n // Global configuration (user home dir config file)\n this.log(`Global config (${chalk.yellow(getGlobalConfigLocation())}):`)\n const globalCfg = omit(globalConfig, ['authType', 'authToken'])\n this.log(` ${formatObject(globalCfg).replaceAll('\\n', '\\n ')}\\n`)\n\n // Project configuration (projectDir/sanity.json)\n if (projectConfig) {\n const configLocation = projectConfig\n ? ` (${chalk.yellow(path.relative(process.cwd(), projectRoot.path))})`\n : ''\n\n this.log(`Project config${configLocation}:`)\n this.log(` ${formatObject(projectConfig).replaceAll('\\n', '\\n ')}`)\n }\n\n // Print installed package versions\n if (versions) {\n this.log('\\nPackage versions:')\n\n const {formatName, versionLength} = getFormatters(versions)\n for (const mod of versions) {\n const version = padStart(mod.installed || '<missing>', versionLength)\n const latest =\n mod.installed === mod.latest\n ? chalk.green('(up to date)')\n : `(latest: ${chalk.yellow(mod.latest)})`\n\n this.log(`${formatName(getDisplayName(mod))} ${version} ${latest}`)\n }\n\n this.log('')\n }\n } catch (error) {\n this.error(\n `Failed to gather debug information: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }\n}\n"],"names":["path","Flags","formatObject","printKeyValue","SanityCommand","chalk","omit","padStart","gatherDebugInfo","getGlobalConfigLocation","getDisplayName","getFormatters","Debug","description","examples","flags","secrets","boolean","default","run","projectRoot","getProjectRoot","cliConfig","getCliConfig","auth","globalConfig","project","projectConfig","user","versions","includeSecrets","output","log","Error","red","message","ID","id","Name","name","Email","email","Roles","userRoles","undefined","displayName","hasToken","authToken","authType","yellow","globalCfg","replaceAll","configLocation","relative","process","cwd","formatName","versionLength","mod","version","installed","latest","green","error"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/commands/debug.ts"],"sourcesContent":["import path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {Flags} from '@oclif/core'\nimport {formatObject, printKeyValue, SanityCommand} from '@sanity/cli-core'\nimport {omit, padStart} from 'lodash-es'\n\nimport {gatherDebugInfo} from '../actions/debug/gatherDebugInfo.js'\nimport {getGlobalConfigLocation} from '../actions/debug/getGlobalConfigLocation.js'\nimport {getDisplayName, getFormatters} from '../actions/versions/getFormatters.js'\n\nexport class Debug extends SanityCommand<typeof Debug> {\n static override description = 'Provides diagnostic info for Sanity Studio troubleshooting'\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n '<%= config.bin %> <%= command.id %> --secrets',\n ]\n\n static override flags = {\n secrets: Flags.boolean({\n default: false,\n description: 'Include API keys in output',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = this\n\n try {\n const projectRoot = await this.getProjectRoot()\n const cliConfig = await this.getCliConfig()\n\n const {auth, globalConfig, project, projectConfig, user, versions} = await gatherDebugInfo({\n cliConfig,\n includeSecrets: flags.secrets,\n projectRoot,\n })\n\n this.output.log('\\nUser:')\n if (user instanceof Error) {\n this.log(` ${styleText('red', user.message)}\\n`)\n } else if (user) {\n printKeyValue({\n ID: user.id,\n Name: user.name,\n // eslint-disable-next-line perfectionist/sort-objects\n Email: user.email,\n Roles: project && 'userRoles' in project ? project.userRoles : undefined,\n })\n }\n\n // Project info (API-based)\n if (project && 'id' in project) {\n this.log('Project:')\n printKeyValue({\n ID: project.id,\n // eslint-disable-next-line perfectionist/sort-objects\n 'Display name': project.displayName,\n })\n }\n\n // Auth info\n if (auth.hasToken) {\n this.log('Authentication:')\n printKeyValue({\n 'Auth token': flags.secrets ? auth.authToken : `<redacted>`,\n 'User type': globalConfig.authType || 'normal',\n })\n\n if (!flags.secrets) {\n this.log(' (run with --secrets to reveal token)\\n')\n }\n }\n\n // Global configuration (user home dir config file)\n this.log(`Global config (${styleText('yellow', getGlobalConfigLocation())}):`)\n const globalCfg = omit(globalConfig, ['authType', 'authToken'])\n this.log(` ${formatObject(globalCfg).replaceAll('\\n', '\\n ')}\\n`)\n\n // Project configuration (projectDir/sanity.json)\n if (projectConfig) {\n const configLocation = projectConfig\n ? ` (${styleText('yellow', path.relative(process.cwd(), projectRoot.path))})`\n : ''\n\n this.log(`Project config${configLocation}:`)\n this.log(` ${formatObject(projectConfig).replaceAll('\\n', '\\n ')}`)\n }\n\n // Print installed package versions\n if (versions) {\n this.log('\\nPackage versions:')\n\n const {formatName, versionLength} = getFormatters(versions)\n for (const mod of versions) {\n const version = padStart(mod.installed || '<missing>', versionLength)\n const latest =\n mod.installed === mod.latest\n ? styleText('green', '(up to date)')\n : `(latest: ${styleText('yellow', mod.latest)})`\n\n this.log(`${formatName(getDisplayName(mod))} ${version} ${latest}`)\n }\n\n this.log('')\n }\n } catch (error) {\n this.error(\n `Failed to gather debug information: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }\n}\n"],"names":["path","styleText","Flags","formatObject","printKeyValue","SanityCommand","omit","padStart","gatherDebugInfo","getGlobalConfigLocation","getDisplayName","getFormatters","Debug","description","examples","flags","secrets","boolean","default","run","projectRoot","getProjectRoot","cliConfig","getCliConfig","auth","globalConfig","project","projectConfig","user","versions","includeSecrets","output","log","Error","message","ID","id","Name","name","Email","email","Roles","userRoles","undefined","displayName","hasToken","authToken","authType","globalCfg","replaceAll","configLocation","relative","process","cwd","formatName","versionLength","mod","version","installed","latest","error"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
+ import { styleText } from 'node:util';
1
2
  import { Flags } from '@oclif/core';
2
3
  import { SanityCommand } from '@sanity/cli-core';
3
- import { chalk } from '@sanity/cli-core/ux';
4
4
  import { devAction } from '../actions/dev/devAction.js';
5
5
  import { devDebug } from '../actions/dev/devDebug.js';
6
6
  import { determineIsApp } from '../util/determineIsApp.js';
@@ -52,7 +52,10 @@ export class DevCommand extends SanityCommand {
52
52
  return result;
53
53
  } catch (error) {
54
54
  devDebug(`Failed to start dev server`, error);
55
- this.output.error(chalk.red.bgBlack(`Failed to start dev server: ${error.message}`), {
55
+ this.output.error(styleText([
56
+ 'red',
57
+ 'bgBlack'
58
+ ], `Failed to start dev server: ${error.message}`), {
56
59
  exit: 1
57
60
  });
58
61
  }
@@ -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 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
+ {"version":3,"sources":["../../src/commands/dev.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\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(\n styleText(['red', 'bgBlack'], `Failed to start dev server: ${error.message}`),\n {\n exit: 1,\n },\n )\n }\n }\n}\n"],"names":["styleText","Flags","SanityCommand","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","message","exit"],"mappings":"AAAA,SAAQA,SAAS,QAAO,YAAW;AAEnC,SAAQC,KAAK,QAAO,cAAa;AACjC,SAAQC,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,SAAS,QAAO,8BAA6B;AACrD,SAAQC,QAAQ,QAAO,6BAA4B;AACnD,SAAQC,cAAc,QAAO,4BAA2B;AAExD,OAAO,MAAMC,mBAAmBJ;IAC9B,OAAgBK,cACd,0EAAyE;IAE3E,OAAgBC,WAAW;QACzB;QACA;QACA;KACD,CAAA;IAED,OAAgBC,QAAQ;QACtB,gBAAgBR,MAAMS,OAAO,CAAC;YAC5BC,SAAS;YACTJ,aAAa;QACf;QACAK,MAAMX,MAAMY,MAAM,CAAC;YACjBC,SAAS;YACTP,aAAa;QACf;QACA,qBAAqBN,MAAMS,OAAO,CAAC;YACjCC,SAAS;YACTJ,aAAa;QACf;QACAQ,MAAMd,MAAMY,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,CACf3B,UAAU;gBAAC;gBAAO;aAAU,EAAE,CAAC,4BAA4B,EAAE2B,MAAMC,OAAO,EAAE,GAC5E;gBACEC,MAAM;YACR;QAEJ;IACF;AACF"}
@@ -1,6 +1,7 @@
1
+ import { styleText } from 'node:util';
1
2
  import { Args, Flags } from '@oclif/core';
2
3
  import { isInteractive, SanityCommand, subdebug } from '@sanity/cli-core';
3
- import { chalk, select } from '@sanity/cli-core/ux';
4
+ import { select } from '@sanity/cli-core/ux';
4
5
  import { readDoc, searchDocs } from '../../services/docs.js';
5
6
  const searchDebug = subdebug('docs:search');
6
7
  export class DocsSearchCommand extends SanityCommand {
@@ -57,7 +58,7 @@ export class DocsSearchCommand extends SanityCommand {
57
58
  this.log(`\nFound ${results.length} result(s):\n`);
58
59
  for (const [index, result] of results.entries()){
59
60
  this.log(`${index + 1}. ${result.title}`);
60
- this.log(` ${chalk.cyan(`URL: https://www.sanity.io${result.path}`)}`);
61
+ this.log(` ${styleText('cyan', `URL: https://www.sanity.io${result.path}`)}`);
61
62
  if (result.description) {
62
63
  this.log(` ${result.description}`);
63
64
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/docs/search.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {isInteractive, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk, select} from '@sanity/cli-core/ux'\n\nimport {readDoc, searchDocs, type SearchResult} from '../../services/docs.js'\n\nconst searchDebug = subdebug('docs:search')\n\nexport class DocsSearchCommand extends SanityCommand<typeof DocsSearchCommand> {\n static override args = {\n query: Args.string({\n description: 'Search query for documentation',\n required: true,\n }),\n }\n\n static override description = 'Search Sanity docs'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> schema',\n description: 'Search for documentation about schemas',\n },\n {\n command: '<%= config.bin %> <%= command.id %> \"groq functions\"',\n description: 'Search with phrase',\n },\n {\n command: '<%= config.bin %> <%= command.id %> \"deployment\" --limit=5',\n description: 'Limit search results',\n },\n ]\n\n static override flags = {\n limit: Flags.integer({\n default: 10,\n description: 'Maximum number of results to return',\n min: 1,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(DocsSearchCommand)\n const {query} = args\n const {limit} = flags\n\n this.log(`Searching documentation for: \"${query}\"`)\n\n let results: SearchResult[]\n try {\n results = await searchDocs({\n limit,\n query,\n })\n\n if (results.length === 0) {\n this.log('No results found. Try a different search term.')\n return\n }\n } catch (error) {\n searchDebug('error fetching results', error)\n const message =\n error instanceof Error\n ? error.message\n : 'The documentation search API is currently unavailable. Please try again later.'\n this.error(message, {\n exit: 1,\n })\n }\n\n this.log(`\\nFound ${results.length} result(s):\\n`)\n\n for (const [index, result] of results.entries()) {\n this.log(`${index + 1}. ${result.title}`)\n this.log(` ${chalk.cyan(`URL: https://www.sanity.io${result.path}`)}`)\n if (result.description) {\n this.log(` ${result.description}`)\n }\n this.log('')\n }\n\n // Show usage hint in non-interactive mode\n if (!isInteractive()) {\n this.log('Use `sanity docs read <url>` to read an article in terminal.')\n this.log('Use `sanity docs read <path>` to follow links found within articles.')\n this.log('')\n return\n }\n\n // Interactive selection (only in interactive environments)\n if (results.length > 0) {\n const choices = results.map((result, index) => ({\n description: result.description,\n name: `${index + 1}. ${result.title} (${result.path})`,\n value: index,\n }))\n\n const selectedIndex = await select({\n choices: [...choices, {description: 'Exit without reading', name: 'Exit', value: -1}],\n message: 'Select an article to read in terminal:',\n })\n\n if (typeof selectedIndex === 'number' && selectedIndex >= 0) {\n const selected = results[selectedIndex]\n\n try {\n // Read and display the article\n const content = await readDoc({path: selected.path})\n this.log('\\n---\\n')\n this.log(content)\n } catch (error) {\n this.error(\n `Failed to read article: ${error instanceof Error ? error.message : 'Unknown error'}`,\n {\n exit: 1,\n },\n )\n }\n }\n }\n }\n}\n"],"names":["Args","Flags","isInteractive","SanityCommand","subdebug","chalk","select","readDoc","searchDocs","searchDebug","DocsSearchCommand","args","query","string","description","required","examples","command","flags","limit","integer","default","min","run","parse","log","results","length","error","message","Error","exit","index","result","entries","title","cyan","path","choices","map","name","value","selectedIndex","selected","content"],"mappings":"AAAA,SAAQA,IAAI,EAAEC,KAAK,QAAO,cAAa;AACvC,SAAQC,aAAa,EAAEC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AACvE,SAAQC,KAAK,EAAEC,MAAM,QAAO,sBAAqB;AAEjD,SAAQC,OAAO,EAAEC,UAAU,QAA0B,yBAAwB;AAE7E,MAAMC,cAAcL,SAAS;AAE7B,OAAO,MAAMM,0BAA0BP;IACrC,OAAgBQ,OAAO;QACrBC,OAAOZ,KAAKa,MAAM,CAAC;YACjBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,qBAAoB;IAElD,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,OAAgBI,QAAQ;QACtBC,OAAOlB,MAAMmB,OAAO,CAAC;YACnBC,SAAS;YACTP,aAAa;YACbQ,KAAK;QACP;IACF,EAAC;IAED,MAAaC,MAAqB;QAChC,MAAM,EAACZ,IAAI,EAAEO,KAAK,EAAC,GAAG,MAAM,IAAI,CAACM,KAAK,CAACd;QACvC,MAAM,EAACE,KAAK,EAAC,GAAGD;QAChB,MAAM,EAACQ,KAAK,EAAC,GAAGD;QAEhB,IAAI,CAACO,GAAG,CAAC,CAAC,8BAA8B,EAAEb,MAAM,CAAC,CAAC;QAElD,IAAIc;QACJ,IAAI;YACFA,UAAU,MAAMlB,WAAW;gBACzBW;gBACAP;YACF;YAEA,IAAIc,QAAQC,MAAM,KAAK,GAAG;gBACxB,IAAI,CAACF,GAAG,CAAC;gBACT;YACF;QACF,EAAE,OAAOG,OAAO;YACdnB,YAAY,0BAA0BmB;YACtC,MAAMC,UACJD,iBAAiBE,QACbF,MAAMC,OAAO,GACb;YACN,IAAI,CAACD,KAAK,CAACC,SAAS;gBAClBE,MAAM;YACR;QACF;QAEA,IAAI,CAACN,GAAG,CAAC,CAAC,QAAQ,EAAEC,QAAQC,MAAM,CAAC,aAAa,CAAC;QAEjD,KAAK,MAAM,CAACK,OAAOC,OAAO,IAAIP,QAAQQ,OAAO,GAAI;YAC/C,IAAI,CAACT,GAAG,CAAC,GAAGO,QAAQ,EAAE,EAAE,EAAEC,OAAOE,KAAK,EAAE;YACxC,IAAI,CAACV,GAAG,CAAC,CAAC,GAAG,EAAEpB,MAAM+B,IAAI,CAAC,CAAC,0BAA0B,EAAEH,OAAOI,IAAI,EAAE,GAAG;YACvE,IAAIJ,OAAOnB,WAAW,EAAE;gBACtB,IAAI,CAACW,GAAG,CAAC,CAAC,GAAG,EAAEQ,OAAOnB,WAAW,EAAE;YACrC;YACA,IAAI,CAACW,GAAG,CAAC;QACX;QAEA,0CAA0C;QAC1C,IAAI,CAACvB,iBAAiB;YACpB,IAAI,CAACuB,GAAG,CAAC;YACT,IAAI,CAACA,GAAG,CAAC;YACT,IAAI,CAACA,GAAG,CAAC;YACT;QACF;QAEA,2DAA2D;QAC3D,IAAIC,QAAQC,MAAM,GAAG,GAAG;YACtB,MAAMW,UAAUZ,QAAQa,GAAG,CAAC,CAACN,QAAQD,QAAW,CAAA;oBAC9ClB,aAAamB,OAAOnB,WAAW;oBAC/B0B,MAAM,GAAGR,QAAQ,EAAE,EAAE,EAAEC,OAAOE,KAAK,CAAC,EAAE,EAAEF,OAAOI,IAAI,CAAC,CAAC,CAAC;oBACtDI,OAAOT;gBACT,CAAA;YAEA,MAAMU,gBAAgB,MAAMpC,OAAO;gBACjCgC,SAAS;uBAAIA;oBAAS;wBAACxB,aAAa;wBAAwB0B,MAAM;wBAAQC,OAAO,CAAC;oBAAC;iBAAE;gBACrFZ,SAAS;YACX;YAEA,IAAI,OAAOa,kBAAkB,YAAYA,iBAAiB,GAAG;gBAC3D,MAAMC,WAAWjB,OAAO,CAACgB,cAAc;gBAEvC,IAAI;oBACF,+BAA+B;oBAC/B,MAAME,UAAU,MAAMrC,QAAQ;wBAAC8B,MAAMM,SAASN,IAAI;oBAAA;oBAClD,IAAI,CAACZ,GAAG,CAAC;oBACT,IAAI,CAACA,GAAG,CAACmB;gBACX,EAAE,OAAOhB,OAAO;oBACd,IAAI,CAACA,KAAK,CACR,CAAC,wBAAwB,EAAEA,iBAAiBE,QAAQF,MAAMC,OAAO,GAAG,iBAAiB,EACrF;wBACEE,MAAM;oBACR;gBAEJ;YACF;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/docs/search.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {isInteractive, SanityCommand, subdebug} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\n\nimport {readDoc, searchDocs, type SearchResult} from '../../services/docs.js'\n\nconst searchDebug = subdebug('docs:search')\n\nexport class DocsSearchCommand extends SanityCommand<typeof DocsSearchCommand> {\n static override args = {\n query: Args.string({\n description: 'Search query for documentation',\n required: true,\n }),\n }\n\n static override description = 'Search Sanity docs'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> schema',\n description: 'Search for documentation about schemas',\n },\n {\n command: '<%= config.bin %> <%= command.id %> \"groq functions\"',\n description: 'Search with phrase',\n },\n {\n command: '<%= config.bin %> <%= command.id %> \"deployment\" --limit=5',\n description: 'Limit search results',\n },\n ]\n\n static override flags = {\n limit: Flags.integer({\n default: 10,\n description: 'Maximum number of results to return',\n min: 1,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(DocsSearchCommand)\n const {query} = args\n const {limit} = flags\n\n this.log(`Searching documentation for: \"${query}\"`)\n\n let results: SearchResult[]\n try {\n results = await searchDocs({\n limit,\n query,\n })\n\n if (results.length === 0) {\n this.log('No results found. Try a different search term.')\n return\n }\n } catch (error) {\n searchDebug('error fetching results', error)\n const message =\n error instanceof Error\n ? error.message\n : 'The documentation search API is currently unavailable. Please try again later.'\n this.error(message, {\n exit: 1,\n })\n }\n\n this.log(`\\nFound ${results.length} result(s):\\n`)\n\n for (const [index, result] of results.entries()) {\n this.log(`${index + 1}. ${result.title}`)\n this.log(` ${styleText('cyan', `URL: https://www.sanity.io${result.path}`)}`)\n if (result.description) {\n this.log(` ${result.description}`)\n }\n this.log('')\n }\n\n // Show usage hint in non-interactive mode\n if (!isInteractive()) {\n this.log('Use `sanity docs read <url>` to read an article in terminal.')\n this.log('Use `sanity docs read <path>` to follow links found within articles.')\n this.log('')\n return\n }\n\n // Interactive selection (only in interactive environments)\n if (results.length > 0) {\n const choices = results.map((result, index) => ({\n description: result.description,\n name: `${index + 1}. ${result.title} (${result.path})`,\n value: index,\n }))\n\n const selectedIndex = await select({\n choices: [...choices, {description: 'Exit without reading', name: 'Exit', value: -1}],\n message: 'Select an article to read in terminal:',\n })\n\n if (typeof selectedIndex === 'number' && selectedIndex >= 0) {\n const selected = results[selectedIndex]\n\n try {\n // Read and display the article\n const content = await readDoc({path: selected.path})\n this.log('\\n---\\n')\n this.log(content)\n } catch (error) {\n this.error(\n `Failed to read article: ${error instanceof Error ? error.message : 'Unknown error'}`,\n {\n exit: 1,\n },\n )\n }\n }\n }\n }\n}\n"],"names":["styleText","Args","Flags","isInteractive","SanityCommand","subdebug","select","readDoc","searchDocs","searchDebug","DocsSearchCommand","args","query","string","description","required","examples","command","flags","limit","integer","default","min","run","parse","log","results","length","error","message","Error","exit","index","result","entries","title","path","choices","map","name","value","selectedIndex","selected","content"],"mappings":"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"}