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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (758) hide show
  1. package/README.md +240 -114
  2. package/dist/actions/auth/login/login.js +13 -5
  3. package/dist/actions/auth/login/login.js.map +1 -1
  4. package/dist/actions/build/buildApp.js +12 -12
  5. package/dist/actions/build/buildApp.js.map +1 -1
  6. package/dist/actions/build/buildStudio.js +12 -12
  7. package/dist/actions/build/buildStudio.js.map +1 -1
  8. package/dist/actions/build/getStudioEnvironmentVariables.js +1 -1
  9. package/dist/actions/build/getStudioEnvironmentVariables.js.map +1 -1
  10. package/dist/actions/build/getViteConfig.js +1 -1
  11. package/dist/actions/build/getViteConfig.js.map +1 -1
  12. package/dist/actions/build/renderDocument.js +3 -3
  13. package/dist/actions/build/renderDocument.js.map +1 -1
  14. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js +2 -1
  15. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.js.map +1 -1
  16. package/dist/actions/build/shouldAutoUpdate.js +3 -3
  17. package/dist/actions/build/shouldAutoUpdate.js.map +1 -1
  18. package/dist/actions/build/writeSanityRuntime.js +2 -2
  19. package/dist/actions/build/writeSanityRuntime.js.map +1 -1
  20. package/dist/actions/dataset/create.js +3 -5
  21. package/dist/actions/dataset/create.js.map +1 -1
  22. package/dist/actions/deploy/deployApp.js +11 -7
  23. package/dist/actions/deploy/deployApp.js.map +1 -1
  24. package/dist/actions/deploy/deployStudio.js +5 -4
  25. package/dist/actions/deploy/deployStudio.js.map +1 -1
  26. package/dist/actions/dev/startAppDevServer.js +5 -2
  27. package/dist/actions/dev/startAppDevServer.js.map +1 -1
  28. package/dist/actions/dev/startStudioDevServer.js +10 -6
  29. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  30. package/dist/actions/documents/types.js.map +1 -1
  31. package/dist/actions/documents/validate.js +4 -15
  32. package/dist/actions/documents/validate.js.map +1 -1
  33. package/dist/{threads/validateDocuments.js → actions/documents/validateDocuments.worker.js} +35 -35
  34. package/dist/actions/documents/validateDocuments.worker.js.map +1 -0
  35. package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -1
  36. package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -1
  37. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +8 -7
  38. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map +1 -1
  39. package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.js.map +1 -1
  40. package/dist/{threads/configClient.js → actions/exec/configClient.worker.js} +2 -2
  41. package/dist/actions/exec/configClient.worker.js.map +1 -0
  42. package/dist/actions/exec/execScript.js +29 -25
  43. package/dist/actions/exec/execScript.js.map +1 -1
  44. package/dist/{threads/registerBrowserEnv.js → actions/exec/registerBrowserEnv.worker.js} +1 -1
  45. package/dist/actions/exec/registerBrowserEnv.worker.js.map +1 -0
  46. package/dist/actions/graphql/SchemaError.js +37 -0
  47. package/dist/actions/graphql/SchemaError.js.map +1 -0
  48. package/dist/actions/graphql/extractFromSanitySchema.js +659 -0
  49. package/dist/actions/graphql/extractFromSanitySchema.js.map +1 -0
  50. package/dist/actions/graphql/gen1/generateTypeFilters.js +226 -0
  51. package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -0
  52. package/dist/actions/graphql/gen1/generateTypeQueries.js +85 -0
  53. package/dist/actions/graphql/gen1/generateTypeQueries.js.map +1 -0
  54. package/dist/actions/graphql/gen1/index.js +19 -0
  55. package/dist/actions/graphql/gen1/index.js.map +1 -0
  56. package/dist/actions/graphql/gen2/filters/booleanFilters.js +26 -0
  57. package/dist/actions/graphql/gen2/filters/booleanFilters.js.map +1 -0
  58. package/dist/actions/graphql/gen2/filters/dateFilters.js +46 -0
  59. package/dist/actions/graphql/gen2/filters/dateFilters.js.map +1 -0
  60. package/dist/actions/graphql/gen2/filters/dateTimeFilters.js +46 -0
  61. package/dist/actions/graphql/gen2/filters/dateTimeFilters.js.map +1 -0
  62. package/dist/actions/graphql/gen2/filters/documentFilters.js +21 -0
  63. package/dist/actions/graphql/gen2/filters/documentFilters.js.map +1 -0
  64. package/dist/actions/graphql/gen2/filters/floatFilters.js +46 -0
  65. package/dist/actions/graphql/gen2/filters/floatFilters.js.map +1 -0
  66. package/dist/actions/graphql/gen2/filters/idFilters.js +44 -0
  67. package/dist/actions/graphql/gen2/filters/idFilters.js.map +1 -0
  68. package/dist/actions/graphql/gen2/filters/integerFilters.js +46 -0
  69. package/dist/actions/graphql/gen2/filters/integerFilters.js.map +1 -0
  70. package/dist/actions/graphql/gen2/filters/stringFilters.js +49 -0
  71. package/dist/actions/graphql/gen2/filters/stringFilters.js.map +1 -0
  72. package/dist/actions/graphql/gen2/generateTypeFilters.js +85 -0
  73. package/dist/actions/graphql/gen2/generateTypeFilters.js.map +1 -0
  74. package/dist/actions/graphql/gen2/generateTypeQueries.js +107 -0
  75. package/dist/actions/graphql/gen2/generateTypeQueries.js.map +1 -0
  76. package/dist/actions/graphql/gen2/generateTypeSortings.js +70 -0
  77. package/dist/actions/graphql/gen2/generateTypeSortings.js.map +1 -0
  78. package/dist/actions/graphql/gen2/index.js +22 -0
  79. package/dist/actions/graphql/gen2/index.js.map +1 -0
  80. package/dist/actions/graphql/gen3/filters/documentFilters.js +21 -0
  81. package/dist/actions/graphql/gen3/filters/documentFilters.js.map +1 -0
  82. package/dist/actions/graphql/gen3/generateTypeFilters.js +101 -0
  83. package/dist/actions/graphql/gen3/generateTypeFilters.js.map +1 -0
  84. package/dist/actions/graphql/gen3/generateTypeQueries.js +104 -0
  85. package/dist/actions/graphql/gen3/generateTypeQueries.js.map +1 -0
  86. package/dist/actions/graphql/gen3/generateTypeSortings.js +70 -0
  87. package/dist/actions/graphql/gen3/generateTypeSortings.js.map +1 -0
  88. package/dist/actions/graphql/gen3/index.js +31 -0
  89. package/dist/actions/graphql/gen3/index.js.map +1 -0
  90. package/dist/actions/graphql/gen3/utils.js +12 -0
  91. package/dist/actions/graphql/gen3/utils.js.map +1 -0
  92. package/dist/actions/graphql/getGraphQLAPIs.worker.js +1 -1
  93. package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -1
  94. package/dist/actions/graphql/graphqlDebug.js +4 -0
  95. package/dist/actions/graphql/graphqlDebug.js.map +1 -0
  96. package/dist/actions/graphql/helpUrls.js +3 -0
  97. package/dist/actions/graphql/helpUrls.js.map +1 -0
  98. package/dist/actions/graphql/helpers.js +11 -0
  99. package/dist/actions/graphql/helpers.js.map +1 -0
  100. package/dist/actions/graphql/resolveApiGeneration.js +43 -0
  101. package/dist/actions/graphql/resolveApiGeneration.js.map +1 -0
  102. package/dist/actions/graphql/types.js +1 -1
  103. package/dist/actions/graphql/types.js.map +1 -1
  104. package/dist/actions/init/bootstrapLocalTemplate.js +137 -0
  105. package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -0
  106. package/dist/actions/init/bootstrapRemoteTemplate.js +109 -0
  107. package/dist/actions/init/bootstrapRemoteTemplate.js.map +1 -0
  108. package/dist/actions/init/bootstrapTemplate.js +32 -0
  109. package/dist/actions/init/bootstrapTemplate.js.map +1 -0
  110. package/dist/actions/init/checkNextJsReactCompatibility.js +21 -0
  111. package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -0
  112. package/dist/actions/init/countNestedFolders.js +6 -0
  113. package/dist/actions/init/countNestedFolders.js.map +1 -0
  114. package/dist/actions/init/createAppCliConfig.js +19 -0
  115. package/dist/actions/init/createAppCliConfig.js.map +1 -0
  116. package/dist/actions/init/createCliConfig.js +27 -0
  117. package/dist/actions/init/createCliConfig.js.map +1 -0
  118. package/dist/actions/init/createPackageManifest.js +86 -0
  119. package/dist/actions/init/createPackageManifest.js.map +1 -0
  120. package/dist/actions/init/createStudioConfig.js +41 -0
  121. package/dist/actions/init/createStudioConfig.js.map +1 -0
  122. package/dist/actions/init/env/createOrAppendEnvVars.js +25 -0
  123. package/dist/actions/init/env/createOrAppendEnvVars.js.map +1 -0
  124. package/dist/actions/init/env/parseAndUpdateEnvVars.js +42 -0
  125. package/dist/actions/init/env/parseAndUpdateEnvVars.js.map +1 -0
  126. package/dist/actions/init/env/writeEnvVarsToFile.js +49 -0
  127. package/dist/actions/init/env/writeEnvVarsToFile.js.map +1 -0
  128. package/dist/actions/init/fetchPostInitPrompt.js +30 -0
  129. package/dist/actions/init/fetchPostInitPrompt.js.map +1 -0
  130. package/dist/actions/init/git.js +65 -0
  131. package/dist/actions/init/git.js.map +1 -0
  132. package/dist/actions/init/processTemplate.js +56 -0
  133. package/dist/actions/init/processTemplate.js.map +1 -0
  134. package/dist/actions/init/remoteTemplate.js +2 -40
  135. package/dist/actions/init/remoteTemplate.js.map +1 -1
  136. package/dist/actions/init/resolvePackageManager.js +20 -0
  137. package/dist/actions/init/resolvePackageManager.js.map +1 -0
  138. package/dist/actions/init/templates/appQuickstart.js +28 -0
  139. package/dist/actions/init/templates/appQuickstart.js.map +1 -0
  140. package/dist/actions/init/templates/appSanityUi.js +30 -0
  141. package/dist/actions/init/templates/appSanityUi.js.map +1 -0
  142. package/dist/actions/init/templates/blog.js +4 -0
  143. package/dist/actions/init/templates/blog.js.map +1 -0
  144. package/dist/actions/init/templates/clean.js +4 -0
  145. package/dist/actions/init/templates/clean.js.map +1 -0
  146. package/dist/actions/init/templates/getStarted.js +35 -0
  147. package/dist/actions/init/templates/getStarted.js.map +1 -0
  148. package/dist/actions/init/templates/index.js +23 -0
  149. package/dist/actions/init/templates/index.js.map +1 -0
  150. package/dist/actions/init/templates/moviedb.js +34 -0
  151. package/dist/actions/init/templates/moviedb.js.map +1 -0
  152. package/dist/actions/init/templates/nextjs/index.js +213 -0
  153. package/dist/actions/init/templates/nextjs/index.js.map +1 -0
  154. package/dist/actions/init/templates/nextjs/schemaTypes/blog.js +247 -0
  155. package/dist/actions/init/templates/nextjs/schemaTypes/blog.js.map +1 -0
  156. package/dist/actions/init/templates/quickstart.js +4 -0
  157. package/dist/actions/init/templates/quickstart.js.map +1 -0
  158. package/dist/actions/init/templates/shopify.js +77 -0
  159. package/dist/actions/init/templates/shopify.js.map +1 -0
  160. package/dist/actions/init/templates/shopifyOnline.js +49 -0
  161. package/dist/actions/init/templates/shopifyOnline.js.map +1 -0
  162. package/dist/actions/init/types.js.map +1 -0
  163. package/dist/actions/init/updateInitialTemplateMetadata.js +17 -0
  164. package/dist/actions/init/updateInitialTemplateMetadata.js.map +1 -0
  165. package/dist/actions/mcp/detectAvailableEditors.js +64 -59
  166. package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
  167. package/dist/actions/mcp/editorConfigs.js +147 -0
  168. package/dist/actions/mcp/editorConfigs.js.map +1 -0
  169. package/dist/actions/mcp/promptForMCPSetup.js +24 -0
  170. package/dist/actions/mcp/promptForMCPSetup.js.map +1 -0
  171. package/dist/actions/mcp/setupMCP.js +88 -0
  172. package/dist/actions/mcp/setupMCP.js.map +1 -0
  173. package/dist/actions/mcp/types.js +3 -0
  174. package/dist/actions/mcp/types.js.map +1 -0
  175. package/dist/actions/mcp/writeMCPConfig.js +24 -29
  176. package/dist/actions/mcp/writeMCPConfig.js.map +1 -1
  177. package/dist/actions/media/importMedia.js +2 -2
  178. package/dist/actions/media/importMedia.js.map +1 -1
  179. package/dist/actions/organizations/getOrganization.js +67 -0
  180. package/dist/actions/organizations/getOrganization.js.map +1 -0
  181. package/dist/actions/organizations/hasProjectAttachGrant.js +1 -1
  182. package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -1
  183. package/dist/actions/organizations/validateOrganizationName.js +10 -0
  184. package/dist/actions/organizations/validateOrganizationName.js.map +1 -0
  185. package/dist/actions/preview/previewAction.js +2 -1
  186. package/dist/actions/preview/previewAction.js.map +1 -1
  187. package/dist/actions/projects/getManageUrl.js +7 -0
  188. package/dist/actions/projects/getManageUrl.js.map +1 -0
  189. package/dist/actions/projects/validateProjectName.js +11 -0
  190. package/dist/actions/projects/validateProjectName.js.map +1 -0
  191. package/dist/actions/schema/deleteSchemaAction.js +2 -2
  192. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  193. package/dist/actions/schema/deploySchemas.js +5 -5
  194. package/dist/actions/schema/deploySchemas.js.map +1 -1
  195. package/dist/actions/schema/extractSanitySchema.worker.js +38 -0
  196. package/dist/actions/schema/extractSanitySchema.worker.js.map +1 -0
  197. package/dist/actions/schema/extractSchema.js +77 -0
  198. package/dist/actions/schema/extractSchema.js.map +1 -0
  199. package/dist/actions/schema/formatSchemaValidation.js +17 -5
  200. package/dist/actions/schema/formatSchemaValidation.js.map +1 -1
  201. package/dist/actions/schema/listSchemas.js +4 -4
  202. package/dist/actions/schema/listSchemas.js.map +1 -1
  203. package/dist/actions/schema/metafile.js.map +1 -1
  204. package/dist/actions/schema/types.js +9 -0
  205. package/dist/actions/schema/types.js.map +1 -0
  206. package/dist/actions/schema/utils/debug.js +1 -0
  207. package/dist/actions/schema/utils/debug.js.map +1 -1
  208. package/dist/actions/schema/utils/extractValidationFromSchemaError.js +12 -0
  209. package/dist/actions/schema/utils/extractValidationFromSchemaError.js.map +1 -0
  210. package/dist/actions/schema/utils/manifestExtractor.js +2 -2
  211. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  212. package/dist/actions/schema/utils/manifestReader.js +2 -2
  213. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  214. package/dist/actions/schema/validateAction.js +7 -17
  215. package/dist/actions/schema/validateAction.js.map +1 -1
  216. package/dist/{threads/validateSchema.js → actions/schema/validateSchema.worker.js} +35 -26
  217. package/dist/actions/schema/validateSchema.worker.js.map +1 -0
  218. package/dist/actions/telemetry/getLearnMoreMessage.js.map +1 -1
  219. package/dist/actions/telemetry/getStatusDisplay.js.map +1 -1
  220. package/dist/actions/telemetry/getStatusMessage.js.map +1 -1
  221. package/dist/actions/telemetry/resolveConsent.js +1 -2
  222. package/dist/actions/telemetry/resolveConsent.js.map +1 -1
  223. package/dist/actions/telemetry/setConsent.js +1 -1
  224. package/dist/actions/telemetry/setConsent.js.map +1 -1
  225. package/dist/actions/telemetry/telemetryDisclosure.js +3 -3
  226. package/dist/actions/telemetry/telemetryDisclosure.js.map +1 -1
  227. package/dist/actions/versions/getFormatters.js +2 -2
  228. package/dist/actions/versions/getFormatters.js.map +1 -1
  229. package/dist/commands/backup/disable.js +4 -3
  230. package/dist/commands/backup/disable.js.map +1 -1
  231. package/dist/commands/backup/download.js +7 -7
  232. package/dist/commands/backup/download.js.map +1 -1
  233. package/dist/commands/backup/enable.js +3 -3
  234. package/dist/commands/backup/enable.js.map +1 -1
  235. package/dist/commands/cors/add.js +13 -9
  236. package/dist/commands/cors/add.js.map +1 -1
  237. package/dist/commands/dataset/copy.js +6 -5
  238. package/dist/commands/dataset/copy.js.map +1 -1
  239. package/dist/commands/dataset/create.js +14 -7
  240. package/dist/commands/dataset/create.js.map +1 -1
  241. package/dist/commands/dataset/delete.js +12 -2
  242. package/dist/commands/dataset/delete.js.map +1 -1
  243. package/dist/commands/dataset/export.js +1 -2
  244. package/dist/commands/dataset/export.js.map +1 -1
  245. package/dist/commands/debug.js +5 -5
  246. package/dist/commands/debug.js.map +1 -1
  247. package/dist/commands/dev.js +5 -2
  248. package/dist/commands/dev.js.map +1 -1
  249. package/dist/commands/docs/search.js +3 -2
  250. package/dist/commands/docs/search.js.map +1 -1
  251. package/dist/commands/documents/validate.js +44 -40
  252. package/dist/commands/documents/validate.js.map +1 -1
  253. package/dist/commands/graphql/deploy.js +429 -0
  254. package/dist/commands/graphql/deploy.js.map +1 -0
  255. package/dist/commands/graphql/list.js +6 -6
  256. package/dist/commands/graphql/list.js.map +1 -1
  257. package/dist/commands/hook/logs.js +4 -4
  258. package/dist/commands/hook/logs.js.map +1 -1
  259. package/dist/commands/init.js +607 -86
  260. package/dist/commands/init.js.map +1 -1
  261. package/dist/commands/login.js +2 -2
  262. package/dist/commands/login.js.map +1 -1
  263. package/dist/commands/manage.js +2 -1
  264. package/dist/commands/manage.js.map +1 -1
  265. package/dist/commands/mcp/configure.js +13 -74
  266. package/dist/commands/mcp/configure.js.map +1 -1
  267. package/dist/commands/media/create-aspect.js +7 -6
  268. package/dist/commands/media/create-aspect.js.map +1 -1
  269. package/dist/commands/media/delete-aspect.js +5 -4
  270. package/dist/commands/media/delete-aspect.js.map +1 -1
  271. package/dist/commands/media/deploy-aspect.js +9 -8
  272. package/dist/commands/media/deploy-aspect.js.map +1 -1
  273. package/dist/commands/media/export.js +1 -2
  274. package/dist/commands/media/export.js.map +1 -1
  275. package/dist/commands/media/import.js +4 -4
  276. package/dist/commands/media/import.js.map +1 -1
  277. package/dist/commands/preview.js +10 -24
  278. package/dist/commands/preview.js.map +1 -1
  279. package/dist/commands/projects/create.js +181 -0
  280. package/dist/commands/projects/create.js.map +1 -0
  281. package/dist/commands/projects/list.js +2 -2
  282. package/dist/commands/projects/list.js.map +1 -1
  283. package/dist/commands/schema/extract.js +7 -12
  284. package/dist/commands/schema/extract.js.map +1 -1
  285. package/dist/commands/schema/validate.js +10 -2
  286. package/dist/commands/schema/validate.js.map +1 -1
  287. package/dist/commands/undeploy.js +9 -8
  288. package/dist/commands/undeploy.js.map +1 -1
  289. package/dist/commands/users/list.js +3 -3
  290. package/dist/commands/users/list.js.map +1 -1
  291. package/dist/commands/versions.js +2 -2
  292. package/dist/commands/versions.js.map +1 -1
  293. package/dist/config/createCliConfig.js +1 -0
  294. package/dist/config/createCliConfig.js.map +1 -1
  295. package/dist/hooks/prerun/flushTelemetry.worker.js +1 -1
  296. package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -1
  297. package/dist/hooks/prerun/injectEnvVariables.js +31 -0
  298. package/dist/hooks/prerun/injectEnvVariables.js.map +1 -0
  299. package/dist/hooks/prerun/setupTelemetry.js +6 -5
  300. package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
  301. package/dist/hooks/prerun/warnings.js +6 -0
  302. package/dist/hooks/prerun/warnings.js.map +1 -0
  303. package/dist/index.d.ts +2326 -6
  304. package/dist/index.js +0 -1
  305. package/dist/index.js.map +1 -1
  306. package/dist/prompts/init/nextjs.js +56 -0
  307. package/dist/prompts/init/nextjs.js.map +1 -0
  308. package/dist/prompts/init/promptForTypescript.js +0 -6
  309. package/dist/prompts/init/promptForTypescript.js.map +1 -1
  310. package/dist/prompts/promptForDefaultConfig.js +12 -0
  311. package/dist/prompts/promptForDefaultConfig.js.map +1 -0
  312. package/dist/prompts/promptForOrganizationName.js +11 -0
  313. package/dist/prompts/promptForOrganizationName.js.map +1 -0
  314. package/dist/prompts/promptForProjectName.js +11 -0
  315. package/dist/prompts/promptForProjectName.js.map +1 -0
  316. package/dist/server/previewServer.js +15 -9
  317. package/dist/server/previewServer.js.map +1 -1
  318. package/dist/services/documents.js +56 -0
  319. package/dist/services/documents.js.map +1 -0
  320. package/dist/services/getUrlHeaders.js +36 -0
  321. package/dist/services/getUrlHeaders.js.map +1 -0
  322. package/dist/services/graphql.js +64 -0
  323. package/dist/services/graphql.js.map +1 -1
  324. package/dist/services/mcp.js +16 -0
  325. package/dist/services/mcp.js.map +1 -1
  326. package/dist/services/organizations.js +1 -1
  327. package/dist/services/organizations.js.map +1 -1
  328. package/dist/services/projects.js +37 -0
  329. package/dist/services/projects.js.map +1 -1
  330. package/dist/services/telemetry.js +62 -2
  331. package/dist/services/telemetry.js.map +1 -1
  332. package/dist/studioDependencies.js +24 -0
  333. package/dist/studioDependencies.js.map +1 -0
  334. package/dist/telemetry/build.telemetry.js +13 -0
  335. package/dist/telemetry/build.telemetry.js.map +1 -0
  336. package/dist/telemetry/extractSchema.telemetry.js +8 -0
  337. package/dist/telemetry/extractSchema.telemetry.js.map +1 -0
  338. package/dist/telemetry/init.telemetry.js +8 -0
  339. package/dist/telemetry/init.telemetry.js.map +1 -0
  340. package/dist/telemetry/login.telemetry.js +8 -0
  341. package/dist/telemetry/login.telemetry.js.map +1 -0
  342. package/dist/telemetry/mcp.telemetry.js +8 -0
  343. package/dist/telemetry/mcp.telemetry.js.map +1 -0
  344. package/dist/types.js +3 -1
  345. package/dist/types.js.map +1 -1
  346. package/dist/typings/deepSortObject.d.js +2 -0
  347. package/dist/typings/deepSortObject.d.js.map +1 -0
  348. package/dist/util/appId.js +5 -5
  349. package/dist/util/appId.js.map +1 -1
  350. package/dist/util/cliClient.js +8 -7
  351. package/dist/util/cliClient.js.map +1 -1
  352. package/dist/util/copy.js +37 -0
  353. package/dist/util/copy.js.map +1 -0
  354. package/dist/util/formatSize.js +2 -2
  355. package/dist/util/formatSize.js.map +1 -1
  356. package/dist/util/frameworkPort.js +61 -0
  357. package/dist/util/frameworkPort.js.map +1 -0
  358. package/dist/util/fsUtils.js +34 -0
  359. package/dist/util/fsUtils.js.map +1 -0
  360. package/dist/util/getProjectDefaults.js +77 -0
  361. package/dist/util/getProjectDefaults.js.map +1 -0
  362. package/dist/util/getSanityEnv.js +3 -0
  363. package/dist/util/getSanityEnv.js.map +1 -0
  364. package/dist/util/importStudioConfig.js +0 -3
  365. package/dist/util/importStudioConfig.js.map +1 -1
  366. package/dist/util/loadEnv.js +1 -6
  367. package/dist/util/loadEnv.js.map +1 -1
  368. package/dist/util/packageManager/packageManagerChoice.js +8 -0
  369. package/dist/util/packageManager/packageManagerChoice.js.map +1 -1
  370. package/dist/util/readPackageJson.js +3 -1
  371. package/dist/util/readPackageJson.js.map +1 -1
  372. package/dist/util/readdirRecursive.js +24 -0
  373. package/dist/util/readdirRecursive.js.map +1 -0
  374. package/dist/util/resolveLatestVersions.js +21 -0
  375. package/dist/util/resolveLatestVersions.js.map +1 -0
  376. package/dist/util/warnAboutMissingAppId.js +6 -2
  377. package/dist/util/warnAboutMissingAppId.js.map +1 -1
  378. package/dist/util/warnOnNonProductionEnvironment.js +18 -0
  379. package/dist/util/warnOnNonProductionEnvironment.js.map +1 -0
  380. package/oclif.config.js +6 -1
  381. package/oclif.manifest.json +200 -3
  382. package/package.json +48 -35
  383. package/dist/SanityHelp.d.ts +0 -4
  384. package/dist/actions/auth/authServer.d.ts +0 -33
  385. package/dist/actions/auth/getProviderName.d.ts +0 -8
  386. package/dist/actions/auth/login/getProvider.d.ts +0 -15
  387. package/dist/actions/auth/login/getSSOProvider.d.ts +0 -13
  388. package/dist/actions/auth/login/login.d.ts +0 -20
  389. package/dist/actions/auth/login/promptProviders.d.ts +0 -10
  390. package/dist/actions/auth/login/samlProviderToLoginProvider.d.ts +0 -9
  391. package/dist/actions/auth/types.d.ts +0 -26
  392. package/dist/actions/backup/archiveDir.d.ts +0 -10
  393. package/dist/actions/backup/assertDatasetExist.d.ts +0 -8
  394. package/dist/actions/backup/backupDownloadDebug.d.ts +0 -1
  395. package/dist/actions/backup/cleanupTmpDir.d.ts +0 -6
  396. package/dist/actions/backup/constants.d.ts +0 -1
  397. package/dist/actions/backup/downloadAsset.d.ts +0 -9
  398. package/dist/actions/backup/downloadDocument.d.ts +0 -7
  399. package/dist/actions/backup/fetchNextBackupPage.d.ts +0 -23
  400. package/dist/actions/backup/progressSpinner.d.ts +0 -14
  401. package/dist/actions/build/buildApp.d.ts +0 -7
  402. package/dist/actions/build/buildDebug.d.ts +0 -1
  403. package/dist/actions/build/buildStaticFiles.d.ts +0 -35
  404. package/dist/actions/build/buildStudio.d.ts +0 -7
  405. package/dist/actions/build/buildVendorDependencies.d.ts +0 -11
  406. package/dist/actions/build/checkRequiredDependencies.d.ts +0 -22
  407. package/dist/actions/build/checkStudioDependencyVersions.d.ts +0 -2
  408. package/dist/actions/build/createExternalFromImportMap.d.ts +0 -11
  409. package/dist/actions/build/decorateIndexWithAutoGeneratedWarning.d.ts +0 -6
  410. package/dist/actions/build/decorateIndexWithBridgeScript.d.ts +0 -8
  411. package/dist/actions/build/determineBasePath.d.ts +0 -7
  412. package/dist/actions/build/generateWebManifest.d.ts +0 -15
  413. package/dist/actions/build/getAppEnvVars.d.ts +0 -6
  414. package/dist/actions/build/getAutoUpdatesImportMap.d.ts +0 -21
  415. package/dist/actions/build/getEntryModule.d.ts +0 -7
  416. package/dist/actions/build/getPossibleDocumentComponentLocations.d.ts +0 -4
  417. package/dist/actions/build/getStudioEnvVars.d.ts +0 -6
  418. package/dist/actions/build/getStudioEnvironmentVariables.d.ts +0 -52
  419. package/dist/actions/build/getViteConfig.d.ts +0 -66
  420. package/dist/actions/build/normalizeBasePath.d.ts +0 -6
  421. package/dist/actions/build/renderDocument.d.ts +0 -15
  422. package/dist/actions/build/renderDocument.worker.d.ts +0 -1
  423. package/dist/actions/build/renderDocumentWorker/addTimestampImportMapScriptToHtml.d.ts +0 -6
  424. package/dist/actions/build/renderDocumentWorker/components/BasicDocument.d.ts +0 -19
  425. package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.d.ts +0 -13
  426. package/dist/actions/build/renderDocumentWorker/components/Favicons.d.ts +0 -2
  427. package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.d.ts +0 -3
  428. package/dist/actions/build/renderDocumentWorker/components/NoJavascript.d.ts +0 -3
  429. package/dist/actions/build/renderDocumentWorker/getDocumentComponent.d.ts +0 -5
  430. package/dist/actions/build/renderDocumentWorker/getDocumentHtml.d.ts +0 -8
  431. package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.d.ts +0 -21
  432. package/dist/actions/build/renderDocumentWorker/tryLoadDocumentComponent.d.ts +0 -8
  433. package/dist/actions/build/renderDocumentWorker/types.d.ts +0 -8
  434. package/dist/actions/build/shouldAutoUpdate.d.ts +0 -16
  435. package/dist/actions/build/types.d.ts +0 -13
  436. package/dist/actions/build/writeFavicons.d.ts +0 -1
  437. package/dist/actions/build/writeSanityRuntime.d.ts +0 -19
  438. package/dist/actions/build/writeWebManifest.d.ts +0 -4
  439. package/dist/actions/codemods/deskRename.d.ts +0 -2
  440. package/dist/actions/codemods/index.d.ts +0 -5
  441. package/dist/actions/codemods/partsTypeDirective.d.ts +0 -2
  442. package/dist/actions/codemods/reactIconsV3.d.ts +0 -2
  443. package/dist/actions/codemods/types.d.ts +0 -8
  444. package/dist/actions/cors/filterAndValidateOrigin.d.ts +0 -7
  445. package/dist/actions/dataset/create.d.ts +0 -49
  446. package/dist/actions/dataset/determineDatasetAclMode.d.ts +0 -37
  447. package/dist/actions/dataset/processAliasName.d.ts +0 -9
  448. package/dist/actions/dataset/validateDatasetAliasName.d.ts +0 -1
  449. package/dist/actions/dataset/validateDatasetName.d.ts +0 -13
  450. package/dist/actions/debug/gatherDebugInfo.d.ts +0 -2
  451. package/dist/actions/debug/getGlobalConfigLocation.d.ts +0 -1
  452. package/dist/actions/debug/types.d.ts +0 -30
  453. package/dist/actions/deploy/checkDir.d.ts +0 -8
  454. package/dist/actions/deploy/createStudioUserApplication.d.ts +0 -2
  455. package/dist/actions/deploy/createUserApplicationForApp.d.ts +0 -2
  456. package/dist/actions/deploy/deployApp.d.ts +0 -7
  457. package/dist/actions/deploy/deployDebug.d.ts +0 -1
  458. package/dist/actions/deploy/deployStudio.d.ts +0 -2
  459. package/dist/actions/deploy/findUserApplicationForApp.d.ts +0 -15
  460. package/dist/actions/deploy/findUserApplicationForStudio.d.ts +0 -13
  461. package/dist/actions/deploy/types.d.ts +0 -11
  462. package/dist/actions/dev/devAction.d.ts +0 -4
  463. package/dist/actions/dev/devDebug.d.ts +0 -1
  464. package/dist/actions/dev/getCoreAppUrl.d.ts +0 -5
  465. package/dist/actions/dev/getDevServerConfig.d.ts +0 -9
  466. package/dist/actions/dev/startAppDevServer.d.ts +0 -4
  467. package/dist/actions/dev/startStudioDevServer.d.ts +0 -4
  468. package/dist/actions/dev/types.d.ts +0 -10
  469. package/dist/actions/docs/normalizeDocsPath.d.ts +0 -8
  470. package/dist/actions/documents/constants.d.ts +0 -1
  471. package/dist/actions/documents/editor.d.ts +0 -11
  472. package/dist/actions/documents/types.d.ts +0 -2
  473. package/dist/actions/documents/validate.d.ts +0 -26
  474. package/dist/actions/documents/validation/reporters/index.d.ts +0 -5
  475. package/dist/actions/documents/validation/reporters/jsonReporter.d.ts +0 -2
  476. package/dist/actions/documents/validation/reporters/ndjsonReporter.d.ts +0 -2
  477. package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.d.ts +0 -10
  478. package/dist/actions/documents/validation/reporters/prettyReporter/index.d.ts +0 -1
  479. package/dist/actions/documents/validation/reporters/prettyReporter/prettyReporter.d.ts +0 -5
  480. package/dist/actions/documents/validation/reporters/prettyReporter/util.d.ts +0 -53
  481. package/dist/actions/exec/execScript.d.ts +0 -11
  482. package/dist/actions/graphql/getGraphQLAPIs.d.ts +0 -2
  483. package/dist/actions/graphql/getGraphQLAPIs.worker.d.ts +0 -1
  484. package/dist/actions/graphql/types.d.ts +0 -68
  485. package/dist/actions/hook/constants.d.ts +0 -1
  486. package/dist/actions/hook/formatFailure.d.ts +0 -4
  487. package/dist/actions/hook/types.d.ts +0 -78
  488. package/dist/actions/init/constants.d.ts +0 -1
  489. package/dist/actions/init/determineAppTemplate.d.ts +0 -9
  490. package/dist/actions/init/remoteTemplate.d.ts +0 -23
  491. package/dist/actions/manifest/SchemaIcon.d.ts +0 -9
  492. package/dist/actions/manifest/extractAppManifest.d.ts +0 -20
  493. package/dist/actions/manifest/extractManifest.d.ts +0 -14
  494. package/dist/actions/manifest/extractWorkspaceManifest.d.ts +0 -3
  495. package/dist/actions/manifest/purifyConfig.d.ts +0 -10
  496. package/dist/actions/manifest/schemaTypeHelpers.d.ts +0 -17
  497. package/dist/actions/manifest/types.d.ts +0 -119
  498. package/dist/actions/mcp/detectAvailableEditors.d.ts +0 -8
  499. package/dist/actions/mcp/getEditorsWithExistingConfig.d.ts +0 -8
  500. package/dist/actions/mcp/getEditorsWithExistingConfig.js +0 -29
  501. package/dist/actions/mcp/getEditorsWithExistingConfig.js.map +0 -1
  502. package/dist/actions/mcp/writeMCPConfig.d.ts +0 -9
  503. package/dist/actions/media/getMediaLibraryConfig.d.ts +0 -2
  504. package/dist/actions/media/importAspects.d.ts +0 -52
  505. package/dist/actions/media/importMedia.d.ts +0 -55
  506. package/dist/actions/media/importMediaDebug.d.ts +0 -1
  507. package/dist/actions/organizations/getOrganizationChoices.d.ts +0 -6
  508. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +0 -2
  509. package/dist/actions/organizations/hasProjectAttachGrant.d.ts +0 -1
  510. package/dist/actions/preview/getPreviewServerConfig.d.ts +0 -15
  511. package/dist/actions/preview/previewAction.d.ts +0 -10
  512. package/dist/actions/preview/types.d.ts +0 -2
  513. package/dist/actions/schema/deleteSchemaAction.d.ts +0 -23
  514. package/dist/actions/schema/deploySchemas.d.ts +0 -15
  515. package/dist/actions/schema/extract.d.ts +0 -7
  516. package/dist/actions/schema/extract.js +0 -38
  517. package/dist/actions/schema/extract.js.map +0 -1
  518. package/dist/actions/schema/formatSchemaValidation.d.ts +0 -3
  519. package/dist/actions/schema/listSchemas.d.ts +0 -12
  520. package/dist/actions/schema/metafile.d.ts +0 -21
  521. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -18
  522. package/dist/actions/schema/utils/debug.d.ts +0 -2
  523. package/dist/actions/schema/utils/manifestExtractor.d.ts +0 -9
  524. package/dist/actions/schema/utils/manifestReader.d.ts +0 -17
  525. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -2
  526. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +0 -29
  527. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +0 -14
  528. package/dist/actions/schema/utils/workspaceSchemaId.d.ts +0 -8
  529. package/dist/actions/schema/validateAction.d.ts +0 -11
  530. package/dist/actions/telemetry/fetchTelemetryConsent.d.ts +0 -11
  531. package/dist/actions/telemetry/fetchTelemetryConsent.js +0 -38
  532. package/dist/actions/telemetry/fetchTelemetryConsent.js.map +0 -1
  533. package/dist/actions/telemetry/getLearnMoreMessage.d.ts +0 -2
  534. package/dist/actions/telemetry/getStatusDisplay.d.ts +0 -2
  535. package/dist/actions/telemetry/getStatusMessage.d.ts +0 -2
  536. package/dist/actions/telemetry/isValidApiConsentStatus.d.ts +0 -20
  537. package/dist/actions/telemetry/isValidApiConsentStatus.js +0 -25
  538. package/dist/actions/telemetry/isValidApiConsentStatus.js.map +0 -1
  539. package/dist/actions/telemetry/resolveConsent.d.ts +0 -2
  540. package/dist/actions/telemetry/setConsent.d.ts +0 -13
  541. package/dist/actions/telemetry/telemetryDebug.d.ts +0 -1
  542. package/dist/actions/telemetry/telemetryDisclosure.d.ts +0 -1
  543. package/dist/actions/telemetry/telemetryLearnMoreMessage.d.ts +0 -2
  544. package/dist/actions/telemetry/types.d.ts +0 -14
  545. package/dist/actions/telemetry/types.js.map +0 -1
  546. package/dist/actions/tokens/constants.d.ts +0 -4
  547. package/dist/actions/tokens/types.d.ts +0 -32
  548. package/dist/actions/tokens/validateRole.d.ts +0 -9
  549. package/dist/actions/undeploy/getStudioOrAppUserApplication.d.ts +0 -9
  550. package/dist/actions/users/getMembersForProject.d.ts +0 -24
  551. package/dist/actions/users/getPendingInvitations.d.ts +0 -13
  552. package/dist/actions/users/types.d.ts +0 -39
  553. package/dist/actions/users/usersDebug.d.ts +0 -1
  554. package/dist/actions/users/validateEmail.d.ts +0 -1
  555. package/dist/actions/versions/buildPackageArray.d.ts +0 -18
  556. package/dist/actions/versions/filterSanityModules.d.ts +0 -8
  557. package/dist/actions/versions/findSanityModulesVersions.d.ts +0 -14
  558. package/dist/actions/versions/getFormatters.d.ts +0 -17
  559. package/dist/actions/versions/tryFindLatestVersion.d.ts +0 -8
  560. package/dist/actions/versions/types.d.ts +0 -14
  561. package/dist/actions/versions/versionsDebug.d.ts +0 -1
  562. package/dist/commands/backup/disable.d.ts +0 -13
  563. package/dist/commands/backup/download.d.ts +0 -21
  564. package/dist/commands/backup/enable.d.ts +0 -12
  565. package/dist/commands/backup/list.d.ts +0 -19
  566. package/dist/commands/build.d.ts +0 -18
  567. package/dist/commands/codemod.d.ts +0 -19
  568. package/dist/commands/cors/add.d.ts +0 -29
  569. package/dist/commands/cors/delete.d.ts +0 -13
  570. package/dist/commands/cors/list.d.ts +0 -9
  571. package/dist/commands/dataset/alias/create.d.ts +0 -13
  572. package/dist/commands/dataset/alias/delete.d.ts +0 -16
  573. package/dist/commands/dataset/alias/link.d.ts +0 -17
  574. package/dist/commands/dataset/alias/unlink.d.ts +0 -16
  575. package/dist/commands/dataset/copy.d.ts +0 -27
  576. package/dist/commands/dataset/create.d.ts +0 -15
  577. package/dist/commands/dataset/delete.d.ts +0 -15
  578. package/dist/commands/dataset/export.d.ts +0 -26
  579. package/dist/commands/dataset/import.d.ts +0 -1
  580. package/dist/commands/dataset/list.d.ts +0 -9
  581. package/dist/commands/dataset/visibility/get.d.ts +0 -12
  582. package/dist/commands/dataset/visibility/set.d.ts +0 -13
  583. package/dist/commands/debug.d.ts +0 -9
  584. package/dist/commands/deploy.d.ts +0 -23
  585. package/dist/commands/dev.d.ts +0 -14
  586. package/dist/commands/docs/browse.d.ts +0 -6
  587. package/dist/commands/docs/read.d.ts +0 -15
  588. package/dist/commands/docs/search.d.ts +0 -15
  589. package/dist/commands/documents/create.d.ts +0 -39
  590. package/dist/commands/documents/delete.d.ts +0 -17
  591. package/dist/commands/documents/get.d.ts +0 -16
  592. package/dist/commands/documents/query.d.ts +0 -19
  593. package/dist/commands/documents/validate.d.ts +0 -29
  594. package/dist/commands/exec.d.ts +0 -19
  595. package/dist/commands/graphql/list.d.ts +0 -9
  596. package/dist/commands/graphql/undeploy.d.ts +0 -16
  597. package/dist/commands/hook/attempt.d.ts +0 -13
  598. package/dist/commands/hook/create.d.ts +0 -9
  599. package/dist/commands/hook/delete.d.ts +0 -13
  600. package/dist/commands/hook/list.d.ts +0 -9
  601. package/dist/commands/hook/logs.d.ts +0 -19
  602. package/dist/commands/init.d.ts +0 -55
  603. package/dist/commands/install.d.ts +0 -10
  604. package/dist/commands/learn.d.ts +0 -6
  605. package/dist/commands/login.d.ts +0 -13
  606. package/dist/commands/logout.d.ts +0 -6
  607. package/dist/commands/manage.d.ts +0 -6
  608. package/dist/commands/manifest/extract.d.ts +0 -12
  609. package/dist/commands/mcp/configure.d.ts +0 -9
  610. package/dist/commands/media/create-aspect.d.ts +0 -9
  611. package/dist/commands/media/delete-aspect.d.ts +0 -16
  612. package/dist/commands/media/deploy-aspect.d.ts +0 -20
  613. package/dist/commands/media/export.d.ts +0 -21
  614. package/dist/commands/media/import.d.ts +0 -18
  615. package/dist/commands/openapi/get.d.ts +0 -17
  616. package/dist/commands/openapi/list.d.ts +0 -14
  617. package/dist/commands/preview.d.ts +0 -17
  618. package/dist/commands/projects/list.d.ts +0 -13
  619. package/dist/commands/schema/delete.d.ts +0 -16
  620. package/dist/commands/schema/deploy.d.ts +0 -16
  621. package/dist/commands/schema/extract.d.ts +0 -15
  622. package/dist/commands/schema/list.d.ts +0 -15
  623. package/dist/commands/schema/validate.d.ts +0 -15
  624. package/dist/commands/telemetry/disable.d.ts +0 -8
  625. package/dist/commands/telemetry/enable.d.ts +0 -8
  626. package/dist/commands/telemetry/status.d.ts +0 -8
  627. package/dist/commands/tokens/add.d.ts +0 -19
  628. package/dist/commands/tokens/delete.d.ts +0 -17
  629. package/dist/commands/tokens/list.d.ts +0 -12
  630. package/dist/commands/undeploy.d.ts +0 -8
  631. package/dist/commands/users/invite.d.ts +0 -17
  632. package/dist/commands/users/list.d.ts +0 -16
  633. package/dist/commands/versions.d.ts +0 -6
  634. package/dist/config/createCliConfig.d.ts +0 -73
  635. package/dist/config/defineCliConfig.d.ts +0 -3
  636. package/dist/hooks/prerun/flushTelemetry.worker.d.ts +0 -2
  637. package/dist/hooks/prerun/setupTelemetry.d.ts +0 -2
  638. package/dist/prompts/init/promptForTypescript.d.ts +0 -2
  639. package/dist/prompts/promptForDataset.d.ts +0 -17
  640. package/dist/prompts/promptForDatasetAclMode.d.ts +0 -9
  641. package/dist/prompts/promptForDatasetAliasName.d.ts +0 -4
  642. package/dist/prompts/promptForDatasetName.d.ts +0 -4
  643. package/dist/prompts/promptForMediaLibrary.d.ts +0 -15
  644. package/dist/prompts/selectDataset.d.ts +0 -3
  645. package/dist/prompts/selectMediaLibrary.d.ts +0 -5
  646. package/dist/server/devServer.d.ts +0 -24
  647. package/dist/server/gracefulServerDeath.d.ts +0 -3
  648. package/dist/server/previewServer.d.ts +0 -19
  649. package/dist/server/serverDebug.d.ts +0 -1
  650. package/dist/server/vite/plugin-sanity-basepath-redirect.d.ts +0 -2
  651. package/dist/server/vite/plugin-sanity-build-entries.d.ts +0 -9
  652. package/dist/server/vite/plugin-sanity-favicons.d.ts +0 -17
  653. package/dist/server/vite/plugin-sanity-runtime-rewrite.d.ts +0 -2
  654. package/dist/services/auth.d.ts +0 -2
  655. package/dist/services/backup.d.ts +0 -37
  656. package/dist/services/cors.d.ts +0 -23
  657. package/dist/services/datasetAliases.d.ts +0 -31
  658. package/dist/services/datasets.d.ts +0 -64
  659. package/dist/services/docs.d.ts +0 -15
  660. package/dist/services/getProjectFeatures.d.ts +0 -5
  661. package/dist/services/graphql.d.ts +0 -23
  662. package/dist/services/hooks.d.ts +0 -16
  663. package/dist/services/mcp.d.ts +0 -29
  664. package/dist/services/mediaLibraries.d.ts +0 -52
  665. package/dist/services/organizations.d.ts +0 -42
  666. package/dist/services/plans.d.ts +0 -2
  667. package/dist/services/projects.d.ts +0 -33
  668. package/dist/services/schemas.d.ts +0 -4
  669. package/dist/services/telemetry.d.ts +0 -2
  670. package/dist/services/tokens.d.ts +0 -43
  671. package/dist/services/user.d.ts +0 -15
  672. package/dist/services/userApplications.d.ts +0 -77
  673. package/dist/telemetry/cli.telemetry.d.ts +0 -20
  674. package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +0 -5
  675. package/dist/telemetry/store/cleanupOldTelemetryFiles.js +0 -30
  676. package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +0 -1
  677. package/dist/telemetry/store/createTelemetryStore.d.ts +0 -39
  678. package/dist/telemetry/store/createTelemetryStore.js +0 -95
  679. package/dist/telemetry/store/createTelemetryStore.js.map +0 -1
  680. package/dist/telemetry/store/createTraceId.d.ts +0 -10
  681. package/dist/telemetry/store/createTraceId.js +0 -10
  682. package/dist/telemetry/store/createTraceId.js.map +0 -1
  683. package/dist/telemetry/store/debug.d.ts +0 -5
  684. package/dist/telemetry/store/debug.js +0 -7
  685. package/dist/telemetry/store/debug.js.map +0 -1
  686. package/dist/telemetry/store/findTelemetryFiles.d.ts +0 -13
  687. package/dist/telemetry/store/findTelemetryFiles.js +0 -34
  688. package/dist/telemetry/store/findTelemetryFiles.js.map +0 -1
  689. package/dist/telemetry/store/flushTelemetryFiles.d.ts +0 -20
  690. package/dist/telemetry/store/flushTelemetryFiles.js +0 -107
  691. package/dist/telemetry/store/flushTelemetryFiles.js.map +0 -1
  692. package/dist/telemetry/store/generateTelemetryFilePath.d.ts +0 -17
  693. package/dist/telemetry/store/generateTelemetryFilePath.js +0 -30
  694. package/dist/telemetry/store/generateTelemetryFilePath.js.map +0 -1
  695. package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +0 -27
  696. package/dist/telemetry/store/getTelemetryBaseInfo.js +0 -34
  697. package/dist/telemetry/store/getTelemetryBaseInfo.js.map +0 -1
  698. package/dist/telemetry/store/logger.d.ts +0 -6
  699. package/dist/telemetry/store/logger.js +0 -54
  700. package/dist/telemetry/store/logger.js.map +0 -1
  701. package/dist/telemetry/store/trace.d.ts +0 -6
  702. package/dist/telemetry/store/trace.js +0 -150
  703. package/dist/telemetry/store/trace.js.map +0 -1
  704. package/dist/telemetry/utils/readNDJSON.d.ts +0 -10
  705. package/dist/telemetry/utils/readNDJSON.js +0 -18
  706. package/dist/telemetry/utils/readNDJSON.js.map +0 -1
  707. package/dist/threads/configClient.d.ts +0 -1
  708. package/dist/threads/configClient.js.map +0 -1
  709. package/dist/threads/registerBrowserEnv.d.ts +0 -1
  710. package/dist/threads/registerBrowserEnv.js.map +0 -1
  711. package/dist/threads/validateDocuments.d.ts +0 -45
  712. package/dist/threads/validateDocuments.js.map +0 -1
  713. package/dist/threads/validateSchema.d.ts +0 -35
  714. package/dist/threads/validateSchema.js.map +0 -1
  715. package/dist/types.d.ts +0 -16
  716. package/dist/util/absolutify.d.ts +0 -6
  717. package/dist/util/appId.d.ts +0 -18
  718. package/dist/util/canLaunchBrowser.d.ts +0 -1
  719. package/dist/util/cliClient.d.ts +0 -13
  720. package/dist/util/compareDependencyVersions.d.ts +0 -35
  721. package/dist/util/copyDir.d.ts +0 -20
  722. package/dist/util/detectRuntime.d.ts +0 -8
  723. package/dist/util/determineIsApp.d.ts +0 -7
  724. package/dist/util/dirIsEmptyOrNonExistent.d.ts +0 -1
  725. package/dist/util/ensureTrailingSlash.d.ts +0 -9
  726. package/dist/util/errorMessages.d.ts +0 -4
  727. package/dist/util/extractDocumentsFromNdjsonOrTarball.d.ts +0 -6
  728. package/dist/util/findNdjsonEntry.d.ts +0 -7
  729. package/dist/util/formatSize.d.ts +0 -6
  730. package/dist/util/getCliVersion.d.ts +0 -7
  731. package/dist/util/getErrorMessage.d.ts +0 -8
  732. package/dist/util/getLocalPackageVersion.d.ts +0 -9
  733. package/dist/util/getSharedServerConfig.d.ts +0 -30
  734. package/dist/util/getWorkspace.d.ts +0 -3
  735. package/dist/util/humanFileSize.d.ts +0 -1
  736. package/dist/util/importStudioConfig.d.ts +0 -1
  737. package/dist/util/isPathDirName.d.ts +0 -1
  738. package/dist/util/isSanityDocumentish.d.ts +0 -19
  739. package/dist/util/isStaging.d.ts +0 -7
  740. package/dist/util/isStaging.js +0 -10
  741. package/dist/util/isStaging.js.map +0 -1
  742. package/dist/util/loadEnv.d.ts +0 -1
  743. package/dist/util/moduleFormatUtils.d.ts +0 -3
  744. package/dist/util/packageManager/installPackages.d.ts +0 -18
  745. package/dist/util/packageManager/packageManagerChoice.d.ts +0 -29
  746. package/dist/util/packageManager/upgradePackages.d.ts +0 -17
  747. package/dist/util/parseArguments.d.ts +0 -35
  748. package/dist/util/pluralize.d.ts +0 -8
  749. package/dist/util/readModuleVersion.d.ts +0 -8
  750. package/dist/util/readPackageJson.d.ts +0 -31
  751. package/dist/util/readPackageManifest.d.ts +0 -21
  752. package/dist/util/toInt.d.ts +0 -1
  753. package/dist/util/trimHashFromVersion.d.ts +0 -5
  754. package/dist/util/uniqBy.d.ts +0 -1
  755. package/dist/util/validation/validateDocumentsUtils.d.ts +0 -12
  756. package/dist/util/warnAboutMissingAppId.d.ts +0 -7
  757. package/dist/util/workerChannels.d.ts +0 -59
  758. /package/dist/actions/{telemetry → init}/types.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/schema/extractSchema.ts"],"sourcesContent":["import {mkdir, writeFile} from 'node:fs/promises'\nimport {join, resolve} from 'node:path'\n\nimport {exit} from '@oclif/core/errors'\nimport {\n getCliTelemetry,\n type Output,\n type ProjectRootResult,\n studioWorkerTask,\n} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\nimport {type extractSchema as extractSchemaInternal} from '@sanity/schema/_internal'\nimport {type SchemaValidationProblemGroup} from '@sanity/types'\n\nimport {type ExtractSchemaCommand} from '../../commands/schema/extract'\nimport {SchemaExtractedTrace} from '../../telemetry/extractSchema.telemetry.js'\nimport {formatSchemaValidation} from './formatSchemaValidation.js'\nimport {type ExtractSchemaWorkerData} from './types.js'\nimport {schemasExtractDebug} from './utils/debug.js'\n\nconst FILENAME = 'schema.json'\n\nclass SchemaExtractionError extends Error {\n validation?: SchemaValidationProblemGroup[]\n\n constructor(message: string, validation?: SchemaValidationProblemGroup[]) {\n super(message)\n this.name = 'SchemaExtractionError'\n this.validation = validation\n }\n}\n\ninterface ExtractSchemaOptions {\n flags: ExtractSchemaCommand['flags']\n output: Output\n projectRoot: ProjectRootResult\n}\n\ninterface ExtractSchemaWorkerResult {\n schema: ReturnType<typeof extractSchemaInternal>\n type: 'success'\n}\n\n/** @internal */\ninterface ExtractSchemaWorkerError {\n error: string\n type: 'error'\n\n validation?: SchemaValidationProblemGroup[]\n}\n\ntype ExtractSchemaWorkerMessage = ExtractSchemaWorkerError | ExtractSchemaWorkerResult\n\nexport async function extractSchema(options: ExtractSchemaOptions): Promise<void> {\n const {flags, output, projectRoot} = options\n const {\n 'enforce-required-fields': enforceRequiredFields,\n format,\n path,\n workspace: workspaceName,\n } = flags\n const spin = spinner(\n enforceRequiredFields ? 'Extracting schema with enforced required fields' : 'Extracting schema',\n ).start()\n\n const workDir = projectRoot.directory\n\n const trace = getCliTelemetry().trace(SchemaExtractedTrace)\n trace.start()\n\n try {\n if (format !== 'groq-type-nodes') {\n throw new Error(`Unsupported format: \"${format}\"`)\n }\n\n const result = await studioWorkerTask<ExtractSchemaWorkerMessage>(\n new URL('extractSanitySchema.worker.js', import.meta.url),\n {\n name: 'extractSanitySchema',\n studioRootPath: workDir,\n workerData: {\n configPath: projectRoot.path,\n enforceRequiredFields,\n workDir,\n workspaceName,\n } satisfies ExtractSchemaWorkerData,\n },\n )\n\n if (result.type === 'error') {\n throw new SchemaExtractionError(result.error, result.validation)\n }\n\n const schema = result.schema\n\n trace.log({\n enforceRequiredFields,\n schemaAllTypesCount: schema.length,\n schemaDocumentTypesCount: schema.filter((type) => type.type === 'document').length,\n schemaFormat: flags.format || 'groq-type-nodes',\n schemaTypesCount: schema.filter((type) => type.type === 'type').length,\n })\n\n const outputDir = path ? resolve(join(workDir, path)) : workDir\n const outputPath = join(outputDir, FILENAME)\n await mkdir(outputDir, {recursive: true})\n\n spin.text = `Writing schema to ${outputPath}`\n\n await writeFile(outputPath, `${JSON.stringify(schema, null, 2)}\\n`)\n\n spin.succeed(\n enforceRequiredFields\n ? `Extracted schema to ${outputPath} with enforced required fields`\n : `Extracted schema to ${outputPath}`,\n )\n\n trace.complete()\n } catch (err) {\n trace.error(err)\n schemasExtractDebug('Failed to extract schema', err)\n spin.fail(\n enforceRequiredFields\n ? 'Failed to extract schema with enforced required fields'\n : 'Failed to extract schema',\n )\n\n // Display validation errors if available\n if (err instanceof SchemaExtractionError && err.validation && err.validation.length > 0) {\n output.log('')\n output.log(formatSchemaValidation(err.validation))\n }\n\n if (err instanceof Error) {\n output.error(err.message, {exit: 1})\n }\n\n exit(1)\n }\n}\n"],"names":["mkdir","writeFile","join","resolve","exit","getCliTelemetry","studioWorkerTask","spinner","SchemaExtractedTrace","formatSchemaValidation","schemasExtractDebug","FILENAME","SchemaExtractionError","Error","validation","message","name","extractSchema","options","flags","output","projectRoot","enforceRequiredFields","format","path","workspace","workspaceName","spin","start","workDir","directory","trace","result","URL","url","studioRootPath","workerData","configPath","type","error","schema","log","schemaAllTypesCount","length","schemaDocumentTypesCount","filter","schemaFormat","schemaTypesCount","outputDir","outputPath","recursive","text","JSON","stringify","succeed","complete","err","fail"],"mappings":"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"}
@@ -1,9 +1,18 @@
1
1
  import { isatty } from 'node:tty';
2
- import { chalk, logSymbols } from '@sanity/cli-core/ux';
2
+ import { styleText } from 'node:util';
3
+ import { logSymbols } from '@sanity/cli-core/ux';
3
4
  const isTty = isatty(1);
4
5
  const headers = {
5
- error: isTty ? chalk.bold(chalk.bgRed(chalk.black(' ERROR '))) : chalk.red('[ERROR]'),
6
- warning: isTty ? chalk.bold(chalk.bgYellow(chalk.black(' WARN '))) : chalk.yellow('[WARN]')
6
+ error: isTty ? styleText([
7
+ 'bold',
8
+ 'bgRed',
9
+ 'black'
10
+ ], ' ERROR ') : styleText('red', '[ERROR]'),
11
+ warning: isTty ? styleText([
12
+ 'bold',
13
+ 'bgYellow',
14
+ 'black'
15
+ ], ' WARN ') : styleText('yellow', '[WARN]')
7
16
  };
8
17
  const severityValues = {
9
18
  error: 0,
@@ -47,10 +56,13 @@ export function formatSchemaValidation(validation) {
47
56
  if (aValue === bValue) return aType.localeCompare(bType, 'en-US');
48
57
  return aValue - bValue;
49
58
  }).map(([topLevelType, groups])=>{
50
- const formattedTopLevelType = isTty ? chalk.bgWhite(chalk.black(` ${topLevelType} `)) : `[${topLevelType}]`;
59
+ const formattedTopLevelType = isTty ? styleText([
60
+ 'bgWhite',
61
+ 'black'
62
+ ], ` ${topLevelType} `) : `[${topLevelType}]`;
51
63
  const header = `${headers[getAggregatedSeverity(groups)]} ${formattedTopLevelType}`;
52
64
  const body = groups.toSorted((a, b)=>severityValues[getAggregatedSeverity(a)] - severityValues[getAggregatedSeverity(b)]).map((group)=>{
53
- const formattedPath = ` ${chalk.bold(formatPath(group.path) || '(root)')}`;
65
+ const formattedPath = ` ${styleText('bold', formatPath(group.path) || '(root)')}`;
54
66
  const formattedMessages = group.problems.toSorted((a, b)=>severityValues[a.severity] - severityValues[b.severity]).map(({ message, severity })=>` ${logSymbols[severity]} ${message}`).join('\n');
55
67
  return `${formattedPath}\n${formattedMessages}`;
56
68
  }).join('\n');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/schema/formatSchemaValidation.ts"],"sourcesContent":["import {isatty} from 'node:tty'\n\nimport {chalk, logSymbols} from '@sanity/cli-core/ux'\nimport {type SchemaValidationProblemGroup, type SchemaValidationProblemPath} from '@sanity/types'\n\nconst isTty = isatty(1)\n\nconst headers = {\n error: isTty ? chalk.bold(chalk.bgRed(chalk.black(' ERROR '))) : chalk.red('[ERROR]'),\n warning: isTty ? chalk.bold(chalk.bgYellow(chalk.black(' WARN '))) : chalk.yellow('[WARN]'),\n}\n\nconst severityValues = {error: 0, warning: 1}\n\nfunction formatPath(pathSegments: SchemaValidationProblemPath) {\n const format = (\n [curr, ...next]: SchemaValidationProblemPath,\n mode: 'array' | 'object' = 'object',\n ): string => {\n if (!curr) return ''\n if (curr.kind === 'property') return format(next, curr.name === 'of' ? 'array' : 'object')\n\n const name = curr.name || `<anonymous_${curr.type}>`\n return `${mode === 'array' ? `[${name}]` : `.${name}`}${format(next)}`\n }\n\n return format(pathSegments.slice(1)).slice(1) // removes the top-level type and leading `.`\n}\n\nexport function getAggregatedSeverity(\n groupOrGroups: SchemaValidationProblemGroup | SchemaValidationProblemGroup[],\n): 'error' | 'warning' {\n const groups = Array.isArray(groupOrGroups) ? groupOrGroups : [groupOrGroups]\n return groups\n .flatMap((group) => group.problems.map((problem) => problem.severity))\n .includes('error')\n ? 'error'\n : 'warning'\n}\n\nexport function formatSchemaValidation(validation: SchemaValidationProblemGroup[]): string {\n let unnamedTopLevelTypeCount = 0\n const validationByTypeMap: Record<string, SchemaValidationProblemGroup[]> = {}\n\n for (const group of validation) {\n const [firstSegment] = group.path\n if (!firstSegment) continue\n if (firstSegment.kind !== 'type') continue\n\n const topLevelType =\n firstSegment.name || `<unnamed_${firstSegment.type}_type_${unnamedTopLevelTypeCount++}>`\n\n if (!validationByTypeMap[topLevelType]) {\n validationByTypeMap[topLevelType] = []\n }\n\n validationByTypeMap[topLevelType].push(group)\n }\n\n const validationByType = Object.entries(validationByTypeMap)\n\n const formatted = validationByType\n .toSorted((a, b) => {\n const [aType, aGroups] = a\n const [bType, bGroups] = b\n const aValue = severityValues[getAggregatedSeverity(aGroups)]\n const bValue = severityValues[getAggregatedSeverity(bGroups)]\n if (aValue === bValue) return aType.localeCompare(bType, 'en-US')\n return aValue - bValue\n })\n .map(([topLevelType, groups]) => {\n const formattedTopLevelType = isTty\n ? chalk.bgWhite(chalk.black(` ${topLevelType} `))\n : `[${topLevelType}]`\n\n const header = `${headers[getAggregatedSeverity(groups)]} ${formattedTopLevelType}`\n const body = groups\n .toSorted(\n (a, b) =>\n severityValues[getAggregatedSeverity(a)] - severityValues[getAggregatedSeverity(b)],\n )\n .map((group) => {\n const formattedPath = ` ${chalk.bold(formatPath(group.path) || '(root)')}`\n const formattedMessages = group.problems\n .toSorted((a, b) => severityValues[a.severity] - severityValues[b.severity])\n .map(({message, severity}) => ` ${logSymbols[severity]} ${message}`)\n .join('\\n')\n\n return `${formattedPath}\\n${formattedMessages}`\n })\n .join('\\n')\n\n return `${header}\\n${body}`\n })\n .join('\\n\\n')\n\n return formatted\n}\n"],"names":["isatty","chalk","logSymbols","isTty","headers","error","bold","bgRed","black","red","warning","bgYellow","yellow","severityValues","formatPath","pathSegments","format","curr","next","mode","kind","name","type","slice","getAggregatedSeverity","groupOrGroups","groups","Array","isArray","flatMap","group","problems","map","problem","severity","includes","formatSchemaValidation","validation","unnamedTopLevelTypeCount","validationByTypeMap","firstSegment","path","topLevelType","push","validationByType","Object","entries","formatted","toSorted","a","b","aType","aGroups","bType","bGroups","aValue","bValue","localeCompare","formattedTopLevelType","bgWhite","header","body","formattedPath","formattedMessages","message","join"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/schema/formatSchemaValidation.ts"],"sourcesContent":["import {isatty} from 'node:tty'\nimport {styleText} from 'node:util'\n\nimport {logSymbols} from '@sanity/cli-core/ux'\nimport {type SchemaValidationProblemGroup, type SchemaValidationProblemPath} from '@sanity/types'\n\nconst isTty = isatty(1)\n\nconst headers = {\n error: isTty ? styleText(['bold', 'bgRed', 'black'], ' ERROR ') : styleText('red', '[ERROR]'),\n warning: isTty\n ? styleText(['bold', 'bgYellow', 'black'], ' WARN ')\n : styleText('yellow', '[WARN]'),\n}\n\nconst severityValues = {error: 0, warning: 1}\n\nfunction formatPath(pathSegments: SchemaValidationProblemPath) {\n const format = (\n [curr, ...next]: SchemaValidationProblemPath,\n mode: 'array' | 'object' = 'object',\n ): string => {\n if (!curr) return ''\n if (curr.kind === 'property') return format(next, curr.name === 'of' ? 'array' : 'object')\n\n const name = curr.name || `<anonymous_${curr.type}>`\n return `${mode === 'array' ? `[${name}]` : `.${name}`}${format(next)}`\n }\n\n return format(pathSegments.slice(1)).slice(1) // removes the top-level type and leading `.`\n}\n\nexport function getAggregatedSeverity(\n groupOrGroups: SchemaValidationProblemGroup | SchemaValidationProblemGroup[],\n): 'error' | 'warning' {\n const groups = Array.isArray(groupOrGroups) ? groupOrGroups : [groupOrGroups]\n return groups\n .flatMap((group) => group.problems.map((problem) => problem.severity))\n .includes('error')\n ? 'error'\n : 'warning'\n}\n\nexport function formatSchemaValidation(validation: SchemaValidationProblemGroup[]): string {\n let unnamedTopLevelTypeCount = 0\n const validationByTypeMap: Record<string, SchemaValidationProblemGroup[]> = {}\n\n for (const group of validation) {\n const [firstSegment] = group.path\n if (!firstSegment) continue\n if (firstSegment.kind !== 'type') continue\n\n const topLevelType =\n firstSegment.name || `<unnamed_${firstSegment.type}_type_${unnamedTopLevelTypeCount++}>`\n\n if (!validationByTypeMap[topLevelType]) {\n validationByTypeMap[topLevelType] = []\n }\n\n validationByTypeMap[topLevelType].push(group)\n }\n\n const validationByType = Object.entries(validationByTypeMap)\n\n const formatted = validationByType\n .toSorted((a, b) => {\n const [aType, aGroups] = a\n const [bType, bGroups] = b\n const aValue = severityValues[getAggregatedSeverity(aGroups)]\n const bValue = severityValues[getAggregatedSeverity(bGroups)]\n if (aValue === bValue) return aType.localeCompare(bType, 'en-US')\n return aValue - bValue\n })\n .map(([topLevelType, groups]) => {\n const formattedTopLevelType = isTty\n ? styleText(['bgWhite', 'black'], ` ${topLevelType} `)\n : `[${topLevelType}]`\n\n const header = `${headers[getAggregatedSeverity(groups)]} ${formattedTopLevelType}`\n const body = groups\n .toSorted(\n (a, b) =>\n severityValues[getAggregatedSeverity(a)] - severityValues[getAggregatedSeverity(b)],\n )\n .map((group) => {\n const formattedPath = ` ${styleText('bold', formatPath(group.path) || '(root)')}`\n const formattedMessages = group.problems\n .toSorted((a, b) => severityValues[a.severity] - severityValues[b.severity])\n .map(({message, severity}) => ` ${logSymbols[severity]} ${message}`)\n .join('\\n')\n\n return `${formattedPath}\\n${formattedMessages}`\n })\n .join('\\n')\n\n return `${header}\\n${body}`\n })\n .join('\\n\\n')\n\n return formatted\n}\n"],"names":["isatty","styleText","logSymbols","isTty","headers","error","warning","severityValues","formatPath","pathSegments","format","curr","next","mode","kind","name","type","slice","getAggregatedSeverity","groupOrGroups","groups","Array","isArray","flatMap","group","problems","map","problem","severity","includes","formatSchemaValidation","validation","unnamedTopLevelTypeCount","validationByTypeMap","firstSegment","path","topLevelType","push","validationByType","Object","entries","formatted","toSorted","a","b","aType","aGroups","bType","bGroups","aValue","bValue","localeCompare","formattedTopLevelType","header","body","formattedPath","formattedMessages","message","join"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { chalk } from '@sanity/cli-core/ux';
1
+ import { styleText } from 'node:util';
2
2
  import { getSchemas } from '../../services/schemas.js';
3
3
  import { isDefined } from '../manifest/schemaTypeHelpers.js';
4
4
  import { schemasListDebug } from './utils/debug.js';
@@ -74,10 +74,10 @@ function parseSchemas(schemas, output) {
74
74
  const error = schema.reason;
75
75
  if (error instanceof DatasetError) {
76
76
  if ('cause' in error && error.cause && typeof error.cause === 'object' && 'statusCode' in error.cause && error.cause.statusCode === 401) {
77
- output.warn(`↳ No permissions to read schema from "${error.dataset}". ${SCHEMA_PERMISSION_HELP_TEXT}:\n ${chalk.red(`${error.message}`)}`);
77
+ output.warn(`↳ No permissions to read schema from "${error.dataset}". ${SCHEMA_PERMISSION_HELP_TEXT}:\n ${styleText('red', `${error.message}`)}`);
78
78
  return [];
79
79
  }
80
- const message = chalk.red(`↳ Failed to fetch schema from "${error.dataset}":\n ${error.message}`);
80
+ const message = styleText('red', `↳ Failed to fetch schema from "${error.dataset}":\n ${error.message}`);
81
81
  output.error(message);
82
82
  } else {
83
83
  //hubris inc: given the try-catch wrapping all the full promise "this should never happen"
@@ -112,7 +112,7 @@ function printSchemas({ manifest, output, schemas }) {
112
112
  return Math.max(...widths);
113
113
  });
114
114
  const rowToString = (row)=>row.map((col, i)=>`${col}`.padEnd(maxWidths[i])).join(' ');
115
- output.log(chalk.cyan(rowToString(headings)));
115
+ output.log(styleText('cyan', rowToString(headings)));
116
116
  for (const row of rows)output.log(rowToString(row));
117
117
  }
118
118
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/schema/listSchemas.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {type ListSchemaCommand} from '../../commands/schema/list.js'\nimport {getSchemas} from '../../services/schemas.js'\nimport {isDefined} from '../manifest/schemaTypeHelpers.js'\nimport {\n type CreateManifest,\n type ManifestWorkspaceFile,\n type StoredWorkspaceSchema,\n} from '../manifest/types.js'\nimport {type SchemaStoreActionResult} from './schemaStoreTypes.js'\nimport {schemasListDebug} from './utils/debug.js'\nimport {ensureManifestExtractSatisfied} from './utils/manifestExtractor.js'\nimport {createManifestReader} from './utils/manifestReader.js'\nimport {getDatasetsOutString} from './utils/schemaStoreOutStrings.js'\nimport {SCHEMA_PERMISSION_HELP_TEXT} from './utils/schemaStoreValidation.js'\nimport {uniqByProjectIdDataset} from './utils/uniqByProjectIdDataset.js'\n\ninterface ListSchemasOptions {\n extractManifest: boolean\n json: boolean\n manifestDir: string\n output: Output\n workDir: string\n\n id?: string\n}\n\nclass DatasetError extends Error {\n public dataset: string\n public projectId: string\n constructor(args: {dataset: string; options?: ErrorOptions; projectId: string}) {\n super((args.options?.cause as {message?: string})?.message, args.options)\n this.projectId = args.projectId\n this.dataset = args.dataset\n this.name = 'DatasetError'\n }\n}\n\nexport async function listSchemas(options: ListSchemasOptions): Promise<SchemaStoreActionResult> {\n const {extractManifest, id, json, manifestDir, output, workDir} = options\n\n if (\n !(await ensureManifestExtractSatisfied({\n extractManifest,\n manifestDir,\n output,\n schemaRequired: true,\n workDir,\n }))\n ) {\n return 'failure'\n }\n\n const manifest = await createManifestReader({\n manifestDir,\n output,\n workDir,\n }).getManifest()\n const projectDatasets = uniqByProjectIdDataset(manifest.workspaces)\n const schemas = (await getDatasetSchemas(projectDatasets, id)) as unknown as (\n | PromiseFulfilledResult<StoredWorkspaceSchema>\n | PromiseRejectedResult\n )[]\n const parsedSchemas = parseSchemas(schemas, output) as unknown as StoredWorkspaceSchema[]\n\n if (parsedSchemas.length === 0) {\n const datasetString = getDatasetsOutString(projectDatasets.map((dataset) => dataset.dataset))\n\n output.error(\n id\n ? `Schema for id \"${id}\" not found in ${datasetString}`\n : `No schemas found in ${datasetString}`,\n )\n\n schemasListDebug('Error finding schema')\n return 'failure'\n }\n\n if (json) {\n output.log(`${JSON.stringify(id ? parsedSchemas[0] : parsedSchemas, null, 2)}`)\n } else {\n printSchemas({manifest, output, schemas: parsedSchemas})\n }\n\n return 'success'\n}\n\nasync function getDatasetSchemas(\n projectDatasets: ManifestWorkspaceFile[],\n id?: ListSchemaCommand['flags']['id'],\n) {\n return await Promise.allSettled(\n projectDatasets.map(async ({dataset, projectId}) => {\n try {\n return await getSchemas(dataset, projectId, id)\n } catch (error) {\n throw new DatasetError({dataset, options: {cause: error}, projectId})\n }\n }),\n )\n}\n\nfunction parseSchemas(\n schemas: (PromiseFulfilledResult<StoredWorkspaceSchema> | PromiseRejectedResult)[],\n output: Output,\n) {\n return schemas\n .map((schema) => {\n if (schema.status === 'fulfilled') return schema.value\n\n const error = schema.reason\n\n if (error instanceof DatasetError) {\n if (\n 'cause' in error &&\n error.cause &&\n typeof error.cause === 'object' &&\n 'statusCode' in error.cause &&\n error.cause.statusCode === 401\n ) {\n output.warn(\n `↳ No permissions to read schema from \"${error.dataset}\". ${\n SCHEMA_PERMISSION_HELP_TEXT\n }:\\n ${chalk.red(`${error.message}`)}`,\n )\n return []\n }\n\n const message = chalk.red(\n `↳ Failed to fetch schema from \"${error.dataset}\":\\n ${error.message}`,\n )\n output.error(message)\n } else {\n //hubris inc: given the try-catch wrapping all the full promise \"this should never happen\"\n throw error\n }\n })\n .filter((schema) => isDefined(schema))\n .flat()\n}\n\nfunction printSchemas({\n manifest,\n output,\n schemas,\n}: {\n manifest: CreateManifest\n output: Output\n schemas: StoredWorkspaceSchema[]\n}) {\n const rows = schemas\n .toSorted((a, b) => -(a._createdAt || '').localeCompare(b._createdAt || ''))\n .map(({_createdAt: createdAt, _id: id, workspace}) => {\n const workspaceData = manifest.workspaces.find((w) => w.name === workspace.name)\n\n if (!workspaceData) return\n\n return [id, workspace.name, workspaceData.dataset, workspaceData.projectId, createdAt].map(\n String,\n )\n })\n .filter((schema) => isDefined(schema))\n\n const headings = ['Id', 'Workspace', 'Dataset', 'ProjectId', 'CreatedAt']\n\n const maxWidths = headings.map((heading, i) => {\n const widths = [...rows.map((row) => row[i].length), heading.length]\n return Math.max(...widths)\n })\n\n const rowToString = (row: string[]) =>\n row.map((col, i) => `${col}`.padEnd(maxWidths[i])).join(' ')\n\n output.log(chalk.cyan(rowToString(headings)))\n for (const row of rows) output.log(rowToString(row))\n}\n"],"names":["chalk","getSchemas","isDefined","schemasListDebug","ensureManifestExtractSatisfied","createManifestReader","getDatasetsOutString","SCHEMA_PERMISSION_HELP_TEXT","uniqByProjectIdDataset","DatasetError","Error","dataset","projectId","args","options","cause","message","name","listSchemas","extractManifest","id","json","manifestDir","output","workDir","schemaRequired","manifest","getManifest","projectDatasets","workspaces","schemas","getDatasetSchemas","parsedSchemas","parseSchemas","length","datasetString","map","error","log","JSON","stringify","printSchemas","Promise","allSettled","schema","status","value","reason","statusCode","warn","red","filter","flat","rows","toSorted","a","b","_createdAt","localeCompare","createdAt","_id","workspace","workspaceData","find","w","String","headings","maxWidths","heading","i","widths","row","Math","max","rowToString","col","padEnd","join","cyan"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/schema/listSchemas.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {type Output} from '@sanity/cli-core'\n\nimport {type ListSchemaCommand} from '../../commands/schema/list.js'\nimport {getSchemas} from '../../services/schemas.js'\nimport {isDefined} from '../manifest/schemaTypeHelpers.js'\nimport {\n type CreateManifest,\n type ManifestWorkspaceFile,\n type StoredWorkspaceSchema,\n} from '../manifest/types.js'\nimport {type SchemaStoreActionResult} from './schemaStoreTypes.js'\nimport {schemasListDebug} from './utils/debug.js'\nimport {ensureManifestExtractSatisfied} from './utils/manifestExtractor.js'\nimport {createManifestReader} from './utils/manifestReader.js'\nimport {getDatasetsOutString} from './utils/schemaStoreOutStrings.js'\nimport {SCHEMA_PERMISSION_HELP_TEXT} from './utils/schemaStoreValidation.js'\nimport {uniqByProjectIdDataset} from './utils/uniqByProjectIdDataset.js'\n\ninterface ListSchemasOptions {\n extractManifest: boolean\n json: boolean\n manifestDir: string\n output: Output\n workDir: string\n\n id?: string\n}\n\nclass DatasetError extends Error {\n public dataset: string\n public projectId: string\n constructor(args: {dataset: string; options?: ErrorOptions; projectId: string}) {\n super((args.options?.cause as {message?: string})?.message, args.options)\n this.projectId = args.projectId\n this.dataset = args.dataset\n this.name = 'DatasetError'\n }\n}\n\nexport async function listSchemas(options: ListSchemasOptions): Promise<SchemaStoreActionResult> {\n const {extractManifest, id, json, manifestDir, output, workDir} = options\n\n if (\n !(await ensureManifestExtractSatisfied({\n extractManifest,\n manifestDir,\n output,\n schemaRequired: true,\n workDir,\n }))\n ) {\n return 'failure'\n }\n\n const manifest = await createManifestReader({\n manifestDir,\n output,\n workDir,\n }).getManifest()\n const projectDatasets = uniqByProjectIdDataset(manifest.workspaces)\n const schemas = (await getDatasetSchemas(projectDatasets, id)) as unknown as (\n | PromiseFulfilledResult<StoredWorkspaceSchema>\n | PromiseRejectedResult\n )[]\n const parsedSchemas = parseSchemas(schemas, output) as unknown as StoredWorkspaceSchema[]\n\n if (parsedSchemas.length === 0) {\n const datasetString = getDatasetsOutString(projectDatasets.map((dataset) => dataset.dataset))\n\n output.error(\n id\n ? `Schema for id \"${id}\" not found in ${datasetString}`\n : `No schemas found in ${datasetString}`,\n )\n\n schemasListDebug('Error finding schema')\n return 'failure'\n }\n\n if (json) {\n output.log(`${JSON.stringify(id ? parsedSchemas[0] : parsedSchemas, null, 2)}`)\n } else {\n printSchemas({manifest, output, schemas: parsedSchemas})\n }\n\n return 'success'\n}\n\nasync function getDatasetSchemas(\n projectDatasets: ManifestWorkspaceFile[],\n id?: ListSchemaCommand['flags']['id'],\n) {\n return await Promise.allSettled(\n projectDatasets.map(async ({dataset, projectId}) => {\n try {\n return await getSchemas(dataset, projectId, id)\n } catch (error) {\n throw new DatasetError({dataset, options: {cause: error}, projectId})\n }\n }),\n )\n}\n\nfunction parseSchemas(\n schemas: (PromiseFulfilledResult<StoredWorkspaceSchema> | PromiseRejectedResult)[],\n output: Output,\n) {\n return schemas\n .map((schema) => {\n if (schema.status === 'fulfilled') return schema.value\n\n const error = schema.reason\n\n if (error instanceof DatasetError) {\n if (\n 'cause' in error &&\n error.cause &&\n typeof error.cause === 'object' &&\n 'statusCode' in error.cause &&\n error.cause.statusCode === 401\n ) {\n output.warn(\n `↳ No permissions to read schema from \"${error.dataset}\". ${\n SCHEMA_PERMISSION_HELP_TEXT\n }:\\n ${styleText('red', `${error.message}`)}`,\n )\n return []\n }\n\n const message = styleText(\n 'red',\n `↳ Failed to fetch schema from \"${error.dataset}\":\\n ${error.message}`,\n )\n output.error(message)\n } else {\n //hubris inc: given the try-catch wrapping all the full promise \"this should never happen\"\n throw error\n }\n })\n .filter((schema) => isDefined(schema))\n .flat()\n}\n\nfunction printSchemas({\n manifest,\n output,\n schemas,\n}: {\n manifest: CreateManifest\n output: Output\n schemas: StoredWorkspaceSchema[]\n}) {\n const rows = schemas\n .toSorted((a, b) => -(a._createdAt || '').localeCompare(b._createdAt || ''))\n .map(({_createdAt: createdAt, _id: id, workspace}) => {\n const workspaceData = manifest.workspaces.find((w) => w.name === workspace.name)\n\n if (!workspaceData) return\n\n return [id, workspace.name, workspaceData.dataset, workspaceData.projectId, createdAt].map(\n String,\n )\n })\n .filter((schema) => isDefined(schema))\n\n const headings = ['Id', 'Workspace', 'Dataset', 'ProjectId', 'CreatedAt']\n\n const maxWidths = headings.map((heading, i) => {\n const widths = [...rows.map((row) => row[i].length), heading.length]\n return Math.max(...widths)\n })\n\n const rowToString = (row: string[]) =>\n row.map((col, i) => `${col}`.padEnd(maxWidths[i])).join(' ')\n\n output.log(styleText('cyan', rowToString(headings)))\n for (const row of rows) output.log(rowToString(row))\n}\n"],"names":["styleText","getSchemas","isDefined","schemasListDebug","ensureManifestExtractSatisfied","createManifestReader","getDatasetsOutString","SCHEMA_PERMISSION_HELP_TEXT","uniqByProjectIdDataset","DatasetError","Error","dataset","projectId","args","options","cause","message","name","listSchemas","extractManifest","id","json","manifestDir","output","workDir","schemaRequired","manifest","getManifest","projectDatasets","workspaces","schemas","getDatasetSchemas","parsedSchemas","parseSchemas","length","datasetString","map","error","log","JSON","stringify","printSchemas","Promise","allSettled","schema","status","value","reason","statusCode","warn","filter","flat","rows","toSorted","a","b","_createdAt","localeCompare","createdAt","_id","workspace","workspaceData","find","w","String","headings","maxWidths","heading","i","widths","row","Math","max","rowToString","col","padEnd","join"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/schema/metafile.ts"],"sourcesContent":["import {type SerializedSchemaDebug, type SerializedTypeDebug} from '../../threads/validateSchema.js'\n\n// This implements the metafile format of ESBuild.\ntype Metafile = {\n inputs: Record<string, MetafileInput>\n outputs: Record<string, MetafileOutput>\n}\n\ntype MetafileOutput = {\n bytes: number\n exports: []\n imports: []\n inputs: Record<string, {bytesInOutput: number}>\n}\n\ntype MetafileInput = {\n bytes: number\n format: 'csj' | 'esm'\n imports: []\n}\n\n/** Converts serialized schema debug data to ESBuild metafile format */\nexport function generateMetafile(schema: SerializedSchemaDebug): Metafile {\n const output: MetafileOutput = {\n bytes: 0,\n exports: [],\n imports: [],\n inputs: {},\n }\n\n // Generate a esbuild metafile\n const inputs: Record<string, MetafileInput> = {}\n\n function processType(path: string, entry: SerializedTypeDebug) {\n let childSize = 0\n\n if (entry.fields) {\n for (const [name, fieldEntry] of Object.entries(entry.fields)) {\n processType(`${path}/${name}`, fieldEntry)\n childSize += fieldEntry.size\n }\n }\n\n if (entry.of) {\n for (const [name, fieldEntry] of Object.entries(entry.of)) {\n processType(`${path}/${name}`, fieldEntry)\n childSize += fieldEntry.size\n }\n }\n\n const selfSize = entry.size - childSize\n\n inputs[path] = {\n bytes: selfSize,\n format: 'esm',\n imports: [],\n }\n\n output.inputs[path] = {\n bytesInOutput: selfSize,\n }\n\n output.bytes += selfSize\n }\n\n for (const [name, entry] of Object.entries(schema.types)) {\n const fakePath = `schema/${entry.extends}/${name}`\n processType(fakePath, entry)\n }\n\n for (const [name, entry] of Object.entries(schema.hoisted)) {\n const fakePath = `hoisted/${name}`\n processType(fakePath, entry)\n }\n\n return {inputs, outputs: {root: output}}\n}\n"],"names":["generateMetafile","schema","output","bytes","exports","imports","inputs","processType","path","entry","childSize","fields","name","fieldEntry","Object","entries","size","of","selfSize","format","bytesInOutput","types","fakePath","extends","hoisted","outputs","root"],"mappings":"AAqBA,qEAAqE,GACrE,OAAO,SAASA,iBAAiBC,MAA6B;IAC5D,MAAMC,SAAyB;QAC7BC,OAAO;QACPC,SAAS,EAAE;QACXC,SAAS,EAAE;QACXC,QAAQ,CAAC;IACX;IAEA,8BAA8B;IAC9B,MAAMA,SAAwC,CAAC;IAE/C,SAASC,YAAYC,IAAY,EAAEC,KAA0B;QAC3D,IAAIC,YAAY;QAEhB,IAAID,MAAME,MAAM,EAAE;YAChB,KAAK,MAAM,CAACC,MAAMC,WAAW,IAAIC,OAAOC,OAAO,CAACN,MAAME,MAAM,EAAG;gBAC7DJ,YAAY,GAAGC,KAAK,CAAC,EAAEI,MAAM,EAAEC;gBAC/BH,aAAaG,WAAWG,IAAI;YAC9B;QACF;QAEA,IAAIP,MAAMQ,EAAE,EAAE;YACZ,KAAK,MAAM,CAACL,MAAMC,WAAW,IAAIC,OAAOC,OAAO,CAACN,MAAMQ,EAAE,EAAG;gBACzDV,YAAY,GAAGC,KAAK,CAAC,EAAEI,MAAM,EAAEC;gBAC/BH,aAAaG,WAAWG,IAAI;YAC9B;QACF;QAEA,MAAME,WAAWT,MAAMO,IAAI,GAAGN;QAE9BJ,MAAM,CAACE,KAAK,GAAG;YACbL,OAAOe;YACPC,QAAQ;YACRd,SAAS,EAAE;QACb;QAEAH,OAAOI,MAAM,CAACE,KAAK,GAAG;YACpBY,eAAeF;QACjB;QAEAhB,OAAOC,KAAK,IAAIe;IAClB;IAEA,KAAK,MAAM,CAACN,MAAMH,MAAM,IAAIK,OAAOC,OAAO,CAACd,OAAOoB,KAAK,EAAG;QACxD,MAAMC,WAAW,CAAC,OAAO,EAAEb,MAAMc,OAAO,CAAC,CAAC,EAAEX,MAAM;QAClDL,YAAYe,UAAUb;IACxB;IAEA,KAAK,MAAM,CAACG,MAAMH,MAAM,IAAIK,OAAOC,OAAO,CAACd,OAAOuB,OAAO,EAAG;QAC1D,MAAMF,WAAW,CAAC,QAAQ,EAAEV,MAAM;QAClCL,YAAYe,UAAUb;IACxB;IAEA,OAAO;QAACH;QAAQmB,SAAS;YAACC,MAAMxB;QAAM;IAAC;AACzC"}
1
+ {"version":3,"sources":["../../../src/actions/schema/metafile.ts"],"sourcesContent":["import {type SerializedSchemaDebug, type SerializedTypeDebug} from './types.js'\n\n// This implements the metafile format of ESBuild.\ntype Metafile = {\n inputs: Record<string, MetafileInput>\n outputs: Record<string, MetafileOutput>\n}\n\ntype MetafileOutput = {\n bytes: number\n exports: []\n imports: []\n inputs: Record<string, {bytesInOutput: number}>\n}\n\ntype MetafileInput = {\n bytes: number\n format: 'csj' | 'esm'\n imports: []\n}\n\n/** Converts serialized schema debug data to ESBuild metafile format */\nexport function generateMetafile(schema: SerializedSchemaDebug): Metafile {\n const output: MetafileOutput = {\n bytes: 0,\n exports: [],\n imports: [],\n inputs: {},\n }\n\n // Generate a esbuild metafile\n const inputs: Record<string, MetafileInput> = {}\n\n function processType(path: string, entry: SerializedTypeDebug) {\n let childSize = 0\n\n if (entry.fields) {\n for (const [name, fieldEntry] of Object.entries(entry.fields)) {\n processType(`${path}/${name}`, fieldEntry)\n childSize += fieldEntry.size\n }\n }\n\n if (entry.of) {\n for (const [name, fieldEntry] of Object.entries(entry.of)) {\n processType(`${path}/${name}`, fieldEntry)\n childSize += fieldEntry.size\n }\n }\n\n const selfSize = entry.size - childSize\n\n inputs[path] = {\n bytes: selfSize,\n format: 'esm',\n imports: [],\n }\n\n output.inputs[path] = {\n bytesInOutput: selfSize,\n }\n\n output.bytes += selfSize\n }\n\n for (const [name, entry] of Object.entries(schema.types)) {\n const fakePath = `schema/${entry.extends}/${name}`\n processType(fakePath, entry)\n }\n\n for (const [name, entry] of Object.entries(schema.hoisted)) {\n const fakePath = `hoisted/${name}`\n processType(fakePath, entry)\n }\n\n return {inputs, outputs: {root: output}}\n}\n"],"names":["generateMetafile","schema","output","bytes","exports","imports","inputs","processType","path","entry","childSize","fields","name","fieldEntry","Object","entries","size","of","selfSize","format","bytesInOutput","types","fakePath","extends","hoisted","outputs","root"],"mappings":"AAqBA,qEAAqE,GACrE,OAAO,SAASA,iBAAiBC,MAA6B;IAC5D,MAAMC,SAAyB;QAC7BC,OAAO;QACPC,SAAS,EAAE;QACXC,SAAS,EAAE;QACXC,QAAQ,CAAC;IACX;IAEA,8BAA8B;IAC9B,MAAMA,SAAwC,CAAC;IAE/C,SAASC,YAAYC,IAAY,EAAEC,KAA0B;QAC3D,IAAIC,YAAY;QAEhB,IAAID,MAAME,MAAM,EAAE;YAChB,KAAK,MAAM,CAACC,MAAMC,WAAW,IAAIC,OAAOC,OAAO,CAACN,MAAME,MAAM,EAAG;gBAC7DJ,YAAY,GAAGC,KAAK,CAAC,EAAEI,MAAM,EAAEC;gBAC/BH,aAAaG,WAAWG,IAAI;YAC9B;QACF;QAEA,IAAIP,MAAMQ,EAAE,EAAE;YACZ,KAAK,MAAM,CAACL,MAAMC,WAAW,IAAIC,OAAOC,OAAO,CAACN,MAAMQ,EAAE,EAAG;gBACzDV,YAAY,GAAGC,KAAK,CAAC,EAAEI,MAAM,EAAEC;gBAC/BH,aAAaG,WAAWG,IAAI;YAC9B;QACF;QAEA,MAAME,WAAWT,MAAMO,IAAI,GAAGN;QAE9BJ,MAAM,CAACE,KAAK,GAAG;YACbL,OAAOe;YACPC,QAAQ;YACRd,SAAS,EAAE;QACb;QAEAH,OAAOI,MAAM,CAACE,KAAK,GAAG;YACpBY,eAAeF;QACjB;QAEAhB,OAAOC,KAAK,IAAIe;IAClB;IAEA,KAAK,MAAM,CAACN,MAAMH,MAAM,IAAIK,OAAOC,OAAO,CAACd,OAAOoB,KAAK,EAAG;QACxD,MAAMC,WAAW,CAAC,OAAO,EAAEb,MAAMc,OAAO,CAAC,CAAC,EAAEX,MAAM;QAClDL,YAAYe,UAAUb;IACxB;IAEA,KAAK,MAAM,CAACG,MAAMH,MAAM,IAAIK,OAAOC,OAAO,CAACd,OAAOuB,OAAO,EAAG;QAC1D,MAAMF,WAAW,CAAC,QAAQ,EAAEV,MAAM;QAClCL,YAAYe,UAAUb;IACxB;IAEA,OAAO;QAACH;QAAQmB,SAAS;YAACC,MAAMxB;QAAM;IAAC;AACzC"}
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ export const extractSchemaWorkerData = z.object({
3
+ configPath: z.string(),
4
+ enforceRequiredFields: z.boolean(),
5
+ workDir: z.string(),
6
+ workspaceName: z.string().optional()
7
+ });
8
+
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/schema/types.ts"],"sourcesContent":["import {z} from 'zod'\n\nexport const extractSchemaWorkerData = z.object({\n configPath: z.string(),\n enforceRequiredFields: z.boolean(),\n workDir: z.string(),\n workspaceName: z.string().optional(),\n})\n\nexport type ExtractSchemaWorkerData = z.infer<typeof extractSchemaWorkerData>\n\n/**\n * Contains debug information about the serialized schema.\n *\n * @internal\n **/\nexport type SerializedSchemaDebug = {\n hoisted: Record<string, SerializedTypeDebug>\n parent?: SerializedSchemaDebug\n size: number\n types: Record<string, SerializedTypeDebug>\n}\n\n/**\n * Contains debug information about a serialized type.\n *\n * @internal\n **/\nexport type SerializedTypeDebug = {\n extends: string\n fields?: Record<string, SerializedTypeDebug>\n of?: Record<string, SerializedTypeDebug>\n size: number\n}\n"],"names":["z","extractSchemaWorkerData","object","configPath","string","enforceRequiredFields","boolean","workDir","workspaceName","optional"],"mappings":"AAAA,SAAQA,CAAC,QAAO,MAAK;AAErB,OAAO,MAAMC,0BAA0BD,EAAEE,MAAM,CAAC;IAC9CC,YAAYH,EAAEI,MAAM;IACpBC,uBAAuBL,EAAEM,OAAO;IAChCC,SAASP,EAAEI,MAAM;IACjBI,eAAeR,EAAEI,MAAM,GAAGK,QAAQ;AACpC,GAAE"}
@@ -1,5 +1,6 @@
1
1
  import { subdebug } from '@sanity/cli-core';
2
2
  export const schemasDeployDebug = subdebug('schemas:deploy');
3
3
  export const schemasListDebug = subdebug('schemas:list');
4
+ export const schemasExtractDebug = subdebug('schemas:extract');
4
5
 
5
6
  //# sourceMappingURL=debug.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/actions/schema/utils/debug.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core'\n\nexport const schemasDeployDebug = subdebug('schemas:deploy')\nexport const schemasListDebug = subdebug('schemas:list')\n"],"names":["subdebug","schemasDeployDebug","schemasListDebug"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,mBAAkB;AAEzC,OAAO,MAAMC,qBAAqBD,SAAS,kBAAiB;AAC5D,OAAO,MAAME,mBAAmBF,SAAS,gBAAe"}
1
+ {"version":3,"sources":["../../../../src/actions/schema/utils/debug.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core'\n\nexport const schemasDeployDebug = subdebug('schemas:deploy')\nexport const schemasListDebug = subdebug('schemas:list')\nexport const schemasExtractDebug = subdebug('schemas:extract')\n"],"names":["subdebug","schemasDeployDebug","schemasListDebug","schemasExtractDebug"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,mBAAkB;AAEzC,OAAO,MAAMC,qBAAqBD,SAAS,kBAAiB;AAC5D,OAAO,MAAME,mBAAmBF,SAAS,gBAAe;AACxD,OAAO,MAAMG,sBAAsBH,SAAS,mBAAkB"}
@@ -0,0 +1,12 @@
1
+ import { resolveLocalPackage } from '@sanity/cli-core';
2
+ /**
3
+ * Extracts validation problem groups from a SchemaError.
4
+ */ export async function extractValidationFromSchemaError(error, workDir) {
5
+ const { SchemaError } = await resolveLocalPackage('sanity', workDir);
6
+ if (error instanceof SchemaError) {
7
+ return error.schema._validation;
8
+ }
9
+ return undefined;
10
+ }
11
+
12
+ //# sourceMappingURL=extractValidationFromSchemaError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/actions/schema/utils/extractValidationFromSchemaError.ts"],"sourcesContent":["import {resolveLocalPackage} from '@sanity/cli-core'\nimport {type SchemaValidationProblemGroup} from '@sanity/types'\n\n/**\n * Extracts validation problem groups from a SchemaError.\n */\nexport async function extractValidationFromSchemaError(\n error: unknown,\n workDir: string,\n): Promise<SchemaValidationProblemGroup[] | undefined> {\n const {SchemaError} = await resolveLocalPackage<typeof import('sanity')>('sanity', workDir)\n\n if (error instanceof SchemaError) {\n return error.schema._validation\n }\n\n return undefined\n}\n"],"names":["resolveLocalPackage","extractValidationFromSchemaError","error","workDir","SchemaError","schema","_validation","undefined"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,mBAAkB;AAGpD;;CAEC,GACD,OAAO,eAAeC,iCACpBC,KAAc,EACdC,OAAe;IAEf,MAAM,EAACC,WAAW,EAAC,GAAG,MAAMJ,oBAA6C,UAAUG;IAEnF,IAAID,iBAAiBE,aAAa;QAChC,OAAOF,MAAMG,MAAM,CAACC,WAAW;IACjC;IAEA,OAAOC;AACT"}
@@ -1,4 +1,4 @@
1
- import { chalk } from '@sanity/cli-core/ux';
1
+ import { styleText } from 'node:util';
2
2
  import { extractManifestSafe } from '../../manifest/extractManifest.js';
3
3
  import { FlagValidationError } from './schemaStoreValidation.js';
4
4
  export async function ensureManifestExtractSatisfied(args) {
@@ -24,7 +24,7 @@ export async function ensureManifestExtractSatisfied(args) {
24
24
  if (schemaRequired || err instanceof FlagValidationError) {
25
25
  throw err;
26
26
  } else {
27
- output.log(chalk.gray(`↳ Failed to extract manifest:\n ${err.message}`));
27
+ output.log(styleText('gray', `↳ Failed to extract manifest:\n ${err.message}`));
28
28
  return false;
29
29
  }
30
30
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/actions/schema/utils/manifestExtractor.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {extractManifestSafe} from '../../manifest/extractManifest.js'\nimport {FlagValidationError} from './schemaStoreValidation.js'\n\nexport async function ensureManifestExtractSatisfied(args: {\n extractManifest: boolean\n manifestDir: string\n manifestSafe?: boolean\n output: Output\n schemaRequired?: boolean\n workDir: string\n}) {\n const {extractManifest, manifestDir, manifestSafe, output, schemaRequired, workDir} = args\n if (!extractManifest) {\n return true\n }\n try {\n // a successful manifest extract will write a new manifest file, which manifestReader will then read from disk\n const error = await extractManifestSafe({\n flags: {json: false, path: manifestDir},\n output,\n workDir,\n })\n\n if (!manifestSafe && error) {\n throw error\n }\n\n return true\n } catch (err) {\n if (schemaRequired || err instanceof FlagValidationError) {\n throw err\n } else {\n output.log(chalk.gray(`↳ Failed to extract manifest:\\n ${err.message}`))\n return false\n }\n }\n}\n"],"names":["chalk","extractManifestSafe","FlagValidationError","ensureManifestExtractSatisfied","args","extractManifest","manifestDir","manifestSafe","output","schemaRequired","workDir","error","flags","json","path","err","log","gray","message"],"mappings":"AACA,SAAQA,KAAK,QAAO,sBAAqB;AAEzC,SAAQC,mBAAmB,QAAO,oCAAmC;AACrE,SAAQC,mBAAmB,QAAO,6BAA4B;AAE9D,OAAO,eAAeC,+BAA+BC,IAOpD;IACC,MAAM,EAACC,eAAe,EAAEC,WAAW,EAAEC,YAAY,EAAEC,MAAM,EAAEC,cAAc,EAAEC,OAAO,EAAC,GAAGN;IACtF,IAAI,CAACC,iBAAiB;QACpB,OAAO;IACT;IACA,IAAI;QACF,8GAA8G;QAC9G,MAAMM,QAAQ,MAAMV,oBAAoB;YACtCW,OAAO;gBAACC,MAAM;gBAAOC,MAAMR;YAAW;YACtCE;YACAE;QACF;QAEA,IAAI,CAACH,gBAAgBI,OAAO;YAC1B,MAAMA;QACR;QAEA,OAAO;IACT,EAAE,OAAOI,KAAK;QACZ,IAAIN,kBAAkBM,eAAeb,qBAAqB;YACxD,MAAMa;QACR,OAAO;YACLP,OAAOQ,GAAG,CAAChB,MAAMiB,IAAI,CAAC,CAAC,iCAAiC,EAAEF,IAAIG,OAAO,EAAE;YACvE,OAAO;QACT;IACF;AACF"}
1
+ {"version":3,"sources":["../../../../src/actions/schema/utils/manifestExtractor.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {type Output} from '@sanity/cli-core'\n\nimport {extractManifestSafe} from '../../manifest/extractManifest.js'\nimport {FlagValidationError} from './schemaStoreValidation.js'\n\nexport async function ensureManifestExtractSatisfied(args: {\n extractManifest: boolean\n manifestDir: string\n manifestSafe?: boolean\n output: Output\n schemaRequired?: boolean\n workDir: string\n}) {\n const {extractManifest, manifestDir, manifestSafe, output, schemaRequired, workDir} = args\n if (!extractManifest) {\n return true\n }\n try {\n // a successful manifest extract will write a new manifest file, which manifestReader will then read from disk\n const error = await extractManifestSafe({\n flags: {json: false, path: manifestDir},\n output,\n workDir,\n })\n\n if (!manifestSafe && error) {\n throw error\n }\n\n return true\n } catch (err) {\n if (schemaRequired || err instanceof FlagValidationError) {\n throw err\n } else {\n output.log(styleText('gray', `↳ Failed to extract manifest:\\n ${err.message}`))\n return false\n }\n }\n}\n"],"names":["styleText","extractManifestSafe","FlagValidationError","ensureManifestExtractSatisfied","args","extractManifest","manifestDir","manifestSafe","output","schemaRequired","workDir","error","flags","json","path","err","log","message"],"mappings":"AAAA,SAAQA,SAAS,QAAO,YAAW;AAInC,SAAQC,mBAAmB,QAAO,oCAAmC;AACrE,SAAQC,mBAAmB,QAAO,6BAA4B;AAE9D,OAAO,eAAeC,+BAA+BC,IAOpD;IACC,MAAM,EAACC,eAAe,EAAEC,WAAW,EAAEC,YAAY,EAAEC,MAAM,EAAEC,cAAc,EAAEC,OAAO,EAAC,GAAGN;IACtF,IAAI,CAACC,iBAAiB;QACpB,OAAO;IACT;IACA,IAAI;QACF,8GAA8G;QAC9G,MAAMM,QAAQ,MAAMV,oBAAoB;YACtCW,OAAO;gBAACC,MAAM;gBAAOC,MAAMR;YAAW;YACtCE;YACAE;QACF;QAEA,IAAI,CAACH,gBAAgBI,OAAO;YAC1B,MAAMA;QACR;QAEA,OAAO;IACT,EAAE,OAAOI,KAAK;QACZ,IAAIN,kBAAkBM,eAAeb,qBAAqB;YACxD,MAAMa;QACR,OAAO;YACLP,OAAOQ,GAAG,CAAChB,UAAU,QAAQ,CAAC,iCAAiC,EAAEe,IAAIE,OAAO,EAAE;YAC9E,OAAO;QACT;IACF;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { readFile, stat } from 'node:fs/promises';
2
2
  import path, { join, resolve } from 'node:path';
3
- import { chalk } from '@sanity/cli-core/ux';
3
+ import { styleText } from 'node:util';
4
4
  import { MANIFEST_FILENAME } from '../../manifest/extractManifest.js';
5
5
  /**
6
6
  * The manifest reader will try to read manifest and workspace schema files _once_ and cache a successful result.
@@ -18,7 +18,7 @@ import { MANIFEST_FILENAME } from '../../manifest/extractManifest.js';
18
18
  if (!result) {
19
19
  throw new Error(`Manifest does not exist at ${manifestFile}. To create the manifest file, omit --no-extract-manifest or run "sanity manifest extract" first.`);
20
20
  }
21
- output.log(chalk.gray(`↳ Read manifest from ${manifestFile} (last modified: ${result.lastModified})`));
21
+ output.log(styleText('gray', `↳ Read manifest from ${manifestFile} (last modified: ${result.lastModified})`));
22
22
  parsedManifest = result;
23
23
  return result.parsedJson;
24
24
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/actions/schema/utils/manifestReader.ts"],"sourcesContent":["import {type Stats} from 'node:fs'\nimport {readFile, stat} from 'node:fs/promises'\nimport path, {join, resolve} from 'node:path'\n\nimport {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {MANIFEST_FILENAME} from '../../manifest/extractManifest.js'\nimport {type CreateManifest, type ManifestSchemaType} from '../../manifest/types.js'\n\ntype CreateManifestReaderFactory = (args: {\n manifestDir: string\n output: Output\n workDir: string\n}) => CreateManifestReader\n\nexport interface CreateManifestReader {\n getManifest: () => Promise<CreateManifest>\n getWorkspaceSchema: (workspaceName: string) => Promise<ManifestSchemaType[]>\n}\n\ninterface JsonFileParseSuccess<T> {\n lastModified: string\n parsedJson: T\n path: string\n}\n\n/**\n * The manifest reader will try to read manifest and workspace schema files _once_ and cache a successful result.\n * If you need to re-read the manifest from disk, create a new instance.\n */\nexport const createManifestReader: CreateManifestReaderFactory = ({\n manifestDir,\n output,\n workDir,\n}) => {\n let parsedManifest: JsonFileParseSuccess<CreateManifest>\n const parsedWorkspaces: Record<string, JsonFileParseSuccess<ManifestSchemaType[]> | undefined> =\n {}\n\n const getManifest: CreateManifestReader['getManifest'] = async () => {\n if (parsedManifest) {\n return parsedManifest?.parsedJson\n }\n\n const staticPath = resolve(join(workDir, manifestDir))\n const manifestFile = path.join(staticPath, MANIFEST_FILENAME)\n\n const result = await parseJsonFile<CreateManifest>(manifestFile)\n if (!result) {\n throw new Error(\n `Manifest does not exist at ${manifestFile}. To create the manifest file, omit --no-extract-manifest or run \"sanity manifest extract\" first.`,\n )\n }\n\n output.log(\n chalk.gray(`↳ Read manifest from ${manifestFile} (last modified: ${result.lastModified})`),\n )\n\n parsedManifest = result\n return result.parsedJson\n }\n\n const getWorkspaceSchema: CreateManifestReader['getWorkspaceSchema'] = async (workspaceName) => {\n if (parsedWorkspaces[workspaceName]) {\n return parsedWorkspaces[workspaceName]?.parsedJson\n }\n const manifest = await getManifest()\n if (!manifest) {\n throw new Error('Manifest is required to read workspace schema.')\n }\n\n const workspaceManifest = manifest.workspaces.find(\n (workspace) => workspace.name === workspaceName,\n )\n\n if (!workspaceManifest) {\n throw new Error(`No workspace named \"${workspaceName}\" found in manifest.`)\n }\n\n const workspaceSchemaFile = path.join(manifestDir, workspaceManifest.schema)\n const result = await parseJsonFile<ManifestSchemaType[]>(workspaceSchemaFile)\n if (!result) {\n throw new Error(`Workspace schema file at \"${workspaceSchemaFile}\" does not exist.`)\n }\n parsedWorkspaces[workspaceName] = result\n return result.parsedJson\n }\n return {\n getManifest,\n getWorkspaceSchema,\n }\n}\n\nasync function parseJsonFile<T>(filePath: string): Promise<JsonFileParseSuccess<T> | undefined> {\n let stats: Stats\n try {\n stats = await stat(filePath)\n } catch {\n // file does not exist\n return undefined\n }\n const content = await readFile(filePath, 'utf8')\n const lastModified = stats.mtime.toISOString()\n const json = JSON.parse(content) as T\n if (!json) {\n throw new Error(`JSON file \"${filePath}\" was empty.`)\n }\n return {\n lastModified,\n parsedJson: json,\n path: filePath,\n }\n}\n"],"names":["readFile","stat","path","join","resolve","chalk","MANIFEST_FILENAME","createManifestReader","manifestDir","output","workDir","parsedManifest","parsedWorkspaces","getManifest","parsedJson","staticPath","manifestFile","result","parseJsonFile","Error","log","gray","lastModified","getWorkspaceSchema","workspaceName","manifest","workspaceManifest","workspaces","find","workspace","name","workspaceSchemaFile","schema","filePath","stats","undefined","content","mtime","toISOString","json","JSON","parse"],"mappings":"AACA,SAAQA,QAAQ,EAAEC,IAAI,QAAO,mBAAkB;AAC/C,OAAOC,QAAOC,IAAI,EAAEC,OAAO,QAAO,YAAW;AAG7C,SAAQC,KAAK,QAAO,sBAAqB;AAEzC,SAAQC,iBAAiB,QAAO,oCAAmC;AAoBnE;;;CAGC,GACD,OAAO,MAAMC,uBAAoD,CAAC,EAChEC,WAAW,EACXC,MAAM,EACNC,OAAO,EACR;IACC,IAAIC;IACJ,MAAMC,mBACJ,CAAC;IAEH,MAAMC,cAAmD;QACvD,IAAIF,gBAAgB;YAClB,OAAOA,gBAAgBG;QACzB;QAEA,MAAMC,aAAaX,QAAQD,KAAKO,SAASF;QACzC,MAAMQ,eAAed,KAAKC,IAAI,CAACY,YAAYT;QAE3C,MAAMW,SAAS,MAAMC,cAA8BF;QACnD,IAAI,CAACC,QAAQ;YACX,MAAM,IAAIE,MACR,CAAC,2BAA2B,EAAEH,aAAa,iGAAiG,CAAC;QAEjJ;QAEAP,OAAOW,GAAG,CACRf,MAAMgB,IAAI,CAAC,CAAC,qBAAqB,EAAEL,aAAa,iBAAiB,EAAEC,OAAOK,YAAY,CAAC,CAAC,CAAC;QAG3FX,iBAAiBM;QACjB,OAAOA,OAAOH,UAAU;IAC1B;IAEA,MAAMS,qBAAiE,OAAOC;QAC5E,IAAIZ,gBAAgB,CAACY,cAAc,EAAE;YACnC,OAAOZ,gBAAgB,CAACY,cAAc,EAAEV;QAC1C;QACA,MAAMW,WAAW,MAAMZ;QACvB,IAAI,CAACY,UAAU;YACb,MAAM,IAAIN,MAAM;QAClB;QAEA,MAAMO,oBAAoBD,SAASE,UAAU,CAACC,IAAI,CAChD,CAACC,YAAcA,UAAUC,IAAI,KAAKN;QAGpC,IAAI,CAACE,mBAAmB;YACtB,MAAM,IAAIP,MAAM,CAAC,oBAAoB,EAAEK,cAAc,oBAAoB,CAAC;QAC5E;QAEA,MAAMO,sBAAsB7B,KAAKC,IAAI,CAACK,aAAakB,kBAAkBM,MAAM;QAC3E,MAAMf,SAAS,MAAMC,cAAoCa;QACzD,IAAI,CAACd,QAAQ;YACX,MAAM,IAAIE,MAAM,CAAC,0BAA0B,EAAEY,oBAAoB,iBAAiB,CAAC;QACrF;QACAnB,gBAAgB,CAACY,cAAc,GAAGP;QAClC,OAAOA,OAAOH,UAAU;IAC1B;IACA,OAAO;QACLD;QACAU;IACF;AACF,EAAC;AAED,eAAeL,cAAiBe,QAAgB;IAC9C,IAAIC;IACJ,IAAI;QACFA,QAAQ,MAAMjC,KAAKgC;IACrB,EAAE,OAAM;QACN,sBAAsB;QACtB,OAAOE;IACT;IACA,MAAMC,UAAU,MAAMpC,SAASiC,UAAU;IACzC,MAAMX,eAAeY,MAAMG,KAAK,CAACC,WAAW;IAC5C,MAAMC,OAAOC,KAAKC,KAAK,CAACL;IACxB,IAAI,CAACG,MAAM;QACT,MAAM,IAAIpB,MAAM,CAAC,WAAW,EAAEc,SAAS,YAAY,CAAC;IACtD;IACA,OAAO;QACLX;QACAR,YAAYyB;QACZrC,MAAM+B;IACR;AACF"}
1
+ {"version":3,"sources":["../../../../src/actions/schema/utils/manifestReader.ts"],"sourcesContent":["import {type Stats} from 'node:fs'\nimport {readFile, stat} from 'node:fs/promises'\nimport path, {join, resolve} from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {type Output} from '@sanity/cli-core'\n\nimport {MANIFEST_FILENAME} from '../../manifest/extractManifest.js'\nimport {type CreateManifest, type ManifestSchemaType} from '../../manifest/types.js'\n\ntype CreateManifestReaderFactory = (args: {\n manifestDir: string\n output: Output\n workDir: string\n}) => CreateManifestReader\n\nexport interface CreateManifestReader {\n getManifest: () => Promise<CreateManifest>\n getWorkspaceSchema: (workspaceName: string) => Promise<ManifestSchemaType[]>\n}\n\ninterface JsonFileParseSuccess<T> {\n lastModified: string\n parsedJson: T\n path: string\n}\n\n/**\n * The manifest reader will try to read manifest and workspace schema files _once_ and cache a successful result.\n * If you need to re-read the manifest from disk, create a new instance.\n */\nexport const createManifestReader: CreateManifestReaderFactory = ({\n manifestDir,\n output,\n workDir,\n}) => {\n let parsedManifest: JsonFileParseSuccess<CreateManifest>\n const parsedWorkspaces: Record<string, JsonFileParseSuccess<ManifestSchemaType[]> | undefined> =\n {}\n\n const getManifest: CreateManifestReader['getManifest'] = async () => {\n if (parsedManifest) {\n return parsedManifest?.parsedJson\n }\n\n const staticPath = resolve(join(workDir, manifestDir))\n const manifestFile = path.join(staticPath, MANIFEST_FILENAME)\n\n const result = await parseJsonFile<CreateManifest>(manifestFile)\n if (!result) {\n throw new Error(\n `Manifest does not exist at ${manifestFile}. To create the manifest file, omit --no-extract-manifest or run \"sanity manifest extract\" first.`,\n )\n }\n\n output.log(\n styleText(\n 'gray',\n `↳ Read manifest from ${manifestFile} (last modified: ${result.lastModified})`,\n ),\n )\n\n parsedManifest = result\n return result.parsedJson\n }\n\n const getWorkspaceSchema: CreateManifestReader['getWorkspaceSchema'] = async (workspaceName) => {\n if (parsedWorkspaces[workspaceName]) {\n return parsedWorkspaces[workspaceName]?.parsedJson\n }\n const manifest = await getManifest()\n if (!manifest) {\n throw new Error('Manifest is required to read workspace schema.')\n }\n\n const workspaceManifest = manifest.workspaces.find(\n (workspace) => workspace.name === workspaceName,\n )\n\n if (!workspaceManifest) {\n throw new Error(`No workspace named \"${workspaceName}\" found in manifest.`)\n }\n\n const workspaceSchemaFile = path.join(manifestDir, workspaceManifest.schema)\n const result = await parseJsonFile<ManifestSchemaType[]>(workspaceSchemaFile)\n if (!result) {\n throw new Error(`Workspace schema file at \"${workspaceSchemaFile}\" does not exist.`)\n }\n parsedWorkspaces[workspaceName] = result\n return result.parsedJson\n }\n return {\n getManifest,\n getWorkspaceSchema,\n }\n}\n\nasync function parseJsonFile<T>(filePath: string): Promise<JsonFileParseSuccess<T> | undefined> {\n let stats: Stats\n try {\n stats = await stat(filePath)\n } catch {\n // file does not exist\n return undefined\n }\n const content = await readFile(filePath, 'utf8')\n const lastModified = stats.mtime.toISOString()\n const json = JSON.parse(content) as T\n if (!json) {\n throw new Error(`JSON file \"${filePath}\" was empty.`)\n }\n return {\n lastModified,\n parsedJson: json,\n path: filePath,\n }\n}\n"],"names":["readFile","stat","path","join","resolve","styleText","MANIFEST_FILENAME","createManifestReader","manifestDir","output","workDir","parsedManifest","parsedWorkspaces","getManifest","parsedJson","staticPath","manifestFile","result","parseJsonFile","Error","log","lastModified","getWorkspaceSchema","workspaceName","manifest","workspaceManifest","workspaces","find","workspace","name","workspaceSchemaFile","schema","filePath","stats","undefined","content","mtime","toISOString","json","JSON","parse"],"mappings":"AACA,SAAQA,QAAQ,EAAEC,IAAI,QAAO,mBAAkB;AAC/C,OAAOC,QAAOC,IAAI,EAAEC,OAAO,QAAO,YAAW;AAC7C,SAAQC,SAAS,QAAO,YAAW;AAInC,SAAQC,iBAAiB,QAAO,oCAAmC;AAoBnE;;;CAGC,GACD,OAAO,MAAMC,uBAAoD,CAAC,EAChEC,WAAW,EACXC,MAAM,EACNC,OAAO,EACR;IACC,IAAIC;IACJ,MAAMC,mBACJ,CAAC;IAEH,MAAMC,cAAmD;QACvD,IAAIF,gBAAgB;YAClB,OAAOA,gBAAgBG;QACzB;QAEA,MAAMC,aAAaX,QAAQD,KAAKO,SAASF;QACzC,MAAMQ,eAAed,KAAKC,IAAI,CAACY,YAAYT;QAE3C,MAAMW,SAAS,MAAMC,cAA8BF;QACnD,IAAI,CAACC,QAAQ;YACX,MAAM,IAAIE,MACR,CAAC,2BAA2B,EAAEH,aAAa,iGAAiG,CAAC;QAEjJ;QAEAP,OAAOW,GAAG,CACRf,UACE,QACA,CAAC,qBAAqB,EAAEW,aAAa,iBAAiB,EAAEC,OAAOI,YAAY,CAAC,CAAC,CAAC;QAIlFV,iBAAiBM;QACjB,OAAOA,OAAOH,UAAU;IAC1B;IAEA,MAAMQ,qBAAiE,OAAOC;QAC5E,IAAIX,gBAAgB,CAACW,cAAc,EAAE;YACnC,OAAOX,gBAAgB,CAACW,cAAc,EAAET;QAC1C;QACA,MAAMU,WAAW,MAAMX;QACvB,IAAI,CAACW,UAAU;YACb,MAAM,IAAIL,MAAM;QAClB;QAEA,MAAMM,oBAAoBD,SAASE,UAAU,CAACC,IAAI,CAChD,CAACC,YAAcA,UAAUC,IAAI,KAAKN;QAGpC,IAAI,CAACE,mBAAmB;YACtB,MAAM,IAAIN,MAAM,CAAC,oBAAoB,EAAEI,cAAc,oBAAoB,CAAC;QAC5E;QAEA,MAAMO,sBAAsB5B,KAAKC,IAAI,CAACK,aAAaiB,kBAAkBM,MAAM;QAC3E,MAAMd,SAAS,MAAMC,cAAoCY;QACzD,IAAI,CAACb,QAAQ;YACX,MAAM,IAAIE,MAAM,CAAC,0BAA0B,EAAEW,oBAAoB,iBAAiB,CAAC;QACrF;QACAlB,gBAAgB,CAACW,cAAc,GAAGN;QAClC,OAAOA,OAAOH,UAAU;IAC1B;IACA,OAAO;QACLD;QACAS;IACF;AACF,EAAC;AAED,eAAeJ,cAAiBc,QAAgB;IAC9C,IAAIC;IACJ,IAAI;QACFA,QAAQ,MAAMhC,KAAK+B;IACrB,EAAE,OAAM;QACN,sBAAsB;QACtB,OAAOE;IACT;IACA,MAAMC,UAAU,MAAMnC,SAASgC,UAAU;IACzC,MAAMX,eAAeY,MAAMG,KAAK,CAACC,WAAW;IAC5C,MAAMC,OAAOC,KAAKC,KAAK,CAACL;IACxB,IAAI,CAACG,MAAM;QACT,MAAM,IAAInB,MAAM,CAAC,WAAW,EAAEa,SAAS,YAAY,CAAC;IACtD;IACA,OAAO;QACLX;QACAP,YAAYwB;QACZpC,MAAM8B;IACR;AACF"}
@@ -1,25 +1,17 @@
1
1
  import { writeFileSync } from 'node:fs';
2
- import path from 'node:path';
3
- import { Worker } from 'node:worker_threads';
2
+ import { studioWorkerTask } from '@sanity/cli-core';
4
3
  import { logSymbols, spinner } from '@sanity/cli-core/ux';
5
- import { readPackageUp } from 'read-package-up';
6
4
  import { formatSchemaValidation, getAggregatedSeverity } from './formatSchemaValidation.js';
7
5
  import { generateMetafile } from './metafile.js';
8
6
  export async function validateAction(options) {
9
7
  const { debugMetafilePath, format, level, output, workDir, workspace } = options;
10
- const rootPkgPath = (await readPackageUp({
11
- cwd: import.meta.dirname
12
- }))?.path;
13
- if (!rootPkgPath) {
14
- throw new Error('Could not find root directory for `sanity` package');
15
- }
16
- const workerPath = path.join(path.dirname(rootPkgPath), 'dist', 'threads', 'validateSchema.js');
17
8
  let spin;
18
9
  if (format === 'pretty') {
19
10
  spin = spinner(workspace ? `Validating schema from workspace '${workspace}'…` : 'Validating schema…').start();
20
11
  }
21
- const worker = new Worker(workerPath, {
22
- env: process.env,
12
+ const { serializedDebug, validation } = await studioWorkerTask(new URL('validateSchema.worker.js', import.meta.url), {
13
+ name: 'validateSchema',
14
+ studioRootPath: workDir,
23
15
  workerData: {
24
16
  debugSerialize: Boolean(debugMetafilePath),
25
17
  level,
@@ -27,10 +19,6 @@ export async function validateAction(options) {
27
19
  workspace: workspace
28
20
  }
29
21
  });
30
- const { serializedDebug, validation } = await new Promise((resolve, reject)=>{
31
- worker.addListener('message', resolve);
32
- worker.addListener('error', reject);
33
- });
34
22
  const problems = validation.flatMap((group)=>group.problems);
35
23
  const errorCount = problems.filter((problem)=>problem.severity === 'error').length;
36
24
  const warningCount = problems.filter((problem)=>problem.severity === 'warning').length;
@@ -75,7 +63,9 @@ export async function validateAction(options) {
75
63
  }
76
64
  }
77
65
  }
78
- process.exitCode = didFail ? 1 : 0;
66
+ if (didFail) {
67
+ throw new Error('Schema validation failed');
68
+ }
79
69
  }
80
70
 
81
71
  //# sourceMappingURL=validateAction.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/schema/validateAction.ts"],"sourcesContent":["import {writeFileSync} from 'node:fs'\nimport path from 'node:path'\nimport {Worker} from 'node:worker_threads'\n\nimport {Output} from '@sanity/cli-core'\nimport {logSymbols, spinner} from '@sanity/cli-core/ux'\nimport {readPackageUp} from 'read-package-up'\n\nimport {\n type ValidateSchemaWorkerData,\n type ValidateSchemaWorkerResult,\n} from '../../threads/validateSchema.js'\nimport {formatSchemaValidation, getAggregatedSeverity} from './formatSchemaValidation.js'\nimport {generateMetafile} from './metafile.js'\n\ninterface Options {\n output: Output\n workDir: string\n\n debugMetafilePath?: string\n format?: string\n level?: 'error' | 'warning'\n workspace?: string\n}\n\nexport async function validateAction(options: Options): Promise<void> {\n const {debugMetafilePath, format, level, output, workDir, workspace} = options\n\n const rootPkgPath = (await readPackageUp({cwd: import.meta.dirname}))?.path\n if (!rootPkgPath) {\n throw new Error('Could not find root directory for `sanity` package')\n }\n\n const workerPath = path.join(path.dirname(rootPkgPath), 'dist', 'threads', 'validateSchema.js')\n\n let spin\n\n if (format === 'pretty') {\n spin = spinner(\n workspace ? `Validating schema from workspace '${workspace}'…` : 'Validating schema…',\n ).start()\n }\n\n const worker = new Worker(workerPath, {\n env: process.env,\n workerData: {\n debugSerialize: Boolean(debugMetafilePath),\n level,\n workDir,\n workspace: workspace,\n } satisfies ValidateSchemaWorkerData,\n })\n\n const {serializedDebug, validation} = await new Promise<ValidateSchemaWorkerResult>(\n (resolve, reject) => {\n worker.addListener('message', resolve)\n worker.addListener('error', reject)\n },\n )\n\n const problems = validation.flatMap((group) => group.problems)\n const errorCount = problems.filter((problem) => problem.severity === 'error').length\n const warningCount = problems.filter((problem) => problem.severity === 'warning').length\n\n const overallSeverity = getAggregatedSeverity(validation)\n const didFail = overallSeverity === 'error'\n\n if (debugMetafilePath && !didFail) {\n if (!serializedDebug) throw new Error('serializedDebug should always be produced')\n const metafile = generateMetafile(serializedDebug)\n writeFileSync(debugMetafilePath, JSON.stringify(metafile), 'utf8')\n }\n\n switch (format) {\n case 'json': {\n output.log(JSON.stringify(validation))\n break\n }\n case 'ndjson': {\n for (const group of validation) {\n output.log(JSON.stringify(group))\n }\n break\n }\n default: {\n spin?.succeed('Validated schema')\n output.log(`\\nValidation results:`)\n output.log(\n `${logSymbols.error} Errors: ${errorCount.toLocaleString('en-US')} error${\n errorCount === 1 ? '' : 's'\n }`,\n )\n if (level !== 'error') {\n output.log(\n `${logSymbols.warning} Warnings: ${warningCount.toLocaleString('en-US')} warning${\n warningCount === 1 ? '' : 's'\n }`,\n )\n }\n output.log()\n\n output.log(formatSchemaValidation(validation))\n\n if (debugMetafilePath) {\n output.log()\n if (didFail) {\n output.log(`${logSymbols.info} Metafile not written due to validation errors`)\n } else {\n output.log(`${logSymbols.info} Metafile written to: ${debugMetafilePath}`)\n output.log(` This can be analyzed at https://esbuild.github.io/analyze/`)\n }\n }\n }\n }\n\n process.exitCode = didFail ? 1 : 0\n}\n"],"names":["writeFileSync","path","Worker","logSymbols","spinner","readPackageUp","formatSchemaValidation","getAggregatedSeverity","generateMetafile","validateAction","options","debugMetafilePath","format","level","output","workDir","workspace","rootPkgPath","cwd","dirname","Error","workerPath","join","spin","start","worker","env","process","workerData","debugSerialize","Boolean","serializedDebug","validation","Promise","resolve","reject","addListener","problems","flatMap","group","errorCount","filter","problem","severity","length","warningCount","overallSeverity","didFail","metafile","JSON","stringify","log","succeed","error","toLocaleString","warning","info","exitCode"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/schema/validateAction.ts"],"sourcesContent":["import {writeFileSync} from 'node:fs'\n\nimport {Output, studioWorkerTask} from '@sanity/cli-core'\nimport {logSymbols, spinner} from '@sanity/cli-core/ux'\n\nimport {formatSchemaValidation, getAggregatedSeverity} from './formatSchemaValidation.js'\nimport {generateMetafile} from './metafile.js'\nimport {\n type ValidateSchemaWorkerData,\n type ValidateSchemaWorkerResult,\n} from './validateSchema.worker.js'\n\ninterface Options {\n output: Output\n workDir: string\n\n debugMetafilePath?: string\n format?: string\n level?: 'error' | 'warning'\n workspace?: string\n}\n\nexport async function validateAction(options: Options): Promise<void> {\n const {debugMetafilePath, format, level, output, workDir, workspace} = options\n\n let spin\n\n if (format === 'pretty') {\n spin = spinner(\n workspace ? `Validating schema from workspace '${workspace}'…` : 'Validating schema…',\n ).start()\n }\n\n const {serializedDebug, validation} = await studioWorkerTask<ValidateSchemaWorkerResult>(\n new URL('validateSchema.worker.js', import.meta.url),\n {\n name: 'validateSchema',\n studioRootPath: workDir,\n workerData: {\n debugSerialize: Boolean(debugMetafilePath),\n level,\n workDir,\n workspace: workspace,\n } satisfies ValidateSchemaWorkerData,\n },\n )\n\n const problems = validation.flatMap((group) => group.problems)\n const errorCount = problems.filter((problem) => problem.severity === 'error').length\n const warningCount = problems.filter((problem) => problem.severity === 'warning').length\n\n const overallSeverity = getAggregatedSeverity(validation)\n const didFail = overallSeverity === 'error'\n\n if (debugMetafilePath && !didFail) {\n if (!serializedDebug) throw new Error('serializedDebug should always be produced')\n const metafile = generateMetafile(serializedDebug)\n writeFileSync(debugMetafilePath, JSON.stringify(metafile), 'utf8')\n }\n\n switch (format) {\n case 'json': {\n output.log(JSON.stringify(validation))\n break\n }\n case 'ndjson': {\n for (const group of validation) {\n output.log(JSON.stringify(group))\n }\n break\n }\n default: {\n spin?.succeed('Validated schema')\n output.log(`\\nValidation results:`)\n output.log(\n `${logSymbols.error} Errors: ${errorCount.toLocaleString('en-US')} error${\n errorCount === 1 ? '' : 's'\n }`,\n )\n if (level !== 'error') {\n output.log(\n `${logSymbols.warning} Warnings: ${warningCount.toLocaleString('en-US')} warning${\n warningCount === 1 ? '' : 's'\n }`,\n )\n }\n output.log()\n\n output.log(formatSchemaValidation(validation))\n\n if (debugMetafilePath) {\n output.log()\n if (didFail) {\n output.log(`${logSymbols.info} Metafile not written due to validation errors`)\n } else {\n output.log(`${logSymbols.info} Metafile written to: ${debugMetafilePath}`)\n output.log(` This can be analyzed at https://esbuild.github.io/analyze/`)\n }\n }\n }\n }\n\n if (didFail) {\n throw new Error('Schema validation failed')\n }\n}\n"],"names":["writeFileSync","studioWorkerTask","logSymbols","spinner","formatSchemaValidation","getAggregatedSeverity","generateMetafile","validateAction","options","debugMetafilePath","format","level","output","workDir","workspace","spin","start","serializedDebug","validation","URL","url","name","studioRootPath","workerData","debugSerialize","Boolean","problems","flatMap","group","errorCount","filter","problem","severity","length","warningCount","overallSeverity","didFail","Error","metafile","JSON","stringify","log","succeed","error","toLocaleString","warning","info"],"mappings":"AAAA,SAAQA,aAAa,QAAO,UAAS;AAErC,SAAgBC,gBAAgB,QAAO,mBAAkB;AACzD,SAAQC,UAAU,EAAEC,OAAO,QAAO,sBAAqB;AAEvD,SAAQC,sBAAsB,EAAEC,qBAAqB,QAAO,8BAA6B;AACzF,SAAQC,gBAAgB,QAAO,gBAAe;AAgB9C,OAAO,eAAeC,eAAeC,OAAgB;IACnD,MAAM,EAACC,iBAAiB,EAAEC,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAEC,OAAO,EAAEC,SAAS,EAAC,GAAGN;IAEvE,IAAIO;IAEJ,IAAIL,WAAW,UAAU;QACvBK,OAAOZ,QACLW,YAAY,CAAC,kCAAkC,EAAEA,UAAU,EAAE,CAAC,GAAG,sBACjEE,KAAK;IACT;IAEA,MAAM,EAACC,eAAe,EAAEC,UAAU,EAAC,GAAG,MAAMjB,iBAC1C,IAAIkB,IAAI,4BAA4B,YAAYC,GAAG,GACnD;QACEC,MAAM;QACNC,gBAAgBT;QAChBU,YAAY;YACVC,gBAAgBC,QAAQhB;YACxBE;YACAE;YACAC,WAAWA;QACb;IACF;IAGF,MAAMY,WAAWR,WAAWS,OAAO,CAAC,CAACC,QAAUA,MAAMF,QAAQ;IAC7D,MAAMG,aAAaH,SAASI,MAAM,CAAC,CAACC,UAAYA,QAAQC,QAAQ,KAAK,SAASC,MAAM;IACpF,MAAMC,eAAeR,SAASI,MAAM,CAAC,CAACC,UAAYA,QAAQC,QAAQ,KAAK,WAAWC,MAAM;IAExF,MAAME,kBAAkB9B,sBAAsBa;IAC9C,MAAMkB,UAAUD,oBAAoB;IAEpC,IAAI1B,qBAAqB,CAAC2B,SAAS;QACjC,IAAI,CAACnB,iBAAiB,MAAM,IAAIoB,MAAM;QACtC,MAAMC,WAAWhC,iBAAiBW;QAClCjB,cAAcS,mBAAmB8B,KAAKC,SAAS,CAACF,WAAW;IAC7D;IAEA,OAAQ5B;QACN,KAAK;YAAQ;gBACXE,OAAO6B,GAAG,CAACF,KAAKC,SAAS,CAACtB;gBAC1B;YACF;QACA,KAAK;YAAU;gBACb,KAAK,MAAMU,SAASV,WAAY;oBAC9BN,OAAO6B,GAAG,CAACF,KAAKC,SAAS,CAACZ;gBAC5B;gBACA;YACF;QACA;YAAS;gBACPb,MAAM2B,QAAQ;gBACd9B,OAAO6B,GAAG,CAAC,CAAC,qBAAqB,CAAC;gBAClC7B,OAAO6B,GAAG,CACR,GAAGvC,WAAWyC,KAAK,CAAC,WAAW,EAAEd,WAAWe,cAAc,CAAC,SAAS,MAAM,EACxEf,eAAe,IAAI,KAAK,KACxB;gBAEJ,IAAIlB,UAAU,SAAS;oBACrBC,OAAO6B,GAAG,CACR,GAAGvC,WAAW2C,OAAO,CAAC,WAAW,EAAEX,aAAaU,cAAc,CAAC,SAAS,QAAQ,EAC9EV,iBAAiB,IAAI,KAAK,KAC1B;gBAEN;gBACAtB,OAAO6B,GAAG;gBAEV7B,OAAO6B,GAAG,CAACrC,uBAAuBc;gBAElC,IAAIT,mBAAmB;oBACrBG,OAAO6B,GAAG;oBACV,IAAIL,SAAS;wBACXxB,OAAO6B,GAAG,CAAC,GAAGvC,WAAW4C,IAAI,CAAC,8CAA8C,CAAC;oBAC/E,OAAO;wBACLlC,OAAO6B,GAAG,CAAC,GAAGvC,WAAW4C,IAAI,CAAC,sBAAsB,EAAErC,mBAAmB;wBACzEG,OAAO6B,GAAG,CAAC,CAAC,4DAA4D,CAAC;oBAC3E;gBACF;YACF;IACF;IAEA,IAAIL,SAAS;QACX,MAAM,IAAIC,MAAM;IAClB;AACF"}
@@ -1,41 +1,43 @@
1
1
  import { isMainThread, parentPort, workerData } from 'node:worker_threads';
2
- import { mockBrowserEnvironment } from '@sanity/cli-core';
2
+ import { findStudioConfigPath, getStudioWorkspaces } from '@sanity/cli-core';
3
3
  import { DescriptorConverter } from '@sanity/schema/_internal';
4
- import { getWorkspace } from '../util/getWorkspace.js';
5
- import { importStudioConfig } from '../util/importStudioConfig.js';
4
+ import { getWorkspace } from '../../util/getWorkspace.js';
6
5
  const { debugSerialize, level = 'warning', workDir, workspace: workspaceName } = workerData;
7
6
  async function main() {
8
7
  if (isMainThread || !parentPort) {
9
8
  throw new Error('This module must be run as a worker thread');
10
9
  }
11
- const cleanup = await mockBrowserEnvironment(workDir);
12
10
  try {
13
- const workspaces = await importStudioConfig(workDir);
11
+ const configPath = await findStudioConfigPath(workDir);
12
+ const workspaces = await getStudioWorkspaces(configPath);
14
13
  const workspace = getWorkspace(workspaces, workspaceName);
15
14
  const schema = workspace.schema;
16
- const validation = schema._validation;
17
- let serializedDebug;
18
- if (debugSerialize) {
19
- const conv = new DescriptorConverter();
20
- const set = await conv.get(schema);
21
- serializedDebug = getSerializedSchemaDebug(set);
22
- }
23
- const result = {
24
- serializedDebug,
25
- validation: validation.map((group)=>({
26
- ...group,
27
- problems: group.problems.filter((problem)=>level === 'error' ? problem.severity === 'error' : true)
28
- })).filter((group)=>group.problems.length)
29
- };
30
- parentPort?.postMessage(result);
15
+ parentPort?.postMessage(await resultFromSchema(schema));
31
16
  } catch (err) {
32
- console.error(err);
33
- console.error(err.stack);
17
+ if (isSchemaError(err)) {
18
+ parentPort?.postMessage(await resultFromSchema(err.schema));
19
+ return;
20
+ }
34
21
  throw err;
35
- } finally{
36
- cleanup();
37
22
  }
38
23
  }
24
+ async function resultFromSchema(schema) {
25
+ let serializedDebug;
26
+ if (debugSerialize) {
27
+ const conv = new DescriptorConverter();
28
+ const set = await conv.get(schema);
29
+ serializedDebug = getSerializedSchemaDebug(set);
30
+ }
31
+ const validation = schema._validation ?? [];
32
+ const result = {
33
+ serializedDebug,
34
+ validation: validation.map((group)=>({
35
+ ...group,
36
+ problems: group.problems.filter((problem)=>level === 'error' ? problem.severity === 'error' : true)
37
+ })).filter((group)=>group.problems.length)
38
+ };
39
+ return result;
40
+ }
39
41
  function getSerializedSchemaDebug(set) {
40
42
  let size = 0;
41
43
  const types = {};
@@ -78,6 +80,9 @@ function getSerializedSchemaDebug(set) {
78
80
  function isEncodableObject(val) {
79
81
  return typeof val === 'object' && val !== null && !Array.isArray(val);
80
82
  }
83
+ function isSchemaError(err) {
84
+ return err !== null && typeof err === 'object' && 'schema' in err && err.schema !== null && typeof err.schema === 'object' && '_validation' in err.schema;
85
+ }
81
86
  function getSerializedTypeDebug(typeDef) {
82
87
  const ext = typeof typeDef.extends === 'string' ? typeDef.extends : '<unknown>';
83
88
  let fields;
@@ -110,6 +115,10 @@ function getSerializedTypeDebug(typeDef) {
110
115
  };
111
116
  }
112
117
  await main();
113
- process.exit();
118
+ // Explicitly exit the process to avoid any dangling references from keeping
119
+ // the process alive after resolving it's main task
120
+ setImmediate(()=>{
121
+ process.exit(1);
122
+ });
114
123
 
115
- //# sourceMappingURL=validateSchema.js.map
124
+ //# sourceMappingURL=validateSchema.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/schema/validateSchema.worker.ts"],"sourcesContent":["import {isMainThread, parentPort, workerData} from 'node:worker_threads'\n\nimport {findStudioConfigPath, getStudioWorkspaces} from '@sanity/cli-core'\nimport {\n type EncodableObject,\n type EncodableValue,\n type SetSynchronization,\n} from '@sanity/descriptors'\nimport {DescriptorConverter} from '@sanity/schema/_internal'\nimport {\n type Schema,\n type SchemaValidationProblem,\n type SchemaValidationProblemGroup,\n} from '@sanity/types'\n\nimport {getWorkspace} from '../../util/getWorkspace.js'\nimport {type SerializedSchemaDebug, type SerializedTypeDebug} from './types.js'\n\n/** @internal */\nexport interface ValidateSchemaWorkerData {\n workDir: string\n\n debugSerialize?: boolean\n level?: SchemaValidationProblem['severity']\n workspace?: string\n}\n\n/** @internal */\nexport interface ValidateSchemaWorkerResult {\n validation: SchemaValidationProblemGroup[]\n\n serializedDebug?: SerializedSchemaDebug\n}\n\nconst {\n debugSerialize,\n level = 'warning',\n workDir,\n workspace: workspaceName,\n} = workerData as ValidateSchemaWorkerData\n\nasync function main() {\n if (isMainThread || !parentPort) {\n throw new Error('This module must be run as a worker thread')\n }\n\n try {\n const configPath = await findStudioConfigPath(workDir)\n const workspaces = await getStudioWorkspaces(configPath)\n const workspace = getWorkspace(workspaces, workspaceName)\n const schema = workspace.schema\n parentPort?.postMessage(await resultFromSchema(schema))\n } catch (err: unknown) {\n if (isSchemaError(err)) {\n parentPort?.postMessage(await resultFromSchema(err.schema))\n return\n }\n\n throw err\n }\n}\n\nasync function resultFromSchema(schema: Schema): Promise<ValidateSchemaWorkerResult> {\n let serializedDebug: ValidateSchemaWorkerResult['serializedDebug']\n\n if (debugSerialize) {\n const conv = new DescriptorConverter()\n const set = await conv.get(schema)\n serializedDebug = getSerializedSchemaDebug(set)\n }\n\n const validation = schema._validation ?? []\n\n const result: ValidateSchemaWorkerResult = {\n serializedDebug,\n validation: validation\n .map((group) => ({\n ...group,\n problems: group.problems.filter((problem) =>\n level === 'error' ? problem.severity === 'error' : true,\n ),\n }))\n .filter((group) => group.problems.length),\n }\n\n return result\n}\n\nfunction getSerializedSchemaDebug(set: SetSynchronization<string>): SerializedSchemaDebug {\n let size = 0\n const types: Record<string, SerializedTypeDebug> = {}\n const hoisted: Record<string, SerializedTypeDebug> = {}\n\n for (const [id, value] of Object.entries(set.objectValues)) {\n const descType = typeof value.type === 'string' ? value.type : '<unknown>'\n switch (descType) {\n case 'sanity.schema.hoisted': {\n const key = typeof value.key === 'string' ? value.key : id\n // The `hoisted` can technically hoist _anything_,\n // but we detect the common case of field + array element.\n if (isEncodableObject(value.value) && isEncodableObject(value.value.typeDef)) {\n const debug = getSerializedTypeDebug(value.value.typeDef)\n hoisted[key] = debug\n size += debug.size\n }\n break\n }\n case 'sanity.schema.namedType': {\n const typeName = typeof value.name === 'string' ? value.name : id\n if (isEncodableObject(value.typeDef)) {\n const debug = getSerializedTypeDebug(value.typeDef)\n types[typeName] = debug\n size += debug.size\n }\n break\n }\n default:\n }\n size += JSON.stringify(value).length\n }\n\n return {\n hoisted,\n size,\n types,\n }\n}\n\nfunction isEncodableObject(val: EncodableValue | undefined): val is EncodableObject {\n return typeof val === 'object' && val !== null && !Array.isArray(val)\n}\n\nfunction isSchemaError(err: unknown): err is {schema: Schema} {\n return (\n err !== null &&\n typeof err === 'object' &&\n 'schema' in err &&\n err.schema !== null &&\n typeof err.schema === 'object' &&\n '_validation' in err.schema\n )\n}\n\nfunction getSerializedTypeDebug(typeDef: EncodableObject): SerializedTypeDebug {\n const ext = typeof typeDef.extends === 'string' ? typeDef.extends : '<unknown>'\n let fields: SerializedTypeDebug['fields']\n let of: SerializedTypeDebug['of']\n\n if (Array.isArray(typeDef.fields)) {\n fields = {}\n\n for (const field of typeDef.fields) {\n if (!isEncodableObject(field)) continue\n const name = field.name\n const fieldTypeDef = field.typeDef\n if (typeof name !== 'string' || !isEncodableObject(fieldTypeDef)) continue\n\n fields[name] = getSerializedTypeDebug(fieldTypeDef)\n }\n }\n\n if (Array.isArray(typeDef.of)) {\n of = {}\n\n for (const field of typeDef.of) {\n if (!isEncodableObject(field)) continue\n const name = field.name\n const arrayTypeDef = field.typeDef\n if (typeof name !== 'string' || !isEncodableObject(arrayTypeDef)) continue\n\n of[name] = getSerializedTypeDebug(arrayTypeDef)\n }\n }\n\n return {\n extends: ext,\n fields,\n of,\n size: JSON.stringify(typeDef).length,\n }\n}\n\nawait main()\n\n// Explicitly exit the process to avoid any dangling references from keeping\n// the process alive after resolving it's main task\nsetImmediate(() => {\n process.exit(1)\n})\n"],"names":["isMainThread","parentPort","workerData","findStudioConfigPath","getStudioWorkspaces","DescriptorConverter","getWorkspace","debugSerialize","level","workDir","workspace","workspaceName","main","Error","configPath","workspaces","schema","postMessage","resultFromSchema","err","isSchemaError","serializedDebug","conv","set","get","getSerializedSchemaDebug","validation","_validation","result","map","group","problems","filter","problem","severity","length","size","types","hoisted","id","value","Object","entries","objectValues","descType","type","key","isEncodableObject","typeDef","debug","getSerializedTypeDebug","typeName","name","JSON","stringify","val","Array","isArray","ext","extends","fields","of","field","fieldTypeDef","arrayTypeDef","setImmediate","process","exit"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/telemetry/getLearnMoreMessage.ts"],"sourcesContent":["import {type ConsentInformation} from './types.js'\n\nexport function getLearnMoreMessage(status: ConsentInformation['status']): string {\n const url = 'https://www.sanity.io/telemetry'\n\n switch (status) {\n case 'granted': {\n return `Learn more about the data being collected here:\\n${url}`\n }\n default: {\n return `Learn more here:\\n${url}`\n }\n }\n}\n"],"names":["getLearnMoreMessage","status","url"],"mappings":"AAEA,OAAO,SAASA,oBAAoBC,MAAoC;IACtE,MAAMC,MAAM;IAEZ,OAAQD;QACN,KAAK;YAAW;gBACd,OAAO,CAAC,iDAAiD,EAAEC,KAAK;YAClE;QACA;YAAS;gBACP,OAAO,CAAC,kBAAkB,EAAEA,KAAK;YACnC;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/actions/telemetry/getLearnMoreMessage.ts"],"sourcesContent":["import {type ConsentInformation} from '@sanity/cli-core'\n\nexport function getLearnMoreMessage(status: ConsentInformation['status']): string {\n const url = 'https://www.sanity.io/telemetry'\n\n switch (status) {\n case 'granted': {\n return `Learn more about the data being collected here:\\n${url}`\n }\n default: {\n return `Learn more here:\\n${url}`\n }\n }\n}\n"],"names":["getLearnMoreMessage","status","url"],"mappings":"AAEA,OAAO,SAASA,oBAAoBC,MAAoC;IACtE,MAAMC,MAAM;IAEZ,OAAQD;QACN,KAAK;YAAW;gBACd,OAAO,CAAC,iDAAiD,EAAEC,KAAK;YAClE;QACA;YAAS;gBACP,OAAO,CAAC,kBAAkB,EAAEA,KAAK;YACnC;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/telemetry/getStatusDisplay.ts"],"sourcesContent":["import {type ConsentInformation} from './types.js'\n\nexport function getStatusDisplay(status: ConsentInformation['status']): string {\n switch (status) {\n case 'denied': {\n return 'Disabled'\n }\n case 'granted': {\n return 'Enabled'\n }\n case 'undetermined': {\n return 'Undetermined'\n }\n case 'unset': {\n return 'Not set'\n }\n default: {\n return 'Unknown'\n }\n }\n}\n"],"names":["getStatusDisplay","status"],"mappings":"AAEA,OAAO,SAASA,iBAAiBC,MAAoC;IACnE,OAAQA;QACN,KAAK;YAAU;gBACb,OAAO;YACT;QACA,KAAK;YAAW;gBACd,OAAO;YACT;QACA,KAAK;YAAgB;gBACnB,OAAO;YACT;QACA,KAAK;YAAS;gBACZ,OAAO;YACT;QACA;YAAS;gBACP,OAAO;YACT;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/actions/telemetry/getStatusDisplay.ts"],"sourcesContent":["import {type ConsentInformation} from '@sanity/cli-core'\n\nexport function getStatusDisplay(status: ConsentInformation['status']): string {\n switch (status) {\n case 'denied': {\n return 'Disabled'\n }\n case 'granted': {\n return 'Enabled'\n }\n case 'undetermined': {\n return 'Undetermined'\n }\n case 'unset': {\n return 'Not set'\n }\n default: {\n return 'Unknown'\n }\n }\n}\n"],"names":["getStatusDisplay","status"],"mappings":"AAEA,OAAO,SAASA,iBAAiBC,MAAoC;IACnE,OAAQA;QACN,KAAK;YAAU;gBACb,OAAO;YACT;QACA,KAAK;YAAW;gBACd,OAAO;YACT;QACA,KAAK;YAAgB;gBACnB,OAAO;YACT;QACA,KAAK;YAAS;gBACZ,OAAO;YACT;QACA;YAAS;gBACP,OAAO;YACT;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/telemetry/getStatusMessage.ts"],"sourcesContent":["import {getStatusDisplay} from './getStatusDisplay.js'\nimport {type ConsentInformation} from './types.js'\n\nexport function getStatusMessage(consentInfo: ConsentInformation): string {\n const {reason, status} = consentInfo\n\n switch (true) {\n case status === 'undetermined' && reason === 'unauthenticated': {\n return 'You need to log in first to see telemetry status.'\n }\n\n case status === 'undetermined' && reason === 'fetchError': {\n return 'Could not fetch telemetry consent status.'\n }\n\n case status === 'denied' && reason === 'localOverride': {\n return `Status: ${getStatusDisplay(status)}\\n\\nYou've opted out of telemetry data collection.\\nNo data will be collected from your machine.\\n\\nUsing DO_NOT_TRACK environment variable.`\n }\n\n case status === 'denied': {\n return `Status: ${getStatusDisplay(status)}\\n\\nYou've opted out of telemetry data collection.\\nNo data will be collected from your Sanity account.`\n }\n\n case status === 'granted': {\n return `Status: ${getStatusDisplay(status)}\\n\\nTelemetry data on general usage and errors is collected to help us improve Sanity.`\n }\n\n case status === 'unset': {\n return `Status: ${getStatusDisplay(status)}\\n\\nYou've not set your preference for telemetry collection.\\n\\nRun 'npx sanity telemetry enable/disable' to opt in or out.\\nYou can also use the DO_NOT_TRACK environment variable to opt out.`\n }\n\n default: {\n return `Status: ${getStatusDisplay(status)}`\n }\n }\n}\n"],"names":["getStatusDisplay","getStatusMessage","consentInfo","reason","status"],"mappings":"AAAA,SAAQA,gBAAgB,QAAO,wBAAuB;AAGtD,OAAO,SAASC,iBAAiBC,WAA+B;IAC9D,MAAM,EAACC,MAAM,EAAEC,MAAM,EAAC,GAAGF;IAEzB,OAAQ;QACN,KAAKE,WAAW,kBAAkBD,WAAW;YAAmB;gBAC9D,OAAO;YACT;QAEA,KAAKC,WAAW,kBAAkBD,WAAW;YAAc;gBACzD,OAAO;YACT;QAEA,KAAKC,WAAW,YAAYD,WAAW;YAAiB;gBACtD,OAAO,CAAC,QAAQ,EAAEH,iBAAiBI,QAAQ,4IAA4I,CAAC;YAC1L;QAEA,KAAKA,WAAW;YAAU;gBACxB,OAAO,CAAC,QAAQ,EAAEJ,iBAAiBI,QAAQ,uGAAuG,CAAC;YACrJ;QAEA,KAAKA,WAAW;YAAW;gBACzB,OAAO,CAAC,QAAQ,EAAEJ,iBAAiBI,QAAQ,sFAAsF,CAAC;YACpI;QAEA,KAAKA,WAAW;YAAS;gBACvB,OAAO,CAAC,QAAQ,EAAEJ,iBAAiBI,QAAQ,+LAA+L,CAAC;YAC7O;QAEA;YAAS;gBACP,OAAO,CAAC,QAAQ,EAAEJ,iBAAiBI,SAAS;YAC9C;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/actions/telemetry/getStatusMessage.ts"],"sourcesContent":["import {type ConsentInformation} from '@sanity/cli-core'\n\nimport {getStatusDisplay} from './getStatusDisplay.js'\n\nexport function getStatusMessage(consentInfo: ConsentInformation): string {\n const {reason, status} = consentInfo\n\n switch (true) {\n case status === 'undetermined' && reason === 'unauthenticated': {\n return 'You need to log in first to see telemetry status.'\n }\n\n case status === 'undetermined' && reason === 'fetchError': {\n return 'Could not fetch telemetry consent status.'\n }\n\n case status === 'denied' && reason === 'localOverride': {\n return `Status: ${getStatusDisplay(status)}\\n\\nYou've opted out of telemetry data collection.\\nNo data will be collected from your machine.\\n\\nUsing DO_NOT_TRACK environment variable.`\n }\n\n case status === 'denied': {\n return `Status: ${getStatusDisplay(status)}\\n\\nYou've opted out of telemetry data collection.\\nNo data will be collected from your Sanity account.`\n }\n\n case status === 'granted': {\n return `Status: ${getStatusDisplay(status)}\\n\\nTelemetry data on general usage and errors is collected to help us improve Sanity.`\n }\n\n case status === 'unset': {\n return `Status: ${getStatusDisplay(status)}\\n\\nYou've not set your preference for telemetry collection.\\n\\nRun 'npx sanity telemetry enable/disable' to opt in or out.\\nYou can also use the DO_NOT_TRACK environment variable to opt out.`\n }\n\n default: {\n return `Status: ${getStatusDisplay(status)}`\n }\n }\n}\n"],"names":["getStatusDisplay","getStatusMessage","consentInfo","reason","status"],"mappings":"AAEA,SAAQA,gBAAgB,QAAO,wBAAuB;AAEtD,OAAO,SAASC,iBAAiBC,WAA+B;IAC9D,MAAM,EAACC,MAAM,EAAEC,MAAM,EAAC,GAAGF;IAEzB,OAAQ;QACN,KAAKE,WAAW,kBAAkBD,WAAW;YAAmB;gBAC9D,OAAO;YACT;QAEA,KAAKC,WAAW,kBAAkBD,WAAW;YAAc;gBACzD,OAAO;YACT;QAEA,KAAKC,WAAW,YAAYD,WAAW;YAAiB;gBACtD,OAAO,CAAC,QAAQ,EAAEH,iBAAiBI,QAAQ,4IAA4I,CAAC;YAC1L;QAEA,KAAKA,WAAW;YAAU;gBACxB,OAAO,CAAC,QAAQ,EAAEJ,iBAAiBI,QAAQ,uGAAuG,CAAC;YACrJ;QAEA,KAAKA,WAAW;YAAW;gBACzB,OAAO,CAAC,QAAQ,EAAEJ,iBAAiBI,QAAQ,sFAAsF,CAAC;YACpI;QAEA,KAAKA,WAAW;YAAS;gBACvB,OAAO,CAAC,QAAQ,EAAEJ,iBAAiBI,QAAQ,+LAA+L,CAAC;YAC7O;QAEA;YAAS;gBACP,OAAO,CAAC,QAAQ,EAAEJ,iBAAiBI,SAAS;YAC9C;IACF;AACF"}
@@ -1,6 +1,5 @@
1
1
  import { getCliToken, isCi, isTrueish } from '@sanity/cli-core';
2
- import { fetchTelemetryConsent } from './fetchTelemetryConsent.js';
3
- import { isValidApiConsentStatus, VALID_API_STATUSES } from './isValidApiConsentStatus.js';
2
+ import { fetchTelemetryConsent, isValidApiConsentStatus, VALID_API_STATUSES } from '../../services/telemetry.js';
4
3
  import { telemetryDebug } from './telemetryDebug.js';
5
4
  function parseApiConsentStatus(value) {
6
5
  if (typeof value === 'string' && isValidApiConsentStatus(value)) {