@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 +1 @@
1
- {"version":3,"sources":["../../../../src/actions/auth/login/login.ts"],"sourcesContent":["import {\n type CLITelemetryStore,\n getCliToken,\n getGlobalCliClient,\n type Output,\n setConfig,\n} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\nimport open from 'open'\n\nimport {LoginTrace} from '../../../telemetry/login.telemetry.js'\nimport {canLaunchBrowser} from '../../../util/canLaunchBrowser.js'\nimport {startServerForTokenCallback} from '../authServer.js'\nimport {getProvider} from './getProvider.js'\n\nconst LOGIN_API_VERSION = '2024-02-01'\n\ninterface LoginOptions {\n output: Output\n\n telemetry: CLITelemetryStore\n\n experimental?: boolean\n open?: boolean\n provider?: string\n sso?: string\n}\n\n/**\n * Trigger the authentication flow for the CLI.\n *\n * NOTE: This uses terminal prompts and will not work for non-interactive/programmatic uses.\n *\n * @param options - Options for the login operation\n * @returns Promise that resolves when the login operation is complete\n * @throws Will throw if login fails or is cancelled\n * @internal\n */\nexport async function login(options: LoginOptions) {\n const {output, telemetry} = options\n const previousToken = await getCliToken()\n const hasExistingToken = Boolean(previousToken)\n\n const trace = telemetry.trace(LoginTrace)\n trace.start()\n\n // We explicitly want to use an unauthenticated client here, even if we already logged in\n const globalClient = await getGlobalCliClient({apiVersion: LOGIN_API_VERSION})\n const client = globalClient.withConfig({token: undefined})\n\n const provider = await getProvider({\n client,\n experimental: options.experimental,\n orgSlug: options.sso,\n specifiedProvider: options.provider,\n })\n\n trace.log({provider: provider?.name, step: 'selectProvider'})\n\n if (provider === undefined) {\n throw new Error('No authentication providers found')\n }\n\n const {\n loginUrl,\n server,\n token: tokenPromise,\n } = await startServerForTokenCallback({client, providerUrl: provider.url})\n\n trace.log({step: 'waitForToken'})\n\n const serverUrl = server.address()\n if (!serverUrl || typeof serverUrl === 'string') {\n // Note: `serverUrl` is string only when binding to unix sockets,\n // thus we can safely assume Something Is Wrong™ if it's a string\n throw new Error('Failed to start auth callback server')\n }\n\n // Open a browser on the login page (or tell the user to)\n const shouldLaunchBrowser = canLaunchBrowser() && options.open !== false\n const actionText = shouldLaunchBrowser ? 'Opening browser at' : 'Please open a browser at'\n\n output.log(`\\n${actionText} ${loginUrl.href}\\n`)\n\n const spin = spinner('Waiting for browser login to complete... Press Ctrl + C to cancel').start()\n\n if (shouldLaunchBrowser) {\n open(loginUrl.href)\n }\n\n // Wait for a success/error on the HTTP callback server\n let authToken: string\n try {\n authToken = (await tokenPromise).token\n spin.stop()\n } catch (err: unknown) {\n spin.stop()\n trace.error(err as Error)\n throw err instanceof Error\n ? new Error(`Login failed: ${err.message}`, {cause: err})\n : new Error(`${err}`)\n } finally {\n server.close()\n server.unref()\n }\n\n // Store the token\n await setConfig('authToken', authToken)\n\n // Clear cached telemetry consent\n await setConfig('telemetryConsent', undefined)\n\n // If we had a session previously, attempt to clear it\n if (hasExistingToken) {\n await globalClient\n .withConfig({token: previousToken})\n .request({method: 'POST', uri: '/auth/logout'})\n .catch((err) => {\n const statusCode = err && err.response && err.response.statusCode\n if (statusCode !== 401) {\n output.warn('Failed to invalidate previous session')\n }\n })\n }\n\n trace.complete()\n}\n"],"names":["getCliToken","getGlobalCliClient","setConfig","spinner","open","LoginTrace","canLaunchBrowser","startServerForTokenCallback","getProvider","LOGIN_API_VERSION","login","options","output","telemetry","previousToken","hasExistingToken","Boolean","trace","start","globalClient","apiVersion","client","withConfig","token","undefined","provider","experimental","orgSlug","sso","specifiedProvider","log","name","step","Error","loginUrl","server","tokenPromise","providerUrl","url","serverUrl","address","shouldLaunchBrowser","actionText","href","spin","authToken","stop","err","error","message","cause","close","unref","request","method","uri","catch","statusCode","response","warn","complete"],"mappings":"AAAA,SAEEA,WAAW,EACXC,kBAAkB,EAElBC,SAAS,QACJ,mBAAkB;AACzB,SAAQC,OAAO,QAAO,sBAAqB;AAC3C,OAAOC,UAAU,OAAM;AAEvB,SAAQC,UAAU,QAAO,wCAAuC;AAChE,SAAQC,gBAAgB,QAAO,oCAAmC;AAClE,SAAQC,2BAA2B,QAAO,mBAAkB;AAC5D,SAAQC,WAAW,QAAO,mBAAkB;AAE5C,MAAMC,oBAAoB;AAa1B;;;;;;;;;CASC,GACD,OAAO,eAAeC,MAAMC,OAAqB;IAC/C,MAAM,EAACC,MAAM,EAAEC,SAAS,EAAC,GAAGF;IAC5B,MAAMG,gBAAgB,MAAMd;IAC5B,MAAMe,mBAAmBC,QAAQF;IAEjC,MAAMG,QAAQJ,UAAUI,KAAK,CAACZ;IAC9BY,MAAMC,KAAK;IAEX,yFAAyF;IACzF,MAAMC,eAAe,MAAMlB,mBAAmB;QAACmB,YAAYX;IAAiB;IAC5E,MAAMY,SAASF,aAAaG,UAAU,CAAC;QAACC,OAAOC;IAAS;IAExD,MAAMC,WAAW,MAAMjB,YAAY;QACjCa;QACAK,cAAcf,QAAQe,YAAY;QAClCC,SAAShB,QAAQiB,GAAG;QACpBC,mBAAmBlB,QAAQc,QAAQ;IACrC;IAEAR,MAAMa,GAAG,CAAC;QAACL,UAAUA,UAAUM;QAAMC,MAAM;IAAgB;IAE3D,IAAIP,aAAaD,WAAW;QAC1B,MAAM,IAAIS,MAAM;IAClB;IAEA,MAAM,EACJC,QAAQ,EACRC,MAAM,EACNZ,OAAOa,YAAY,EACpB,GAAG,MAAM7B,4BAA4B;QAACc;QAAQgB,aAAaZ,SAASa,GAAG;IAAA;IAExErB,MAAMa,GAAG,CAAC;QAACE,MAAM;IAAc;IAE/B,MAAMO,YAAYJ,OAAOK,OAAO;IAChC,IAAI,CAACD,aAAa,OAAOA,cAAc,UAAU;QAC/C,iEAAiE;QACjE,iEAAiE;QACjE,MAAM,IAAIN,MAAM;IAClB;IAEA,yDAAyD;IACzD,MAAMQ,sBAAsBnC,sBAAsBK,QAAQP,IAAI,KAAK;IACnE,MAAMsC,aAAaD,sBAAsB,uBAAuB;IAEhE7B,OAAOkB,GAAG,CAAC,CAAC,EAAE,EAAEY,WAAW,CAAC,EAAER,SAASS,IAAI,CAAC,EAAE,CAAC;IAE/C,MAAMC,OAAOzC,QAAQ,qEAAqEe,KAAK;IAE/F,IAAIuB,qBAAqB;QACvBrC,KAAK8B,SAASS,IAAI;IACpB;IAEA,uDAAuD;IACvD,IAAIE;IACJ,IAAI;QACFA,YAAY,AAAC,CAAA,MAAMT,YAAW,EAAGb,KAAK;QACtCqB,KAAKE,IAAI;IACX,EAAE,OAAOC,KAAc;QACrBH,KAAKE,IAAI;QACT7B,MAAM+B,KAAK,CAACD;QACZ,MAAMA,eAAed,QACjB,IAAIA,MAAM,CAAC,cAAc,EAAEc,IAAIE,OAAO,EAAE,EAAE;YAACC,OAAOH;QAAG,KACrD,IAAId,MAAM,GAAGc,KAAK;IACxB,SAAU;QACRZ,OAAOgB,KAAK;QACZhB,OAAOiB,KAAK;IACd;IAEA,kBAAkB;IAClB,MAAMlD,UAAU,aAAa2C;IAE7B,iCAAiC;IACjC,MAAM3C,UAAU,oBAAoBsB;IAEpC,sDAAsD;IACtD,IAAIT,kBAAkB;QACpB,MAAMI,aACHG,UAAU,CAAC;YAACC,OAAOT;QAAa,GAChCuC,OAAO,CAAC;YAACC,QAAQ;YAAQC,KAAK;QAAc,GAC5CC,KAAK,CAAC,CAACT;YACN,MAAMU,aAAaV,OAAOA,IAAIW,QAAQ,IAAIX,IAAIW,QAAQ,CAACD,UAAU;YACjE,IAAIA,eAAe,KAAK;gBACtB7C,OAAO+C,IAAI,CAAC;YACd;QACF;IACJ;IAEA1C,MAAM2C,QAAQ;AAChB"}
1
+ {"version":3,"sources":["../../../../src/actions/auth/login/login.ts"],"sourcesContent":["import {\n type CLITelemetryStore,\n getCliToken,\n type Output,\n setCliUserConfig,\n subdebug,\n} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\nimport open from 'open'\n\nimport {logout} from '../../../services/auth.js'\nimport {LoginTrace} from '../../../telemetry/login.telemetry.js'\nimport {canLaunchBrowser} from '../../../util/canLaunchBrowser.js'\nimport {startServerForTokenCallback} from '../authServer.js'\nimport {getProvider} from './getProvider.js'\n\nconst debug = subdebug('login')\n\ninterface LoginOptions {\n output: Output\n\n telemetry: CLITelemetryStore\n\n experimental?: boolean\n open?: boolean\n provider?: string\n sso?: string\n}\n\n/**\n * Trigger the authentication flow for the CLI.\n *\n * NOTE: This uses terminal prompts and will not work for non-interactive/programmatic uses.\n *\n * @param options - Options for the login operation\n * @returns Promise that resolves when the login operation is complete\n * @throws Will throw if login fails or is cancelled\n * @internal\n */\nexport async function login(options: LoginOptions) {\n const {output, telemetry} = options\n const previousToken = await getCliToken()\n const hasExistingToken = Boolean(previousToken)\n\n const trace = telemetry.trace(LoginTrace)\n trace.start()\n\n const provider = await getProvider({\n experimental: options.experimental,\n orgSlug: options.sso,\n specifiedProvider: options.provider,\n })\n\n trace.log({provider: provider?.name, step: 'selectProvider'})\n\n if (provider === undefined) {\n throw new Error('No authentication providers found')\n }\n\n const {loginUrl, server, token: tokenPromise} = await startServerForTokenCallback(provider.url)\n\n trace.log({step: 'waitForToken'})\n\n // Open a browser on the login page (or tell the user to)\n const shouldLaunchBrowser = canLaunchBrowser() && options.open !== false\n const actionText = shouldLaunchBrowser ? 'Opening browser at' : 'Please open a browser at'\n\n output.log(`\\n${actionText} ${loginUrl.href}\\n`)\n\n const spin = spinner('Waiting for browser login to complete... Press Ctrl + C to cancel').start()\n\n if (shouldLaunchBrowser) {\n open(loginUrl.href)\n }\n\n // Wait for a success/error on the HTTP callback server\n let authToken: string\n try {\n authToken = (await tokenPromise).token\n spin.stop()\n } catch (err: unknown) {\n spin.stop()\n trace.error(err as Error)\n debug('Error retrieving token: %O', err)\n throw err\n } finally {\n await new Promise<void>((resolve) => {\n server.close(() => resolve())\n })\n }\n\n // Store the token\n await setCliUserConfig('authToken', authToken)\n\n // Clear cached telemetry consent\n await setCliUserConfig('telemetryConsent', undefined)\n\n // If we had a session previously, attempt to clear it\n if (hasExistingToken) {\n await logout(previousToken).catch((err) => {\n const statusCode = err && err.response && err.response.statusCode\n if (statusCode !== 401) {\n output.warn('Failed to invalidate previous session')\n }\n })\n }\n\n trace.complete()\n}\n"],"names":["getCliToken","setCliUserConfig","subdebug","spinner","open","logout","LoginTrace","canLaunchBrowser","startServerForTokenCallback","getProvider","debug","login","options","output","telemetry","previousToken","hasExistingToken","Boolean","trace","start","provider","experimental","orgSlug","sso","specifiedProvider","log","name","step","undefined","Error","loginUrl","server","token","tokenPromise","url","shouldLaunchBrowser","actionText","href","spin","authToken","stop","err","error","Promise","resolve","close","catch","statusCode","response","warn","complete"],"mappings":"AAAA,SAEEA,WAAW,EAEXC,gBAAgB,EAChBC,QAAQ,QACH,mBAAkB;AACzB,SAAQC,OAAO,QAAO,sBAAqB;AAC3C,OAAOC,UAAU,OAAM;AAEvB,SAAQC,MAAM,QAAO,4BAA2B;AAChD,SAAQC,UAAU,QAAO,wCAAuC;AAChE,SAAQC,gBAAgB,QAAO,oCAAmC;AAClE,SAAQC,2BAA2B,QAAO,mBAAkB;AAC5D,SAAQC,WAAW,QAAO,mBAAkB;AAE5C,MAAMC,QAAQR,SAAS;AAavB;;;;;;;;;CASC,GACD,OAAO,eAAeS,MAAMC,OAAqB;IAC/C,MAAM,EAACC,MAAM,EAAEC,SAAS,EAAC,GAAGF;IAC5B,MAAMG,gBAAgB,MAAMf;IAC5B,MAAMgB,mBAAmBC,QAAQF;IAEjC,MAAMG,QAAQJ,UAAUI,KAAK,CAACZ;IAC9BY,MAAMC,KAAK;IAEX,MAAMC,WAAW,MAAMX,YAAY;QACjCY,cAAcT,QAAQS,YAAY;QAClCC,SAASV,QAAQW,GAAG;QACpBC,mBAAmBZ,QAAQQ,QAAQ;IACrC;IAEAF,MAAMO,GAAG,CAAC;QAACL,UAAUA,UAAUM;QAAMC,MAAM;IAAgB;IAE3D,IAAIP,aAAaQ,WAAW;QAC1B,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAM,EAACC,QAAQ,EAAEC,MAAM,EAAEC,OAAOC,YAAY,EAAC,GAAG,MAAMzB,4BAA4BY,SAASc,GAAG;IAE9FhB,MAAMO,GAAG,CAAC;QAACE,MAAM;IAAc;IAE/B,yDAAyD;IACzD,MAAMQ,sBAAsB5B,sBAAsBK,QAAQR,IAAI,KAAK;IACnE,MAAMgC,aAAaD,sBAAsB,uBAAuB;IAEhEtB,OAAOY,GAAG,CAAC,CAAC,EAAE,EAAEW,WAAW,CAAC,EAAEN,SAASO,IAAI,CAAC,EAAE,CAAC;IAE/C,MAAMC,OAAOnC,QAAQ,qEAAqEgB,KAAK;IAE/F,IAAIgB,qBAAqB;QACvB/B,KAAK0B,SAASO,IAAI;IACpB;IAEA,uDAAuD;IACvD,IAAIE;IACJ,IAAI;QACFA,YAAY,AAAC,CAAA,MAAMN,YAAW,EAAGD,KAAK;QACtCM,KAAKE,IAAI;IACX,EAAE,OAAOC,KAAc;QACrBH,KAAKE,IAAI;QACTtB,MAAMwB,KAAK,CAACD;QACZ/B,MAAM,8BAA8B+B;QACpC,MAAMA;IACR,SAAU;QACR,MAAM,IAAIE,QAAc,CAACC;YACvBb,OAAOc,KAAK,CAAC,IAAMD;QACrB;IACF;IAEA,kBAAkB;IAClB,MAAM3C,iBAAiB,aAAasC;IAEpC,iCAAiC;IACjC,MAAMtC,iBAAiB,oBAAoB2B;IAE3C,sDAAsD;IACtD,IAAIZ,kBAAkB;QACpB,MAAMX,OAAOU,eAAe+B,KAAK,CAAC,CAACL;YACjC,MAAMM,aAAaN,OAAOA,IAAIO,QAAQ,IAAIP,IAAIO,QAAQ,CAACD,UAAU;YACjE,IAAIA,eAAe,KAAK;gBACtBlC,OAAOoC,IAAI,CAAC;YACd;QACF;IACF;IAEA/B,MAAMgC,QAAQ;AAChB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/auth/types.ts"],"sourcesContent":["/**\n * @internal\n */\nexport interface LoginProvider {\n name: string\n title: string\n url: string\n}\n\n/**\n * @internal\n */\nexport interface SamlLoginProvider {\n callbackUrl: string\n disabled: boolean\n id: string\n loginUrl: string\n name: string\n organizationId: string\n type: 'saml'\n}\n\n/**\n * @internal\n */\nexport interface ProvidersResponse {\n providers: LoginProvider[]\n}\n"],"names":[],"mappings":"AAAA;;CAEC,GAoBD;;CAEC,GACD,WAEC"}
1
+ {"version":3,"sources":["../../../src/actions/auth/types.ts"],"sourcesContent":["/**\n * @internal\n */\nexport interface LoginProvider {\n name: string\n title: string\n url: string\n}\n\n/**\n * @internal\n */\nexport interface SamlLoginProvider {\n callbackUrl: string\n disabled: boolean\n id: string\n loginUrl: string\n name: string\n organizationId: string\n type: 'saml'\n}\n\n/**\n * @internal\n */\nexport interface ProvidersResponse {\n providers: LoginProvider[]\n}\n\n/**\n * @internal\n */\nexport interface TokenDetails {\n label: string\n token: string\n}\n"],"names":[],"mappings":"AAAA;;CAEC,GA2BD;;CAEC,GACD,WAGC"}
@@ -1,19 +1,19 @@
1
1
  import { createWriteStream } from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { pipeline } from 'node:stream/promises';
