@sanity/cli 6.0.0-alpha.9 → 6.0.0

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 (600) hide show
  1. package/README.md +602 -258
  2. package/bin/run.js +2 -0
  3. package/dist/SanityHelp.js +51 -23
  4. package/dist/SanityHelp.js.map +1 -1
  5. package/dist/actions/auth/authServer.js +28 -22
  6. package/dist/actions/auth/authServer.js.map +1 -1
  7. package/dist/actions/auth/login/getProvider.js +49 -38
  8. package/dist/actions/auth/login/getProvider.js.map +1 -1
  9. package/dist/actions/auth/login/getSSOProvider.js +25 -19
  10. package/dist/actions/auth/login/getSSOProvider.js.map +1 -1
  11. package/dist/actions/auth/login/login.js +12 -33
  12. package/dist/actions/auth/login/login.js.map +1 -1
  13. package/dist/actions/auth/types.js.map +1 -1
  14. package/dist/actions/backup/downloadAsset.js +9 -9
  15. package/dist/actions/backup/downloadAsset.js.map +1 -1
  16. package/dist/actions/backup/downloadDocument.js +8 -8
  17. package/dist/actions/backup/downloadDocument.js.map +1 -1
  18. package/dist/actions/build/buildApp.js +55 -18
  19. package/dist/actions/build/buildApp.js.map +1 -1
  20. package/dist/actions/build/buildStaticFiles.js +3 -2
  21. package/dist/actions/build/buildStaticFiles.js.map +1 -1
  22. package/dist/actions/build/buildStudio.js +72 -44
  23. package/dist/actions/build/buildStudio.js.map +1 -1
  24. package/dist/actions/build/buildVendorDependencies.js +18 -52
  25. package/dist/actions/build/buildVendorDependencies.js.map +1 -1
  26. package/dist/actions/build/checkRequiredDependencies.js +13 -8
  27. package/dist/actions/build/checkRequiredDependencies.js.map +1 -1
  28. package/dist/actions/build/checkStudioDependencyVersions.js +19 -17
  29. package/dist/actions/build/checkStudioDependencyVersions.js.map +1 -1
  30. package/dist/actions/build/createExternalFromImportMap.js +1 -1
  31. package/dist/actions/build/createExternalFromImportMap.js.map +1 -1
  32. package/dist/actions/build/determineBasePath.js +5 -2
  33. package/dist/actions/build/determineBasePath.js.map +1 -1
  34. package/dist/actions/build/getViteConfig.js +47 -4
  35. package/dist/actions/build/getViteConfig.js.map +1 -1
  36. package/dist/actions/build/handlePrereleaseVersions.js +44 -0
  37. package/dist/actions/build/handlePrereleaseVersions.js.map +1 -0
  38. package/dist/actions/build/renderDocument.js +6 -10
  39. package/dist/actions/build/renderDocument.js.map +1 -1
  40. package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js +4 -4
  41. package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js.map +1 -1
  42. package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js +3 -3
  43. package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js.map +1 -1
  44. package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js +1 -0
  45. package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js.map +1 -1
  46. package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js +2 -2
  47. package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js.map +1 -1
  48. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js +1 -1
  49. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js.map +1 -1
  50. package/dist/actions/build/shouldAutoUpdate.js +2 -0
  51. package/dist/actions/build/shouldAutoUpdate.js.map +1 -1
  52. package/dist/actions/build/types.js.map +1 -1
  53. package/dist/actions/build/writeFavicons.js +3 -5
  54. package/dist/actions/build/writeFavicons.js.map +1 -1
  55. package/dist/actions/build/writeSanityRuntime.js +4 -3
  56. package/dist/actions/build/writeSanityRuntime.js.map +1 -1
  57. package/dist/actions/codemods/reactIconsV3.js +2 -2
  58. package/dist/actions/codemods/reactIconsV3.js.map +1 -1
  59. package/dist/actions/dataset/create.js +7 -1
  60. package/dist/actions/dataset/create.js.map +1 -1
  61. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -1
  62. package/dist/actions/dataset/resolveDataset.js +26 -0
  63. package/dist/actions/dataset/resolveDataset.js.map +1 -0
  64. package/dist/actions/debug/formatters.js +22 -0
  65. package/dist/actions/debug/formatters.js.map +1 -0
  66. package/dist/actions/deploy/createStudioUserApplication.js +17 -4
  67. package/dist/actions/deploy/createStudioUserApplication.js.map +1 -1
  68. package/dist/actions/deploy/deployApp.js +41 -15
  69. package/dist/actions/deploy/deployApp.js.map +1 -1
  70. package/dist/actions/deploy/deployStudio.js +92 -44
  71. package/dist/actions/deploy/deployStudio.js.map +1 -1
  72. package/dist/actions/deploy/deployStudioSchemasAndManifests.js +55 -0
  73. package/dist/actions/deploy/deployStudioSchemasAndManifests.js.map +1 -0
  74. package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js +120 -0
  75. package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js.map +1 -0
  76. package/dist/actions/deploy/findUserApplicationForStudio.js +35 -12
  77. package/dist/actions/deploy/findUserApplicationForStudio.js.map +1 -1
  78. package/dist/actions/deploy/types.js +10 -1
  79. package/dist/actions/deploy/types.js.map +1 -1
  80. package/dist/actions/deploy/urlUtils.js +21 -0
  81. package/dist/actions/deploy/urlUtils.js.map +1 -0
  82. package/dist/actions/dev/getDashboardAppUrl.js +48 -0
  83. package/dist/actions/dev/getDashboardAppUrl.js.map +1 -0
  84. package/dist/actions/dev/getDevServerConfig.js +7 -3
  85. package/dist/actions/dev/getDevServerConfig.js.map +1 -1
  86. package/dist/actions/dev/startAppDevServer.js +3 -3
  87. package/dist/actions/dev/startAppDevServer.js.map +1 -1
  88. package/dist/actions/dev/startStudioDevServer.js +14 -14
  89. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  90. package/dist/actions/doctor/checks/cliInstallation.js +56 -0
  91. package/dist/actions/doctor/checks/cliInstallation.js.map +1 -0
  92. package/dist/actions/doctor/checks/index.js +16 -0
  93. package/dist/actions/doctor/checks/index.js.map +1 -0
  94. package/dist/actions/doctor/runDoctorChecks.js +56 -0
  95. package/dist/actions/doctor/runDoctorChecks.js.map +1 -0
  96. package/dist/actions/doctor/types.js +3 -0
  97. package/dist/actions/doctor/types.js.map +1 -0
  98. package/dist/actions/documents/types.js.map +1 -1
  99. package/dist/actions/documents/validate.js +11 -2
  100. package/dist/actions/documents/validate.js.map +1 -1
  101. package/dist/actions/documents/validateDocuments.worker.js +4 -4
  102. package/dist/actions/documents/validateDocuments.worker.js.map +1 -1
  103. package/dist/actions/documents/validation/reporters/jsonReporter.js +1 -1
  104. package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -1
  105. package/dist/actions/documents/validation/reporters/ndjsonReporter.js +1 -1
  106. package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -1
  107. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +1 -1
  108. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map +1 -1
  109. package/dist/actions/documents/validation/reporters/prettyReporter/tree.js +108 -0
  110. package/dist/actions/documents/validation/reporters/prettyReporter/tree.js.map +1 -0
  111. package/dist/actions/graphql/SchemaError.js +4 -26
  112. package/dist/actions/graphql/SchemaError.js.map +1 -1
  113. package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js +540 -0
  114. package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js.map +1 -0
  115. package/dist/actions/graphql/__tests__/fixtures/test-studio.js +1143 -0
  116. package/dist/actions/graphql/__tests__/fixtures/test-studio.js.map +1 -0
  117. package/dist/actions/graphql/__tests__/fixtures/union-refs.js +591 -0
  118. package/dist/actions/graphql/__tests__/fixtures/union-refs.js.map +1 -0
  119. package/dist/actions/graphql/__tests__/helpers.js +23 -0
  120. package/dist/actions/graphql/__tests__/helpers.js.map +1 -0
  121. package/dist/actions/graphql/extractFromSanitySchema.js +5 -5
  122. package/dist/actions/graphql/extractFromSanitySchema.js.map +1 -1
  123. package/dist/actions/graphql/extractGraphQLAPIs.js +150 -0
  124. package/dist/actions/graphql/extractGraphQLAPIs.js.map +1 -0
  125. package/dist/actions/graphql/extractGraphQLAPIs.worker.js +12 -0
  126. package/dist/actions/graphql/extractGraphQLAPIs.worker.js.map +1 -0
  127. package/dist/actions/graphql/gen1/generateTypeFilters.js +1 -1
  128. package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -1
  129. package/dist/actions/graphql/gen1/generateTypeQueries.js +2 -1
  130. package/dist/actions/graphql/gen1/generateTypeQueries.js.map +1 -1
  131. package/dist/actions/graphql/gen1/index.js +5 -5
  132. package/dist/actions/graphql/gen1/index.js.map +1 -1
  133. package/dist/actions/graphql/gen2/generateTypeQueries.js +1 -1
  134. package/dist/actions/graphql/gen2/generateTypeQueries.js.map +1 -1
  135. package/dist/actions/graphql/gen2/index.js +6 -6
  136. package/dist/actions/graphql/gen2/index.js.map +1 -1
  137. package/dist/actions/graphql/gen3/generateTypeQueries.js +3 -4
  138. package/dist/actions/graphql/gen3/generateTypeQueries.js.map +1 -1
  139. package/dist/actions/graphql/gen3/index.js +6 -7
  140. package/dist/actions/graphql/gen3/index.js.map +1 -1
  141. package/dist/actions/graphql/getGraphQLAPIs.js +15 -57
  142. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  143. package/dist/actions/graphql/getGraphQLAPIs.worker.js +75 -106
  144. package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -1
  145. package/dist/actions/graphql/helpers.js +13 -0
  146. package/dist/actions/graphql/helpers.js.map +1 -1
  147. package/dist/actions/graphql/resolveGraphQLApisFromWorkspaces.js +187 -0
  148. package/dist/actions/graphql/resolveGraphQLApisFromWorkspaces.js.map +1 -0
  149. package/dist/actions/graphql/types.js +1 -1
  150. package/dist/actions/graphql/types.js.map +1 -1
  151. package/dist/actions/init/bootstrapLocalTemplate.js +10 -8
  152. package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -1
  153. package/dist/actions/init/bootstrapRemoteTemplate.js +6 -5
  154. package/dist/actions/init/bootstrapRemoteTemplate.js.map +1 -1
  155. package/dist/actions/init/bootstrapTemplate.js.map +1 -1
  156. package/dist/actions/init/checkNextJsReactCompatibility.js +1 -1
  157. package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -1
  158. package/dist/actions/init/createAppCliConfig.js.map +1 -1
  159. package/dist/actions/init/createCliConfig.js.map +1 -1
  160. package/dist/actions/init/createPackageManifest.js +21 -9
  161. package/dist/actions/init/createPackageManifest.js.map +1 -1
  162. package/dist/actions/init/remoteTemplate.js +1 -2
  163. package/dist/actions/init/remoteTemplate.js.map +1 -1
  164. package/dist/actions/init/sdkAppDependencies.js +19 -0
  165. package/dist/actions/init/sdkAppDependencies.js.map +1 -0
  166. package/dist/actions/init/studioDependencies.js.map +1 -0
  167. package/dist/actions/init/templates/appQuickstart.js +1 -22
  168. package/dist/actions/init/templates/appQuickstart.js.map +1 -1
  169. package/dist/actions/init/templates/appSanityUi.js +3 -22
  170. package/dist/actions/init/templates/appSanityUi.js.map +1 -1
  171. package/dist/actions/init/types.js.map +1 -1
  172. package/dist/actions/manifest/SchemaIcon.js +6 -4
  173. package/dist/actions/manifest/SchemaIcon.js.map +1 -1
  174. package/dist/actions/manifest/blockTypeTransformer.js +67 -0
  175. package/dist/actions/manifest/blockTypeTransformer.js.map +1 -0
  176. package/dist/actions/manifest/debug.js +4 -0
  177. package/dist/actions/manifest/debug.js.map +1 -0
  178. package/dist/actions/manifest/extractAppManifest.js +39 -22
  179. package/dist/actions/manifest/extractAppManifest.js.map +1 -1
  180. package/dist/actions/manifest/extractManifest.js +27 -78
  181. package/dist/actions/manifest/extractManifest.js.map +1 -1
  182. package/dist/actions/manifest/extractManifest.worker.js +30 -0
  183. package/dist/actions/manifest/extractManifest.worker.js.map +1 -0
  184. package/dist/actions/manifest/extractWorkspaceManifest.js +31 -372
  185. package/dist/actions/manifest/extractWorkspaceManifest.js.map +1 -1
  186. package/dist/actions/manifest/iconResolver.js +30 -0
  187. package/dist/actions/manifest/iconResolver.js.map +1 -0
  188. package/dist/actions/manifest/referenceTransformer.js +51 -0
  189. package/dist/actions/manifest/referenceTransformer.js.map +1 -0
  190. package/dist/actions/manifest/schemaTypeHelpers.js +2 -2
  191. package/dist/actions/manifest/schemaTypeHelpers.js.map +1 -1
  192. package/dist/actions/manifest/schemaTypeTransformer.js +168 -0
  193. package/dist/actions/manifest/schemaTypeTransformer.js.map +1 -0
  194. package/dist/actions/manifest/transformerUtils.js +40 -0
  195. package/dist/actions/manifest/transformerUtils.js.map +1 -0
  196. package/dist/actions/manifest/types.js +5 -0
  197. package/dist/actions/manifest/types.js.map +1 -1
  198. package/dist/actions/manifest/validationTransformer.js +84 -0
  199. package/dist/actions/manifest/validationTransformer.js.map +1 -0
  200. package/dist/actions/manifest/writeManifestFile.js +30 -0
  201. package/dist/actions/manifest/writeManifestFile.js.map +1 -0
  202. package/dist/actions/manifest/writeWorkspaceFiles.js +30 -0
  203. package/dist/actions/manifest/writeWorkspaceFiles.js.map +1 -0
  204. package/dist/actions/mcp/detectAvailableEditors.js +16 -4
  205. package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
  206. package/dist/actions/mcp/editorConfigs.js +64 -6
  207. package/dist/actions/mcp/editorConfigs.js.map +1 -1
  208. package/dist/actions/mcp/setupMCP.js.map +1 -1
  209. package/dist/actions/mcp/writeMCPConfig.js +27 -15
  210. package/dist/actions/mcp/writeMCPConfig.js.map +1 -1
  211. package/dist/actions/media/buildNdjsonIndex.js +32 -0
  212. package/dist/actions/media/buildNdjsonIndex.js.map +1 -0
  213. package/dist/actions/media/importAspects.js +2 -11
  214. package/dist/actions/media/importAspects.js.map +1 -1
  215. package/dist/actions/media/importMedia.js +22 -18
  216. package/dist/actions/media/importMedia.js.map +1 -1
  217. package/dist/actions/organizations/findOrganizationByUserName.js +5 -0
  218. package/dist/actions/organizations/findOrganizationByUserName.js.map +1 -0
  219. package/dist/actions/organizations/getOrganization.js +3 -2
  220. package/dist/actions/organizations/getOrganization.js.map +1 -1
  221. package/dist/actions/organizations/getOrganizationChoices.js +27 -19
  222. package/dist/actions/organizations/getOrganizationChoices.js.map +1 -1
  223. package/dist/actions/organizations/types.js +3 -0
  224. package/dist/actions/organizations/types.js.map +1 -0
  225. package/dist/actions/projects/getManageUrl.js +1 -2
  226. package/dist/actions/projects/getManageUrl.js.map +1 -1
  227. package/dist/actions/schema/deleteSchemaAction.js +14 -30
  228. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  229. package/dist/actions/schema/deploySchemas.js +22 -91
  230. package/dist/actions/schema/deploySchemas.js.map +1 -1
  231. package/dist/actions/schema/extractSanitySchema.worker.js +0 -5
  232. package/dist/actions/schema/extractSanitySchema.worker.js.map +1 -1
  233. package/dist/actions/schema/extractSanityWorkspace.worker.js +24 -0
  234. package/dist/actions/schema/extractSanityWorkspace.worker.js.map +1 -0
  235. package/dist/actions/schema/extractSchema.js +8 -40
  236. package/dist/actions/schema/extractSchema.js.map +1 -1
  237. package/dist/actions/schema/extractSchemaWatcher.js +128 -0
  238. package/dist/actions/schema/extractSchemaWatcher.js.map +1 -0
  239. package/dist/actions/schema/formatSchemaValidation.js +5 -1
  240. package/dist/actions/schema/formatSchemaValidation.js.map +1 -1
  241. package/dist/actions/schema/getExtractOptions.js +16 -0
  242. package/dist/actions/schema/getExtractOptions.js.map +1 -0
  243. package/dist/actions/schema/listSchemas.js +53 -56
  244. package/dist/actions/schema/listSchemas.js.map +1 -1
  245. package/dist/actions/schema/matchSchemaPattern.js +22 -0
  246. package/dist/actions/schema/matchSchemaPattern.js.map +1 -0
  247. package/dist/actions/schema/runSchemaExtraction.js +39 -0
  248. package/dist/actions/schema/runSchemaExtraction.js.map +1 -0
  249. package/dist/actions/schema/types.js +8 -0
  250. package/dist/actions/schema/types.js.map +1 -1
  251. package/dist/actions/schema/uniqueWorkspaces.worker.js +24 -0
  252. package/dist/actions/schema/uniqueWorkspaces.worker.js.map +1 -0
  253. package/dist/actions/schema/updateWorkspaceSchema.js +63 -0
  254. package/dist/actions/schema/updateWorkspaceSchema.js.map +1 -0
  255. package/dist/actions/schema/uploadSchemaToLexicon.js +87 -0
  256. package/dist/actions/schema/uploadSchemaToLexicon.js.map +1 -0
  257. package/dist/actions/schema/utils/SchemaExtractionError.js +10 -0
  258. package/dist/actions/schema/utils/SchemaExtractionError.js.map +1 -0
  259. package/dist/actions/schema/utils/schemaStoreValidation.js +1 -15
  260. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  261. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +1 -1
  262. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -1
  263. package/dist/actions/schema/validateSchema.worker.js +1 -8
  264. package/dist/actions/schema/validateSchema.worker.js.map +1 -1
  265. package/dist/actions/schema/watchExtractSchema.js +72 -0
  266. package/dist/actions/schema/watchExtractSchema.js.map +1 -0
  267. package/dist/actions/telemetry/isTrueish.js +10 -0
  268. package/dist/actions/telemetry/isTrueish.js.map +1 -0
  269. package/dist/actions/telemetry/resolveConsent.js +2 -1
  270. package/dist/actions/telemetry/resolveConsent.js.map +1 -1
  271. package/dist/actions/telemetry/setConsent.js +2 -1
  272. package/dist/actions/telemetry/setConsent.js.map +1 -1
  273. package/dist/actions/users/getMembersForProject.js.map +1 -1
  274. package/dist/actions/users/getPendingInvitations.js +1 -1
  275. package/dist/actions/users/getPendingInvitations.js.map +1 -1
  276. package/dist/actions/users/types.js.map +1 -1
  277. package/dist/actions/versions/filterSanityModules.js.map +1 -1
  278. package/dist/actions/versions/findSanityModulesVersions.js +2 -3
  279. package/dist/actions/versions/findSanityModulesVersions.js.map +1 -1
  280. package/dist/actions/versions/getFormatters.js +1 -1
  281. package/dist/actions/versions/getFormatters.js.map +1 -1
  282. package/dist/actions/versions/tryFindLatestVersion.js +1 -1
  283. package/dist/actions/versions/tryFindLatestVersion.js.map +1 -1
  284. package/dist/commands/backup/disable.js +22 -7
  285. package/dist/commands/backup/disable.js.map +1 -1
  286. package/dist/commands/backup/download.js +19 -10
  287. package/dist/commands/backup/download.js.map +1 -1
  288. package/dist/commands/backup/enable.js +22 -7
  289. package/dist/commands/backup/enable.js.map +1 -1
  290. package/dist/commands/backup/list.js +20 -8
  291. package/dist/commands/backup/list.js.map +1 -1
  292. package/dist/commands/build.js +2 -5
  293. package/dist/commands/build.js.map +1 -1
  294. package/dist/commands/cors/add.js +20 -7
  295. package/dist/commands/cors/add.js.map +1 -1
  296. package/dist/commands/cors/delete.js +22 -7
  297. package/dist/commands/cors/delete.js.map +1 -1
  298. package/dist/commands/cors/list.js +22 -7
  299. package/dist/commands/cors/list.js.map +1 -1
  300. package/dist/commands/dataset/alias/create.js +26 -7
  301. package/dist/commands/dataset/alias/create.js.map +1 -1
  302. package/dist/commands/dataset/alias/delete.js +20 -7
  303. package/dist/commands/dataset/alias/delete.js.map +1 -1
  304. package/dist/commands/dataset/alias/link.js +20 -7
  305. package/dist/commands/dataset/alias/link.js.map +1 -1
  306. package/dist/commands/dataset/alias/unlink.js +20 -7
  307. package/dist/commands/dataset/alias/unlink.js.map +1 -1
  308. package/dist/commands/dataset/copy.js +45 -30
  309. package/dist/commands/dataset/copy.js.map +1 -1
  310. package/dist/commands/dataset/create.js +32 -7
  311. package/dist/commands/dataset/create.js.map +1 -1
  312. package/dist/commands/dataset/delete.js +16 -7
  313. package/dist/commands/dataset/delete.js.map +1 -1
  314. package/dist/commands/dataset/embeddings/disable.js +77 -0
  315. package/dist/commands/dataset/embeddings/disable.js.map +1 -0
  316. package/dist/commands/dataset/embeddings/enable.js +141 -0
  317. package/dist/commands/dataset/embeddings/enable.js.map +1 -0
  318. package/dist/commands/dataset/embeddings/status.js +72 -0
  319. package/dist/commands/dataset/embeddings/status.js.map +1 -0
  320. package/dist/commands/dataset/export.js +25 -16
  321. package/dist/commands/dataset/export.js.map +1 -1
  322. package/dist/commands/dataset/import.js +306 -1
  323. package/dist/commands/dataset/import.js.map +1 -1
  324. package/dist/commands/dataset/list.js +22 -7
  325. package/dist/commands/dataset/list.js.map +1 -1
  326. package/dist/commands/dataset/visibility/get.js +18 -7
  327. package/dist/commands/dataset/visibility/get.js.map +1 -1
  328. package/dist/commands/dataset/visibility/set.js +22 -7
  329. package/dist/commands/dataset/visibility/set.js.map +1 -1
  330. package/dist/commands/debug.js +4 -2
  331. package/dist/commands/debug.js.map +1 -1
  332. package/dist/commands/deploy.js +22 -11
  333. package/dist/commands/deploy.js.map +1 -1
  334. package/dist/commands/dev.js +2 -4
  335. package/dist/commands/dev.js.map +1 -1
  336. package/dist/commands/doctor.js +125 -0
  337. package/dist/commands/doctor.js.map +1 -0
  338. package/dist/commands/documents/create.js +19 -12
  339. package/dist/commands/documents/create.js.map +1 -1
  340. package/dist/commands/documents/delete.js +19 -12
  341. package/dist/commands/documents/delete.js.map +1 -1
  342. package/dist/commands/documents/get.js +17 -12
  343. package/dist/commands/documents/get.js.map +1 -1
  344. package/dist/commands/documents/query.js +26 -18
  345. package/dist/commands/documents/query.js.map +1 -1
  346. package/dist/commands/documents/validate.js +32 -10
  347. package/dist/commands/documents/validate.js.map +1 -1
  348. package/dist/commands/graphql/deploy.js +58 -30
  349. package/dist/commands/graphql/deploy.js.map +1 -1
  350. package/dist/commands/graphql/list.js +15 -7
  351. package/dist/commands/graphql/list.js.map +1 -1
  352. package/dist/commands/graphql/undeploy.js +37 -19
  353. package/dist/commands/graphql/undeploy.js.map +1 -1
  354. package/dist/commands/hook/attempt.js +22 -7
  355. package/dist/commands/hook/attempt.js.map +1 -1
  356. package/dist/commands/hook/create.js +23 -8
  357. package/dist/commands/hook/create.js.map +1 -1
  358. package/dist/commands/hook/delete.js +22 -7
  359. package/dist/commands/hook/delete.js.map +1 -1
  360. package/dist/commands/hook/list.js +22 -7
  361. package/dist/commands/hook/list.js.map +1 -1
  362. package/dist/commands/hook/logs.js +21 -8
  363. package/dist/commands/hook/logs.js.map +1 -1
  364. package/dist/commands/init.js +46 -28
  365. package/dist/commands/init.js.map +1 -1
  366. package/dist/commands/login.js +19 -6
  367. package/dist/commands/login.js.map +1 -1
  368. package/dist/commands/logout.js +8 -6
  369. package/dist/commands/logout.js.map +1 -1
  370. package/dist/commands/manage.js +0 -1
  371. package/dist/commands/manage.js.map +1 -1
  372. package/dist/commands/manifest/extract.js +14 -10
  373. package/dist/commands/manifest/extract.js.map +1 -1
  374. package/dist/commands/mcp/configure.js +1 -1
  375. package/dist/commands/mcp/configure.js.map +1 -1
  376. package/dist/commands/media/create-aspect.js +4 -4
  377. package/dist/commands/media/create-aspect.js.map +1 -1
  378. package/dist/commands/media/delete-aspect.js +9 -7
  379. package/dist/commands/media/delete-aspect.js.map +1 -1
  380. package/dist/commands/media/deploy-aspect.js +22 -9
  381. package/dist/commands/media/deploy-aspect.js.map +1 -1
  382. package/dist/commands/media/export.js +9 -7
  383. package/dist/commands/media/export.js.map +1 -1
  384. package/dist/commands/media/import.js +10 -8
  385. package/dist/commands/media/import.js.map +1 -1
  386. package/dist/commands/preview.js +2 -4
  387. package/dist/commands/preview.js.map +1 -1
  388. package/dist/commands/projects/list.js +2 -1
  389. package/dist/commands/projects/list.js.map +1 -1
  390. package/dist/commands/schema/delete.js +33 -34
  391. package/dist/commands/schema/delete.js.map +1 -1
  392. package/dist/commands/schema/deploy.js +19 -30
  393. package/dist/commands/schema/deploy.js.map +1 -1
  394. package/dist/commands/schema/extract.js +32 -4
  395. package/dist/commands/schema/extract.js.map +1 -1
  396. package/dist/commands/schema/list.js +10 -31
  397. package/dist/commands/schema/list.js.map +1 -1
  398. package/dist/commands/tokens/add.js +24 -7
  399. package/dist/commands/tokens/add.js.map +1 -1
  400. package/dist/commands/tokens/delete.js +20 -7
  401. package/dist/commands/tokens/delete.js.map +1 -1
  402. package/dist/commands/tokens/list.js +20 -7
  403. package/dist/commands/tokens/list.js.map +1 -1
  404. package/dist/commands/users/invite.js +24 -7
  405. package/dist/commands/users/invite.js.map +1 -1
  406. package/dist/commands/users/list.js +76 -33
  407. package/dist/commands/users/list.js.map +1 -1
  408. package/dist/commands/versions.js +1 -1
  409. package/dist/commands/versions.js.map +1 -1
  410. package/dist/config/createCliConfig.js +1 -2
  411. package/dist/config/createCliConfig.js.map +1 -1
  412. package/dist/exports/_internal.d.ts +132 -0
  413. package/dist/exports/_internal.js +4 -0
  414. package/dist/exports/_internal.js.map +1 -0
  415. package/dist/exports/index.d.ts +113 -0
  416. package/dist/exports/index.js +6 -0
  417. package/dist/exports/index.js.map +1 -0
  418. package/dist/hooks/init/checkForUpdates.js +14 -0
  419. package/dist/hooks/init/checkForUpdates.js.map +1 -0
  420. package/dist/hooks/prerun/flushTelemetry.worker.js +1 -1
  421. package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -1
  422. package/dist/hooks/prerun/injectEnvVariables.js +9 -1
  423. package/dist/hooks/prerun/injectEnvVariables.js.map +1 -1
  424. package/dist/hooks/prerun/setupTelemetry.js +9 -3
  425. package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
  426. package/dist/prompts/promptForProject.js +64 -0
  427. package/dist/prompts/promptForProject.js.map +1 -0
  428. package/dist/{actions/auth/login/promptProviders.js → prompts/promptForProviders.js} +3 -3
  429. package/dist/prompts/promptForProviders.js.map +1 -0
  430. package/dist/prompts/selectMediaLibrary.js +1 -1
  431. package/dist/prompts/selectMediaLibrary.js.map +1 -1
  432. package/dist/server/devServer.js +4 -2
  433. package/dist/server/devServer.js.map +1 -1
  434. package/dist/server/previewServer.js +2 -2
  435. package/dist/server/previewServer.js.map +1 -1
  436. package/dist/server/vite/plugin-schema-extraction.js +201 -0
  437. package/dist/server/vite/plugin-schema-extraction.js.map +1 -0
  438. package/dist/server/vite/plugin-typegen.js +217 -0
  439. package/dist/server/vite/plugin-typegen.js.map +1 -0
  440. package/dist/services/auth.js +42 -3
  441. package/dist/services/auth.js.map +1 -1
  442. package/dist/services/datasets.js +7 -5
  443. package/dist/services/datasets.js.map +1 -1
  444. package/dist/services/docs.js +2 -2
  445. package/dist/services/docs.js.map +1 -1
  446. package/dist/services/embeddings.js +25 -0
  447. package/dist/services/embeddings.js.map +1 -0
  448. package/dist/services/getUrlHeaders.js +7 -18
  449. package/dist/services/getUrlHeaders.js.map +1 -1
  450. package/dist/services/grants.js +13 -0
  451. package/dist/services/grants.js.map +1 -0
  452. package/dist/services/graphql.js +1 -1
  453. package/dist/services/graphql.js.map +1 -1
  454. package/dist/services/projects.js +4 -2
  455. package/dist/services/projects.js.map +1 -1
  456. package/dist/services/schemas.js +1 -1
  457. package/dist/services/schemas.js.map +1 -1
  458. package/dist/services/telemetry.js +2 -1
  459. package/dist/services/telemetry.js.map +1 -1
  460. package/dist/services/userApplications.js +21 -6
  461. package/dist/services/userApplications.js.map +1 -1
  462. package/dist/telemetry/extractSchema.telemetry.js +10 -0
  463. package/dist/telemetry/extractSchema.telemetry.js.map +1 -1
  464. package/dist/types/grants.js +3 -0
  465. package/dist/types/grants.js.map +1 -0
  466. package/dist/types.js +3 -0
  467. package/dist/types.js.map +1 -1
  468. package/dist/util/checkProjectPermissions.js +21 -0
  469. package/dist/util/checkProjectPermissions.js.map +1 -0
  470. package/dist/util/cliClient.js +5 -3
  471. package/dist/util/cliClient.js.map +1 -1
  472. package/dist/util/compareDependencyVersions.js +74 -38
  473. package/dist/util/compareDependencyVersions.js.map +1 -1
  474. package/dist/util/createExpiringConfig.js +64 -0
  475. package/dist/util/createExpiringConfig.js.map +1 -0
  476. package/dist/util/detectFramework.js +135 -0
  477. package/dist/util/detectFramework.js.map +1 -0
  478. package/dist/util/errorMessages.js +0 -1
  479. package/dist/util/errorMessages.js.map +1 -1
  480. package/dist/util/extractDocumentsFromNdjsonOrTarball.js +1 -2
  481. package/dist/util/extractDocumentsFromNdjsonOrTarball.js.map +1 -1
  482. package/dist/util/getCliVersion.js +1 -1
  483. package/dist/util/getCliVersion.js.map +1 -1
  484. package/dist/util/getLocalPackageVersion.js +31 -23
  485. package/dist/util/getLocalPackageVersion.js.map +1 -1
  486. package/dist/util/getProjectDefaults.js.map +1 -1
  487. package/dist/util/getSharedServerConfig.js +1 -0
  488. package/dist/util/getSharedServerConfig.js.map +1 -1
  489. package/dist/util/getWorkspace.js +1 -1
  490. package/dist/util/getWorkspace.js.map +1 -1
  491. package/dist/util/isSchemaError.js +11 -0
  492. package/dist/util/isSchemaError.js.map +1 -0
  493. package/dist/util/isTar.js +8 -0
  494. package/dist/util/isTar.js.map +1 -0
  495. package/dist/util/packageManager/getPeerDependencies.js +44 -0
  496. package/dist/util/packageManager/getPeerDependencies.js.map +1 -0
  497. package/dist/util/packageManager/installationInfo/analyzeIssues.js +225 -0
  498. package/dist/util/packageManager/installationInfo/analyzeIssues.js.map +1 -0
  499. package/dist/util/packageManager/installationInfo/commands.js +73 -0
  500. package/dist/util/packageManager/installationInfo/commands.js.map +1 -0
  501. package/dist/util/packageManager/installationInfo/detectCliInstallation.js +66 -0
  502. package/dist/util/packageManager/installationInfo/detectCliInstallation.js.map +1 -0
  503. package/dist/util/packageManager/installationInfo/detectGlobals.js +295 -0
  504. package/dist/util/packageManager/installationInfo/detectGlobals.js.map +1 -0
  505. package/dist/util/packageManager/installationInfo/detectPackages.js +190 -0
  506. package/dist/util/packageManager/installationInfo/detectPackages.js.map +1 -0
  507. package/dist/util/packageManager/installationInfo/detectWorkspace.js +192 -0
  508. package/dist/util/packageManager/installationInfo/detectWorkspace.js.map +1 -0
  509. package/dist/util/packageManager/installationInfo/index.js +4 -0
  510. package/dist/util/packageManager/installationInfo/index.js.map +1 -0
  511. package/dist/util/packageManager/installationInfo/readJsonFile.js +14 -0
  512. package/dist/util/packageManager/installationInfo/readJsonFile.js.map +1 -0
  513. package/dist/util/packageManager/installationInfo/resolveVersionRange.js +42 -0
  514. package/dist/util/packageManager/installationInfo/resolveVersionRange.js.map +1 -0
  515. package/dist/util/packageManager/installationInfo/types.js +3 -0
  516. package/dist/util/packageManager/installationInfo/types.js.map +1 -0
  517. package/dist/util/packageManager/packageManagerChoice.js +1 -20
  518. package/dist/util/packageManager/packageManagerChoice.js.map +1 -1
  519. package/dist/util/packageManager/upgradePackages.js +4 -1
  520. package/dist/util/packageManager/upgradePackages.js.map +1 -1
  521. package/dist/util/promiseRaceWithTimeout.js +28 -0
  522. package/dist/util/promiseRaceWithTimeout.js.map +1 -0
  523. package/dist/util/readdirRecursive.js.map +1 -1
  524. package/dist/util/resolveLatestVersions.js +2 -2
  525. package/dist/util/resolveLatestVersions.js.map +1 -1
  526. package/dist/util/sharedFlags.js +54 -0
  527. package/dist/util/sharedFlags.js.map +1 -0
  528. package/dist/util/telemetry/cleanupOldTelemetryFiles.js +30 -0
  529. package/dist/util/telemetry/cleanupOldTelemetryFiles.js.map +1 -0
  530. package/dist/util/telemetry/createTelemetryStore.js +95 -0
  531. package/dist/util/telemetry/createTelemetryStore.js.map +1 -0
  532. package/dist/util/telemetry/createTraceId.js +10 -0
  533. package/dist/util/telemetry/createTraceId.js.map +1 -0
  534. package/dist/util/telemetry/findTelemetryFiles.js +35 -0
  535. package/dist/util/telemetry/findTelemetryFiles.js.map +1 -0
  536. package/dist/util/telemetry/flushTelemetryFiles.js +118 -0
  537. package/dist/util/telemetry/flushTelemetryFiles.js.map +1 -0
  538. package/dist/util/telemetry/generateTelemetryFilePath.js +30 -0
  539. package/dist/util/telemetry/generateTelemetryFilePath.js.map +1 -0
  540. package/dist/util/telemetry/logger.js +59 -0
  541. package/dist/util/telemetry/logger.js.map +1 -0
  542. package/dist/util/telemetry/readNDJSON.js +28 -0
  543. package/dist/util/telemetry/readNDJSON.js.map +1 -0
  544. package/dist/util/telemetry/telemetryStoreDebug.js +7 -0
  545. package/dist/util/telemetry/telemetryStoreDebug.js.map +1 -0
  546. package/dist/util/telemetry/trace.js +150 -0
  547. package/dist/util/telemetry/trace.js.map +1 -0
  548. package/dist/util/toForwardSlashes.js +8 -0
  549. package/dist/util/toForwardSlashes.js.map +1 -0
  550. package/dist/util/update/fetchLatestVersion.js +21 -0
  551. package/dist/util/update/fetchLatestVersion.js.map +1 -0
  552. package/dist/util/update/getUpdateCommand.js +20 -0
  553. package/dist/util/update/getUpdateCommand.js.map +1 -0
  554. package/dist/util/update/isInstalledUsingYarn.js +17 -0
  555. package/dist/util/update/isInstalledUsingYarn.js.map +1 -0
  556. package/dist/util/update/showNotificationUpdate.js +31 -0
  557. package/dist/util/update/showNotificationUpdate.js.map +1 -0
  558. package/dist/util/update/updateChecker.js +60 -0
  559. package/dist/util/update/updateChecker.js.map +1 -0
  560. package/dist/util/update/updateCheckerDebug.js +4 -0
  561. package/dist/util/update/updateCheckerDebug.js.map +1 -0
  562. package/oclif.config.js +1 -0
  563. package/oclif.manifest.json +900 -107
  564. package/package.json +72 -71
  565. package/static/favicons/apple-touch-icon.png +0 -0
  566. package/static/favicons/favicon-192.png +0 -0
  567. package/static/favicons/favicon-512.png +0 -0
  568. package/static/favicons/favicon-96.png +0 -0
  569. package/static/favicons/favicon.ico +0 -0
  570. package/static/favicons/favicon.svg +12 -0
  571. package/dist/actions/auth/login/promptProviders.js.map +0 -1
  572. package/dist/actions/dev/getCoreAppUrl.js +0 -10
  573. package/dist/actions/dev/getCoreAppUrl.js.map +0 -1
  574. package/dist/actions/schema/schemaStoreTypes.js +0 -19
  575. package/dist/actions/schema/schemaStoreTypes.js.map +0 -1
  576. package/dist/actions/schema/utils/manifestExtractor.js +0 -33
  577. package/dist/actions/schema/utils/manifestExtractor.js.map +0 -1
  578. package/dist/actions/schema/utils/manifestReader.js +0 -71
  579. package/dist/actions/schema/utils/manifestReader.js.map +0 -1
  580. package/dist/index.d.ts +0 -2326
  581. package/dist/index.js +0 -6
  582. package/dist/index.js.map +0 -1
  583. package/dist/studioDependencies.js.map +0 -1
  584. package/dist/typings/deepSortObject.d.js +0 -2
  585. package/dist/typings/deepSortObject.d.js.map +0 -1
  586. package/dist/util/findNdjsonEntry.js +0 -21
  587. package/dist/util/findNdjsonEntry.js.map +0 -1
  588. package/dist/util/importStudioConfig.js +0 -40
  589. package/dist/util/importStudioConfig.js.map +0 -1
  590. package/dist/util/readModuleVersion.js +0 -15
  591. package/dist/util/readModuleVersion.js.map +0 -1
  592. package/dist/util/readPackageJson.js +0 -44
  593. package/dist/util/readPackageJson.js.map +0 -1
  594. package/dist/util/readPackageManifest.js +0 -46
  595. package/dist/util/readPackageManifest.js.map +0 -1
  596. package/dist/util/uniqBy.js +0 -14
  597. package/dist/util/uniqBy.js.map +0 -1
  598. package/dist/util/workerChannels.js +0 -172
  599. package/dist/util/workerChannels.js.map +0 -1
  600. /package/dist/{studioDependencies.js → actions/init/studioDependencies.js} +0 -0