4
- import { getIt } from 'get-it';
5
- import { httpErrors, keepAlive, promise, retry } from 'get-it/middleware';
4
+ import { createRequester, keepAlive, retry } from '@sanity/cli-core/request';
6
5
  import { backupDownloadDebug } from './backupDownloadDebug.js';
7
6
  const CONNECTION_TIMEOUT = 15 * 1000 // 15 seconds
8
7
  ;
9
8
  const READ_TIMEOUT = 3 * 60 * 1000 // 3 minutes
10
9
  ;
11
- const request = getIt([
12
- keepAlive(),
13
- httpErrors(),
14
- retry(),
15
- promise()
16
- ]);
10
+ const request = createRequester({
11
+ middleware: {
12
+ promise: {
13
+ onlyBody: false
14
+ }
15
+ }
16
+ }).use(keepAlive()).use(retry());
17
17
  /**
18
18
  * Downloads an asset (image or file) from a backup to the specified output directory
19
19
  *
@@ -36,7 +36,7 @@ const request = getIt([
36
36
  },
37
37
  url
38
38
  });
39
- backupDownloadDebug('Received asset %s with status code %d', normalizedFileName, response?.statusCode);
39
+ backupDownloadDebug('Received asset %s with status code %d', normalizedFileName, response.statusCode);
40
40
  await pipeline(response.body, createWriteStream(assetFilePath));
41
41
  }
42
42
  function getAssetFilePath(fileName, fileType, outDir) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/backup/downloadAsset.ts"],"sourcesContent":["import {createWriteStream} from 'node:fs'\nimport path from 'node:path'\nimport {pipeline} from 'node:stream/promises'\n\nimport {getIt} from 'get-it'\nimport {httpErrors, keepAlive, promise, retry} from 'get-it/middleware'\n\nimport {backupDownloadDebug} from './backupDownloadDebug.js'\n\nconst CONNECTION_TIMEOUT = 15 * 1000 // 15 seconds\nconst READ_TIMEOUT = 3 * 60 * 1000 // 3 minutes\n\nconst request = getIt([keepAlive(), httpErrors(), retry(), promise()])\n\n/**\n * Downloads an asset (image or file) from a backup to the specified output directory\n *\n * @param url - The URL to download the asset from\n * @param fileName - The original file name of the asset\n * @param fileType - The type of asset ('image' or 'file')\n * @param outDir - The output directory to save the asset to\n */\nexport async function downloadAsset(\n url: string,\n fileName: string,\n fileType: string,\n outDir: string,\n): Promise<void> {\n // File names that contain a path to file (e.g. sanity-storage/assets/file-name.tar.gz) fail when archive is\n // created due to missing parent dir (e.g. sanity-storage/assets), so we want to handle them by taking\n // the base name as file name.\n const normalizedFileName = path.basename(fileName)\n\n const assetFilePath = getAssetFilePath(normalizedFileName, fileType, outDir)\n\n const response = await request({\n maxRedirects: 5,\n stream: true,\n timeout: {connect: CONNECTION_TIMEOUT, socket: READ_TIMEOUT},\n url,\n })\n\n backupDownloadDebug(\n 'Received asset %s with status code %d',\n normalizedFileName,\n response?.statusCode,\n )\n\n await pipeline(response.body, createWriteStream(assetFilePath))\n}\n\nfunction getAssetFilePath(fileName: string, fileType: string, outDir: string): string {\n // Set assetFilePath if we are downloading an asset file.\n // If it's a JSON document, assetFilePath will be an empty string.\n let assetFilePath = ''\n if (fileType === 'image') {\n assetFilePath = path.join(outDir, 'images', fileName)\n } else if (fileType === 'file') {\n assetFilePath = path.join(outDir, 'files', fileName)\n }\n\n return assetFilePath\n}\n"],"names":["createWriteStream","path","pipeline","getIt","httpErrors","keepAlive","promise","retry","backupDownloadDebug","CONNECTION_TIMEOUT","READ_TIMEOUT","request","downloadAsset","url","fileName","fileType","outDir","normalizedFileName","basename","assetFilePath","getAssetFilePath","response","maxRedirects","stream","timeout","connect","socket","statusCode","body","join"],"mappings":"AAAA,SAAQA,iBAAiB,QAAO,UAAS;AACzC,OAAOC,UAAU,YAAW;AAC5B,SAAQC,QAAQ,QAAO,uBAAsB;AAE7C,SAAQC,KAAK,QAAO,SAAQ;AAC5B,SAAQC,UAAU,EAAEC,SAAS,EAAEC,OAAO,EAAEC,KAAK,QAAO,oBAAmB;AAEvE,SAAQC,mBAAmB,QAAO,2BAA0B;AAE5D,MAAMC,qBAAqB,KAAK,KAAK,aAAa;;AAClD,MAAMC,eAAe,IAAI,KAAK,KAAK,YAAY;;AAE/C,MAAMC,UAAUR,MAAM;IAACE;IAAaD;IAAcG;IAASD;CAAU;AAErE;;;;;;;CAOC,GACD,OAAO,eAAeM,cACpBC,GAAW,EACXC,QAAgB,EAChBC,QAAgB,EAChBC,MAAc;IAEd,4GAA4G;IAC5G,sGAAsG;IACtG,8BAA8B;IAC9B,MAAMC,qBAAqBhB,KAAKiB,QAAQ,CAACJ;IAEzC,MAAMK,gBAAgBC,iBAAiBH,oBAAoBF,UAAUC;IAErE,MAAMK,WAAW,MAAMV,QAAQ;QAC7BW,cAAc;QACdC,QAAQ;QACRC,SAAS;YAACC,SAAShB;YAAoBiB,QAAQhB;QAAY;QAC3DG;IACF;IAEAL,oBACE,yCACAS,oBACAI,UAAUM;IAGZ,MAAMzB,SAASmB,SAASO,IAAI,EAAE5B,kBAAkBmB;AAClD;AAEA,SAASC,iBAAiBN,QAAgB,EAAEC,QAAgB,EAAEC,MAAc;IAC1E,yDAAyD;IACzD,kEAAkE;IAClE,IAAIG,gBAAgB;IACpB,IAAIJ,aAAa,SAAS;QACxBI,gBAAgBlB,KAAK4B,IAAI,CAACb,QAAQ,UAAUF;IAC9C,OAAO,IAAIC,aAAa,QAAQ;QAC9BI,gBAAgBlB,KAAK4B,IAAI,CAACb,QAAQ,SAASF;IAC7C;IAEA,OAAOK;AACT"}
1
+ {"version":3,"sources":["../../../src/actions/backup/downloadAsset.ts"],"sourcesContent":["import {createWriteStream} from 'node:fs'\nimport path from 'node:path'\nimport {pipeline} from 'node:stream/promises'\n\nimport {createRequester, keepAlive, retry} from '@sanity/cli-core/request'\n\nimport {backupDownloadDebug} from './backupDownloadDebug.js'\n\nconst CONNECTION_TIMEOUT = 15 * 1000 // 15 seconds\nconst READ_TIMEOUT = 3 * 60 * 1000 // 3 minutes\n\nconst request = createRequester({middleware: {promise: {onlyBody: false}}})\n .use(keepAlive())\n .use(retry())\n\n/**\n * Downloads an asset (image or file) from a backup to the specified output directory\n *\n * @param url - The URL to download the asset from\n * @param fileName - The original file name of the asset\n * @param fileType - The type of asset ('image' or 'file')\n * @param outDir - The output directory to save the asset to\n */\nexport async function downloadAsset(\n url: string,\n fileName: string,\n fileType: string,\n outDir: string,\n): Promise<void> {\n // File names that contain a path to file (e.g. sanity-storage/assets/file-name.tar.gz) fail when archive is\n // created due to missing parent dir (e.g. sanity-storage/assets), so we want to handle them by taking\n // the base name as file name.\n const normalizedFileName = path.basename(fileName)\n\n const assetFilePath = getAssetFilePath(normalizedFileName, fileType, outDir)\n\n const response = await request({\n maxRedirects: 5,\n stream: true,\n timeout: {connect: CONNECTION_TIMEOUT, socket: READ_TIMEOUT},\n url,\n })\n\n backupDownloadDebug(\n 'Received asset %s with status code %d',\n normalizedFileName,\n response.statusCode,\n )\n\n await pipeline(response.body, createWriteStream(assetFilePath))\n}\n\nfunction getAssetFilePath(fileName: string, fileType: string, outDir: string): string {\n // Set assetFilePath if we are downloading an asset file.\n // If it's a JSON document, assetFilePath will be an empty string.\n let assetFilePath = ''\n if (fileType === 'image') {\n assetFilePath = path.join(outDir, 'images', fileName)\n } else if (fileType === 'file') {\n assetFilePath = path.join(outDir, 'files', fileName)\n }\n\n return assetFilePath\n}\n"],"names":["createWriteStream","path","pipeline","createRequester","keepAlive","retry","backupDownloadDebug","CONNECTION_TIMEOUT","READ_TIMEOUT","request","middleware","promise","onlyBody","use","downloadAsset","url","fileName","fileType","outDir","normalizedFileName","basename","assetFilePath","getAssetFilePath","response","maxRedirects","stream","timeout","connect","socket","statusCode","body","join"],"mappings":"AAAA,SAAQA,iBAAiB,QAAO,UAAS;AACzC,OAAOC,UAAU,YAAW;AAC5B,SAAQC,QAAQ,QAAO,uBAAsB;AAE7C,SAAQC,eAAe,EAAEC,SAAS,EAAEC,KAAK,QAAO,2BAA0B;AAE1E,SAAQC,mBAAmB,QAAO,2BAA0B;AAE5D,MAAMC,qBAAqB,KAAK,KAAK,aAAa;;AAClD,MAAMC,eAAe,IAAI,KAAK,KAAK,YAAY;;AAE/C,MAAMC,UAAUN,gBAAgB;IAACO,YAAY;QAACC,SAAS;YAACC,UAAU;QAAK;IAAC;AAAC,GACtEC,GAAG,CAACT,aACJS,GAAG,CAACR;AAEP;;;;;;;CAOC,GACD,OAAO,eAAeS,cACpBC,GAAW,EACXC,QAAgB,EAChBC,QAAgB,EAChBC,MAAc;IAEd,4GAA4G;IAC5G,sGAAsG;IACtG,8BAA8B;IAC9B,MAAMC,qBAAqBlB,KAAKmB,QAAQ,CAACJ;IAEzC,MAAMK,gBAAgBC,iBAAiBH,oBAAoBF,UAAUC;IAErE,MAAMK,WAAW,MAAMd,QAAQ;QAC7Be,cAAc;QACdC,QAAQ;QACRC,SAAS;YAACC,SAASpB;YAAoBqB,QAAQpB;QAAY;QAC3DO;IACF;IAEAT,oBACE,yCACAa,oBACAI,SAASM,UAAU;IAGrB,MAAM3B,SAASqB,SAASO,IAAI,EAAE9B,kBAAkBqB;AAClD;AAEA,SAASC,iBAAiBN,QAAgB,EAAEC,QAAgB,EAAEC,MAAc;IAC1E,yDAAyD;IACzD,kEAAkE;IAClE,IAAIG,gBAAgB;IACpB,IAAIJ,aAAa,SAAS;QACxBI,gBAAgBpB,KAAK8B,IAAI,CAACb,QAAQ,UAAUF;IAC9C,OAAO,IAAIC,aAAa,QAAQ;QAC9BI,gBAAgBpB,KAAK8B,IAAI,CAACb,QAAQ,SAASF;IAC7C;IAEA,OAAOK;AACT"}
@@ -1,16 +1,16 @@
1
- import { getIt } from 'get-it';
2
- import { httpErrors, keepAlive, promise, retry } from 'get-it/middleware';
1
+ import { createRequester, keepAlive, retry } from '@sanity/cli-core/request';
3
2
  import { backupDownloadDebug } from './backupDownloadDebug.js';
4
3
  const CONNECTION_TIMEOUT = 15 * 1000 // 15 seconds
5
4
  ;
6
5
  const READ_TIMEOUT = 3 * 60 * 1000 // 3 minutes
7
6
  ;
8
- const request = getIt([
9
- keepAlive(),
10
- httpErrors(),
11
- retry(),
12
- promise()
13
- ]);
7
+ const request = createRequester({
8
+ middleware: {
9
+ promise: {
10
+ onlyBody: false
11
+ }
12
+ }
13
+ }).use(keepAlive()).use(retry());
14
14
  /**
15
15
  * Downloads a document from a backup URL
16
16
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/backup/downloadDocument.ts"],"sourcesContent":["import {getIt} from 'get-it'\nimport {httpErrors, keepAlive, promise, retry} from 'get-it/middleware'\n\nimport {backupDownloadDebug} from './backupDownloadDebug.js'\n\nconst CONNECTION_TIMEOUT = 15 * 1000 // 15 seconds\nconst READ_TIMEOUT = 3 * 60 * 1000 // 3 minutes\n\nconst request = getIt([keepAlive(), httpErrors(), retry(), promise()])\n\n/**\n * Downloads a document from a backup URL\n *\n * @param url - The URL to download the document from\n * @returns The document content as received from the API\n */\nexport async function downloadDocument(url: string): Promise<unknown> {\n const response = await request({\n maxRedirects: 5,\n timeout: {connect: CONNECTION_TIMEOUT, socket: READ_TIMEOUT},\n url,\n })\n\n backupDownloadDebug('Received document from %s with status code %d', url, response?.statusCode)\n\n return response.body\n}\n"],"names":["getIt","httpErrors","keepAlive","promise","retry","backupDownloadDebug","CONNECTION_TIMEOUT","READ_TIMEOUT","request","downloadDocument","url","response","maxRedirects","timeout","connect","socket","statusCode","body"],"mappings":"AAAA,SAAQA,KAAK,QAAO,SAAQ;AAC5B,SAAQC,UAAU,EAAEC,SAAS,EAAEC,OAAO,EAAEC,KAAK,QAAO,oBAAmB;AAEvE,SAAQC,mBAAmB,QAAO,2BAA0B;AAE5D,MAAMC,qBAAqB,KAAK,KAAK,aAAa;;AAClD,MAAMC,eAAe,IAAI,KAAK,KAAK,YAAY;;AAE/C,MAAMC,UAAUR,MAAM;IAACE;IAAaD;IAAcG;IAASD;CAAU;AAErE;;;;;CAKC,GACD,OAAO,eAAeM,iBAAiBC,GAAW;IAChD,MAAMC,WAAW,MAAMH,QAAQ;QAC7BI,cAAc;QACdC,SAAS;YAACC,SAASR;YAAoBS,QAAQR;QAAY;QAC3DG;IACF;IAEAL,oBAAoB,iDAAiDK,KAAKC,UAAUK;IAEpF,OAAOL,SAASM,IAAI;AACtB"}
1
+ {"version":3,"sources":["../../../src/actions/backup/downloadDocument.ts"],"sourcesContent":["import {createRequester, keepAlive, retry} from '@sanity/cli-core/request'\n\nimport {backupDownloadDebug} from './backupDownloadDebug.js'\n\nconst CONNECTION_TIMEOUT = 15 * 1000 // 15 seconds\nconst READ_TIMEOUT = 3 * 60 * 1000 // 3 minutes\n\nconst request = createRequester({middleware: {promise: {onlyBody: false}}})\n .use(keepAlive())\n .use(retry())\n\n/**\n * Downloads a document from a backup URL\n *\n * @param url - The URL to download the document from\n * @returns The document content as received from the API\n */\nexport async function downloadDocument(url: string): Promise<unknown> {\n const response = await request({\n maxRedirects: 5,\n timeout: {connect: CONNECTION_TIMEOUT, socket: READ_TIMEOUT},\n url,\n })\n\n backupDownloadDebug('Received document from %s with status code %d', url, response?.statusCode)\n\n return response.body\n}\n"],"names":["createRequester","keepAlive","retry","backupDownloadDebug","CONNECTION_TIMEOUT","READ_TIMEOUT","request","middleware","promise","onlyBody","use","downloadDocument","url","response","maxRedirects","timeout","connect","socket","statusCode","body"],"mappings":"AAAA,SAAQA,eAAe,EAAEC,SAAS,EAAEC,KAAK,QAAO,2BAA0B;AAE1E,SAAQC,mBAAmB,QAAO,2BAA0B;AAE5D,MAAMC,qBAAqB,KAAK,KAAK,aAAa;;AAClD,MAAMC,eAAe,IAAI,KAAK,KAAK,YAAY;;AAE/C,MAAMC,UAAUN,gBAAgB;IAACO,YAAY;QAACC,SAAS;YAACC,UAAU;QAAK;IAAC;AAAC,GACtEC,GAAG,CAACT,aACJS,GAAG,CAACR;AAEP;;;;;CAKC,GACD,OAAO,eAAeS,iBAAiBC,GAAW;IAChD,MAAMC,WAAW,MAAMP,QAAQ;QAC7BQ,cAAc;QACdC,SAAS;YAACC,SAASZ;YAAoBa,QAAQZ;QAAY;QAC3DO;IACF;IAEAT,oBAAoB,iDAAiDS,KAAKC,UAAUK;IAEpF,OAAOL,SAASM,IAAI;AACtB"}
@@ -1,42 +1,51 @@
1
1
  import { rm } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { styleText } from 'node:util';
4
- import { getCliTelemetry, getTimer } from '@sanity/cli-core';
4
+ import { getCliTelemetry, getTimer, isInteractive } from '@sanity/cli-core';
5
5
  import { confirm, logSymbols, spinner } from '@sanity/cli-core/ux';
6
6
  import semver from 'semver';
7
7
  import { AppBuildTrace } from '../../telemetry/build.telemetry.js';
8
8
  import { getAppId } from '../../util/appId.js';
9
9
  import { compareDependencyVersions } from '../../util/compareDependencyVersions.js';
10
+ import { getLocalPackageVersion } from '../../util/getLocalPackageVersion.js';
10
11
  import { formatModuleSizes, sortModulesBySize } from '../../util/moduleFormatUtils.js';
11
- import { readModuleVersion } from '../../util/readModuleVersion.js';
12
+ import { warnAboutMissingAppId } from '../../util/warnAboutMissingAppId.js';
12
13
  import { buildDebug } from './buildDebug.js';
13
14
  import { buildStaticFiles } from './buildStaticFiles.js';
14
15
  import { buildVendorDependencies } from './buildVendorDependencies.js';
15
16
  import { determineBasePath } from './determineBasePath.js';
16
17
  import { getAppEnvVars } from './getAppEnvVars.js';
17
18
  import { getAutoUpdatesImportMap } from './getAutoUpdatesImportMap.js';
19
+ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
18
20
  /**
19
21
  * Build the Sanity app.
20
22
  *
21
23
  * @internal
22
24
  */ export async function buildApp(options) {
23
- const { autoUpdatesEnabled, cliConfig, exit, flags, outDir, output, workDir } = options;
25
+ const { cliConfig, flags, outDir, output, workDir } = options;
26
+ let { autoUpdatesEnabled } = options;
24
27
  const unattendedMode = flags.yes;
25
28
  const timer = getTimer();
26
29
  const defaultOutputDir = path.resolve(path.join(workDir, 'dist'));
27
30
  const outputDir = path.resolve(outDir || defaultOutputDir);
28
31
  const appId = getAppId(cliConfig);
29
- const installedSdkVersion = await readModuleVersion(outputDir, '@sanity/sdk-react');
30
- const installedSanityVersion = await readModuleVersion(outputDir, 'sanity');
32
+ const installedSdkVersion = await getLocalPackageVersion('@sanity/sdk-react', workDir);
33
+ const installedSanityVersion = await getLocalPackageVersion('sanity', workDir);
31
34
  if (!installedSdkVersion) {
32
- throw new Error(`Failed to find installed @sanity/sdk-react version`);
35
+ output.error(`Failed to find installed @sanity/sdk-react version`, {
36
+ exit: 1
37
+ });
38
+ return;
33
39
  }
34
40
  let autoUpdatesImports = {};
35
41
  if (autoUpdatesEnabled) {
36
42
  // Get the clean version without build metadata: https://semver.org/#spec-item-10
37
43
  const cleanSDKVersion = semver.parse(installedSdkVersion)?.version;
38
44
  if (!cleanSDKVersion) {
39
- throw new Error(`Failed to parse installed SDK version: ${installedSdkVersion}`);
45
+ output.error(`Failed to parse installed SDK version: ${installedSdkVersion}`, {
46
+ exit: 1
47
+ });
48
+ return;
40
49
  }
41
50
  // Sanity might not be installed, but if it is, we want to auto update it.
42
51
  const cleanSanityVersion = semver.parse(installedSanityVersion)?.version;
@@ -60,18 +69,45 @@ import { getAutoUpdatesImportMap } from './getAutoUpdatesImportMap.js';
60
69
  appId
61
70
  });
62
71
  output.log(`${logSymbols.info} Building with auto-updates enabled`);
72
+ // Warn if auto updates enabled but no appId configured.
73
+ // Skip when called from deploy, since deploy handles appId itself
74
+ // (prompts the user and tells them to add it to config).
75
+ if (!appId && !options.calledFromDeploy) {
76
+ warnAboutMissingAppId({
77
+ appType: 'app',
78
+ output
79
+ });
80
+ }
63
81
  // Check the versions
64
- const result = await compareDependencyVersions(autoUpdatedPackages, workDir, {
82
+ const { mismatched, unresolvedPrerelease } = await compareDependencyVersions(autoUpdatedPackages, workDir, {
65
83
  appId
66
84
  });
67
- // If it is in unattended mode, we don't want to prompt
68
- if (result?.length && !unattendedMode) {
69
- const shouldContinue = await confirm({
70
- default: false,
71
- message: styleText('yellow', `The following local package versions are different from the versions currently served at runtime.\n` + `When using auto updates, we recommend that you test locally with the same versions before deploying. \n\n` + `${result.map((mod)=>` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\n')} \n\n` + `Continue anyway?`)
85
+ if (unresolvedPrerelease.length > 0) {
86
+ await handlePrereleaseVersions({
87
+ output,
88
+ unattendedMode,
89
+ unresolvedPrerelease
72
90
  });
73
- if (!shouldContinue) {
74
- return exit(1);
91
+ autoUpdatesImports = {};
92
+ autoUpdatesEnabled = false;
93
+ }
94
+ if (mismatched.length > 0 && autoUpdatesEnabled) {
95
+ const versionMismatchWarning = `The following local package versions are different from the versions currently served at runtime.\n` + `When using auto updates, we recommend that you test locally with the same versions before deploying. \n\n` + `${mismatched.map((mod)=>` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\n')}`;
96
+ // If it is non-interactive or in unattended mode, we don't want to prompt
97
+ if (isInteractive() && !unattendedMode) {
98
+ const shouldContinue = await confirm({
99
+ default: false,
100
+ message: styleText('yellow', `${versionMismatchWarning} \n\nContinue anyway?`)
101
+ });
102
+ if (!shouldContinue) {
103
+ output.error('Declined to continue with build', {
104
+ exit: 1
105
+ });
106
+ return;
107
+ }
108
+ } else {
109
+ // if non-interactive or unattended, just show the warning
110
+ output.warn(versionMismatchWarning);
75
111
  }
76
112
  }
77
113
  }
@@ -82,14 +118,14 @@ import { getAutoUpdatesImportMap } from './getAutoUpdatesImportMap.js';
82
118
  output.log('');
83
119
  }
84
120
  let shouldClean = true;
85
- if (outputDir !== defaultOutputDir && !unattendedMode) {
121
+ if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {
86
122
  shouldClean = await confirm({
87
123
  default: true,
88
124
  message: `Do you want to delete the existing directory (${outputDir}) first?`
89
125
  });
90
126
  }
91
- // Determine base path for built studio
92
- const basePath = determineBasePath(cliConfig, 'app');
127
+ // Determine base path for built app
128
+ const basePath = determineBasePath(cliConfig, 'app', output);
93
129
  let spin;
94
130
  if (shouldClean) {
95
131
  timer.start('cleanOutputFolder');
@@ -112,6 +148,7 @@ import { getAutoUpdatesImportMap } from './getAutoUpdatesImportMap.js';
112
148
  ...await buildVendorDependencies({
113
149
  basePath,
114
150
  cwd: workDir,
151
+ isApp: true,
115
152
  outputDir
116
153
  }),
117
154
  ...autoUpdatesImports
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/build/buildApp.ts"],"sourcesContent":["import {rm} from 'node:fs/promises'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {getCliTelemetry, getTimer} from '@sanity/cli-core'\nimport {confirm, logSymbols, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport semver from 'semver'\n\nimport {AppBuildTrace} from '../../telemetry/build.telemetry.js'\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {readModuleVersion} from '../../util/readModuleVersion.js'\nimport {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {buildVendorDependencies} from './buildVendorDependencies.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAppEnvVars} from './getAppEnvVars.js'\nimport {getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {type BuildOptions} from './types.js'\n\n/**\n * Build the Sanity app.\n *\n * @internal\n */\nexport async function buildApp(options: BuildOptions): Promise<void> {\n const {autoUpdatesEnabled, cliConfig, exit, flags, outDir, output, workDir} = options\n const unattendedMode = flags.yes\n const timer = getTimer()\n\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n const appId = getAppId(cliConfig)\n\n const installedSdkVersion = await readModuleVersion(outputDir, '@sanity/sdk-react')\n const installedSanityVersion = await readModuleVersion(outputDir, 'sanity')\n\n if (!installedSdkVersion) {\n throw new Error(`Failed to find installed @sanity/sdk-react version`)\n }\n\n let autoUpdatesImports = {}\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSDKVersion = semver.parse(installedSdkVersion)?.version\n if (!cleanSDKVersion) {\n throw new Error(`Failed to parse installed SDK version: ${installedSdkVersion}`)\n }\n\n // Sanity might not be installed, but if it is, we want to auto update it.\n const cleanSanityVersion = semver.parse(installedSanityVersion)?.version\n\n const autoUpdatedPackages = [\n {name: '@sanity/sdk', version: cleanSDKVersion},\n {name: '@sanity/sdk-react', version: cleanSDKVersion},\n ...(cleanSanityVersion ? [{name: 'sanity' as const, version: cleanSanityVersion}] : []),\n ]\n autoUpdatesImports = getAutoUpdatesImportMap(autoUpdatedPackages, {appId})\n\n output.log(`${logSymbols.info} Building with auto-updates enabled`)\n\n // Check the versions\n const result = await compareDependencyVersions(autoUpdatedPackages, workDir, {appId})\n\n // If it is in unattended mode, we don't want to prompt\n if (result?.length && !unattendedMode) {\n const shouldContinue = await confirm({\n default: false,\n message: styleText(\n 'yellow',\n `The following local package versions are different from the versions currently served at runtime.\\n` +\n `When using auto updates, we recommend that you test locally with the same versions before deploying. \\n\\n` +\n `${result.map((mod) => ` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\\n')} \\n\\n` +\n `Continue anyway?`,\n ),\n })\n\n if (!shouldContinue) {\n return exit(1)\n }\n }\n }\n\n const envVarKeys = getAppEnvVars()\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) output.log(`- ${key}`)\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode) {\n shouldClean = await confirm({\n default: true,\n message: `Do you want to delete the existing directory (${outputDir}) first?`,\n })\n }\n\n // Determine base path for built studio\n const basePath = determineBasePath(cliConfig, 'app')\n\n let spin: SpinnerInstance\n if (shouldClean) {\n timer.start('cleanOutputFolder')\n spin = spinner('Clean output folder').start()\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n spin.text = `Clean output folder (${cleanDuration.toFixed(0)}ms)`\n spin.succeed()\n }\n\n spin = spinner(`Building Sanity application`).start()\n\n const trace = getCliTelemetry().trace(AppBuildTrace)\n trace.start()\n\n let importMap: {imports?: Record<string, string>} | undefined\n\n if (autoUpdatesEnabled) {\n importMap = {\n imports: {\n ...(await buildVendorDependencies({basePath, cwd: workDir, outputDir})),\n ...autoUpdatesImports,\n },\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n basePath,\n cwd: workDir,\n entry: cliConfig && 'app' in cliConfig ? cliConfig.app?.entry : undefined,\n importMap,\n isApp: true,\n minify: Boolean(flags.minify),\n outputDir,\n reactCompiler:\n cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,\n sourceMap: Boolean(flags['source-maps']),\n vite: cliConfig && 'vite' in cliConfig ? cliConfig.vite : undefined,\n })\n\n trace.log({\n outputSize: bundle.chunks\n .flatMap((chunk) => chunk.modules.flatMap((mod) => mod.renderedLength))\n .reduce((sum, n) => sum + n, 0),\n })\n const buildDuration = timer.end('bundleStudio')\n\n spin.text = `Build Sanity application (${buildDuration.toFixed(0)}ms)`\n spin.succeed()\n\n if (flags.stats) {\n output.log('\\nLargest module files:')\n output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)))\n }\n\n trace.complete()\n } catch (error) {\n spin.fail()\n trace.error(error)\n const message = error instanceof Error ? error.message : String(error)\n buildDebug(`Failed to build Sanity application`, {error})\n output.error(`Failed to build Sanity application: ${message}`, {exit: 1})\n }\n}\n"],"names":["rm","path","styleText","getCliTelemetry","getTimer","confirm","logSymbols","spinner","semver","AppBuildTrace","getAppId","compareDependencyVersions","formatModuleSizes","sortModulesBySize","readModuleVersion","buildDebug","buildStaticFiles","buildVendorDependencies","determineBasePath","getAppEnvVars","getAutoUpdatesImportMap","buildApp","options","autoUpdatesEnabled","cliConfig","exit","flags","outDir","output","workDir","unattendedMode","yes","timer","defaultOutputDir","resolve","join","outputDir","appId","installedSdkVersion","installedSanityVersion","Error","autoUpdatesImports","cleanSDKVersion","parse","version","cleanSanityVersion","autoUpdatedPackages","name","log","info","result","length","shouldContinue","default","message","map","mod","pkg","installed","remote","envVarKeys","key","shouldClean","basePath","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","importMap","imports","cwd","bundle","entry","app","undefined","isApp","minify","Boolean","reactCompiler","sourceMap","vite","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","stats","slice","complete","error","fail","String"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/build/buildApp.ts"],"sourcesContent":["import {rm} from 'node:fs/promises'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {getCliTelemetry, getTimer, isInteractive} from '@sanity/cli-core'\nimport {confirm, logSymbols, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\nimport semver from 'semver'\n\nimport {AppBuildTrace} from '../../telemetry/build.telemetry.js'\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {getLocalPackageVersion} from '../../util/getLocalPackageVersion.js'\nimport {formatModuleSizes, sortModulesBySize} from '../../util/moduleFormatUtils.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {buildDebug} from './buildDebug.js'\nimport {buildStaticFiles} from './buildStaticFiles.js'\nimport {buildVendorDependencies} from './buildVendorDependencies.js'\nimport {determineBasePath} from './determineBasePath.js'\nimport {getAppEnvVars} from './getAppEnvVars.js'\nimport {getAutoUpdatesImportMap} from './getAutoUpdatesImportMap.js'\nimport {handlePrereleaseVersions} from './handlePrereleaseVersions.js'\nimport {type BuildOptions} from './types.js'\n\n/**\n * Build the Sanity app.\n *\n * @internal\n */\nexport async function buildApp(options: BuildOptions): Promise<void> {\n const {cliConfig, flags, outDir, output, workDir} = options\n let {autoUpdatesEnabled} = options\n const unattendedMode = flags.yes\n const timer = getTimer()\n\n const defaultOutputDir = path.resolve(path.join(workDir, 'dist'))\n const outputDir = path.resolve(outDir || defaultOutputDir)\n\n const appId = getAppId(cliConfig)\n\n const installedSdkVersion = await getLocalPackageVersion('@sanity/sdk-react', workDir)\n const installedSanityVersion = await getLocalPackageVersion('sanity', workDir)\n\n if (!installedSdkVersion) {\n output.error(`Failed to find installed @sanity/sdk-react version`, {exit: 1})\n return\n }\n\n let autoUpdatesImports = {}\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSDKVersion = semver.parse(installedSdkVersion)?.version\n if (!cleanSDKVersion) {\n output.error(`Failed to parse installed SDK version: ${installedSdkVersion}`, {exit: 1})\n return\n }\n\n // Sanity might not be installed, but if it is, we want to auto update it.\n const cleanSanityVersion = semver.parse(installedSanityVersion)?.version\n\n const autoUpdatedPackages = [\n {name: '@sanity/sdk', version: cleanSDKVersion},\n {name: '@sanity/sdk-react', version: cleanSDKVersion},\n ...(cleanSanityVersion ? [{name: 'sanity' as const, version: cleanSanityVersion}] : []),\n ]\n autoUpdatesImports = getAutoUpdatesImportMap(autoUpdatedPackages, {appId})\n\n output.log(`${logSymbols.info} Building with auto-updates enabled`)\n\n // Warn if auto updates enabled but no appId configured.\n // Skip when called from deploy, since deploy handles appId itself\n // (prompts the user and tells them to add it to config).\n if (!appId && !options.calledFromDeploy) {\n warnAboutMissingAppId({appType: 'app', output})\n }\n\n // Check the versions\n const {mismatched, unresolvedPrerelease} = await compareDependencyVersions(\n autoUpdatedPackages,\n workDir,\n {appId},\n )\n\n if (unresolvedPrerelease.length > 0) {\n await handlePrereleaseVersions({output, unattendedMode, unresolvedPrerelease})\n autoUpdatesImports = {}\n autoUpdatesEnabled = false\n }\n\n if (mismatched.length > 0 && autoUpdatesEnabled) {\n const versionMismatchWarning =\n `The following local package versions are different from the versions currently served at runtime.\\n` +\n `When using auto updates, we recommend that you test locally with the same versions before deploying. \\n\\n` +\n `${mismatched.map((mod) => ` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\\n')}`\n\n // If it is non-interactive or in unattended mode, we don't want to prompt\n if (isInteractive() && !unattendedMode) {\n const shouldContinue = await confirm({\n default: false,\n message: styleText('yellow', `${versionMismatchWarning} \\n\\nContinue anyway?`),\n })\n\n if (!shouldContinue) {\n output.error('Declined to continue with build', {exit: 1})\n return\n }\n } else {\n // if non-interactive or unattended, just show the warning\n output.warn(versionMismatchWarning)\n }\n }\n }\n\n const envVarKeys = getAppEnvVars()\n if (envVarKeys.length > 0) {\n output.log('\\nIncluding the following environment variables as part of the JavaScript bundle:')\n for (const key of envVarKeys) output.log(`- ${key}`)\n output.log('')\n }\n\n let shouldClean = true\n if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {\n shouldClean = await confirm({\n default: true,\n message: `Do you want to delete the existing directory (${outputDir}) first?`,\n })\n }\n\n // Determine base path for built app\n const basePath = determineBasePath(cliConfig, 'app', output)\n\n let spin: SpinnerInstance\n if (shouldClean) {\n timer.start('cleanOutputFolder')\n spin = spinner('Clean output folder').start()\n await rm(outputDir, {force: true, recursive: true})\n const cleanDuration = timer.end('cleanOutputFolder')\n spin.text = `Clean output folder (${cleanDuration.toFixed(0)}ms)`\n spin.succeed()\n }\n\n spin = spinner(`Building Sanity application`).start()\n\n const trace = getCliTelemetry().trace(AppBuildTrace)\n trace.start()\n\n let importMap: {imports?: Record<string, string>} | undefined\n\n if (autoUpdatesEnabled) {\n importMap = {\n imports: {\n ...(await buildVendorDependencies({basePath, cwd: workDir, isApp: true, outputDir})),\n ...autoUpdatesImports,\n },\n }\n }\n\n try {\n timer.start('bundleStudio')\n\n const bundle = await buildStaticFiles({\n basePath,\n cwd: workDir,\n entry: cliConfig && 'app' in cliConfig ? cliConfig.app?.entry : undefined,\n importMap,\n isApp: true,\n minify: Boolean(flags.minify),\n outputDir,\n reactCompiler:\n cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,\n sourceMap: Boolean(flags['source-maps']),\n vite: cliConfig && 'vite' in cliConfig ? cliConfig.vite : undefined,\n })\n\n trace.log({\n outputSize: bundle.chunks\n .flatMap((chunk) => chunk.modules.flatMap((mod) => mod.renderedLength))\n .reduce((sum, n) => sum + n, 0),\n })\n const buildDuration = timer.end('bundleStudio')\n\n spin.text = `Build Sanity application (${buildDuration.toFixed(0)}ms)`\n spin.succeed()\n\n if (flags.stats) {\n output.log('\\nLargest module files:')\n output.log(formatModuleSizes(sortModulesBySize(bundle.chunks).slice(0, 15)))\n }\n\n trace.complete()\n } catch (error) {\n spin.fail()\n trace.error(error)\n const message = error instanceof Error ? error.message : String(error)\n buildDebug(`Failed to build Sanity application`, {error})\n output.error(`Failed to build Sanity application: ${message}`, {exit: 1})\n }\n}\n"],"names":["rm","path","styleText","getCliTelemetry","getTimer","isInteractive","confirm","logSymbols","spinner","semver","AppBuildTrace","getAppId","compareDependencyVersions","getLocalPackageVersion","formatModuleSizes","sortModulesBySize","warnAboutMissingAppId","buildDebug","buildStaticFiles","buildVendorDependencies","determineBasePath","getAppEnvVars","getAutoUpdatesImportMap","handlePrereleaseVersions","buildApp","options","cliConfig","flags","outDir","output","workDir","autoUpdatesEnabled","unattendedMode","yes","timer","defaultOutputDir","resolve","join","outputDir","appId","installedSdkVersion","installedSanityVersion","error","exit","autoUpdatesImports","cleanSDKVersion","parse","version","cleanSanityVersion","autoUpdatedPackages","name","log","info","calledFromDeploy","appType","mismatched","unresolvedPrerelease","length","versionMismatchWarning","map","mod","pkg","installed","remote","shouldContinue","default","message","warn","envVarKeys","key","shouldClean","basePath","spin","start","force","recursive","cleanDuration","end","text","toFixed","succeed","trace","importMap","imports","cwd","isApp","bundle","entry","app","undefined","minify","Boolean","reactCompiler","sourceMap","vite","outputSize","chunks","flatMap","chunk","modules","renderedLength","reduce","sum","n","buildDuration","stats","slice","complete","fail","Error","String"],"mappings":"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"}
@@ -40,10 +40,11 @@ import { writeSanityRuntime } from './writeSanityRuntime.js';
40
40
  }, viteConfig, extendViteConfig);
41
41
  viteConfig = await finalizeViteConfig(viteConfig);
42
42
  }
43
+ const fromPath = path.join(cwd, 'static');
43
44
  // Copy files placed in /static to the built /static
44
- buildDebug('Copying static files from /static to output dir');
45
+ buildDebug(`Copying static files from ${fromPath} to output dir`);
45
46
  const staticPath = path.join(outputDir, 'static');
46
- await copyDir(path.join(cwd, 'static'), staticPath);
47
+ await copyDir(fromPath, staticPath);
47
48
  // Write favicons, not overwriting ones that already exist, to static folder
48
49
  buildDebug('Writing favicons to output dir');
49
50
  const faviconBasePath = `${basePath.replace(/\/+$/, '')}/static`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/build/buildStaticFiles.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {type UserViteConfig} from '@sanity/cli-core'\nimport {type PluginOptions as ReactCompilerConfig} from 'babel-plugin-react-compiler'\nimport {build} from 'vite'\n\nimport {copyDir} from '../../util/copyDir.js'\nimport {buildDebug} from './buildDebug.js'\nimport {extendViteConfigWithUserConfig, finalizeViteConfig, getViteConfig} from './getViteConfig.js'\nimport {writeFavicons} from './writeFavicons.js'\nimport {writeSanityRuntime} from './writeSanityRuntime.js'\n\nexport interface ChunkModule {\n name: string\n originalLength: number\n renderedLength: number\n}\n\nexport interface ChunkStats {\n modules: ChunkModule[]\n name: string\n}\n\ninterface StaticBuildOptions {\n basePath: string\n cwd: string\n outputDir: string\n\n entry?: string\n importMap?: {imports?: Record<string, string>}\n isApp?: boolean\n minify?: boolean\n profile?: boolean\n reactCompiler?: ReactCompilerConfig\n sourceMap?: boolean\n vite?: UserViteConfig\n}\n\n/**\n * Builds static files\n *\n * @internal\n */\nexport async function buildStaticFiles(\n options: StaticBuildOptions,\n): Promise<{chunks: ChunkStats[]}> {\n const {\n basePath,\n cwd,\n entry,\n importMap,\n isApp,\n minify = true,\n outputDir,\n reactCompiler,\n sourceMap = false,\n vite: extendViteConfig,\n } = options\n\n buildDebug('Writing Sanity runtime files')\n await writeSanityRuntime({\n basePath,\n cwd,\n entry,\n isApp,\n reactStrictMode: false,\n watch: false,\n })\n\n buildDebug('Resolving vite config')\n const mode = 'production'\n let viteConfig = await getViteConfig({\n basePath,\n cwd,\n importMap,\n isApp,\n minify,\n mode,\n outputDir,\n reactCompiler,\n sourceMap,\n })\n\n if (extendViteConfig) {\n viteConfig = await extendViteConfigWithUserConfig(\n {command: 'build', mode},\n viteConfig,\n extendViteConfig,\n )\n viteConfig = await finalizeViteConfig(viteConfig)\n }\n\n // Copy files placed in /static to the built /static\n buildDebug('Copying static files from /static to output dir')\n const staticPath = path.join(outputDir, 'static')\n await copyDir(path.join(cwd, 'static'), staticPath)\n\n // Write favicons, not overwriting ones that already exist, to static folder\n buildDebug('Writing favicons to output dir')\n const faviconBasePath = `${basePath.replace(/\\/+$/, '')}/static`\n await writeFavicons(faviconBasePath, staticPath)\n\n buildDebug('Bundling using vite')\n const bundle = await build(viteConfig)\n buildDebug('Bundling complete')\n\n // For typescript only - this shouldn't ever be the case given we're not watching\n if (Array.isArray(bundle) || !('output' in bundle)) {\n return {chunks: []}\n }\n\n const stats: ChunkStats[] = []\n for (const chunk of bundle.output) {\n if (chunk.type !== 'chunk') {\n continue\n }\n\n stats.push({\n modules: Object.entries(chunk.modules).map(([rawFilePath, chunkModule]) => {\n const filePath = rawFilePath.startsWith('\\u0000')\n ? rawFilePath.slice('\\u0000'.length)\n : rawFilePath\n\n return {\n name: path.isAbsolute(filePath) ? path.relative(cwd, filePath) : filePath,\n originalLength: chunkModule.originalLength,\n renderedLength: chunkModule.renderedLength,\n }\n }),\n name: chunk.name,\n })\n }\n\n return {chunks: stats}\n}\n"],"names":["path","build","copyDir","buildDebug","extendViteConfigWithUserConfig","finalizeViteConfig","getViteConfig","writeFavicons","writeSanityRuntime","buildStaticFiles","options","basePath","cwd","entry","importMap","isApp","minify","outputDir","reactCompiler","sourceMap","vite","extendViteConfig","reactStrictMode","watch","mode","viteConfig","command","staticPath","join","faviconBasePath","replace","bundle","Array","isArray","chunks","stats","chunk","output","type","push","modules","Object","entries","map","rawFilePath","chunkModule","filePath","startsWith","slice","length","name","isAbsolute","relative","originalLength","renderedLength"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAI5B,SAAQC,KAAK,QAAO,OAAM;AAE1B,SAAQC,OAAO,QAAO,wBAAuB;AAC7C,SAAQC,UAAU,QAAO,kBAAiB;AAC1C,SAAQC,8BAA8B,EAAEC,kBAAkB,EAAEC,aAAa,QAAO,qBAAoB;AACpG,SAAQC,aAAa,QAAO,qBAAoB;AAChD,SAAQC,kBAAkB,QAAO,0BAAyB;AA4B1D;;;;CAIC,GACD,OAAO,eAAeC,iBACpBC,OAA2B;IAE3B,MAAM,EACJC,QAAQ,EACRC,GAAG,EACHC,KAAK,EACLC,SAAS,EACTC,KAAK,EACLC,SAAS,IAAI,EACbC,SAAS,EACTC,aAAa,EACbC,YAAY,KAAK,EACjBC,MAAMC,gBAAgB,EACvB,GAAGX;IAEJP,WAAW;IACX,MAAMK,mBAAmB;QACvBG;QACAC;QACAC;QACAE;QACAO,iBAAiB;QACjBC,OAAO;IACT;IAEApB,WAAW;IACX,MAAMqB,OAAO;IACb,IAAIC,aAAa,MAAMnB,cAAc;QACnCK;QACAC;QACAE;QACAC;QACAC;QACAQ;QACAP;QACAC;QACAC;IACF;IAEA,IAAIE,kBAAkB;QACpBI,aAAa,MAAMrB,+BACjB;YAACsB,SAAS;YAASF;QAAI,GACvBC,YACAJ;QAEFI,aAAa,MAAMpB,mBAAmBoB;IACxC;IAEA,oDAAoD;IACpDtB,WAAW;IACX,MAAMwB,aAAa3B,KAAK4B,IAAI,CAACX,WAAW;IACxC,MAAMf,QAAQF,KAAK4B,IAAI,CAAChB,KAAK,WAAWe;IAExC,4EAA4E;IAC5ExB,WAAW;IACX,MAAM0B,kBAAkB,GAAGlB,SAASmB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAChE,MAAMvB,cAAcsB,iBAAiBF;IAErCxB,WAAW;IACX,MAAM4B,SAAS,MAAM9B,MAAMwB;IAC3BtB,WAAW;IAEX,iFAAiF;IACjF,IAAI6B,MAAMC,OAAO,CAACF,WAAW,CAAE,CAAA,YAAYA,MAAK,GAAI;QAClD,OAAO;YAACG,QAAQ,EAAE;QAAA;IACpB;IAEA,MAAMC,QAAsB,EAAE;IAC9B,KAAK,MAAMC,SAASL,OAAOM,MAAM,CAAE;QACjC,IAAID,MAAME,IAAI,KAAK,SAAS;YAC1B;QACF;QAEAH,MAAMI,IAAI,CAAC;YACTC,SAASC,OAAOC,OAAO,CAACN,MAAMI,OAAO,EAAEG,GAAG,CAAC,CAAC,CAACC,aAAaC,YAAY;gBACpE,MAAMC,WAAWF,YAAYG,UAAU,CAAC,YACpCH,YAAYI,KAAK,CAAC,SAASC,MAAM,IACjCL;gBAEJ,OAAO;oBACLM,MAAMlD,KAAKmD,UAAU,CAACL,YAAY9C,KAAKoD,QAAQ,CAACxC,KAAKkC,YAAYA;oBACjEO,gBAAgBR,YAAYQ,cAAc;oBAC1CC,gBAAgBT,YAAYS,cAAc;gBAC5C;YACF;YACAJ,MAAMd,MAAMc,IAAI;QAClB;IACF;IAEA,OAAO;QAAChB,QAAQC;IAAK;AACvB"}
1
+ {"version":3,"sources":["../../../src/actions/build/buildStaticFiles.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {type UserViteConfig} from '@sanity/cli-core'\nimport {type PluginOptions as ReactCompilerConfig} from 'babel-plugin-react-compiler'\nimport {build} from 'vite'\n\nimport {copyDir} from '../../util/copyDir.js'\nimport {buildDebug} from './buildDebug.js'\nimport {extendViteConfigWithUserConfig, finalizeViteConfig, getViteConfig} from './getViteConfig.js'\nimport {writeFavicons} from './writeFavicons.js'\nimport {writeSanityRuntime} from './writeSanityRuntime.js'\n\nexport interface ChunkModule {\n name: string\n originalLength: number\n renderedLength: number\n}\n\nexport interface ChunkStats {\n modules: ChunkModule[]\n name: string\n}\n\ninterface StaticBuildOptions {\n basePath: string\n cwd: string\n outputDir: string\n\n entry?: string\n importMap?: {imports?: Record<string, string>}\n isApp?: boolean\n minify?: boolean\n profile?: boolean\n reactCompiler?: ReactCompilerConfig\n sourceMap?: boolean\n vite?: UserViteConfig\n}\n\n/**\n * Builds static files\n *\n * @internal\n */\nexport async function buildStaticFiles(\n options: StaticBuildOptions,\n): Promise<{chunks: ChunkStats[]}> {\n const {\n basePath,\n cwd,\n entry,\n importMap,\n isApp,\n minify = true,\n outputDir,\n reactCompiler,\n sourceMap = false,\n vite: extendViteConfig,\n } = options\n\n buildDebug('Writing Sanity runtime files')\n await writeSanityRuntime({\n basePath,\n cwd,\n entry,\n isApp,\n reactStrictMode: false,\n watch: false,\n })\n\n buildDebug('Resolving vite config')\n const mode = 'production'\n let viteConfig = await getViteConfig({\n basePath,\n cwd,\n importMap,\n isApp,\n minify,\n mode,\n outputDir,\n reactCompiler,\n sourceMap,\n })\n\n if (extendViteConfig) {\n viteConfig = await extendViteConfigWithUserConfig(\n {command: 'build', mode},\n viteConfig,\n extendViteConfig,\n )\n viteConfig = await finalizeViteConfig(viteConfig)\n }\n\n const fromPath = path.join(cwd, 'static')\n // Copy files placed in /static to the built /static\n buildDebug(`Copying static files from ${fromPath} to output dir`)\n const staticPath = path.join(outputDir, 'static')\n await copyDir(fromPath, staticPath)\n\n // Write favicons, not overwriting ones that already exist, to static folder\n buildDebug('Writing favicons to output dir')\n const faviconBasePath = `${basePath.replace(/\\/+$/, '')}/static`\n await writeFavicons(faviconBasePath, staticPath)\n\n buildDebug('Bundling using vite')\n const bundle = await build(viteConfig)\n buildDebug('Bundling complete')\n\n // For typescript only - this shouldn't ever be the case given we're not watching\n if (Array.isArray(bundle) || !('output' in bundle)) {\n return {chunks: []}\n }\n\n const stats: ChunkStats[] = []\n for (const chunk of bundle.output) {\n if (chunk.type !== 'chunk') {\n continue\n }\n\n stats.push({\n modules: Object.entries(chunk.modules).map(([rawFilePath, chunkModule]) => {\n const filePath = rawFilePath.startsWith('\\u0000')\n ? rawFilePath.slice('\\u0000'.length)\n : rawFilePath\n\n return {\n name: path.isAbsolute(filePath) ? path.relative(cwd, filePath) : filePath,\n originalLength: chunkModule.originalLength,\n renderedLength: chunkModule.renderedLength,\n }\n }),\n name: chunk.name,\n })\n }\n\n return {chunks: stats}\n}\n"],"names":["path","build","copyDir","buildDebug","extendViteConfigWithUserConfig","finalizeViteConfig","getViteConfig","writeFavicons","writeSanityRuntime","buildStaticFiles","options","basePath","cwd","entry","importMap","isApp","minify","outputDir","reactCompiler","sourceMap","vite","extendViteConfig","reactStrictMode","watch","mode","viteConfig","command","fromPath","join","staticPath","faviconBasePath","replace","bundle","Array","isArray","chunks","stats","chunk","output","type","push","modules","Object","entries","map","rawFilePath","chunkModule","filePath","startsWith","slice","length","name","isAbsolute","relative","originalLength","renderedLength"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAI5B,SAAQC,KAAK,QAAO,OAAM;AAE1B,SAAQC,OAAO,QAAO,wBAAuB;AAC7C,SAAQC,UAAU,QAAO,kBAAiB;AAC1C,SAAQC,8BAA8B,EAAEC,kBAAkB,EAAEC,aAAa,QAAO,qBAAoB;AACpG,SAAQC,aAAa,QAAO,qBAAoB;AAChD,SAAQC,kBAAkB,QAAO,0BAAyB;AA4B1D;;;;CAIC,GACD,OAAO,eAAeC,iBACpBC,OAA2B;IAE3B,MAAM,EACJC,QAAQ,EACRC,GAAG,EACHC,KAAK,EACLC,SAAS,EACTC,KAAK,EACLC,SAAS,IAAI,EACbC,SAAS,EACTC,aAAa,EACbC,YAAY,KAAK,EACjBC,MAAMC,gBAAgB,EACvB,GAAGX;IAEJP,WAAW;IACX,MAAMK,mBAAmB;QACvBG;QACAC;QACAC;QACAE;QACAO,iBAAiB;QACjBC,OAAO;IACT;IAEApB,WAAW;IACX,MAAMqB,OAAO;IACb,IAAIC,aAAa,MAAMnB,cAAc;QACnCK;QACAC;QACAE;QACAC;QACAC;QACAQ;QACAP;QACAC;QACAC;IACF;IAEA,IAAIE,kBAAkB;QACpBI,aAAa,MAAMrB,+BACjB;YAACsB,SAAS;YAASF;QAAI,GACvBC,YACAJ;QAEFI,aAAa,MAAMpB,mBAAmBoB;IACxC;IAEA,MAAME,WAAW3B,KAAK4B,IAAI,CAAChB,KAAK;IAChC,oDAAoD;IACpDT,WAAW,CAAC,0BAA0B,EAAEwB,SAAS,cAAc,CAAC;IAChE,MAAME,aAAa7B,KAAK4B,IAAI,CAACX,WAAW;IACxC,MAAMf,QAAQyB,UAAUE;IAExB,4EAA4E;IAC5E1B,WAAW;IACX,MAAM2B,kBAAkB,GAAGnB,SAASoB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC;IAChE,MAAMxB,cAAcuB,iBAAiBD;IAErC1B,WAAW;IACX,MAAM6B,SAAS,MAAM/B,MAAMwB;IAC3BtB,WAAW;IAEX,iFAAiF;IACjF,IAAI8B,MAAMC,OAAO,CAACF,WAAW,CAAE,CAAA,YAAYA,MAAK,GAAI;QAClD,OAAO;YAACG,QAAQ,EAAE;QAAA;IACpB;IAEA,MAAMC,QAAsB,EAAE;IAC9B,KAAK,MAAMC,SAASL,OAAOM,MAAM,CAAE;QACjC,IAAID,MAAME,IAAI,KAAK,SAAS;YAC1B;QACF;QAEAH,MAAMI,IAAI,CAAC;YACTC,SAASC,OAAOC,OAAO,CAACN,MAAMI,OAAO,EAAEG,GAAG,CAAC,CAAC,CAACC,aAAaC,YAAY;gBACpE,MAAMC,WAAWF,YAAYG,UAAU,CAAC,YACpCH,YAAYI,KAAK,CAAC,SAASC,MAAM,IACjCL;gBAEJ,OAAO;oBACLM,MAAMnD,KAAKoD,UAAU,CAACL,YAAY/C,KAAKqD,QAAQ,CAACzC,KAAKmC,YAAYA;oBACjEO,gBAAgBR,YAAYQ,cAAc;oBAC1CC,gBAAgBT,YAAYS,cAAc;gBAC5C;YACF;YACAJ,MAAMd,MAAMc,IAAI;QAClB;IACF;IAEA,OAAO;QAAChB,QAAQC;IAAK;AACvB"}
@@ -1,7 +1,7 @@
1
1
  import { rm } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { styleText } from 'node:util';
4
- import { getCliTelemetry, getTimer } from '@sanity/cli-core';
4
+ import { getCliTelemetry, getTimer, isInteractive } from '@sanity/cli-core';
5
5
  import { confirm, logSymbols, select, spinner } from '@sanity/cli-core/ux';
6
6
  import semver from 'semver';
7
7
  import { StudioBuildTrace } from '../../telemetry/build.telemetry.js';
@@ -19,6 +19,7 @@ import { checkStudioDependencyVersions } from './checkStudioDependencyVersions.j
19
19
  import { determineBasePath } from './determineBasePath.js';
20
20
  import { getAutoUpdatesImportMap } from './getAutoUpdatesImportMap.js';
21
21
  import { getStudioEnvVars } from './getStudioEnvVars.js';
22
+ import { handlePrereleaseVersions } from './handlePrereleaseVersions.js';
22
23
  import { shouldAutoUpdate } from './shouldAutoUpdate.js';
23
24
  /**
24
25
  * Build the Sanity Studio.
@@ -26,7 +27,7 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
26
27
  * @internal
27
28
  */ export async function buildStudio(options) {
28
29
  const timer = getTimer();
29
- const { cliConfig, exit, flags, outDir, output, workDir } = options;
30
+ const { cliConfig, flags, outDir, output, workDir } = options;
30
31
  const unattendedMode = Boolean(flags.yes);
31
32
  const defaultOutputDir = path.resolve(path.join(workDir, 'dist'));
32
33
  const outputDir = path.resolve(outDir || defaultOutputDir);
@@ -38,7 +39,7 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
38
39
  output,
39
40
  workDir
40
41
  });
41
- const autoUpdatesEnabled = shouldAutoUpdate({
42
+ let autoUpdatesEnabled = shouldAutoUpdate({
42
43
  cliConfig,
43
44
  flags,
44
45
  output
@@ -53,8 +54,10 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
53
54
  output.log(`${logSymbols.info} Building with auto-updates enabled`);
54
55
  const projectId = cliConfig?.api?.projectId;
55
56
  const appId = getAppId(cliConfig);
56
- // Warn if auto updates enabled but no appId configured
57
- if (!appId) {
57
+ // Warn if auto updates enabled but no appId configured.
58
+ // Skip when called from deploy, since deploy handles appId itself
59
+ // (prompts the user and tells them to add it to config).
60
+ if (!appId && !options.calledFromDeploy) {
58
61
  warnAboutMissingAppId({
59
62
  appType: 'studio',
60
63
  output,
@@ -75,46 +78,70 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
75
78
  appId
76
79
  });
77
80
  // Check the versions
78
- const result = await compareDependencyVersions(sanityDependencies, workDir);
79
- // If it is in unattended mode, we don't want to prompt
80
- if (result?.length && !unattendedMode) {
81
- const choice = await select({
82
- choices: [
83
- {
84
- name: `Upgrade and proceed with build`,
85
- value: 'upgrade-and-proceed'
86
- },
87
- {
88
- name: `Upgrade only. You will need to run the build command again`,
89
- value: 'upgrade'
90
- },
91
- {
92
- name: 'Cancel',
93
- value: 'cancel'
94
- }
95
- ],
96
- default: 'upgrade-and-proceed',
97
- message: styleText('yellow', `The following local package versions are different from the versions currently served at runtime.\n` + `When using auto updates, we recommend that you test locally with the same versions before deploying. \n\n` + `${result.map((mod)=>` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\n')} \n\n` + `Do you want to upgrade local versions before deploying?`)
81
+ const { mismatched, unresolvedPrerelease } = await compareDependencyVersions(sanityDependencies, workDir, {
82
+ appId
83
+ });
84
+ if (unresolvedPrerelease.length > 0) {
85
+ await handlePrereleaseVersions({
86
+ output,
87
+ unattendedMode,
88
+ unresolvedPrerelease
98
89
  });
99
- if (choice === 'cancel') {
100
- return exit(1);
101
- }
102
- if (choice === 'upgrade' || choice === 'upgrade-and-proceed') {
103
- await upgradePackages({
104
- packageManager: (await getPackageManagerChoice(workDir, {
105
- interactive: false
106
- })).chosen,
107
- packages: result.map((res)=>[
108
- res.pkg,
109
- res.remote
110
- ])
111
- }, {
112
- output,
113
- workDir
90
+ autoUpdatesImports = {};
91
+ autoUpdatesEnabled = false;
92
+ }
93
+ if (mismatched.length > 0 && autoUpdatesEnabled) {
94
+ const versionMismatchWarning = `The following local package versions are different from the versions currently served at runtime.\n` + `When using auto updates, we recommend that you test locally with the same versions before deploying. \n\n` + `${mismatched.map((mod)=>` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\n')}`;
95
+ // If it is non-interactive or in unattended mode, we don't want to prompt
96
+ if (isInteractive() && !unattendedMode) {
97
+ const choice = await select({
98
+ choices: [
99
+ {
100
+ name: `Upgrade local versions (recommended). You will need to run the build command again`,
101
+ value: 'upgrade'
102
+ },
103
+ {
104
+ name: `Upgrade and proceed with build`,
105
+ value: 'upgrade-and-proceed'
106
+ },
107
+ {
108
+ name: `Continue anyway`,
109
+ value: 'continue'
110
+ },
111
+ {
112
+ name: 'Cancel',
113
+ value: 'cancel'
114
+ }
115
+ ],
116
+ default: 'upgrade',
117
+ message: styleText('yellow', `${logSymbols.warning} ${versionMismatchWarning}\n\nDo you want to upgrade local versions before deploying?`)
114
118
  });
115
- if (choice !== 'upgrade-and-proceed') {
116
- return exit(1);
119
+ if (choice === 'cancel') {
120
+ output.error('Declined to continue with build', {
121
+ exit: 1
122
+ });
123
+ return;
124
+ }
125
+ if (choice === 'upgrade' || choice === 'upgrade-and-proceed') {
126
+ await upgradePackages({
127
+ packageManager: (await getPackageManagerChoice(workDir, {
128
+ interactive: false
129
+ })).chosen,
130
+ packages: mismatched.map((res)=>[
131
+ res.pkg,
132
+ res.remote
133
+ ])
134
+ }, {
135
+ output,
136
+ workDir
137
+ });
138
+ if (choice === 'upgrade') {
139
+ return;
140
+ }
117
141
  }
142
+ } else {
143
+ // if non-interactive or unattended, just show the warning
144
+ output.warn(versionMismatchWarning);
118
145
  }
119
146
  }
120
147
  }
@@ -127,14 +154,14 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
127
154
  output.log('');
128
155
  }
129
156
  let shouldClean = true;
130
- if (outputDir !== defaultOutputDir && !unattendedMode) {
157
+ if (outputDir !== defaultOutputDir && !unattendedMode && isInteractive()) {
131
158
  shouldClean = await confirm({
132
159
  default: true,
133
160
  message: `Do you want to delete the existing directory (${outputDir}) first?`
134
161
  });
135
162
  }
136
163
  // Determine base path for built studio
137
- const basePath = determineBasePath(cliConfig, 'studio');
164
+ const basePath = determineBasePath(cliConfig, 'studio', output);
138
165
  let spin;
139
166
  if (shouldClean) {
140
167
  timer.start('cleanOutputFolder');
@@ -157,6 +184,7 @@ import { shouldAutoUpdate } from './shouldAutoUpdate.js';
157
184
  ...await buildVendorDependencies({
158
185
  basePath,
159
186
  cwd: workDir,
187
+ isApp: false,
160
188
  outputDir
161
189
  }),
162
190
  ...autoUpdatesImports