@@ -1,8 +1,9 @@
1
1
  import { Args } from '@oclif/core';
2
2
  import { SanityCommand, subdebug } from '@sanity/cli-core';
3
3
  import { validateDatasetName } from '../../../actions/dataset/validateDatasetName.js';
4
+ import { promptForProject } from '../../../prompts/promptForProject.js';
4
5
  import { listDatasets } from '../../../services/datasets.js';
5
- import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
6
+ import { getProjectIdFlag } from '../../../util/sharedFlags.js';
6
7
  const getDebug = subdebug('dataset:visibility:get');
7
8
  export class DatasetVisibilityGetCommand extends SanityCommand {
8
9
  static args = {
@@ -18,15 +19,25 @@ export class DatasetVisibilityGetCommand extends SanityCommand {
18
19
  description: 'Check the visibility of a dataset'
19
20
  }
20
21
  ];
22
+ static flags = {
23
+ ...getProjectIdFlag({
24
+ description: 'Project ID to get dataset visibility for',
25
+ semantics: 'override'
26
+ })
27
+ };
21
28
  async run() {
22
29
  const { args } = await this.parse(DatasetVisibilityGetCommand);
23
30
  const { dataset } = args;
24
- const projectId = await this.getProjectId();
25
- if (!projectId) {
26
- this.error(NO_PROJECT_ID, {
27
- exit: 1
28
- });
29
- }
31
+ const projectId = await this.getProjectId({
32
+ fallback: ()=>promptForProject({
33
+ requiredPermissions: [
34
+ {
35
+ grant: 'read',
36
+ permission: 'sanity.project.datasets'
37
+ }
38
+ ]
39
+ })
40
+ });
30
41
  const dsError = validateDatasetName(dataset);
31
42
  if (dsError) {
32
43
  this.error(dsError, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/dataset/visibility/get.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {validateDatasetName} from '../../../actions/dataset/validateDatasetName.js'\nimport {listDatasets} from '../../../services/datasets.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\n\nconst getDebug = subdebug('dataset:visibility:get')\n\nexport class DatasetVisibilityGetCommand extends SanityCommand<typeof DatasetVisibilityGetCommand> {\n static override args = {\n dataset: Args.string({\n description: 'The name of the dataset to get visibility for',\n required: true,\n }),\n }\n\n static override description = 'Get the visibility of a dataset'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset',\n description: 'Check the visibility of a dataset',\n },\n ]\n\n public async run(): Promise<void> {\n const {args} = await this.parse(DatasetVisibilityGetCommand)\n const {dataset} = args\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n const dsError = validateDatasetName(dataset)\n if (dsError) {\n this.error(dsError, {exit: 1})\n }\n\n let current\n try {\n const datasets = await listDatasets(projectId)\n current = datasets.find((curr: {name: string}) => curr.name === dataset)\n } catch (error) {\n getDebug(`Error listing datasets`, error)\n this.error(\n `Failed to list datasets: ${error instanceof Error ? error.message : String(error)}`,\n {exit: 1},\n )\n }\n\n if (!current) {\n this.error(`Dataset not found: ${dataset}`, {exit: 1})\n }\n\n this.log(current.aclMode)\n }\n}\n"],"names":["Args","SanityCommand","subdebug","validateDatasetName","listDatasets","NO_PROJECT_ID","getDebug","DatasetVisibilityGetCommand","args","dataset","string","description","required","examples","command","run","parse","projectId","getProjectId","error","exit","dsError","current","datasets","find","curr","name","Error","message","String","log","aclMode"],"mappings":"AAAA,SAAQA,IAAI,QAAO,cAAa;AAChC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAExD,SAAQC,mBAAmB,QAAO,kDAAiD;AACnF,SAAQC,YAAY,QAAO,gCAA+B;AAC1D,SAAQC,aAAa,QAAO,iCAAgC;AAE5D,MAAMC,WAAWJ,SAAS;AAE1B,OAAO,MAAMK,oCAAoCN;IAC/C,OAAgBO,OAAO;QACrBC,SAAST,KAAKU,MAAM,CAAC;YACnBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,kCAAiC;IAE/D,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,MAAaI,MAAqB;QAChC,MAAM,EAACP,IAAI,EAAC,GAAG,MAAM,IAAI,CAACQ,KAAK,CAACT;QAChC,MAAM,EAACE,OAAO,EAAC,GAAGD;QAElB,MAAMS,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAACd,eAAe;gBAACe,MAAM;YAAC;QACpC;QAEA,MAAMC,UAAUlB,oBAAoBM;QACpC,IAAIY,SAAS;YACX,IAAI,CAACF,KAAK,CAACE,SAAS;gBAACD,MAAM;YAAC;QAC9B;QAEA,IAAIE;QACJ,IAAI;YACF,MAAMC,WAAW,MAAMnB,aAAaa;YACpCK,UAAUC,SAASC,IAAI,CAAC,CAACC,OAAyBA,KAAKC,IAAI,KAAKjB;QAClE,EAAE,OAAOU,OAAO;YACdb,SAAS,CAAC,sBAAsB,CAAC,EAAEa;YACnC,IAAI,CAACA,KAAK,CACR,CAAC,yBAAyB,EAAEA,iBAAiBQ,QAAQR,MAAMS,OAAO,GAAGC,OAAOV,QAAQ,EACpF;gBAACC,MAAM;YAAC;QAEZ;QAEA,IAAI,CAACE,SAAS;YACZ,IAAI,CAACH,KAAK,CAAC,CAAC,mBAAmB,EAAEV,SAAS,EAAE;gBAACW,MAAM;YAAC;QACtD;QAEA,IAAI,CAACU,GAAG,CAACR,QAAQS,OAAO;IAC1B;AACF"}
1
+ {"version":3,"sources":["../../../../src/commands/dataset/visibility/get.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {validateDatasetName} from '../../../actions/dataset/validateDatasetName.js'\nimport {promptForProject} from '../../../prompts/promptForProject.js'\nimport {listDatasets} from '../../../services/datasets.js'\nimport {getProjectIdFlag} from '../../../util/sharedFlags.js'\n\nconst getDebug = subdebug('dataset:visibility:get')\n\nexport class DatasetVisibilityGetCommand extends SanityCommand<typeof DatasetVisibilityGetCommand> {\n static override args = {\n dataset: Args.string({\n description: 'The name of the dataset to get visibility for',\n required: true,\n }),\n }\n\n static override description = 'Get the visibility of a dataset'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset',\n description: 'Check the visibility of a dataset',\n },\n ]\n\n static override flags = {\n ...getProjectIdFlag({\n description: 'Project ID to get dataset visibility for',\n semantics: 'override',\n }),\n }\n\n public async run(): Promise<void> {\n const {args} = await this.parse(DatasetVisibilityGetCommand)\n const {dataset} = args\n\n const projectId = await this.getProjectId({\n fallback: () =>\n promptForProject({\n requiredPermissions: [{grant: 'read', permission: 'sanity.project.datasets'}],\n }),\n })\n\n const dsError = validateDatasetName(dataset)\n if (dsError) {\n this.error(dsError, {exit: 1})\n }\n\n let current\n try {\n const datasets = await listDatasets(projectId)\n current = datasets.find((curr: {name: string}) => curr.name === dataset)\n } catch (error) {\n getDebug(`Error listing datasets`, error)\n this.error(\n `Failed to list datasets: ${error instanceof Error ? error.message : String(error)}`,\n {exit: 1},\n )\n }\n\n if (!current) {\n this.error(`Dataset not found: ${dataset}`, {exit: 1})\n }\n\n this.log(current.aclMode)\n }\n}\n"],"names":["Args","SanityCommand","subdebug","validateDatasetName","promptForProject","listDatasets","getProjectIdFlag","getDebug","DatasetVisibilityGetCommand","args","dataset","string","description","required","examples","command","flags","semantics","run","parse","projectId","getProjectId","fallback","requiredPermissions","grant","permission","dsError","error","exit","current","datasets","find","curr","name","Error","message","String","log","aclMode"],"mappings":"AAAA,SAAQA,IAAI,QAAO,cAAa;AAChC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAExD,SAAQC,mBAAmB,QAAO,kDAAiD;AACnF,SAAQC,gBAAgB,QAAO,uCAAsC;AACrE,SAAQC,YAAY,QAAO,gCAA+B;AAC1D,SAAQC,gBAAgB,QAAO,+BAA8B;AAE7D,MAAMC,WAAWL,SAAS;AAE1B,OAAO,MAAMM,oCAAoCP;IAC/C,OAAgBQ,OAAO;QACrBC,SAASV,KAAKW,MAAM,CAAC;YACnBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,kCAAiC;IAE/D,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,OAAgBI,QAAQ;QACtB,GAAGV,iBAAiB;YAClBM,aAAa;YACbK,WAAW;QACb,EAAE;IACJ,EAAC;IAED,MAAaC,MAAqB;QAChC,MAAM,EAACT,IAAI,EAAC,GAAG,MAAM,IAAI,CAACU,KAAK,CAACX;QAChC,MAAM,EAACE,OAAO,EAAC,GAAGD;QAElB,MAAMW,YAAY,MAAM,IAAI,CAACC,YAAY,CAAC;YACxCC,UAAU,IACRlB,iBAAiB;oBACfmB,qBAAqB;wBAAC;4BAACC,OAAO;4BAAQC,YAAY;wBAAyB;qBAAE;gBAC/E;QACJ;QAEA,MAAMC,UAAUvB,oBAAoBO;QACpC,IAAIgB,SAAS;YACX,IAAI,CAACC,KAAK,CAACD,SAAS;gBAACE,MAAM;YAAC;QAC9B;QAEA,IAAIC;QACJ,IAAI;YACF,MAAMC,WAAW,MAAMzB,aAAae;YACpCS,UAAUC,SAASC,IAAI,CAAC,CAACC,OAAyBA,KAAKC,IAAI,KAAKvB;QAClE,EAAE,OAAOiB,OAAO;YACdpB,SAAS,CAAC,sBAAsB,CAAC,EAAEoB;YACnC,IAAI,CAACA,KAAK,CACR,CAAC,yBAAyB,EAAEA,iBAAiBO,QAAQP,MAAMQ,OAAO,GAAGC,OAAOT,QAAQ,EACpF;gBAACC,MAAM;YAAC;QAEZ;QAEA,IAAI,CAACC,SAAS;YACZ,IAAI,CAACF,KAAK,CAAC,CAAC,mBAAmB,EAAEjB,SAAS,EAAE;gBAACkB,MAAM;YAAC;QACtD;QAEA,IAAI,CAACS,GAAG,CAACR,QAAQS,OAAO;IAC1B;AACF"}
@@ -1,8 +1,9 @@
1
1
  import { Args } from '@oclif/core';
2
2
  import { SanityCommand, subdebug } from '@sanity/cli-core';
3
3
  import { validateDatasetName } from '../../../actions/dataset/validateDatasetName.js';
4
+ import { promptForProject } from '../../../prompts/promptForProject.js';
4
5
  import { editDatasetAcl, listDatasets } from '../../../services/datasets.js';
5
- import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
6
+ import { getProjectIdFlag } from '../../../util/sharedFlags.js';
6
7
  const setDatasetVisibilityDebug = subdebug('dataset:visibility:set');
7
8
  export class DatasetVisibilitySetCommand extends SanityCommand {
8
9
  static args = {
@@ -30,15 +31,29 @@ export class DatasetVisibilitySetCommand extends SanityCommand {
30
31
  description: 'Make a dataset public'
31
32
  }
32
33
  ];
34
+ static flags = {
35
+ ...getProjectIdFlag({
36
+ description: 'Project ID to set dataset visibility for',
37
+ semantics: 'override'
38
+ })
39
+ };
33
40
  async run() {
34
41
  const { args } = await this.parse(DatasetVisibilitySetCommand);
35
42
  const { dataset, mode } = args;
36
- const projectId = await this.getProjectId();
37
- if (!projectId) {
38
- this.error(NO_PROJECT_ID, {
39
- exit: 1
40
- });
41
- }
43
+ const projectId = await this.getProjectId({
44
+ fallback: ()=>promptForProject({
45
+ requiredPermissions: [
46
+ {
47
+ grant: 'read',
48
+ permission: 'sanity.project.datasets'
49
+ },
50
+ {
51
+ grant: 'update',
52
+ permission: 'sanity.project.datasets'
53
+ }
54
+ ]
55
+ })
56
+ });
42
57
  const dsError = validateDatasetName(dataset);
43
58
  if (dsError) {
44
59
  this.error(dsError, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/dataset/visibility/set.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {DatasetsResponse} from '@sanity/client'\n\nimport {validateDatasetName} from '../../../actions/dataset/validateDatasetName.js'\nimport {editDatasetAcl, listDatasets} from '../../../services/datasets.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\n\nconst setDatasetVisibilityDebug = subdebug('dataset:visibility:set')\n\nexport class DatasetVisibilitySetCommand extends SanityCommand<typeof DatasetVisibilitySetCommand> {\n static override args = {\n dataset: Args.string({\n description: 'The name of the dataset to set visibility for',\n required: true,\n }),\n mode: Args.string({\n description: 'The visibility mode to set',\n options: ['public', 'private'],\n required: true,\n }),\n }\n\n static override description = 'Set the visibility of a dataset'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset private',\n description: 'Make a dataset private',\n },\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset public',\n description: 'Make a dataset public',\n },\n ]\n\n public async run(): Promise<void> {\n const {args} = await this.parse(DatasetVisibilitySetCommand)\n const {dataset, mode} = args\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n const dsError = validateDatasetName(dataset)\n if (dsError) {\n this.error(dsError, {exit: 1})\n }\n\n let datasets: DatasetsResponse\n\n try {\n datasets = await listDatasets(projectId)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n setDatasetVisibilityDebug(`Failed to list datasets: ${message}`, error)\n this.error(`Failed to list datasets: ${message}`, {exit: 1})\n }\n\n const current = datasets.find((curr: {name: string}) => curr.name === dataset)\n\n if (!current) {\n this.error(`Dataset \"${dataset}\" not found`, {exit: 1})\n }\n\n if (current.aclMode === mode) {\n this.log(`Dataset already in \"${mode}\" mode`)\n return\n }\n\n if (mode === 'private') {\n this.log(\n 'Please note that while documents are private, assets (files and images) are still public',\n )\n }\n\n try {\n await editDatasetAcl({\n aclMode: mode as 'private' | 'public',\n datasetName: dataset,\n projectId,\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n setDatasetVisibilityDebug(`Failed to edit dataset: ${message}`, error)\n this.error(`Failed to edit dataset: ${message}`, {exit: 1})\n }\n this.log('Dataset visibility changed')\n }\n}\n"],"names":["Args","SanityCommand","subdebug","validateDatasetName","editDatasetAcl","listDatasets","NO_PROJECT_ID","setDatasetVisibilityDebug","DatasetVisibilitySetCommand","args","dataset","string","description","required","mode","options","examples","command","run","parse","projectId","getProjectId","error","exit","dsError","datasets","message","Error","String","current","find","curr","name","aclMode","log","datasetName"],"mappings":"AAAA,SAAQA,IAAI,QAAO,cAAa;AAChC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAGxD,SAAQC,mBAAmB,QAAO,kDAAiD;AACnF,SAAQC,cAAc,EAAEC,YAAY,QAAO,gCAA+B;AAC1E,SAAQC,aAAa,QAAO,iCAAgC;AAE5D,MAAMC,4BAA4BL,SAAS;AAE3C,OAAO,MAAMM,oCAAoCP;IAC/C,OAAgBQ,OAAO;QACrBC,SAASV,KAAKW,MAAM,CAAC;YACnBC,aAAa;YACbC,UAAU;QACZ;QACAC,MAAMd,KAAKW,MAAM,CAAC;YAChBC,aAAa;YACbG,SAAS;gBAAC;gBAAU;aAAU;YAC9BF,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,kCAAiC;IAE/D,OAAgBI,WAAW;QACzB;YACEC,SAAS;YACTL,aAAa;QACf;QACA;YACEK,SAAS;YACTL,aAAa;QACf;KACD,CAAA;IAED,MAAaM,MAAqB;QAChC,MAAM,EAACT,IAAI,EAAC,GAAG,MAAM,IAAI,CAACU,KAAK,CAACX;QAChC,MAAM,EAACE,OAAO,EAAEI,IAAI,EAAC,GAAGL;QAExB,MAAMW,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAAChB,eAAe;gBAACiB,MAAM;YAAC;QACpC;QAEA,MAAMC,UAAUrB,oBAAoBO;QACpC,IAAIc,SAAS;YACX,IAAI,CAACF,KAAK,CAACE,SAAS;gBAACD,MAAM;YAAC;QAC9B;QAEA,IAAIE;QAEJ,IAAI;YACFA,WAAW,MAAMpB,aAAae;QAChC,EAAE,OAAOE,OAAO;YACd,MAAMI,UAAUJ,iBAAiBK,QAAQL,MAAMI,OAAO,GAAGE,OAAON;YAChEf,0BAA0B,CAAC,yBAAyB,EAAEmB,SAAS,EAAEJ;YACjE,IAAI,CAACA,KAAK,CAAC,CAAC,yBAAyB,EAAEI,SAAS,EAAE;gBAACH,MAAM;YAAC;QAC5D;QAEA,MAAMM,UAAUJ,SAASK,IAAI,CAAC,CAACC,OAAyBA,KAAKC,IAAI,KAAKtB;QAEtE,IAAI,CAACmB,SAAS;YACZ,IAAI,CAACP,KAAK,CAAC,CAAC,SAAS,EAAEZ,QAAQ,WAAW,CAAC,EAAE;gBAACa,MAAM;YAAC;QACvD;QAEA,IAAIM,QAAQI,OAAO,KAAKnB,MAAM;YAC5B,IAAI,CAACoB,GAAG,CAAC,CAAC,oBAAoB,EAAEpB,KAAK,MAAM,CAAC;YAC5C;QACF;QAEA,IAAIA,SAAS,WAAW;YACtB,IAAI,CAACoB,GAAG,CACN;QAEJ;QAEA,IAAI;YACF,MAAM9B,eAAe;gBACnB6B,SAASnB;gBACTqB,aAAazB;gBACbU;YACF;QACF,EAAE,OAAOE,OAAO;YACd,MAAMI,UAAUJ,iBAAiBK,QAAQL,MAAMI,OAAO,GAAGE,OAAON;YAChEf,0BAA0B,CAAC,wBAAwB,EAAEmB,SAAS,EAAEJ;YAChE,IAAI,CAACA,KAAK,CAAC,CAAC,wBAAwB,EAAEI,SAAS,EAAE;gBAACH,MAAM;YAAC;QAC3D;QACA,IAAI,CAACW,GAAG,CAAC;IACX;AACF"}
1
+ {"version":3,"sources":["../../../../src/commands/dataset/visibility/set.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {DatasetsResponse} from '@sanity/client'\n\nimport {validateDatasetName} from '../../../actions/dataset/validateDatasetName.js'\nimport {promptForProject} from '../../../prompts/promptForProject.js'\nimport {editDatasetAcl, listDatasets} from '../../../services/datasets.js'\nimport {getProjectIdFlag} from '../../../util/sharedFlags.js'\n\nconst setDatasetVisibilityDebug = subdebug('dataset:visibility:set')\n\nexport class DatasetVisibilitySetCommand extends SanityCommand<typeof DatasetVisibilitySetCommand> {\n static override args = {\n dataset: Args.string({\n description: 'The name of the dataset to set visibility for',\n required: true,\n }),\n mode: Args.string({\n description: 'The visibility mode to set',\n options: ['public', 'private'],\n required: true,\n }),\n }\n\n static override description = 'Set the visibility of a dataset'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset private',\n description: 'Make a dataset private',\n },\n {\n command: '<%= config.bin %> <%= command.id %> my-dataset public',\n description: 'Make a dataset public',\n },\n ]\n\n static override flags = {\n ...getProjectIdFlag({\n description: 'Project ID to set dataset visibility for',\n semantics: 'override',\n }),\n }\n\n public async run(): Promise<void> {\n const {args} = await this.parse(DatasetVisibilitySetCommand)\n const {dataset, mode} = args\n\n const projectId = await this.getProjectId({\n fallback: () =>\n promptForProject({\n requiredPermissions: [\n {grant: 'read', permission: 'sanity.project.datasets'},\n {grant: 'update', permission: 'sanity.project.datasets'},\n ],\n }),\n })\n\n const dsError = validateDatasetName(dataset)\n if (dsError) {\n this.error(dsError, {exit: 1})\n }\n\n let datasets: DatasetsResponse\n\n try {\n datasets = await listDatasets(projectId)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n setDatasetVisibilityDebug(`Failed to list datasets: ${message}`, error)\n this.error(`Failed to list datasets: ${message}`, {exit: 1})\n }\n\n const current = datasets.find((curr: {name: string}) => curr.name === dataset)\n\n if (!current) {\n this.error(`Dataset \"${dataset}\" not found`, {exit: 1})\n }\n\n if (current.aclMode === mode) {\n this.log(`Dataset already in \"${mode}\" mode`)\n return\n }\n\n if (mode === 'private') {\n this.log(\n 'Please note that while documents are private, assets (files and images) are still public',\n )\n }\n\n try {\n await editDatasetAcl({\n aclMode: mode as 'private' | 'public',\n datasetName: dataset,\n projectId,\n })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n setDatasetVisibilityDebug(`Failed to edit dataset: ${message}`, error)\n this.error(`Failed to edit dataset: ${message}`, {exit: 1})\n }\n this.log('Dataset visibility changed')\n }\n}\n"],"names":["Args","SanityCommand","subdebug","validateDatasetName","promptForProject","editDatasetAcl","listDatasets","getProjectIdFlag","setDatasetVisibilityDebug","DatasetVisibilitySetCommand","args","dataset","string","description","required","mode","options","examples","command","flags","semantics","run","parse","projectId","getProjectId","fallback","requiredPermissions","grant","permission","dsError","error","exit","datasets","message","Error","String","current","find","curr","name","aclMode","log","datasetName"],"mappings":"AAAA,SAAQA,IAAI,QAAO,cAAa;AAChC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAGxD,SAAQC,mBAAmB,QAAO,kDAAiD;AACnF,SAAQC,gBAAgB,QAAO,uCAAsC;AACrE,SAAQC,cAAc,EAAEC,YAAY,QAAO,gCAA+B;AAC1E,SAAQC,gBAAgB,QAAO,+BAA8B;AAE7D,MAAMC,4BAA4BN,SAAS;AAE3C,OAAO,MAAMO,oCAAoCR;IAC/C,OAAgBS,OAAO;QACrBC,SAASX,KAAKY,MAAM,CAAC;YACnBC,aAAa;YACbC,UAAU;QACZ;QACAC,MAAMf,KAAKY,MAAM,CAAC;YAChBC,aAAa;YACbG,SAAS;gBAAC;gBAAU;aAAU;YAC9BF,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,kCAAiC;IAE/D,OAAgBI,WAAW;QACzB;YACEC,SAAS;YACTL,aAAa;QACf;QACA;YACEK,SAAS;YACTL,aAAa;QACf;KACD,CAAA;IAED,OAAgBM,QAAQ;QACtB,GAAGZ,iBAAiB;YAClBM,aAAa;YACbO,WAAW;QACb,EAAE;IACJ,EAAC;IAED,MAAaC,MAAqB;QAChC,MAAM,EAACX,IAAI,EAAC,GAAG,MAAM,IAAI,CAACY,KAAK,CAACb;QAChC,MAAM,EAACE,OAAO,EAAEI,IAAI,EAAC,GAAGL;QAExB,MAAMa,YAAY,MAAM,IAAI,CAACC,YAAY,CAAC;YACxCC,UAAU,IACRrB,iBAAiB;oBACfsB,qBAAqB;wBACnB;4BAACC,OAAO;4BAAQC,YAAY;wBAAyB;wBACrD;4BAACD,OAAO;4BAAUC,YAAY;wBAAyB;qBACxD;gBACH;QACJ;QAEA,MAAMC,UAAU1B,oBAAoBQ;QACpC,IAAIkB,SAAS;YACX,IAAI,CAACC,KAAK,CAACD,SAAS;gBAACE,MAAM;YAAC;QAC9B;QAEA,IAAIC;QAEJ,IAAI;YACFA,WAAW,MAAM1B,aAAaiB;QAChC,EAAE,OAAOO,OAAO;YACd,MAAMG,UAAUH,iBAAiBI,QAAQJ,MAAMG,OAAO,GAAGE,OAAOL;YAChEtB,0BAA0B,CAAC,yBAAyB,EAAEyB,SAAS,EAAEH;YACjE,IAAI,CAACA,KAAK,CAAC,CAAC,yBAAyB,EAAEG,SAAS,EAAE;gBAACF,MAAM;YAAC;QAC5D;QAEA,MAAMK,UAAUJ,SAASK,IAAI,CAAC,CAACC,OAAyBA,KAAKC,IAAI,KAAK5B;QAEtE,IAAI,CAACyB,SAAS;YACZ,IAAI,CAACN,KAAK,CAAC,CAAC,SAAS,EAAEnB,QAAQ,WAAW,CAAC,EAAE;gBAACoB,MAAM;YAAC;QACvD;QAEA,IAAIK,QAAQI,OAAO,KAAKzB,MAAM;YAC5B,IAAI,CAAC0B,GAAG,CAAC,CAAC,oBAAoB,EAAE1B,KAAK,MAAM,CAAC;YAC5C;QACF;QAEA,IAAIA,SAAS,WAAW;YACtB,IAAI,CAAC0B,GAAG,CACN;QAEJ;QAEA,IAAI;YACF,MAAMpC,eAAe;gBACnBmC,SAASzB;gBACT2B,aAAa/B;gBACbY;YACF;QACF,EAAE,OAAOO,OAAO;YACd,MAAMG,UAAUH,iBAAiBI,QAAQJ,MAAMG,OAAO,GAAGE,OAAOL;YAChEtB,0BAA0B,CAAC,wBAAwB,EAAEyB,SAAS,EAAEH;YAChE,IAAI,CAACA,KAAK,CAAC,CAAC,wBAAwB,EAAEG,SAAS,EAAE;gBAACF,MAAM;YAAC;QAC3D;QACA,IAAI,CAACU,GAAG,CAAC;IACX;AACF"}
@@ -1,8 +1,10 @@
1
1
  import path from 'node:path';
2
2
  import { styleText } from 'node:util';
3
3
  import { Flags } from '@oclif/core';
4
- import { formatObject, printKeyValue, SanityCommand } from '@sanity/cli-core';
5
- import { omit, padStart } from 'lodash-es';
4
+ import { SanityCommand } from '@sanity/cli-core';
5
+ import omit from 'lodash-es/omit.js';
6
+ import padStart from 'lodash-es/padStart.js';
7
+ import { formatObject, printKeyValue } from '../actions/debug/formatters.js';
6
8
  import { gatherDebugInfo } from '../actions/debug/gatherDebugInfo.js';
7
9
  import { getGlobalConfigLocation } from '../actions/debug/getGlobalConfigLocation.js';
8
10
  import { getDisplayName, getFormatters } from '../actions/versions/getFormatters.js';
@@ -1 +1 @@
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
+ {"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 {SanityCommand} from '@sanity/cli-core'\nimport omit from 'lodash-es/omit.js'\nimport padStart from 'lodash-es/padStart.js'\n\nimport {formatObject, printKeyValue} from '../actions/debug/formatters.js'\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","SanityCommand","omit","padStart","formatObject","printKeyValue","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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"}
@@ -17,8 +17,7 @@ export class DeployCommand extends SanityCommand {
17
17
  static examples = [
18
18
  {
19
19
  command: '<%= config.bin %> <%= command.id %>',
20
- // TODO: Update this
21
- description: 'Build the studio'
20
+ description: 'Build and deploy the studio to Sanity hosting'
22
21
  },
23
22
  {
24
23
  command: '<%= config.bin %> <%= command.id %> --no-minify --source-maps',
@@ -27,6 +26,10 @@ export class DeployCommand extends SanityCommand {
27
26
  {
28
27
  command: '<%= config.bin %> <%= command.id %> --schema-required',
29
28
  description: 'Fail fast on schema store fails - for when other services rely on the stored schema'
29
+ },
30
+ {
31
+ command: '<%= config.bin %> <%= command.id %> --external',
32
+ description: 'Register an externally hosted studio (studioHost contains full URL)'
30
33
  }
31
34
  ];
32
35
  static flags = {
@@ -40,6 +43,15 @@ export class DeployCommand extends SanityCommand {
40
43
  default: true,
41
44
  description: "Don't build the studio prior to deploy, instead deploying the version currently in `dist/`"
42
45
  }),
46
+ external: Flags.boolean({
47
+ default: false,
48
+ description: 'Register an externally hosted studio',
49
+ exclusive: [
50
+ 'source-maps',
51
+ 'minify',
52
+ 'build'
53
+ ]
54
+ }),
43
55
  minify: Flags.boolean({
44
56
  allowNo: true,
45
57
  default: true,
@@ -66,11 +78,12 @@ export class DeployCommand extends SanityCommand {
66
78
  async run() {
67
79
  const { flags } = await this.parse(DeployCommand);
68
80
  const cliConfig = await this.getCliConfig();
69
- const workDir = (await this.getProjectRoot()).directory;
81
+ const projectRoot = await this.getProjectRoot();
70
82
  const isApp = determineIsApp(cliConfig);
71
- const defaultOutputDir = path.resolve(path.join(workDir, 'dist'));
83
+ const defaultOutputDir = path.resolve(path.join(projectRoot.directory, 'dist'));
72
84
  const sourceDir = path.resolve(process.cwd(), this.args.sourceDir || defaultOutputDir);
73
- if (this.args.sourceDir && this.args.sourceDir !== 'dist') {
85
+ // Skip the directory check if the studio is externally hosted
86
+ if (this.args.sourceDir && this.args.sourceDir !== 'dist' && !flags.external) {
74
87
  let relativeOutput = path.relative(process.cwd(), sourceDir);
75
88
  if (relativeOutput[0] !== '.') {
76
89
  relativeOutput = `./${relativeOutput}`;
@@ -92,21 +105,19 @@ export class DeployCommand extends SanityCommand {
92
105
  deployDebug('Deploying app');
93
106
  await deployApp({
94
107
  cliConfig,
95
- exit: this.exit,
96
108
  flags,
97
109
  output: this.output,
98
- sourceDir,
99
- workDir
110
+ projectRoot,
111
+ sourceDir
100
112
  });
101
113
  } else {
102
114
  deployDebug('Deploying studio');
103
115
  await deployStudio({
104
116
  cliConfig,
105
- exit: this.exit,
106
117
  flags,
107
118
  output: this.output,
108
- sourceDir,
109
- workDir
119
+ projectRoot,
120
+ sourceDir
110
121
  });
111
122
  }
112
123
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commands/deploy.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport {confirm} from '@sanity/cli-core/ux'\n\nimport {deployApp} from '../actions/deploy/deployApp.js'\nimport {deployDebug} from '../actions/deploy/deployDebug.js'\nimport {deployStudio} from '../actions/deploy/deployStudio.js'\nimport {determineIsApp} from '../util/determineIsApp.js'\nimport {dirIsEmptyOrNonExistent} from '../util/dirIsEmptyOrNonExistent.js'\n\nexport class DeployCommand extends SanityCommand<typeof DeployCommand> {\n static override args = {\n sourceDir: Args.directory({\n description: 'Source directory',\n }),\n }\n\n static override description = 'Builds and deploys Sanity Studio or application to Sanity hosting'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n // TODO: Update this\n description: 'Build the studio',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --no-minify --source-maps',\n description: 'Deploys non-minified build with source maps',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --schema-required',\n description:\n 'Fail fast on schema store fails - for when other services rely on the stored schema',\n },\n ]\n\n static override flags = {\n 'auto-updates': Flags.boolean({\n allowNo: true,\n deprecated: true,\n description: 'Automatically update the studio to the latest version',\n }),\n build: Flags.boolean({\n allowNo: true,\n default: true,\n description:\n \"Don't build the studio prior to deploy, instead deploying the version currently in `dist/`\",\n }),\n minify: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Skip minifying built JavaScript (speeds up build, increases size of bundle)',\n }),\n 'schema-required': Flags.boolean({\n default: false,\n description: 'Fail-fast deployment if schema store fails',\n }),\n 'source-maps': Flags.boolean({\n default: false,\n description: 'Enable source maps for built bundles (increases size of bundle)',\n }),\n verbose: Flags.boolean({\n default: false,\n description: 'Enable verbose logging',\n }),\n yes: Flags.boolean({\n char: 'y',\n default: false,\n description:\n 'Unattended mode, answers \"yes\" to any \"yes/no\" prompt and otherwise uses defaults',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(DeployCommand)\n\n const cliConfig = await this.getCliConfig()\n const workDir = (await this.getProjectRoot()).directory\n\n const isApp = determineIsApp(cliConfig)\n\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const sourceDir = path.resolve(process.cwd(), this.args.sourceDir || defaultOutputDir)\n\n if (this.args.sourceDir && this.args.sourceDir !== 'dist') {\n let relativeOutput = path.relative(process.cwd(), sourceDir)\n if (relativeOutput[0] !== '.') {\n relativeOutput = `./${relativeOutput}`\n }\n\n const isEmpty = await dirIsEmptyOrNonExistent(sourceDir)\n // Prompt to delete the directory if it's not empty\n const shouldProceed =\n isEmpty ||\n (await confirm({\n default: false,\n message: `\"${relativeOutput}\" is not empty, do you want to proceed?`,\n }))\n\n if (!shouldProceed) {\n this.output.error('Cancelled.', {exit: 1})\n }\n\n this.output.log(`Building to ${relativeOutput}\\n`)\n }\n\n if (isApp) {\n deployDebug('Deploying app')\n await deployApp({\n cliConfig,\n exit: this.exit,\n flags,\n output: this.output,\n sourceDir,\n workDir,\n })\n } else {\n deployDebug('Deploying studio')\n await deployStudio({\n cliConfig,\n exit: this.exit,\n flags,\n output: this.output,\n sourceDir,\n workDir,\n })\n }\n }\n}\n"],"names":["path","Args","Flags","SanityCommand","confirm","deployApp","deployDebug","deployStudio","determineIsApp","dirIsEmptyOrNonExistent","DeployCommand","args","sourceDir","directory","description","examples","command","flags","boolean","allowNo","deprecated","build","default","minify","verbose","yes","char","run","parse","cliConfig","getCliConfig","workDir","getProjectRoot","isApp","defaultOutputDir","resolve","join","process","cwd","relativeOutput","relative","isEmpty","shouldProceed","message","output","error","exit","log"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/commands/deploy.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport {confirm} from '@sanity/cli-core/ux'\n\nimport {deployApp} from '../actions/deploy/deployApp.js'\nimport {deployDebug} from '../actions/deploy/deployDebug.js'\nimport {deployStudio} from '../actions/deploy/deployStudio.js'\nimport {determineIsApp} from '../util/determineIsApp.js'\nimport {dirIsEmptyOrNonExistent} from '../util/dirIsEmptyOrNonExistent.js'\n\nexport class DeployCommand extends SanityCommand<typeof DeployCommand> {\n static override args = {\n sourceDir: Args.directory({\n description: 'Source directory',\n }),\n }\n\n static override description = 'Builds and deploys Sanity Studio or application to Sanity hosting'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Build and deploy the studio to Sanity hosting',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --no-minify --source-maps',\n description: 'Deploys non-minified build with source maps',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --schema-required',\n description:\n 'Fail fast on schema store fails - for when other services rely on the stored schema',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --external',\n description: 'Register an externally hosted studio (studioHost contains full URL)',\n },\n ]\n\n static override flags = {\n 'auto-updates': Flags.boolean({\n allowNo: true,\n deprecated: true,\n description: 'Automatically update the studio to the latest version',\n }),\n build: Flags.boolean({\n allowNo: true,\n default: true,\n description:\n \"Don't build the studio prior to deploy, instead deploying the version currently in `dist/`\",\n }),\n external: Flags.boolean({\n default: false,\n description: 'Register an externally hosted studio',\n exclusive: ['source-maps', 'minify', 'build'],\n }),\n minify: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Skip minifying built JavaScript (speeds up build, increases size of bundle)',\n }),\n 'schema-required': Flags.boolean({\n default: false,\n description: 'Fail-fast deployment if schema store fails',\n }),\n 'source-maps': Flags.boolean({\n default: false,\n description: 'Enable source maps for built bundles (increases size of bundle)',\n }),\n verbose: Flags.boolean({\n default: false,\n description: 'Enable verbose logging',\n }),\n yes: Flags.boolean({\n char: 'y',\n default: false,\n description:\n 'Unattended mode, answers \"yes\" to any \"yes/no\" prompt and otherwise uses defaults',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(DeployCommand)\n\n const cliConfig = await this.getCliConfig()\n const projectRoot = await this.getProjectRoot()\n\n const isApp = determineIsApp(cliConfig)\n\n const defaultOutputDir = path.resolve(path.join(projectRoot.directory, 'dist'))\n const sourceDir = path.resolve(process.cwd(), this.args.sourceDir || defaultOutputDir)\n\n // Skip the directory check if the studio is externally hosted\n if (this.args.sourceDir && this.args.sourceDir !== 'dist' && !flags.external) {\n let relativeOutput = path.relative(process.cwd(), sourceDir)\n if (relativeOutput[0] !== '.') {\n relativeOutput = `./${relativeOutput}`\n }\n\n const isEmpty = await dirIsEmptyOrNonExistent(sourceDir)\n // Prompt to delete the directory if it's not empty\n const shouldProceed =\n isEmpty ||\n (await confirm({\n default: false,\n message: `\"${relativeOutput}\" is not empty, do you want to proceed?`,\n }))\n\n if (!shouldProceed) {\n this.output.error('Cancelled.', {exit: 1})\n }\n\n this.output.log(`Building to ${relativeOutput}\\n`)\n }\n\n if (isApp) {\n deployDebug('Deploying app')\n await deployApp({\n cliConfig,\n flags,\n output: this.output,\n projectRoot,\n sourceDir,\n })\n } else {\n deployDebug('Deploying studio')\n await deployStudio({\n cliConfig,\n flags,\n output: this.output,\n projectRoot,\n sourceDir,\n })\n }\n }\n}\n"],"names":["path","Args","Flags","SanityCommand","confirm","deployApp","deployDebug","deployStudio","determineIsApp","dirIsEmptyOrNonExistent","DeployCommand","args","sourceDir","directory","description","examples","command","flags","boolean","allowNo","deprecated","build","default","external","exclusive","minify","verbose","yes","char","run","parse","cliConfig","getCliConfig","projectRoot","getProjectRoot","isApp","defaultOutputDir","resolve","join","process","cwd","relativeOutput","relative","isEmpty","shouldProceed","message","output","error","exit","log"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAE5B,SAAQC,IAAI,EAAEC,KAAK,QAAO,cAAa;AACvC,SAAQC,aAAa,QAAO,mBAAkB;AAC9C,SAAQC,OAAO,QAAO,sBAAqB;AAE3C,SAAQC,SAAS,QAAO,iCAAgC;AACxD,SAAQC,WAAW,QAAO,mCAAkC;AAC5D,SAAQC,YAAY,QAAO,oCAAmC;AAC9D,SAAQC,cAAc,QAAO,4BAA2B;AACxD,SAAQC,uBAAuB,QAAO,qCAAoC;AAE1E,OAAO,MAAMC,sBAAsBP;IACjC,OAAgBQ,OAAO;QACrBC,WAAWX,KAAKY,SAAS,CAAC;YACxBC,aAAa;QACf;IACF,EAAC;IAED,OAAgBA,cAAc,oEAAmE;IAEjG,OAAgBC,WAAW;QACzB;YACEC,SAAS;YACTF,aAAa;QACf;QACA;YACEE,SAAS;YACTF,aAAa;QACf;QACA;YACEE,SAAS;YACTF,aACE;QACJ;QACA;YACEE,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,OAAgBG,QAAQ;QACtB,gBAAgBf,MAAMgB,OAAO,CAAC;YAC5BC,SAAS;YACTC,YAAY;YACZN,aAAa;QACf;QACAO,OAAOnB,MAAMgB,OAAO,CAAC;YACnBC,SAAS;YACTG,SAAS;YACTR,aACE;QACJ;QACAS,UAAUrB,MAAMgB,OAAO,CAAC;YACtBI,SAAS;YACTR,aAAa;YACbU,WAAW;gBAAC;gBAAe;gBAAU;aAAQ;QAC/C;QACAC,QAAQvB,MAAMgB,OAAO,CAAC;YACpBC,SAAS;YACTG,SAAS;YACTR,aAAa;QACf;QACA,mBAAmBZ,MAAMgB,OAAO,CAAC;YAC/BI,SAAS;YACTR,aAAa;QACf;QACA,eAAeZ,MAAMgB,OAAO,CAAC;YAC3BI,SAAS;YACTR,aAAa;QACf;QACAY,SAASxB,MAAMgB,OAAO,CAAC;YACrBI,SAAS;YACTR,aAAa;QACf;QACAa,KAAKzB,MAAMgB,OAAO,CAAC;YACjBU,MAAM;YACNN,SAAS;YACTR,aACE;QACJ;IACF,EAAC;IAED,MAAae,MAAqB;QAChC,MAAM,EAACZ,KAAK,EAAC,GAAG,MAAM,IAAI,CAACa,KAAK,CAACpB;QAEjC,MAAMqB,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,MAAMC,cAAc,MAAM,IAAI,CAACC,cAAc;QAE7C,MAAMC,QAAQ3B,eAAeuB;QAE7B,MAAMK,mBAAmBpC,KAAKqC,OAAO,CAACrC,KAAKsC,IAAI,CAACL,YAAYpB,SAAS,EAAE;QACvE,MAAMD,YAAYZ,KAAKqC,OAAO,CAACE,QAAQC,GAAG,IAAI,IAAI,CAAC7B,IAAI,CAACC,SAAS,IAAIwB;QAErE,8DAA8D;QAC9D,IAAI,IAAI,CAACzB,IAAI,CAACC,SAAS,IAAI,IAAI,CAACD,IAAI,CAACC,SAAS,KAAK,UAAU,CAACK,MAAMM,QAAQ,EAAE;YAC5E,IAAIkB,iBAAiBzC,KAAK0C,QAAQ,CAACH,QAAQC,GAAG,IAAI5B;YAClD,IAAI6B,cAAc,CAAC,EAAE,KAAK,KAAK;gBAC7BA,iBAAiB,CAAC,EAAE,EAAEA,gBAAgB;YACxC;YAEA,MAAME,UAAU,MAAMlC,wBAAwBG;YAC9C,mDAAmD;YACnD,MAAMgC,gBACJD,WACC,MAAMvC,QAAQ;gBACbkB,SAAS;gBACTuB,SAAS,CAAC,CAAC,EAAEJ,eAAe,uCAAuC,CAAC;YACtE;YAEF,IAAI,CAACG,eAAe;gBAClB,IAAI,CAACE,MAAM,CAACC,KAAK,CAAC,cAAc;oBAACC,MAAM;gBAAC;YAC1C;YAEA,IAAI,CAACF,MAAM,CAACG,GAAG,CAAC,CAAC,YAAY,EAAER,eAAe,EAAE,CAAC;QACnD;QAEA,IAAIN,OAAO;YACT7B,YAAY;YACZ,MAAMD,UAAU;gBACd0B;gBACAd;gBACA6B,QAAQ,IAAI,CAACA,MAAM;gBACnBb;gBACArB;YACF;QACF,OAAO;YACLN,YAAY;YACZ,MAAMC,aAAa;gBACjBwB;gBACAd;gBACA6B,QAAQ,IAAI,CAACA,MAAM;gBACnBb;gBACArB;YACF;QACF;IACF;AACF"}
@@ -17,16 +17,14 @@ export class DevCommand extends SanityCommand {
17
17
  description: 'Automatically update Sanity Studio dependencies.'
18
18
  }),
19
19
  host: Flags.string({
20
- default: 'localhost',
21
- description: 'The local network interface at which to listen.'
20
+ description: '[default: localhost] The local network interface at which to listen.'
22
21
  }),
23
22
  'load-in-dashboard': Flags.boolean({
24
23
  allowNo: true,
25
24
  description: 'Load the app/studio in the Sanity dashboard.'
26
25
  }),
27
26
  port: Flags.string({
28
- default: '3333',
29
- description: 'TCP port to start server on.'
27
+ description: '[default: 3333] TCP port to start server on.'
30
28
  })
31
29
  };
32
30
  async run() {
@@ -1 +1 @@
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
+ {"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 description: '[default: localhost] 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 description: '[default: 3333] 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","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;YACjBN,aAAa;QACf;QACA,qBAAqBN,MAAMS,OAAO,CAAC;YACjCC,SAAS;YACTJ,aAAa;QACf;QACAO,MAAMb,MAAMY,MAAM,CAAC;YACjBN,aAAa;QACf;IACF,EAAC;IAED,MAAaQ,MAA8C;QACzD,MAAM,EAACN,KAAK,EAAC,GAAG,MAAM,IAAI,CAACO,KAAK,CAACV;QAEjC,MAAMW,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGC,SAAS;QACvD,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,MAAMC,QAAQjB,eAAee;QAE7B,mDAAmD;QACnD,IAAIE,SAASb,KAAK,CAAC,oBAAoB,KAAKc,WAAW;YACrDd,KAAK,CAAC,oBAAoB,GAAG;QAC/B,OAAO,IAAIA,KAAK,CAAC,oBAAoB,KAAKc,WAAW;YACnD,yDAAyD;YACzDd,KAAK,CAAC,oBAAoB,GAAG;QAC/B;QAEA,IAAI;YACF,MAAMe,SAAS,MAAMrB,UAAU;gBAC7BiB;gBACAX;gBACAa;gBACAG,QAAQ,IAAI,CAACA,MAAM;gBACnBR;YACF;YACA,OAAOO;QACT,EAAE,OAAOE,OAAO;YACdtB,SAAS,CAAC,0BAA0B,CAAC,EAAEsB;YACvC,IAAI,CAACD,MAAM,CAACC,KAAK,CACf1B,UAAU;gBAAC;gBAAO;aAAU,EAAE,CAAC,4BAA4B,EAAE0B,MAAMC,OAAO,EAAE,GAC5E;gBACEC,MAAM;YACR;QAEJ;IACF;AACF"}
@@ -0,0 +1,125 @@
1
+ import { styleText } from 'node:util';
2
+ import { Args, Flags } from '@oclif/core';
3
+ import { SanityCommand } from '@sanity/cli-core';
4
+ import { logSymbols } from '@sanity/cli-core/ux';
5
+ import { doctorChecks, KNOWN_CHECKS } from '../actions/doctor/checks/index.js';
6
+ import { runDoctorChecks } from '../actions/doctor/runDoctorChecks.js';
7
+ const STATUS_SYMBOLS = {
8
+ error: logSymbols.error,
9
+ passed: logSymbols.success,
10
+ warning: logSymbols.warning
11
+ };
12
+ const MESSAGE_SYMBOLS = {
13
+ error: logSymbols.error,
14
+ info: logSymbols.info,
15
+ success: logSymbols.success,
16
+ warning: logSymbols.warning
17
+ };
18
+ export class DoctorCommand extends SanityCommand {
19
+ // strict=false allows variadic args — validation is handled by getChecks().
20
+ // options is omitted here because oclif's help formatter uses it for display,
21
+ // but actual validation is done explicitly in getChecks() for clear error messages.
22
+ static args = {
23
+ checks: Args.string({
24
+ description: `Checks to enable (defaults to all). Valid: ${KNOWN_CHECKS.join(', ')}`,
25
+ multiple: true,
26
+ required: false
27
+ })
28
+ };
29
+ static description = 'Run diagnostics on your Sanity project';
30
+ static examples = [
31
+ '<%= config.bin %> <%= command.id %>',
32
+ {
33
+ command: '<%= config.bin %> <%= command.id %> --json',
34
+ description: 'Output results as JSON'
35
+ },
36
+ {
37
+ command: '<%= config.bin %> <%= command.id %> cli',
38
+ description: 'Only run CLI-related diagnostics'
39
+ }
40
+ ];
41
+ static flags = {
42
+ json: Flags.boolean({
43
+ char: 'j',
44
+ default: false,
45
+ description: 'Output results as JSON'
46
+ })
47
+ };
48
+ // Needed for variable argument count
49
+ static strict = false;
50
+ async run() {
51
+ const { argv, flags } = await this.parse(DoctorCommand);
52
+ let checks;
53
+ try {
54
+ checks = getChecks(argv);
55
+ } catch (err) {
56
+ this.error(err instanceof Error ? err.message : String(err), {
57
+ exit: 2
58
+ });
59
+ }
60
+ const cwd = process.cwd();
61
+ if (!flags.json) {
62
+ this.log('Running diagnostics...\n');
63
+ }
64
+ const results = await runDoctorChecks({
65
+ cwd
66
+ }, checks);
67
+ if (flags.json) {
68
+ this.log(JSON.stringify(results, null, 2));
69
+ } else {
70
+ for (const check of results.checks){
71
+ this.printCheck(check);
72
+ }
73
+ this.printSummary(results.summary);
74
+ }
75
+ // Exit with error code if any checks failed
76
+ if (results.summary.errors > 0) {
77
+ this.exit(1);
78
+ }
79
+ }
80
+ printCheck(check) {
81
+ const symbol = STATUS_SYMBOLS[check.status];
82
+ const title = check.status === 'passed' ? check.title : styleText(check.status === 'error' ? 'red' : 'yellow', check.title);
83
+ this.log(`${symbol} ${title}`);
84
+ for (const message of check.messages){
85
+ this.printMessage(message);
86
+ }
87
+ this.log(''); // Empty line between checks
88
+ }
89
+ printMessage(message) {
90
+ const symbol = MESSAGE_SYMBOLS[message.type];
91
+ const text = message.type === 'error' ? styleText('red', message.text) : message.type === 'warning' ? styleText('yellow', message.text) : message.text;
92
+ this.log(` ${symbol} ${text}`);
93
+ if (message.suggestions?.length) {
94
+ for (const suggestion of message.suggestions){
95
+ this.log(` ${styleText('dim', '→')} ${suggestion}`);
96
+ }
97
+ }
98
+ }
99
+ printSummary(summary) {
100
+ const parts = [];
101
+ if (summary.passed > 0) {
102
+ parts.push(styleText('green', `${summary.passed} passed`));
103
+ }
104
+ if (summary.warnings > 0) {
105
+ parts.push(styleText('yellow', `${summary.warnings} warning${summary.warnings === 1 ? '' : 's'}`));
106
+ }
107
+ if (summary.errors > 0) {
108
+ parts.push(styleText('red', `${summary.errors} error${summary.errors === 1 ? '' : 's'}`));
109
+ }
110
+ this.log(`Summary: ${parts.join(', ')}`);
111
+ }
112
+ }
113
+ function getChecks(argv) {
114
+ // strict=false means oclif does NOT validate Args.string({ options }) — we must
115
+ // validate explicitly. Filter to string args that aren't flags.
116
+ const stringArgs = argv.filter((item)=>typeof item === 'string' && !item.startsWith('-'));
117
+ const unknownChecks = stringArgs.filter((item)=>!KNOWN_CHECKS.includes(item));
118
+ if (unknownChecks.length > 0) {
119
+ throw new Error(`Unknown check${unknownChecks.length === 1 ? '' : 's'}: ${unknownChecks.join(', ')}. Valid checks: ${KNOWN_CHECKS.join(', ')}`);
120
+ }
121
+ const checkNames = stringArgs;
122
+ return checkNames.length > 0 ? checkNames.map((check)=>doctorChecks[check]) : Object.values(doctorChecks);
123
+ }
124
+
125
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/commands/doctor.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport {logSymbols} from '@sanity/cli-core/ux'\n\nimport {type DoctorCheckName, doctorChecks, KNOWN_CHECKS} from '../actions/doctor/checks/index.js'\nimport {runDoctorChecks} from '../actions/doctor/runDoctorChecks.js'\nimport {\n type CheckMessage,\n type CheckResultStatus,\n type CheckResultWithMeta,\n type DoctorCheck,\n type DoctorResults,\n type MessageType,\n} from '../actions/doctor/types.js'\n\nconst STATUS_SYMBOLS: Record<CheckResultStatus, string> = {\n error: logSymbols.error,\n passed: logSymbols.success,\n warning: logSymbols.warning,\n}\n\nconst MESSAGE_SYMBOLS: Record<MessageType, string> = {\n error: logSymbols.error,\n info: logSymbols.info,\n success: logSymbols.success,\n warning: logSymbols.warning,\n}\n\nexport class DoctorCommand extends SanityCommand<typeof DoctorCommand> {\n // strict=false allows variadic args — validation is handled by getChecks().\n // options is omitted here because oclif's help formatter uses it for display,\n // but actual validation is done explicitly in getChecks() for clear error messages.\n static override args = {\n checks: Args.string({\n description: `Checks to enable (defaults to all). Valid: ${KNOWN_CHECKS.join(', ')}`,\n multiple: true,\n required: false,\n }),\n }\n\n static override description = 'Run diagnostics on your Sanity project'\n\n static override examples = [\n '<%= config.bin %> <%= command.id %>',\n {command: '<%= config.bin %> <%= command.id %> --json', description: 'Output results as JSON'},\n {\n command: '<%= config.bin %> <%= command.id %> cli',\n description: 'Only run CLI-related diagnostics',\n },\n ]\n\n static override flags = {\n json: Flags.boolean({\n char: 'j',\n default: false,\n description: 'Output results as JSON',\n }),\n }\n\n // Needed for variable argument count\n static override strict = false\n\n public async run(): Promise<void> {\n const {argv, flags} = await this.parse(DoctorCommand)\n\n let checks: Array<DoctorCheck>\n try {\n checks = getChecks(argv)\n } catch (err) {\n this.error(err instanceof Error ? err.message : String(err), {exit: 2})\n }\n const cwd = process.cwd()\n\n if (!flags.json) {\n this.log('Running diagnostics...\\n')\n }\n\n const results = await runDoctorChecks({cwd}, checks)\n\n if (flags.json) {\n this.log(JSON.stringify(results, null, 2))\n } else {\n for (const check of results.checks) {\n this.printCheck(check)\n }\n\n this.printSummary(results.summary)\n }\n\n // Exit with error code if any checks failed\n if (results.summary.errors > 0) {\n this.exit(1)\n }\n }\n\n private printCheck(check: CheckResultWithMeta): void {\n const symbol = STATUS_SYMBOLS[check.status]\n const title =\n check.status === 'passed'\n ? check.title\n : styleText(check.status === 'error' ? 'red' : 'yellow', check.title)\n\n this.log(`${symbol} ${title}`)\n\n for (const message of check.messages) {\n this.printMessage(message)\n }\n\n this.log('') // Empty line between checks\n }\n\n private printMessage(message: CheckMessage): void {\n const symbol = MESSAGE_SYMBOLS[message.type]\n const text =\n message.type === 'error'\n ? styleText('red', message.text)\n : message.type === 'warning'\n ? styleText('yellow', message.text)\n : message.text\n\n this.log(` ${symbol} ${text}`)\n\n if (message.suggestions?.length) {\n for (const suggestion of message.suggestions) {\n this.log(` ${styleText('dim', '→')} ${suggestion}`)\n }\n }\n }\n\n private printSummary(summary: DoctorResults['summary']): void {\n const parts: string[] = []\n\n if (summary.passed > 0) {\n parts.push(styleText('green', `${summary.passed} passed`))\n }\n if (summary.warnings > 0) {\n parts.push(\n styleText('yellow', `${summary.warnings} warning${summary.warnings === 1 ? '' : 's'}`),\n )\n }\n if (summary.errors > 0) {\n parts.push(styleText('red', `${summary.errors} error${summary.errors === 1 ? '' : 's'}`))\n }\n\n this.log(`Summary: ${parts.join(', ')}`)\n }\n}\n\nfunction getChecks(argv: unknown[]): Array<DoctorCheck> {\n // strict=false means oclif does NOT validate Args.string({ options }) — we must\n // validate explicitly. Filter to string args that aren't flags.\n const stringArgs = argv.filter(\n (item): item is string => typeof item === 'string' && !item.startsWith('-'),\n )\n\n const unknownChecks = stringArgs.filter(\n (item) => !(KNOWN_CHECKS as readonly string[]).includes(item),\n )\n if (unknownChecks.length > 0) {\n throw new Error(\n `Unknown check${unknownChecks.length === 1 ? '' : 's'}: ${unknownChecks.join(', ')}. Valid checks: ${KNOWN_CHECKS.join(', ')}`,\n )\n }\n\n const checkNames = stringArgs as DoctorCheckName[]\n return checkNames.length > 0\n ? checkNames.map((check) => doctorChecks[check])\n : Object.values(doctorChecks)\n}\n"],"names":["styleText","Args","Flags","SanityCommand","logSymbols","doctorChecks","KNOWN_CHECKS","runDoctorChecks","STATUS_SYMBOLS","error","passed","success","warning","MESSAGE_SYMBOLS","info","DoctorCommand","args","checks","string","description","join","multiple","required","examples","command","flags","json","boolean","char","default","strict","run","argv","parse","getChecks","err","Error","message","String","exit","cwd","process","log","results","JSON","stringify","check","printCheck","printSummary","summary","errors","symbol","status","title","messages","printMessage","type","text","suggestions","length","suggestion","parts","push","warnings","stringArgs","filter","item","startsWith","unknownChecks","includes","checkNames","map","Object","values"],"mappings":"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"}
@@ -7,11 +7,13 @@ import { getProjectCliClient, SanityCommand, subdebug } from '@sanity/cli-core';
7
7
  import { watch as chokidarWatch } from 'chokidar';
8
8
  import { execa, execaSync } from 'execa';
9
9
  import json5 from 'json5';
10
- import { isEqual, isPlainObject } from 'lodash-es';
10
+ import isEqual from 'lodash-es/isEqual.js';
11
+ import isPlainObject from 'lodash-es/isPlainObject.js';
11
12
  import { DOCUMENTS_API_VERSION } from '../../actions/documents/constants.js';
12
13
  import { getEditor, registerUnlinkOnSigInt } from '../../actions/documents/editor.js';
13
- import { NO_PROJECT_ID } from '../../util/errorMessages.js';
14
+ import { promptForProject } from '../../prompts/promptForProject.js';
14
15
  import { isIdentifiedSanityDocument, isSanityDocumentish } from '../../util/isSanityDocumentish.js';
16
+ import { getDatasetFlag, getProjectIdFlag } from '../../util/sharedFlags.js';
15
17
  const createDocumentDebug = subdebug('documents:create');
16
18
  export class CreateDocumentCommand extends SanityCommand {
17
19
  static args = {
@@ -37,12 +39,20 @@ export class CreateDocumentCommand extends SanityCommand {
37
39
  {
38
40
  command: '<%= config.bin %> <%= command.id %> --id myDocId --watch --replace --json5',
39
41
  description: 'Open configured $EDITOR and replace the document with the given content on each save. Use JSON5 file extension and parser for simplified syntax.'
42
+ },
43
+ {
44
+ command: '<%= config.bin %> <%= command.id %> myDocument.json --project-id abc123',
45
+ description: 'Create documents in a specific project'
40
46
  }
41
47
  ];
42
48
  static flags = {
43
- dataset: Flags.string({
44
- char: 'd',
45
- description: 'Dataset to create document(s) in (overrides config)'
49
+ ...getProjectIdFlag({
50
+ description: 'Project ID to create document(s) in',
51
+ semantics: 'override'
52
+ }),
53
+ ...getDatasetFlag({
54
+ description: 'Dataset to create document(s) in',
55
+ semantics: 'override'
46
56
  }),
47
57
  id: Flags.string({
48
58
  description: 'Specify a document ID to use. Will fetch remote document ID and populate editor.'
@@ -65,13 +75,10 @@ export class CreateDocumentCommand extends SanityCommand {
65
75
  const { args, flags } = await this.parse(CreateDocumentCommand);
66
76
  const { file } = args;
67
77
  const { dataset, id, json5: useJson5, missing, replace, watch } = flags;
68
- const cliConfig = await this.getCliConfig();
69
- const projectId = await this.getProjectId();
70
- if (!projectId) {
71
- this.error(NO_PROJECT_ID, {
72
- exit: 1
73
- });
74
- }
78
+ const cliConfig = await this.tryGetCliConfig();
79
+ const projectId = await this.getProjectId({
80
+ fallback: ()=>promptForProject({})
81
+ });
75
82
  if (!cliConfig.api?.dataset && !dataset) {
76
83
  this.error('No dataset specified. Either configure a dataset in sanity.cli.ts or use the --dataset flag', {
77
84
  exit: 1