@sanity/cli 6.0.0-alpha.4 → 6.0.0-alpha.6

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 (608) hide show
  1. package/dist/actions/dataset/create.d.ts +49 -0
  2. package/dist/actions/dataset/create.js +48 -0
  3. package/dist/actions/dataset/create.js.map +1 -0
  4. package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
  5. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  6. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  7. package/dist/actions/debug/gatherDebugInfo.js +15 -21
  8. package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
  9. package/dist/actions/debug/types.d.ts +0 -2
  10. package/dist/actions/debug/types.js.map +1 -1
  11. package/dist/actions/deploy/deployApp.js +13 -0
  12. package/dist/actions/deploy/deployApp.js.map +1 -1
  13. package/dist/actions/dev/startStudioDevServer.js +3 -8
  14. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  15. package/dist/actions/dev/types.d.ts +1 -3
  16. package/dist/actions/dev/types.js.map +1 -1
  17. package/dist/actions/documents/validate.d.ts +0 -2
  18. package/dist/actions/documents/validate.js +21 -1
  19. package/dist/actions/documents/validate.js.map +1 -1
  20. package/dist/actions/exec/execScript.js +1 -1
  21. package/dist/actions/exec/execScript.js.map +1 -1
  22. package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
  23. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  24. package/dist/actions/init/remoteTemplate.js +1 -1
  25. package/dist/actions/init/remoteTemplate.js.map +1 -1
  26. package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
  27. package/dist/actions/manifest/extractAppManifest.js +51 -0
  28. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  29. package/dist/actions/manifest/extractManifest.js +2 -5
  30. package/dist/actions/manifest/extractManifest.js.map +1 -1
  31. package/dist/actions/manifest/types.d.ts +6 -1
  32. package/dist/actions/manifest/types.js.map +1 -1
  33. package/dist/actions/media/importAspects.js +2 -1
  34. package/dist/actions/media/importAspects.js.map +1 -1
  35. package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
  36. package/dist/actions/schema/deleteSchemaAction.js +12 -17
  37. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  38. package/dist/actions/schema/deploySchemas.d.ts +15 -0
  39. package/dist/actions/schema/deploySchemas.js +98 -0
  40. package/dist/actions/schema/deploySchemas.js.map +1 -0
  41. package/dist/actions/schema/listSchemas.d.ts +12 -0
  42. package/dist/actions/schema/listSchemas.js +119 -0
  43. package/dist/actions/schema/listSchemas.js.map +1 -0
  44. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
  45. package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
  46. package/dist/actions/schema/utils/debug.d.ts +2 -0
  47. package/dist/actions/schema/utils/debug.js +5 -0
  48. package/dist/actions/schema/utils/debug.js.map +1 -0
  49. package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
  50. package/dist/actions/schema/utils/manifestExtractor.js +12 -17
  51. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  52. package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
  53. package/dist/actions/schema/utils/manifestReader.js +6 -12
  54. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  55. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
  56. package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
  57. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
  58. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
  59. package/dist/actions/schema/utils/schemaStoreValidation.js +38 -125
  60. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  61. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
  62. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  63. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  64. package/dist/actions/users/getMembersForProject.d.ts +1 -3
  65. package/dist/actions/users/getMembersForProject.js +6 -17
  66. package/dist/actions/users/getMembersForProject.js.map +1 -1
  67. package/dist/actions/users/types.d.ts +0 -11
  68. package/dist/actions/users/types.js.map +1 -1
  69. package/dist/commands/backup/disable.js +5 -11
  70. package/dist/commands/backup/disable.js.map +1 -1
  71. package/dist/commands/backup/enable.js +5 -11
  72. package/dist/commands/backup/enable.js.map +1 -1
  73. package/dist/commands/backup/list.js +7 -8
  74. package/dist/commands/backup/list.js.map +1 -1
  75. package/dist/commands/cors/add.js +5 -13
  76. package/dist/commands/cors/add.js.map +1 -1
  77. package/dist/commands/cors/delete.js +7 -15
  78. package/dist/commands/cors/delete.js.map +1 -1
  79. package/dist/commands/cors/list.js +2 -10
  80. package/dist/commands/cors/list.js.map +1 -1
  81. package/dist/commands/dataset/create.d.ts +0 -2
  82. package/dist/commands/dataset/create.js +8 -54
  83. package/dist/commands/dataset/create.js.map +1 -1
  84. package/dist/commands/dataset/export.js +4 -4
  85. package/dist/commands/dataset/export.js.map +1 -1
  86. package/dist/commands/debug.js +5 -9
  87. package/dist/commands/debug.js.map +1 -1
  88. package/dist/commands/dev.js +0 -1
  89. package/dist/commands/dev.js.map +1 -1
  90. package/dist/commands/documents/create.d.ts +1 -0
  91. package/dist/commands/documents/create.js +10 -9
  92. package/dist/commands/documents/create.js.map +1 -1
  93. package/dist/commands/documents/delete.js +2 -3
  94. package/dist/commands/documents/delete.js.map +1 -1
  95. package/dist/commands/documents/get.js +2 -3
  96. package/dist/commands/documents/get.js.map +1 -1
  97. package/dist/commands/documents/query.js +2 -3
  98. package/dist/commands/documents/query.js.map +1 -1
  99. package/dist/commands/documents/validate.js +0 -20
  100. package/dist/commands/documents/validate.js.map +1 -1
  101. package/dist/commands/graphql/list.js +2 -2
  102. package/dist/commands/graphql/list.js.map +1 -1
  103. package/dist/commands/graphql/undeploy.js +4 -9
  104. package/dist/commands/graphql/undeploy.js.map +1 -1
  105. package/dist/commands/hook/create.js +2 -6
  106. package/dist/commands/hook/create.js.map +1 -1
  107. package/dist/commands/hook/delete.js +5 -17
  108. package/dist/commands/hook/delete.js.map +1 -1
  109. package/dist/commands/hook/list.js +2 -8
  110. package/dist/commands/hook/list.js.map +1 -1
  111. package/dist/commands/init.d.ts +6 -1
  112. package/dist/commands/init.js +358 -20
  113. package/dist/commands/init.js.map +1 -1
  114. package/dist/commands/manifest/extract.js +7 -8
  115. package/dist/commands/manifest/extract.js.map +1 -1
  116. package/dist/commands/media/export.js +2 -2
  117. package/dist/commands/media/export.js.map +1 -1
  118. package/dist/commands/media/import.js +2 -2
  119. package/dist/commands/media/import.js.map +1 -1
  120. package/dist/commands/projects/list.js +2 -6
  121. package/dist/commands/projects/list.js.map +1 -1
  122. package/dist/commands/schema/delete.d.ts +1 -1
  123. package/dist/commands/schema/delete.js +20 -23
  124. package/dist/commands/schema/delete.js.map +1 -1
  125. package/dist/commands/schema/deploy.d.ts +16 -0
  126. package/dist/commands/schema/deploy.js +98 -0
  127. package/dist/commands/schema/deploy.js.map +1 -0
  128. package/dist/commands/schema/list.d.ts +15 -0
  129. package/dist/commands/schema/list.js +104 -0
  130. package/dist/commands/schema/list.js.map +1 -0
  131. package/dist/commands/tokens/add.js +3 -5
  132. package/dist/commands/tokens/add.js.map +1 -1
  133. package/dist/commands/users/invite.js +6 -17
  134. package/dist/commands/users/invite.js.map +1 -1
  135. package/dist/commands/users/list.js +4 -7
  136. package/dist/commands/users/list.js.map +1 -1
  137. package/dist/config/createCliConfig.d.ts +13 -4
  138. package/dist/prompts/init/promptForTypescript.d.ts +2 -0
  139. package/dist/prompts/init/promptForTypescript.js +15 -0
  140. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  141. package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
  142. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  143. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  144. package/dist/prompts/promptForDatasetName.d.ts +1 -1
  145. package/dist/prompts/promptForDatasetName.js +4 -1
  146. package/dist/prompts/promptForDatasetName.js.map +1 -1
  147. package/dist/services/backup.d.ts +8 -0
  148. package/dist/services/backup.js +19 -0
  149. package/dist/services/backup.js.map +1 -1
  150. package/dist/services/cors.d.ts +23 -0
  151. package/dist/services/cors.js +38 -0
  152. package/dist/services/cors.js.map +1 -0
  153. package/dist/services/graphql.d.ts +7 -0
  154. package/dist/services/graphql.js +11 -0
  155. package/dist/services/graphql.js.map +1 -1
  156. package/dist/services/hooks.d.ts +2 -0
  157. package/dist/services/hooks.js +19 -0
  158. package/dist/services/hooks.js.map +1 -1
  159. package/dist/services/organizations.d.ts +4 -2
  160. package/dist/services/organizations.js +3 -2
  161. package/dist/services/organizations.js.map +1 -1
  162. package/dist/services/projects.d.ts +11 -0
  163. package/dist/services/projects.js +41 -0
  164. package/dist/services/projects.js.map +1 -1
  165. package/dist/services/schemas.d.ts +4 -0
  166. package/dist/services/schemas.js +40 -0
  167. package/dist/services/schemas.js.map +1 -0
  168. package/dist/services/user.d.ts +13 -0
  169. package/dist/services/user.js +27 -3
  170. package/dist/services/user.js.map +1 -1
  171. package/dist/services/userApplications.d.ts +3 -1
  172. package/dist/services/userApplications.js +5 -1
  173. package/dist/services/userApplications.js.map +1 -1
  174. package/dist/util/errorMessages.d.ts +1 -0
  175. package/dist/util/errorMessages.js +1 -0
  176. package/dist/util/errorMessages.js.map +1 -1
  177. package/dist/util/getCliVersion.js +1 -1
  178. package/dist/util/getCliVersion.js.map +1 -1
  179. package/dist/util/readPackageJson.d.ts +1 -15
  180. package/dist/util/readPackageJson.js +1 -1
  181. package/dist/util/readPackageJson.js.map +1 -1
  182. package/dist/util/uniqBy.d.ts +1 -0
  183. package/dist/util/uniqBy.js +14 -0
  184. package/dist/util/uniqBy.js.map +1 -0
  185. package/oclif.manifest.json +284 -139
  186. package/package.json +36 -33
  187. package/templates/app-quickstart/src/App.css +20 -0
  188. package/templates/app-quickstart/src/App.tsx +25 -0
  189. package/templates/app-quickstart/src/ExampleComponent.css +90 -0
  190. package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
  191. package/templates/app-sanity-ui/src/App.tsx +34 -0
  192. package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
  193. package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
  194. package/templates/blog/README.md +11 -0
  195. package/templates/blog/schemaTypes/author.js +50 -0
  196. package/templates/blog/schemaTypes/blockContent.js +67 -0
  197. package/templates/blog/schemaTypes/category.js +19 -0
  198. package/templates/blog/schemaTypes/index.js +6 -0
  199. package/templates/blog/schemaTypes/post.js +65 -0
  200. package/templates/blog/static/.gitkeep +1 -0
  201. package/templates/clean/README.md +9 -0
  202. package/templates/clean/schemaTypes/index.js +1 -0
  203. package/templates/clean/static/.gitkeep +1 -0
  204. package/templates/ecommerce/README.md +11 -0
  205. package/templates/ecommerce/plugins/.gitkeep +1 -0
  206. package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
  207. package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
  208. package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
  209. package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
  210. package/templates/ecommerce/schemaTypes/category.js +39 -0
  211. package/templates/ecommerce/schemaTypes/index.js +23 -0
  212. package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
  213. package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
  214. package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
  215. package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
  216. package/templates/ecommerce/schemaTypes/product.js +83 -0
  217. package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
  218. package/templates/ecommerce/schemaTypes/vendor.js +39 -0
  219. package/templates/ecommerce/static/.gitkeep +1 -0
  220. package/templates/get-started/README.md +9 -0
  221. package/templates/get-started/plugins/.gitkeep +1 -0
  222. package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
  223. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
  224. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
  225. package/templates/get-started/schemaTypes/index.ts +1 -0
  226. package/templates/get-started/static/.gitkeep +1 -0
  227. package/templates/moviedb/README.md +10 -0
  228. package/templates/moviedb/schemaTypes/blockContent.js +67 -0
  229. package/templates/moviedb/schemaTypes/castMember.js +37 -0
  230. package/templates/moviedb/schemaTypes/crewMember.js +52 -0
  231. package/templates/moviedb/schemaTypes/index.js +22 -0
  232. package/templates/moviedb/schemaTypes/movie.js +85 -0
  233. package/templates/moviedb/schemaTypes/person.js +37 -0
  234. package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
  235. package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
  236. package/templates/moviedb/schemaTypes/screening.js +81 -0
  237. package/templates/moviedb/static/.gitkeep +1 -0
  238. package/templates/quickstart/README.md +9 -0
  239. package/templates/quickstart/schemaTypes/index.js +1 -0
  240. package/templates/quickstart/static/.gitkeep +1 -0
  241. package/templates/shared/gitignore.txt +29 -0
  242. package/templates/shared/tsconfig.json +17 -0
  243. package/templates/shopify/README.md +85 -0
  244. package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
  245. package/templates/shopify/components/icons/Shopify.tsx +20 -0
  246. package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
  247. package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
  248. package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
  249. package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
  250. package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
  251. package/templates/shopify/components/media/ColorTheme.tsx +38 -0
  252. package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
  253. package/templates/shopify/components/studio/Navbar.tsx +29 -0
  254. package/templates/shopify/constants.ts +61 -0
  255. package/templates/shopify/docs/features.md +158 -0
  256. package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
  257. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
  258. package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
  259. package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
  260. package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
  261. package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
  262. package/templates/shopify/schemaTypes/documents/page.ts +70 -0
  263. package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
  264. package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
  265. package/templates/shopify/schemaTypes/index.ts +108 -0
  266. package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
  267. package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
  268. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
  269. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
  270. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
  271. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
  272. package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
  273. package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
  274. package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
  275. package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
  276. package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
  277. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
  278. package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
  279. package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
  280. package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
  281. package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
  282. package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
  283. package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
  284. package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
  285. package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
  286. package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
  287. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
  288. package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
  289. package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
  290. package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
  291. package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
  292. package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
  293. package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
  294. package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
  295. package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
  296. package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
  297. package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
  298. package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
  299. package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
  300. package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
  301. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
  302. package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
  303. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
  304. package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
  305. package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
  306. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
  307. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
  308. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
  309. package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
  310. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
  311. package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
  312. package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
  313. package/templates/shopify/static/.gitkeep +1 -0
  314. package/templates/shopify/structure/collectionStructure.ts +9 -0
  315. package/templates/shopify/structure/colorThemeStructure.ts +9 -0
  316. package/templates/shopify/structure/homeStructure.ts +9 -0
  317. package/templates/shopify/structure/index.ts +57 -0
  318. package/templates/shopify/structure/pageStructure.ts +11 -0
  319. package/templates/shopify/structure/productStructure.ts +51 -0
  320. package/templates/shopify/structure/settingStructure.ts +9 -0
  321. package/templates/shopify/utils/blocksToText.ts +20 -0
  322. package/templates/shopify/utils/defineStructure.ts +11 -0
  323. package/templates/shopify/utils/getPriceRange.ts +24 -0
  324. package/templates/shopify/utils/shopifyUrls.ts +22 -0
  325. package/templates/shopify/utils/validateSlug.ts +18 -0
  326. package/templates/shopify-online-storefront/README.md +54 -0
  327. package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
  328. package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
  329. package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
  330. package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
  331. package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
  332. package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
  333. package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
  334. package/templates/shopify-online-storefront/constants.ts +18 -0
  335. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
  336. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
  337. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
  338. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
  339. package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
  340. package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
  341. package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
  342. package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
  343. package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
  344. package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
  345. package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
  346. package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
  347. package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
  348. package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
  349. package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
  350. package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
  351. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
  352. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
  353. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
  354. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
  355. package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
  356. package/templates/shopify-online-storefront/structure/index.ts +37 -0
  357. package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
  358. package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
  359. package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
  360. package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
  361. package/dist/actions/build/__tests__/buildApp.test.js +0 -367
  362. package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
  363. package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
  364. package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
  365. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
  366. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
  367. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
  368. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
  369. package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
  370. package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
  371. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
  372. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
  373. package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
  374. package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
  375. package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
  376. package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
  377. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
  378. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
  379. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
  380. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
  381. package/dist/actions/cors/constants.d.ts +0 -1
  382. package/dist/actions/cors/constants.js +0 -3
  383. package/dist/actions/cors/constants.js.map +0 -1
  384. package/dist/actions/cors/types.d.ts +0 -9
  385. package/dist/actions/cors/types.js +0 -3
  386. package/dist/actions/cors/types.js.map +0 -1
  387. package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
  388. package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
  389. package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
  390. package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
  391. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
  392. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
  393. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
  394. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
  395. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
  396. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
  397. package/dist/actions/media/__tests__/importMedia.test.js +0 -182
  398. package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
  399. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
  400. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
  401. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
  402. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
  403. package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
  404. package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
  405. package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
  406. package/dist/actions/schema/schemaStoreConstants.js +0 -4
  407. package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
  408. package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
  409. package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
  410. package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
  411. package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
  412. package/dist/actions/schema/utils/schemaApiClient.js +0 -17
  413. package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
  414. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
  415. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
  416. package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
  417. package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
  418. package/dist/actions/users/apiVersion.d.ts +0 -6
  419. package/dist/actions/users/apiVersion.js +0 -7
  420. package/dist/actions/users/apiVersion.js.map +0 -1
  421. package/dist/commands/__tests__/blueprints.test.js +0 -54
  422. package/dist/commands/__tests__/blueprints.test.js.map +0 -1
  423. package/dist/commands/__tests__/build.test.js +0 -132
  424. package/dist/commands/__tests__/build.test.js.map +0 -1
  425. package/dist/commands/__tests__/codemod.test.js +0 -271
  426. package/dist/commands/__tests__/codemod.test.js.map +0 -1
  427. package/dist/commands/__tests__/debug.test.js +0 -697
  428. package/dist/commands/__tests__/debug.test.js.map +0 -1
  429. package/dist/commands/__tests__/deploy.test.js +0 -1913
  430. package/dist/commands/__tests__/deploy.test.js.map +0 -1
  431. package/dist/commands/__tests__/dev.test.js +0 -410
  432. package/dist/commands/__tests__/dev.test.js.map +0 -1
  433. package/dist/commands/__tests__/exec.test.js +0 -207
  434. package/dist/commands/__tests__/exec.test.js.map +0 -1
  435. package/dist/commands/__tests__/init/init.authentication.test.js +0 -60
  436. package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
  437. package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -196
  438. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
  439. package/dist/commands/__tests__/init/init.plan.test.js +0 -220
  440. package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
  441. package/dist/commands/__tests__/init/init.setup.test.js +0 -279
  442. package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
  443. package/dist/commands/__tests__/install.test.js +0 -258
  444. package/dist/commands/__tests__/install.test.js.map +0 -1
  445. package/dist/commands/__tests__/learn.test.js +0 -29
  446. package/dist/commands/__tests__/learn.test.js.map +0 -1
  447. package/dist/commands/__tests__/logout.test.js +0 -88
  448. package/dist/commands/__tests__/logout.test.js.map +0 -1
  449. package/dist/commands/__tests__/manage.test.js +0 -105
  450. package/dist/commands/__tests__/manage.test.js.map +0 -1
  451. package/dist/commands/__tests__/migration.test.js +0 -119
  452. package/dist/commands/__tests__/migration.test.js.map +0 -1
  453. package/dist/commands/__tests__/preview.test.js +0 -261
  454. package/dist/commands/__tests__/preview.test.js.map +0 -1
  455. package/dist/commands/__tests__/start.test.js +0 -253
  456. package/dist/commands/__tests__/start.test.js.map +0 -1
  457. package/dist/commands/__tests__/undeploy.test.js +0 -382
  458. package/dist/commands/__tests__/undeploy.test.js.map +0 -1
  459. package/dist/commands/__tests__/versions.test.js +0 -134
  460. package/dist/commands/__tests__/versions.test.js.map +0 -1
  461. package/dist/commands/backup/__tests__/disable.test.js +0 -207
  462. package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
  463. package/dist/commands/backup/__tests__/download.test.js +0 -679
  464. package/dist/commands/backup/__tests__/download.test.js.map +0 -1
  465. package/dist/commands/backup/__tests__/enable.test.js +0 -317
  466. package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
  467. package/dist/commands/backup/__tests__/list.test.js +0 -321
  468. package/dist/commands/backup/__tests__/list.test.js.map +0 -1
  469. package/dist/commands/cors/__tests__/add.test.js +0 -346
  470. package/dist/commands/cors/__tests__/add.test.js.map +0 -1
  471. package/dist/commands/cors/__tests__/delete.test.js +0 -293
  472. package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
  473. package/dist/commands/cors/__tests__/list.test.js +0 -218
  474. package/dist/commands/cors/__tests__/list.test.js.map +0 -1
  475. package/dist/commands/dataset/__tests__/copy.test.js +0 -520
  476. package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
  477. package/dist/commands/dataset/__tests__/create.test.js +0 -312
  478. package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
  479. package/dist/commands/dataset/__tests__/delete.test.js +0 -224
  480. package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
  481. package/dist/commands/dataset/__tests__/export.test.js +0 -561
  482. package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
  483. package/dist/commands/dataset/__tests__/import.test.js +0 -53
  484. package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
  485. package/dist/commands/dataset/__tests__/list.test.js +0 -174
  486. package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
  487. package/dist/commands/dataset/alias/__tests__/create.test.js +0 -299
  488. package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
  489. package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -236
  490. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
  491. package/dist/commands/dataset/alias/__tests__/link.test.js +0 -336
  492. package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
  493. package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -298
  494. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
  495. package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -147
  496. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
  497. package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -245
  498. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
  499. package/dist/commands/docs/__tests__/browse.test.js +0 -29
  500. package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
  501. package/dist/commands/docs/__tests__/read.test.js +0 -78
  502. package/dist/commands/docs/__tests__/read.test.js.map +0 -1
  503. package/dist/commands/docs/__tests__/search.test.js +0 -254
  504. package/dist/commands/docs/__tests__/search.test.js.map +0 -1
  505. package/dist/commands/documents/__tests__/create.test.js +0 -967
  506. package/dist/commands/documents/__tests__/create.test.js.map +0 -1
  507. package/dist/commands/documents/__tests__/delete.test.js +0 -268
  508. package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
  509. package/dist/commands/documents/__tests__/get.test.js +0 -209
  510. package/dist/commands/documents/__tests__/get.test.js.map +0 -1
  511. package/dist/commands/documents/__tests__/query.test.js +0 -405
  512. package/dist/commands/documents/__tests__/query.test.js.map +0 -1
  513. package/dist/commands/documents/__tests__/validate.test.js +0 -226
  514. package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
  515. package/dist/commands/graphql/__tests__/list.test.js +0 -228
  516. package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
  517. package/dist/commands/graphql/__tests__/undeploy.test.js +0 -384
  518. package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
  519. package/dist/commands/hook/__tests__/attempt.test.js +0 -260
  520. package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
  521. package/dist/commands/hook/__tests__/create.test.js +0 -121
  522. package/dist/commands/hook/__tests__/create.test.js.map +0 -1
  523. package/dist/commands/hook/__tests__/delete.test.js +0 -220
  524. package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
  525. package/dist/commands/hook/__tests__/list.test.js +0 -138
  526. package/dist/commands/hook/__tests__/list.test.js.map +0 -1
  527. package/dist/commands/hook/__tests__/logs.test.js +0 -770
  528. package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
  529. package/dist/commands/manifest/__tests__/extract.test.js +0 -123
  530. package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
  531. package/dist/commands/mcp/__tests__/configure.test.js +0 -397
  532. package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
  533. package/dist/commands/media/__tests__/create-aspect.test.js +0 -160
  534. package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
  535. package/dist/commands/media/__tests__/delete-aspect.test.js +0 -333
  536. package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
  537. package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -632
  538. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
  539. package/dist/commands/media/__tests__/export.test.js +0 -398
  540. package/dist/commands/media/__tests__/export.test.js.map +0 -1
  541. package/dist/commands/media/__tests__/import.test.js +0 -281
  542. package/dist/commands/media/__tests__/import.test.js.map +0 -1
  543. package/dist/commands/openapi/__tests__/get.test.js +0 -149
  544. package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
  545. package/dist/commands/openapi/__tests__/list.test.js +0 -113
  546. package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
  547. package/dist/commands/projects/__tests__/list.test.js +0 -153
  548. package/dist/commands/projects/__tests__/list.test.js.map +0 -1
  549. package/dist/commands/schema/__tests__/delete.test.js +0 -209
  550. package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
  551. package/dist/commands/schema/__tests__/extract.test.js +0 -113
  552. package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
  553. package/dist/commands/schema/__tests__/validate.test.js +0 -104
  554. package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
  555. package/dist/commands/telemetry/__tests__/disable.test.js +0 -145
  556. package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
  557. package/dist/commands/telemetry/__tests__/enable.test.js +0 -131
  558. package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
  559. package/dist/commands/telemetry/__tests__/status.test.js +0 -153
  560. package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
  561. package/dist/commands/tokens/__tests__/add.test.js +0 -420
  562. package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
  563. package/dist/commands/tokens/__tests__/delete.test.js +0 -375
  564. package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
  565. package/dist/commands/tokens/__tests__/list.test.js +0 -368
  566. package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
  567. package/dist/commands/users/__tests__/invite.test.js +0 -341
  568. package/dist/commands/users/__tests__/invite.test.js.map +0 -1
  569. package/dist/commands/users/__tests__/list.test.js +0 -401
  570. package/dist/commands/users/__tests__/list.test.js.map +0 -1
  571. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
  572. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
  573. package/dist/services/__tests__/datasetAliases.test.js +0 -131
  574. package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
  575. package/dist/services/__tests__/datasets.test.js +0 -436
  576. package/dist/services/__tests__/datasets.test.js.map +0 -1
  577. package/dist/services/__tests__/graphql.test.js +0 -43
  578. package/dist/services/__tests__/graphql.test.js.map +0 -1
  579. package/dist/services/__tests__/mediaLibraries.test.js +0 -88
  580. package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
  581. package/dist/services/__tests__/projects.test.js +0 -41
  582. package/dist/services/__tests__/projects.test.js.map +0 -1
  583. package/dist/services/__tests__/userApplications.test.js +0 -113
  584. package/dist/services/__tests__/userApplications.test.js.map +0 -1
  585. package/dist/util/__tests__/appId.test.js +0 -31
  586. package/dist/util/__tests__/appId.test.js.map +0 -1
  587. package/dist/util/__tests__/cliClient.test.js +0 -184
  588. package/dist/util/__tests__/cliClient.test.js.map +0 -1
  589. package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
  590. package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
  591. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
  592. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
  593. package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
  594. package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
  595. package/dist/util/__tests__/getCliVersion.test.js +0 -28
  596. package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
  597. package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
  598. package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
  599. package/dist/util/__tests__/getWorkspace.test.js +0 -37
  600. package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
  601. package/dist/util/__tests__/readPackageJson.test.js +0 -69
  602. package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
  603. package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
  604. package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
  605. package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
  606. package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
  607. package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
  608. package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
@@ -0,0 +1,49 @@
1
+ import { type Output } from '@sanity/cli-core';
2
+ /**
3
+ * Options for creating a dataset
4
+ */
5
+ export interface CreateDatasetOptions {
6
+ /**
7
+ * Name of the dataset to create
8
+ */
9
+ datasetName: string;
10
+ /**
11
+ * Output instance for logging
12
+ */
13
+ output: Output;
14
+ /**
15
+ * Array of project features to determine capabilities
16
+ * Used to check if private datasets are available
17
+ */
18
+ projectFeatures: string[];
19
+ /**
20
+ * Project ID where the dataset will be created
21
+ */
22
+ projectId: string;
23
+ /**
24
+ * Whether to force disable private dataset creation
25
+ * Used when default config is selected (which forces public datasets)
26
+ */
27
+ forcePublic?: boolean;
28
+ /**
29
+ * Whether to run in unattended mode (no prompts)
30
+ */
31
+ isUnattended?: boolean;
32
+ /**
33
+ * Requested visibility mode from flags/options
34
+ */
35
+ visibility?: string;
36
+ }
37
+ /**
38
+ * Creates a new dataset with the appropriate ACL mode.
39
+ *
40
+ * This action handles the business logic for:
41
+ * - Determining the appropriate ACL mode based on project capabilities
42
+ * - Creating the dataset via the service layer
43
+ * - Handling errors and providing user feedback
44
+ *
45
+ * @param options - Configuration options
46
+ * @returns Promise resolving when dataset is created
47
+ * @throws Error if dataset creation fails
48
+ */
49
+ export declare function createDataset(options: CreateDatasetOptions): Promise<void>;
@@ -0,0 +1,48 @@
1
+ import { subdebug } from '@sanity/cli-core';
2
+ import { spinner } from '@sanity/cli-core/ux';
3
+ import { createDataset as createDatasetService } from '../../services/datasets.js';
4
+ import { determineDatasetAclMode } from './determineDatasetAclMode.js';
5
+ const debug = subdebug('dataset:create');
6
+ /**
7
+ * Creates a new dataset with the appropriate ACL mode.
8
+ *
9
+ * This action handles the business logic for:
10
+ * - Determining the appropriate ACL mode based on project capabilities
11
+ * - Creating the dataset via the service layer
12
+ * - Handling errors and providing user feedback
13
+ *
14
+ * @param options - Configuration options
15
+ * @returns Promise resolving when dataset is created
16
+ * @throws Error if dataset creation fails
17
+ */ export async function createDataset(options) {
18
+ const { datasetName, forcePublic = false, isUnattended = false, output, projectFeatures, projectId, visibility } = options;
19
+ const canCreatePrivate = projectFeatures.includes('privateDataset') && !forcePublic;
20
+ // Determine the appropriate ACL mode
21
+ const aclMode = await determineDatasetAclMode({
22
+ canCreatePrivate,
23
+ isUnattended,
24
+ output,
25
+ visibility
26
+ });
27
+ try {
28
+ const spin = spinner('Creating dataset').start();
29
+ await createDatasetService({
30
+ aclMode,
31
+ datasetName,
32
+ projectId
33
+ });
34
+ spin.succeed();
35
+ output.log(`Dataset created successfully`);
36
+ } catch (error) {
37
+ const message = error instanceof Error ? error.message : String(error);
38
+ debug('Error creating dataset', {
39
+ datasetName,
40
+ error
41
+ });
42
+ output.error(`Dataset creation failed: ${message}`, {
43
+ exit: 1
44
+ });
45
+ }
46
+ }
47
+
48
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/dataset/create.ts"],"sourcesContent":["import {type Output, subdebug} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\nimport {type DatasetAclMode} from '@sanity/client'\n\nimport {createDataset as createDatasetService} from '../../services/datasets.js'\nimport {determineDatasetAclMode} from './determineDatasetAclMode.js'\n\nconst debug = subdebug('dataset:create')\n\n/**\n * Options for creating a dataset\n */\nexport interface CreateDatasetOptions {\n /**\n * Name of the dataset to create\n */\n datasetName: string\n\n /**\n * Output instance for logging\n */\n output: Output\n\n /**\n * Array of project features to determine capabilities\n * Used to check if private datasets are available\n */\n projectFeatures: string[]\n\n /**\n * Project ID where the dataset will be created\n */\n projectId: string\n\n /**\n * Whether to force disable private dataset creation\n * Used when default config is selected (which forces public datasets)\n */\n forcePublic?: boolean\n\n /**\n * Whether to run in unattended mode (no prompts)\n */\n isUnattended?: boolean\n\n /**\n * Requested visibility mode from flags/options\n */\n visibility?: string\n}\n\n/**\n * Creates a new dataset with the appropriate ACL mode.\n *\n * This action handles the business logic for:\n * - Determining the appropriate ACL mode based on project capabilities\n * - Creating the dataset via the service layer\n * - Handling errors and providing user feedback\n *\n * @param options - Configuration options\n * @returns Promise resolving when dataset is created\n * @throws Error if dataset creation fails\n */\nexport async function createDataset(options: CreateDatasetOptions): Promise<void> {\n const {\n datasetName,\n forcePublic = false,\n isUnattended = false,\n output,\n projectFeatures,\n projectId,\n visibility,\n } = options\n\n const canCreatePrivate = projectFeatures.includes('privateDataset') && !forcePublic\n\n // Determine the appropriate ACL mode\n const aclMode: DatasetAclMode = await determineDatasetAclMode({\n canCreatePrivate,\n isUnattended,\n output,\n visibility,\n })\n\n try {\n const spin = spinner('Creating dataset').start()\n await createDatasetService({\n aclMode,\n datasetName,\n projectId,\n })\n spin.succeed()\n output.log(`Dataset created successfully`)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n debug('Error creating dataset', {datasetName, error})\n output.error(`Dataset creation failed: ${message}`, {exit: 1})\n }\n}\n"],"names":["subdebug","spinner","createDataset","createDatasetService","determineDatasetAclMode","debug","options","datasetName","forcePublic","isUnattended","output","projectFeatures","projectId","visibility","canCreatePrivate","includes","aclMode","spin","start","succeed","log","error","message","Error","String","exit"],"mappings":"AAAA,SAAqBA,QAAQ,QAAO,mBAAkB;AACtD,SAAQC,OAAO,QAAO,sBAAqB;AAG3C,SAAQC,iBAAiBC,oBAAoB,QAAO,6BAA4B;AAChF,SAAQC,uBAAuB,QAAO,+BAA8B;AAEpE,MAAMC,QAAQL,SAAS;AA4CvB;;;;;;;;;;;CAWC,GACD,OAAO,eAAeE,cAAcI,OAA6B;IAC/D,MAAM,EACJC,WAAW,EACXC,cAAc,KAAK,EACnBC,eAAe,KAAK,EACpBC,MAAM,EACNC,eAAe,EACfC,SAAS,EACTC,UAAU,EACX,GAAGP;IAEJ,MAAMQ,mBAAmBH,gBAAgBI,QAAQ,CAAC,qBAAqB,CAACP;IAExE,qCAAqC;IACrC,MAAMQ,UAA0B,MAAMZ,wBAAwB;QAC5DU;QACAL;QACAC;QACAG;IACF;IAEA,IAAI;QACF,MAAMI,OAAOhB,QAAQ,oBAAoBiB,KAAK;QAC9C,MAAMf,qBAAqB;YACzBa;YACAT;YACAK;QACF;QACAK,KAAKE,OAAO;QACZT,OAAOU,GAAG,CAAC,CAAC,4BAA4B,CAAC;IAC3C,EAAE,OAAOC,OAAO;QACd,MAAMC,UAAUD,iBAAiBE,QAAQF,MAAMC,OAAO,GAAGE,OAAOH;QAChEhB,MAAM,0BAA0B;YAACE;YAAac;QAAK;QACnDX,OAAOW,KAAK,CAAC,CAAC,yBAAyB,EAAEC,SAAS,EAAE;YAACG,MAAM;QAAC;IAC9D;AACF"}
@@ -0,0 +1,37 @@
1
+ import { type Output } from '@sanity/cli-core';
2
+ import { type DatasetAclMode } from '@sanity/client';
3
+ /**
4
+ * Options for determining the ACL mode for a dataset
5
+ */
6
+ export interface DetermineDatasetAclModeOptions {
7
+ /**
8
+ * Whether the project has the capability to create private datasets
9
+ */
10
+ canCreatePrivate: boolean;
11
+ /**
12
+ * Output instance for logging warnings
13
+ */
14
+ output: Output;
15
+ /**
16
+ * Whether to run in unattended mode (no prompts)
17
+ */
18
+ isUnattended?: boolean;
19
+ /**
20
+ * Requested visibility mode from flags/options
21
+ */
22
+ visibility?: string;
23
+ }
24
+ /**
25
+ * Determines the appropriate ACL mode for a dataset based on project capabilities
26
+ * and user preferences.
27
+ *
28
+ * This action handles the business logic for:
29
+ * - Validating requested visibility against project capabilities
30
+ * - Falling back to public when private is not available
31
+ * - Prompting user when necessary
32
+ * - Warning user about limitations
33
+ *
34
+ * @param options - Configuration options
35
+ * @returns Promise resolving to the determined ACL mode
36
+ */
37
+ export declare function determineDatasetAclMode(options: DetermineDatasetAclModeOptions): Promise<DatasetAclMode>;
@@ -0,0 +1,36 @@
1
+ import { promptForDatasetAclMode } from '../../prompts/promptForDatasetAclMode.js';
2
+ /**
3
+ * Determines the appropriate ACL mode for a dataset based on project capabilities
4
+ * and user preferences.
5
+ *
6
+ * This action handles the business logic for:
7
+ * - Validating requested visibility against project capabilities
8
+ * - Falling back to public when private is not available
9
+ * - Prompting user when necessary
10
+ * - Warning user about limitations
11
+ *
12
+ * @param options - Configuration options
13
+ * @returns Promise resolving to the determined ACL mode
14
+ */ export async function determineDatasetAclMode(options) {
15
+ const { canCreatePrivate, isUnattended = false, output, visibility } = options;
16
+ // Handle explicit custom/public requests
17
+ if (visibility === 'custom' || visibility === 'public') {
18
+ return visibility;
19
+ }
20
+ // Handle private visibility request
21
+ if (visibility === 'private') {
22
+ if (canCreatePrivate) {
23
+ return 'private';
24
+ }
25
+ output.warn('Private datasets are not available for this project. Creating as public.');
26
+ return 'public';
27
+ }
28
+ // No explicit request - determine based on capabilities and mode
29
+ if (isUnattended || !canCreatePrivate) {
30
+ return 'public';
31
+ }
32
+ // Interactive mode with private capability - prompt user
33
+ return promptForDatasetAclMode(output);
34
+ }
35
+
36
+ //# sourceMappingURL=determineDatasetAclMode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/actions/dataset/determineDatasetAclMode.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {type DatasetAclMode} from '@sanity/client'\n\nimport {promptForDatasetAclMode} from '../../prompts/promptForDatasetAclMode.js'\n\n/**\n * Options for determining the ACL mode for a dataset\n */\nexport interface DetermineDatasetAclModeOptions {\n /**\n * Whether the project has the capability to create private datasets\n */\n canCreatePrivate: boolean\n /**\n * Output instance for logging warnings\n */\n output: Output\n\n /**\n * Whether to run in unattended mode (no prompts)\n */\n isUnattended?: boolean\n /**\n * Requested visibility mode from flags/options\n */\n visibility?: string\n}\n\n/**\n * Determines the appropriate ACL mode for a dataset based on project capabilities\n * and user preferences.\n *\n * This action handles the business logic for:\n * - Validating requested visibility against project capabilities\n * - Falling back to public when private is not available\n * - Prompting user when necessary\n * - Warning user about limitations\n *\n * @param options - Configuration options\n * @returns Promise resolving to the determined ACL mode\n */\nexport async function determineDatasetAclMode(\n options: DetermineDatasetAclModeOptions,\n): Promise<DatasetAclMode> {\n const {canCreatePrivate, isUnattended = false, output, visibility} = options\n\n // Handle explicit custom/public requests\n if (visibility === 'custom' || visibility === 'public') {\n return visibility\n }\n\n // Handle private visibility request\n if (visibility === 'private') {\n if (canCreatePrivate) {\n return 'private'\n }\n\n output.warn('Private datasets are not available for this project. Creating as public.')\n\n return 'public'\n }\n\n // No explicit request - determine based on capabilities and mode\n if (isUnattended || !canCreatePrivate) {\n return 'public'\n }\n\n // Interactive mode with private capability - prompt user\n return promptForDatasetAclMode(output)\n}\n"],"names":["promptForDatasetAclMode","determineDatasetAclMode","options","canCreatePrivate","isUnattended","output","visibility","warn"],"mappings":"AAGA,SAAQA,uBAAuB,QAAO,2CAA0C;AAyBhF;;;;;;;;;;;;CAYC,GACD,OAAO,eAAeC,wBACpBC,OAAuC;IAEvC,MAAM,EAACC,gBAAgB,EAAEC,eAAe,KAAK,EAAEC,MAAM,EAAEC,UAAU,EAAC,GAAGJ;IAErE,yCAAyC;IACzC,IAAII,eAAe,YAAYA,eAAe,UAAU;QACtD,OAAOA;IACT;IAEA,oCAAoC;IACpC,IAAIA,eAAe,WAAW;QAC5B,IAAIH,kBAAkB;YACpB,OAAO;QACT;QAEAE,OAAOE,IAAI,CAAC;QAEZ,OAAO;IACT;IAEA,iEAAiE;IACjE,IAAIH,gBAAgB,CAACD,kBAAkB;QACrC,OAAO;IACT;IAEA,yDAAyD;IACzD,OAAOH,wBAAwBK;AACjC"}
@@ -1,7 +1,9 @@
1
- import { getCliToken, getConfig as getCliUserConfig } from '@sanity/cli-core';
1
+ import { getCliToken, getUserConfig } from '@sanity/cli-core';
2
+ import { getProjectById } from '../../services/projects.js';
3
+ import { getCliUser, getProjectUser } from '../../services/user.js';
2
4
  import { findSanityModulesVersions } from '../versions/findSanityModulesVersions.js';
3
5
  export async function gatherDebugInfo(options) {
4
- const { cliConfig, client, includeSecrets, projectRoot } = options;
6
+ const { cliConfig, includeSecrets, projectRoot } = options;
5
7
  // Gather all info in parallel where possible
6
8
  const [auth, globalConfig, projectConfigResult, versions] = await Promise.all([
7
9
  gatherAuthInfo(includeSecrets),
@@ -10,8 +12,8 @@ export async function gatherDebugInfo(options) {
10
12
  gatherVersionsInfo(projectRoot)
11
13
  ]);
12
14
  // Gather user and project info that depend on auth
13
- const user = await gatherUserInfo(client, auth.hasToken);
14
- const project = await gatherProjectInfo(client, projectConfigResult, auth.hasToken, user);
15
+ const user = await gatherUserInfo(projectConfigResult, auth.hasToken);
16
+ const project = await gatherProjectInfo(projectConfigResult, auth.hasToken, user);
15
17
  return {
16
18
  auth,
17
19
  globalConfig,
@@ -30,19 +32,8 @@ async function gatherAuthInfo(includeSecrets) {
30
32
  userType: 'normal'
31
33
  };
32
34
  }
33
- async function gatherGlobalConfig() {
34
- try {
35
- const [authToken, telemetryConsent] = await Promise.all([
36
- getCliUserConfig('authToken'),
37
- getCliUserConfig('telemetryConsent')
38
- ]);
39
- return {
40
- authToken,
41
- telemetryConsent
42
- };
43
- } catch {
44
- return {};
45
- }
35
+ function gatherGlobalConfig() {
36
+ return getUserConfig().all;
46
37
  }
47
38
  async function gatherProjectConfig(cliConfig) {
48
39
  try {
@@ -64,12 +55,15 @@ async function gatherVersionsInfo(projectRoot) {
64
55
  return [];
65
56
  }
66
57
  }
67
- async function gatherUserInfo(client, hasToken) {
58
+ async function gatherUserInfo(projectConfig, hasToken) {
68
59
  if (!hasToken) {
69
60
  return new Error('Not logged in');
70
61
  }
71
62
  try {
72
- const userInfo = await client.users.getById('me');
63
+ /**
64
+ * If the project config has a project ID, get the user for the project
65
+ * Otherwise, get the user for the global client
66
+ */ const userInfo = projectConfig instanceof Error || !projectConfig.api?.projectId ? await getCliUser() : await getProjectUser(projectConfig.api.projectId);
73
67
  return {
74
68
  email: userInfo.email,
75
69
  id: userInfo.id,
@@ -79,7 +73,7 @@ async function gatherUserInfo(client, hasToken) {
79
73
  return error instanceof Error ? error : new Error('Failed to fetch user info');
80
74
  }
81
75
  }
82
- async function gatherProjectInfo(client, projectConfig, hasToken, user) {
76
+ async function gatherProjectInfo(projectConfig, hasToken, user) {
83
77
  if (!hasToken || projectConfig instanceof Error) {
84
78
  return null;
85
79
  }
@@ -88,7 +82,7 @@ async function gatherProjectInfo(client, projectConfig, hasToken, user) {
88
82
  return null;
89
83
  }
90
84
  try {
91
- const projectInfo = await client.projects.getById(projectId);
85
+ const projectInfo = await getProjectById(projectId);
92
86
  if (!projectInfo) {
93
87
  return new Error(`Project specified in configuration (${projectId}) does not exist in API`);
94
88
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/debug/gatherDebugInfo.ts"],"sourcesContent":["import {\n type CliConfig,\n getCliToken,\n getConfig as getCliUserConfig,\n type ProjectRootResult,\n} from '@sanity/cli-core'\nimport {type SanityClient} from '@sanity/client'\n\nimport {findSanityModulesVersions} from '../versions/findSanityModulesVersions.js'\nimport {type ModuleVersionResult} from '../versions/types.js'\nimport {\n type AuthInfo,\n type DebugInfo,\n type DebugInfoOptions,\n type ProjectInfo,\n type UserInfo,\n} from './types.js'\n\nexport async function gatherDebugInfo(options: DebugInfoOptions): Promise<DebugInfo> {\n const {cliConfig, client, includeSecrets, projectRoot} = options\n\n // Gather all info in parallel where possible\n const [auth, globalConfig, projectConfigResult, versions] = await Promise.all([\n gatherAuthInfo(includeSecrets),\n gatherGlobalConfig(),\n gatherProjectConfig(cliConfig),\n gatherVersionsInfo(projectRoot),\n ])\n\n // Gather user and project info that depend on auth\n const user = await gatherUserInfo(client, auth.hasToken)\n const project = await gatherProjectInfo(client, projectConfigResult, auth.hasToken, user)\n\n return {\n auth,\n globalConfig,\n project,\n projectConfig: projectConfigResult,\n user,\n versions,\n }\n}\n\nasync function gatherAuthInfo(includeSecrets: boolean): Promise<AuthInfo> {\n const token = await getCliToken()\n const hasToken = Boolean(token)\n\n return {\n authToken: includeSecrets && token ? token : '<redacted>',\n hasToken,\n userType: 'normal',\n }\n}\n\nasync function gatherGlobalConfig(): Promise<Record<string, unknown>> {\n try {\n const [authToken, telemetryConsent] = await Promise.all([\n getCliUserConfig('authToken'),\n getCliUserConfig('telemetryConsent'),\n ])\n\n return {\n authToken,\n telemetryConsent,\n }\n } catch {\n return {}\n }\n}\n\nasync function gatherProjectConfig(cliConfig: CliConfig): Promise<CliConfig | Error> {\n try {\n const config = cliConfig\n\n if (!config.api?.projectId) {\n return new Error('Missing required \"api.projectId\" key')\n }\n\n return config\n } catch (error) {\n return error instanceof Error ? error : new Error('Failed to load project config')\n }\n}\n\nasync function gatherVersionsInfo(projectRoot: ProjectRootResult): Promise<ModuleVersionResult[]> {\n try {\n return await findSanityModulesVersions({cwd: projectRoot.directory})\n } catch {\n return []\n }\n}\n\nasync function gatherUserInfo(\n client: SanityClient,\n hasToken: boolean,\n): Promise<Error | UserInfo | null> {\n if (!hasToken) {\n return new Error('Not logged in')\n }\n\n try {\n const userInfo = await client.users.getById('me')\n\n return {\n email: userInfo.email,\n id: userInfo.id,\n name: userInfo.name,\n }\n } catch (error) {\n return error instanceof Error ? error : new Error('Failed to fetch user info')\n }\n}\n\nasync function gatherProjectInfo(\n client: SanityClient,\n projectConfig: CliConfig | Error,\n hasToken: boolean,\n user: Error | UserInfo | null,\n): Promise<Error | ProjectInfo | null> {\n if (!hasToken || projectConfig instanceof Error) {\n return null\n }\n\n const projectId = projectConfig.api?.projectId\n if (!projectId) {\n return null\n }\n\n try {\n const projectInfo = await client.projects.getById(projectId)\n\n if (!projectInfo) {\n return new Error(`Project specified in configuration (${projectId}) does not exist in API`)\n }\n\n const userId = user instanceof Error || !user ? null : user.id\n const member = (projectInfo.members || []).find((member) => member.id === userId)\n\n return {\n displayName: projectInfo.displayName,\n id: projectId,\n // @ts-expect-error - Incorrect type definition in @sanity/client\n userRoles: member && member.roles ? member.roles.map((role) => role.name) : ['<none>'],\n }\n } catch (error) {\n return error instanceof Error ? error : new Error('Failed to fetch project info')\n }\n}\n"],"names":["getCliToken","getConfig","getCliUserConfig","findSanityModulesVersions","gatherDebugInfo","options","cliConfig","client","includeSecrets","projectRoot","auth","globalConfig","projectConfigResult","versions","Promise","all","gatherAuthInfo","gatherGlobalConfig","gatherProjectConfig","gatherVersionsInfo","user","gatherUserInfo","hasToken","project","gatherProjectInfo","projectConfig","token","Boolean","authToken","userType","telemetryConsent","config","api","projectId","Error","error","cwd","directory","userInfo","users","getById","email","id","name","projectInfo","projects","userId","member","members","find","displayName","userRoles","roles","map","role"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/debug/gatherDebugInfo.ts"],"sourcesContent":["import {type CliConfig, getCliToken, getUserConfig, type ProjectRootResult} from '@sanity/cli-core'\n\nimport {getProjectById} from '../../services/projects.js'\nimport {getCliUser, getProjectUser} from '../../services/user.js'\nimport {findSanityModulesVersions} from '../versions/findSanityModulesVersions.js'\nimport {type ModuleVersionResult} from '../versions/types.js'\nimport {\n type AuthInfo,\n type DebugInfo,\n type DebugInfoOptions,\n type ProjectInfo,\n type UserInfo,\n} from './types.js'\n\nexport async function gatherDebugInfo(options: DebugInfoOptions): Promise<DebugInfo> {\n const {cliConfig, includeSecrets, projectRoot} = options\n\n // Gather all info in parallel where possible\n const [auth, globalConfig, projectConfigResult, versions] = await Promise.all([\n gatherAuthInfo(includeSecrets),\n gatherGlobalConfig(),\n gatherProjectConfig(cliConfig),\n gatherVersionsInfo(projectRoot),\n ])\n\n // Gather user and project info that depend on auth\n const user = await gatherUserInfo(projectConfigResult, auth.hasToken)\n const project = await gatherProjectInfo(projectConfigResult, auth.hasToken, user)\n\n return {\n auth,\n globalConfig,\n project,\n projectConfig: projectConfigResult,\n user,\n versions,\n }\n}\n\nasync function gatherAuthInfo(includeSecrets: boolean): Promise<AuthInfo> {\n const token = await getCliToken()\n const hasToken = Boolean(token)\n\n return {\n authToken: includeSecrets && token ? token : '<redacted>',\n hasToken,\n userType: 'normal',\n }\n}\n\nfunction gatherGlobalConfig(): Record<string, unknown> {\n return getUserConfig().all\n}\n\nasync function gatherProjectConfig(cliConfig: CliConfig): Promise<CliConfig | Error> {\n try {\n const config = cliConfig\n\n if (!config.api?.projectId) {\n return new Error('Missing required \"api.projectId\" key')\n }\n\n return config\n } catch (error) {\n return error instanceof Error ? error : new Error('Failed to load project config')\n }\n}\n\nasync function gatherVersionsInfo(projectRoot: ProjectRootResult): Promise<ModuleVersionResult[]> {\n try {\n return await findSanityModulesVersions({cwd: projectRoot.directory})\n } catch {\n return []\n }\n}\n\nasync function gatherUserInfo(\n projectConfig: CliConfig | Error,\n hasToken: boolean,\n): Promise<Error | UserInfo | null> {\n if (!hasToken) {\n return new Error('Not logged in')\n }\n\n try {\n /**\n * If the project config has a project ID, get the user for the project\n * Otherwise, get the user for the global client\n */\n const userInfo =\n projectConfig instanceof Error || !projectConfig.api?.projectId\n ? await getCliUser()\n : await getProjectUser(projectConfig.api.projectId)\n\n return {\n email: userInfo.email,\n id: userInfo.id,\n name: userInfo.name,\n }\n } catch (error) {\n return error instanceof Error ? error : new Error('Failed to fetch user info')\n }\n}\n\nasync function gatherProjectInfo(\n projectConfig: CliConfig | Error,\n hasToken: boolean,\n user: Error | UserInfo | null,\n): Promise<Error | ProjectInfo | null> {\n if (!hasToken || projectConfig instanceof Error) {\n return null\n }\n\n const projectId = projectConfig.api?.projectId\n if (!projectId) {\n return null\n }\n\n try {\n const projectInfo = await getProjectById(projectId)\n\n if (!projectInfo) {\n return new Error(`Project specified in configuration (${projectId}) does not exist in API`)\n }\n\n const userId = user instanceof Error || !user ? null : user.id\n const member = (projectInfo.members || []).find((member) => member.id === userId)\n\n return {\n displayName: projectInfo.displayName,\n id: projectId,\n // @ts-expect-error - Incorrect type definition in @sanity/client\n userRoles: member && member.roles ? member.roles.map((role) => role.name) : ['<none>'],\n }\n } catch (error) {\n return error instanceof Error ? error : new Error('Failed to fetch project info')\n }\n}\n"],"names":["getCliToken","getUserConfig","getProjectById","getCliUser","getProjectUser","findSanityModulesVersions","gatherDebugInfo","options","cliConfig","includeSecrets","projectRoot","auth","globalConfig","projectConfigResult","versions","Promise","all","gatherAuthInfo","gatherGlobalConfig","gatherProjectConfig","gatherVersionsInfo","user","gatherUserInfo","hasToken","project","gatherProjectInfo","projectConfig","token","Boolean","authToken","userType","config","api","projectId","Error","error","cwd","directory","userInfo","email","id","name","projectInfo","userId","member","members","find","displayName","userRoles","roles","map","role"],"mappings":"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"}
@@ -1,9 +1,7 @@
1
1
  import { type CliConfig, type ProjectRootResult } from '@sanity/cli-core';
2
- import { type SanityClient } from '@sanity/client';
3
2
  import { type ModuleVersionResult } from '../versions/types.js';
4
3
  export interface DebugInfoOptions {
5
4
  cliConfig: CliConfig;
6
- client: SanityClient;
7
5
  includeSecrets: boolean;
8
6
  projectRoot: ProjectRootResult;
9
7
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/debug/types.ts"],"sourcesContent":["import {type CliConfig, type ProjectRootResult} from '@sanity/cli-core'\nimport {type SanityClient} from '@sanity/client'\n\nimport {type ModuleVersionResult} from '../versions/types.js'\n\nexport interface DebugInfoOptions {\n cliConfig: CliConfig\n client: SanityClient\n includeSecrets: boolean\n projectRoot: ProjectRootResult\n}\n\nexport interface UserInfo {\n email: string\n id: string\n name: string\n}\n\nexport interface ProjectInfo {\n displayName: string\n id: string\n userRoles: string[]\n}\n\nexport interface AuthInfo {\n authToken: string\n hasToken: boolean\n userType: string\n}\n\nexport interface DebugInfo {\n auth: AuthInfo\n globalConfig: Record<string, unknown>\n project: Error | ProjectInfo | null\n projectConfig: CliConfig | Error\n user: Error | UserInfo | null\n versions: ModuleVersionResult[]\n}\n"],"names":[],"mappings":"AA8BA,WAOC"}
1
+ {"version":3,"sources":["../../../src/actions/debug/types.ts"],"sourcesContent":["import {type CliConfig, type ProjectRootResult} from '@sanity/cli-core'\n\nimport {type ModuleVersionResult} from '../versions/types.js'\n\nexport interface DebugInfoOptions {\n cliConfig: CliConfig\n includeSecrets: boolean\n projectRoot: ProjectRootResult\n}\n\nexport interface UserInfo {\n email: string\n id: string\n name: string\n}\n\nexport interface ProjectInfo {\n displayName: string\n id: string\n userRoles: string[]\n}\n\nexport interface AuthInfo {\n authToken: string\n hasToken: boolean\n userType: string\n}\n\nexport interface DebugInfo {\n auth: AuthInfo\n globalConfig: Record<string, unknown>\n project: Error | ProjectInfo | null\n projectConfig: CliConfig | Error\n user: Error | UserInfo | null\n versions: ModuleVersionResult[]\n}\n"],"names":[],"mappings":"AA4BA,WAOC"}
@@ -10,6 +10,7 @@ import { readModuleVersion } from '../../util/readModuleVersion.js';
10
10
  import { warnAboutMissingAppId } from '../../util/warnAboutMissingAppId.js';
11
11
  import { buildApp } from '../build/buildApp.js';
12
12
  import { shouldAutoUpdate } from '../build/shouldAutoUpdate.js';
13
+ import { extractAppManifest } from '../manifest/extractAppManifest.js';
13
14
  import { checkDir } from './checkDir.js';
14
15
  import { createUserApplicationForApp } from './createUserApplicationForApp.js';
15
16
  import { deployDebug } from './deployDebug.js';
@@ -95,11 +96,23 @@ import { findUserApplicationForApp } from './findUserApplicationForApp.js';
95
96
  base
96
97
  ]
97
98
  }).pipe(createGzip());
99
+ let manifest;
100
+ try {
101
+ manifest = await extractAppManifest({
102
+ flags,
103
+ workDir
104
+ });
105
+ } catch (err) {
106
+ const message = err instanceof Error ? err.message : String(err);
107
+ deployDebug('Error extracting app manifest', err);
108
+ output.warn(`Error extracting app manifest: ${message}`);
109
+ }
98
110
  spin = spinner('Deploying...').start();
99
111
  await createDeployment({
100
112
  applicationId: userApplication.id,
101
113
  isApp: true,
102
114
  isAutoUpdating,
115
+ manifest,
103
116
  tarball,
104
117
  version: installedSdkVersion
105
118
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/deploy/deployApp.ts"],"sourcesContent":["import {basename, dirname} from 'node:path'\nimport {createGzip} from 'node:zlib'\n\nimport {CLIError} from '@oclif/core/errors'\nimport {chalk, spinner} from '@sanity/cli-core/ux'\nimport {pack} from 'tar-fs'\n\nimport {createDeployment} from '../../services/userApplications.js'\nimport {getAppId} from '../../util/appId.js'\nimport {NO_ORGANIZATION_ID} from '../../util/errorMessages.js'\nimport {readModuleVersion} from '../../util/readModuleVersion.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {buildApp} from '../build/buildApp.js'\nimport {shouldAutoUpdate} from '../build/shouldAutoUpdate.js'\nimport {checkDir} from './checkDir.js'\nimport {createUserApplicationForApp} from './createUserApplicationForApp.js'\nimport {deployDebug} from './deployDebug.js'\nimport {findUserApplicationForApp} from './findUserApplicationForApp.js'\nimport {type DeployAppOptions} from './types.js'\n\n/**\n * Deploy a Sanity application.\n *\n * @internal\n */\nexport async function deployApp(options: DeployAppOptions) {\n const {cliConfig, exit, flags, output, sourceDir, workDir} = options\n\n const organizationId = cliConfig.app?.organizationId\n const appId = getAppId(cliConfig)\n const isAutoUpdating = shouldAutoUpdate({cliConfig, flags, output})\n const installedSdkVersion = await readModuleVersion(sourceDir, '@sanity/sdk-react')\n\n if (!installedSdkVersion) {\n output.error(`Failed to find installed @sanity/sdk-react version`, {exit: 1})\n return\n }\n\n if (!organizationId) {\n output.error(NO_ORGANIZATION_ID, {exit: 1})\n return\n }\n\n let spin = spinner('Verifying local content...')\n\n try {\n let userApplication = await findUserApplicationForApp({\n cliConfig,\n organizationId,\n output,\n })\n\n deployDebug(`User application found`, userApplication)\n\n if (!userApplication) {\n deployDebug(`No user application found. Creating a new one`)\n\n userApplication = await createUserApplicationForApp(organizationId)\n deployDebug(`User application created`, userApplication)\n }\n\n // Warn about missing app ID if auto updates are enabled\n if (isAutoUpdating && !appId) {\n warnAboutMissingAppId({appType: 'app', output})\n }\n\n // Always build the project, unless --no-build is passed\n const shouldBuild = flags.build\n if (shouldBuild) {\n deployDebug(`Building app`)\n await buildApp({\n autoUpdatesEnabled: isAutoUpdating,\n cliConfig,\n exit,\n flags,\n outDir: sourceDir,\n output,\n workDir,\n })\n }\n\n // Ensure that the directory exists, is a directory and seems to have valid content\n spin = spin.start()\n try {\n await checkDir(sourceDir)\n spin.succeed()\n } catch (err) {\n spin.fail()\n deployDebug('Error checking directory', err)\n output.error('Error checking directory', {exit: 1})\n return\n }\n\n // Create a tarball of the given directory\n const parentDir = dirname(sourceDir)\n const base = basename(sourceDir)\n const tarball = pack(parentDir, {entries: [base]}).pipe(createGzip())\n\n spin = spinner('Deploying...').start()\n await createDeployment({\n applicationId: userApplication.id,\n isApp: true,\n isAutoUpdating,\n tarball,\n version: installedSdkVersion,\n })\n\n spin.succeed()\n\n // And let the user know we're done\n output.log(`\\n🚀 ${chalk.bold('Success!')} Application deployed`)\n\n if (!appId) {\n output.log(`\\n════ ${chalk.bold('Next step:')} ════`)\n output.log(\n chalk.bold('\\nAdd the deployment.appId to your sanity.cli.js or sanity.cli.ts file:'),\n )\n output.log(`\n${chalk.dim(`app: {\n // your application config here…\n}`)},\n${chalk.bold.green(`deployment: {\n appId: '${userApplication.id}',\n}\\n`)}`)\n }\n } catch (error) {\n spin.clear()\n // Don't throw generic error if user cancels\n if (error.name === 'ExitPromptError') {\n output.error('Deployment cancelled by user', {exit: 1})\n return\n }\n // If the error is a CLIError, we can just output the message & error options (if any), while ensuring we exit\n if (error instanceof CLIError) {\n const {message, ...errorOptions} = error\n output.error(message, {...errorOptions, exit: 1})\n return\n }\n\n deployDebug('Error deploying application', error)\n output.error('Error deploying application', {exit: 1})\n }\n}\n"],"names":["basename","dirname","createGzip","CLIError","chalk","spinner","pack","createDeployment","getAppId","NO_ORGANIZATION_ID","readModuleVersion","warnAboutMissingAppId","buildApp","shouldAutoUpdate","checkDir","createUserApplicationForApp","deployDebug","findUserApplicationForApp","deployApp","options","cliConfig","exit","flags","output","sourceDir","workDir","organizationId","app","appId","isAutoUpdating","installedSdkVersion","error","spin","userApplication","appType","shouldBuild","build","autoUpdatesEnabled","outDir","start","succeed","err","fail","parentDir","base","tarball","entries","pipe","applicationId","id","isApp","version","log","bold","dim","green","clear","name","message","errorOptions"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/deploy/deployApp.ts"],"sourcesContent":["import {basename, dirname} from 'node:path'\nimport {createGzip} from 'node:zlib'\n\nimport {CLIError} from '@oclif/core/errors'\nimport {chalk, spinner} from '@sanity/cli-core/ux'\nimport {pack} from 'tar-fs'\n\nimport {createDeployment} from '../../services/userApplications.js'\nimport {getAppId} from '../../util/appId.js'\nimport {NO_ORGANIZATION_ID} from '../../util/errorMessages.js'\nimport {readModuleVersion} from '../../util/readModuleVersion.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {buildApp} from '../build/buildApp.js'\nimport {shouldAutoUpdate} from '../build/shouldAutoUpdate.js'\nimport {extractAppManifest} from '../manifest/extractAppManifest.js'\nimport {type AppManifest} from '../manifest/types.js'\nimport {checkDir} from './checkDir.js'\nimport {createUserApplicationForApp} from './createUserApplicationForApp.js'\nimport {deployDebug} from './deployDebug.js'\nimport {findUserApplicationForApp} from './findUserApplicationForApp.js'\nimport {type DeployAppOptions} from './types.js'\n\n/**\n * Deploy a Sanity application.\n *\n * @internal\n */\nexport async function deployApp(options: DeployAppOptions) {\n const {cliConfig, exit, flags, output, sourceDir, workDir} = options\n\n const organizationId = cliConfig.app?.organizationId\n const appId = getAppId(cliConfig)\n const isAutoUpdating = shouldAutoUpdate({cliConfig, flags, output})\n const installedSdkVersion = await readModuleVersion(sourceDir, '@sanity/sdk-react')\n\n if (!installedSdkVersion) {\n output.error(`Failed to find installed @sanity/sdk-react version`, {exit: 1})\n return\n }\n\n if (!organizationId) {\n output.error(NO_ORGANIZATION_ID, {exit: 1})\n return\n }\n\n let spin = spinner('Verifying local content...')\n\n try {\n let userApplication = await findUserApplicationForApp({\n cliConfig,\n organizationId,\n output,\n })\n\n deployDebug(`User application found`, userApplication)\n\n if (!userApplication) {\n deployDebug(`No user application found. Creating a new one`)\n\n userApplication = await createUserApplicationForApp(organizationId)\n deployDebug(`User application created`, userApplication)\n }\n\n // Warn about missing app ID if auto updates are enabled\n if (isAutoUpdating && !appId) {\n warnAboutMissingAppId({appType: 'app', output})\n }\n\n // Always build the project, unless --no-build is passed\n const shouldBuild = flags.build\n if (shouldBuild) {\n deployDebug(`Building app`)\n await buildApp({\n autoUpdatesEnabled: isAutoUpdating,\n cliConfig,\n exit,\n flags,\n outDir: sourceDir,\n output,\n workDir,\n })\n }\n\n // Ensure that the directory exists, is a directory and seems to have valid content\n spin = spin.start()\n try {\n await checkDir(sourceDir)\n spin.succeed()\n } catch (err) {\n spin.fail()\n deployDebug('Error checking directory', err)\n output.error('Error checking directory', {exit: 1})\n return\n }\n\n // Create a tarball of the given directory\n const parentDir = dirname(sourceDir)\n const base = basename(sourceDir)\n const tarball = pack(parentDir, {entries: [base]}).pipe(createGzip())\n let manifest: AppManifest | undefined\n try {\n manifest = await extractAppManifest({flags, workDir})\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n deployDebug('Error extracting app manifest', err)\n output.warn(`Error extracting app manifest: ${message}`)\n }\n\n spin = spinner('Deploying...').start()\n await createDeployment({\n applicationId: userApplication.id,\n isApp: true,\n isAutoUpdating,\n manifest,\n tarball,\n version: installedSdkVersion,\n })\n\n spin.succeed()\n\n // And let the user know we're done\n output.log(`\\n🚀 ${chalk.bold('Success!')} Application deployed`)\n\n if (!appId) {\n output.log(`\\n════ ${chalk.bold('Next step:')} ════`)\n output.log(\n chalk.bold('\\nAdd the deployment.appId to your sanity.cli.js or sanity.cli.ts file:'),\n )\n output.log(`\n${chalk.dim(`app: {\n // your application config here…\n}`)},\n${chalk.bold.green(`deployment: {\n appId: '${userApplication.id}',\n}\\n`)}`)\n }\n } catch (error) {\n spin.clear()\n // Don't throw generic error if user cancels\n if (error.name === 'ExitPromptError') {\n output.error('Deployment cancelled by user', {exit: 1})\n return\n }\n // If the error is a CLIError, we can just output the message & error options (if any), while ensuring we exit\n if (error instanceof CLIError) {\n const {message, ...errorOptions} = error\n output.error(message, {...errorOptions, exit: 1})\n return\n }\n\n deployDebug('Error deploying application', error)\n output.error('Error deploying application', {exit: 1})\n }\n}\n"],"names":["basename","dirname","createGzip","CLIError","chalk","spinner","pack","createDeployment","getAppId","NO_ORGANIZATION_ID","readModuleVersion","warnAboutMissingAppId","buildApp","shouldAutoUpdate","extractAppManifest","checkDir","createUserApplicationForApp","deployDebug","findUserApplicationForApp","deployApp","options","cliConfig","exit","flags","output","sourceDir","workDir","organizationId","app","appId","isAutoUpdating","installedSdkVersion","error","spin","userApplication","appType","shouldBuild","build","autoUpdatesEnabled","outDir","start","succeed","err","fail","parentDir","base","tarball","entries","pipe","manifest","message","Error","String","warn","applicationId","id","isApp","version","log","bold","dim","green","clear","name","errorOptions"],"mappings":"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"}
@@ -3,6 +3,7 @@ import { chalk, confirm, logSymbols, spinner } from '@sanity/cli-core/ux';
3
3
  import semver from 'semver';
4
4
  import { startDevServer } from '../../server/devServer.js';
5
5
  import { gracefulServerDeath } from '../../server/gracefulServerDeath.js';
6
+ import { getProjectById } from '../../services/projects.js';
6
7
  import { getAppId } from '../../util/appId.js';
7
8
  import { compareDependencyVersions } from '../../util/compareDependencyVersions.js';
8
9
  import { getPackageManagerChoice } from '../../util/packageManager/packageManagerChoice.js';
@@ -16,7 +17,7 @@ import { devDebug } from './devDebug.js';
16
17
  import { getCoreAppURL } from './getCoreAppUrl.js';
17
18
  import { getDevServerConfig } from './getDevServerConfig.js';
18
19
  export async function startStudioDevServer(options) {
19
- const { apiClient, cliConfig, flags, output, workDir } = options;
20
+ const { cliConfig, flags, output, workDir } = options;
20
21
  const projectId = cliConfig?.api?.projectId;
21
22
  let organizationId;
22
23
  const loadInDashboard = flags['load-in-dashboard'];
@@ -103,14 +104,8 @@ export async function startStudioDevServer(options) {
103
104
  exit: 1
104
105
  });
105
106
  }
106
- const client = await apiClient({
107
- apiVersion: '2025-08-25',
108
- requireUser: true
109
- });
110
107
  try {
111
- const project = await client.request({
112
- uri: `/projects/${projectId}`
113
- });
108
+ const project = await getProjectById(projectId);
114
109
  organizationId = project.organizationId;
115
110
  } catch (error) {
116
111
  devDebug('Error getting organization id from project id', error);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/dev/startStudioDevServer.ts"],"sourcesContent":["import {isInteractive} from '@sanity/cli-core'\nimport {chalk, confirm, logSymbols, spinner} from '@sanity/cli-core/ux'\nimport semver from 'semver'\n\nimport {startDevServer} from '../../server/devServer.js'\nimport {gracefulServerDeath} from '../../server/gracefulServerDeath.js'\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {getPackageManagerChoice} from '../../util/packageManager/packageManagerChoice.js'\nimport {upgradePackages} from '../../util/packageManager/upgradePackages.js'\nimport {readModuleVersion} from '../../util/readModuleVersion.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {checkRequiredDependencies} from '../build/checkRequiredDependencies.js'\nimport {checkStudioDependencyVersions} from '../build/checkStudioDependencyVersions.js'\nimport {shouldAutoUpdate} from '../build/shouldAutoUpdate.js'\nimport {devDebug} from './devDebug.js'\nimport {getCoreAppURL} from './getCoreAppUrl.js'\nimport {getDevServerConfig} from './getDevServerConfig.js'\nimport {type DevActionOptions} from './types.js'\n\nexport async function startStudioDevServer(\n options: DevActionOptions,\n): Promise<{close?: () => Promise<void>}> {\n const {apiClient, cliConfig, flags, output, workDir} = options\n const projectId = cliConfig?.api?.projectId\n let organizationId: string | undefined\n\n const loadInDashboard = flags['load-in-dashboard']\n\n // Check studio dependency versions\n await checkStudioDependencyVersions(workDir, output)\n\n const {installedSanityVersion} = await checkRequiredDependencies(options)\n\n // Check if auto-updates are enabled\n const autoUpdatesEnabled = shouldAutoUpdate({cliConfig, flags, output})\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSanityVersion = semver.parse(installedSanityVersion)?.version\n if (!cleanSanityVersion) {\n throw new Error(`Failed to parse installed Sanity version: ${installedSanityVersion}`)\n }\n\n const sanityDependencies = [\n {name: 'sanity', version: cleanSanityVersion},\n {name: '@sanity/vision', version: cleanSanityVersion},\n ]\n\n output.log(`${logSymbols.info} Running with auto-updates enabled`)\n\n // Check local versions against deployed versions\n let result: Awaited<ReturnType<typeof compareDependencyVersions>> | undefined\n\n const appId = getAppId(cliConfig)\n\n try {\n result = await compareDependencyVersions(sanityDependencies, workDir, {appId})\n } catch (err) {\n output.warn(`Failed to compare local versions against auto-updating versions: ${err}`)\n }\n\n if (!appId) {\n warnAboutMissingAppId({\n appType: 'studio',\n output,\n projectId,\n })\n }\n\n // mismatch between local and auto-updating dependencies\n if (result?.length) {\n const message =\n `The following local package versions are different from the versions currently served at runtime.\\n` +\n `When using auto updates, we recommend that you run with the same versions locally as will be used when deploying.\\n\\n` +\n `${result.map((mod) => ` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\\n')}\\n\\n`\n\n if (isInteractive()) {\n const shouldUpgrade = await confirm({\n default: true,\n message: chalk.yellow(`${message}Do you want to upgrade local versions?`),\n })\n if (shouldUpgrade) {\n await upgradePackages(\n {\n packageManager: (await getPackageManagerChoice(workDir, {interactive: false})).chosen,\n packages: result.map((res) => [res.pkg, res.remote]),\n },\n {output, workDir},\n )\n }\n } else {\n // In this case we warn the user but we don't ask them if they want to upgrade because it's not interactive.\n output.log(chalk.yellow(message))\n }\n }\n }\n\n const config = getDevServerConfig({cliConfig, flags, output, workDir})\n\n if (loadInDashboard) {\n if (!projectId) {\n output.error('Project Id is required to load in dashboard', {exit: 1})\n }\n\n const client = await apiClient({\n apiVersion: '2025-08-25',\n requireUser: true,\n })\n\n try {\n const project = await client.request<{organizationId: string}>({\n uri: `/projects/${projectId}`,\n })\n organizationId = project.organizationId\n } catch (error) {\n devDebug('Error getting organization id from project id', error)\n output.error('Failed to get organization id from project id', {exit: 1})\n }\n }\n\n try {\n const startTime = Date.now()\n const spin = spinner('Starting dev server').start()\n const {close, server} = await startDevServer(config)\n\n const {info: loggerInfo} = server.config.logger\n const {port} = server.config.server\n const httpHost = config.httpHost || 'localhost'\n\n if (loadInDashboard) {\n spin.succeed()\n\n output.log(`Dev server started on port ${port}`)\n output.log(`View your studio in the Sanity dashboard here:`)\n output.log(\n chalk.blue(\n chalk.underline(\n getCoreAppURL({\n httpHost,\n httpPort: port,\n organizationId: organizationId!,\n }),\n ),\n ),\n )\n } else {\n const startupDuration = Date.now() - startTime\n const url = `http://${httpHost || 'localhost'}:${port}${config.basePath}`\n const appType = 'Sanity Studio'\n\n const viteVersion = await readModuleVersion(import.meta.url, 'vite')\n spin.succeed()\n\n loggerInfo(\n `${appType} ` +\n `using ${chalk.cyan(`vite@${viteVersion}`)} ` +\n `ready in ${chalk.cyan(`${Math.ceil(startupDuration)}ms`)} ` +\n `and running at ${chalk.cyan(url)}`,\n )\n }\n\n return {close}\n } catch (err) {\n devDebug('Error starting studio dev server', err)\n throw gracefulServerDeath('dev', config.httpHost, config.httpPort, err)\n }\n}\n"],"names":["isInteractive","chalk","confirm","logSymbols","spinner","semver","startDevServer","gracefulServerDeath","getAppId","compareDependencyVersions","getPackageManagerChoice","upgradePackages","readModuleVersion","warnAboutMissingAppId","checkRequiredDependencies","checkStudioDependencyVersions","shouldAutoUpdate","devDebug","getCoreAppURL","getDevServerConfig","startStudioDevServer","options","apiClient","cliConfig","flags","output","workDir","projectId","api","organizationId","loadInDashboard","installedSanityVersion","autoUpdatesEnabled","cleanSanityVersion","parse","version","Error","sanityDependencies","name","log","info","result","appId","err","warn","appType","length","message","map","mod","pkg","installed","remote","join","shouldUpgrade","default","yellow","packageManager","interactive","chosen","packages","res","config","error","exit","client","apiVersion","requireUser","project","request","uri","startTime","Date","now","spin","start","close","server","loggerInfo","logger","port","httpHost","succeed","blue","underline","httpPort","startupDuration","url","basePath","viteVersion","cyan","Math","ceil"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/actions/dev/startStudioDevServer.ts"],"sourcesContent":["import {isInteractive} from '@sanity/cli-core'\nimport {chalk, confirm, logSymbols, spinner} from '@sanity/cli-core/ux'\nimport semver from 'semver'\n\nimport {startDevServer} from '../../server/devServer.js'\nimport {gracefulServerDeath} from '../../server/gracefulServerDeath.js'\nimport {getProjectById} from '../../services/projects.js'\nimport {getAppId} from '../../util/appId.js'\nimport {compareDependencyVersions} from '../../util/compareDependencyVersions.js'\nimport {getPackageManagerChoice} from '../../util/packageManager/packageManagerChoice.js'\nimport {upgradePackages} from '../../util/packageManager/upgradePackages.js'\nimport {readModuleVersion} from '../../util/readModuleVersion.js'\nimport {warnAboutMissingAppId} from '../../util/warnAboutMissingAppId.js'\nimport {checkRequiredDependencies} from '../build/checkRequiredDependencies.js'\nimport {checkStudioDependencyVersions} from '../build/checkStudioDependencyVersions.js'\nimport {shouldAutoUpdate} from '../build/shouldAutoUpdate.js'\nimport {devDebug} from './devDebug.js'\nimport {getCoreAppURL} from './getCoreAppUrl.js'\nimport {getDevServerConfig} from './getDevServerConfig.js'\nimport {type DevActionOptions} from './types.js'\n\nexport async function startStudioDevServer(\n options: DevActionOptions,\n): Promise<{close?: () => Promise<void>}> {\n const {cliConfig, flags, output, workDir} = options\n const projectId = cliConfig?.api?.projectId\n let organizationId: string | undefined\n\n const loadInDashboard = flags['load-in-dashboard']\n\n // Check studio dependency versions\n await checkStudioDependencyVersions(workDir, output)\n\n const {installedSanityVersion} = await checkRequiredDependencies(options)\n\n // Check if auto-updates are enabled\n const autoUpdatesEnabled = shouldAutoUpdate({cliConfig, flags, output})\n\n if (autoUpdatesEnabled) {\n // Get the clean version without build metadata: https://semver.org/#spec-item-10\n const cleanSanityVersion = semver.parse(installedSanityVersion)?.version\n if (!cleanSanityVersion) {\n throw new Error(`Failed to parse installed Sanity version: ${installedSanityVersion}`)\n }\n\n const sanityDependencies = [\n {name: 'sanity', version: cleanSanityVersion},\n {name: '@sanity/vision', version: cleanSanityVersion},\n ]\n\n output.log(`${logSymbols.info} Running with auto-updates enabled`)\n\n // Check local versions against deployed versions\n let result: Awaited<ReturnType<typeof compareDependencyVersions>> | undefined\n\n const appId = getAppId(cliConfig)\n\n try {\n result = await compareDependencyVersions(sanityDependencies, workDir, {appId})\n } catch (err) {\n output.warn(`Failed to compare local versions against auto-updating versions: ${err}`)\n }\n\n if (!appId) {\n warnAboutMissingAppId({\n appType: 'studio',\n output,\n projectId,\n })\n }\n\n // mismatch between local and auto-updating dependencies\n if (result?.length) {\n const message =\n `The following local package versions are different from the versions currently served at runtime.\\n` +\n `When using auto updates, we recommend that you run with the same versions locally as will be used when deploying.\\n\\n` +\n `${result.map((mod) => ` - ${mod.pkg} (local version: ${mod.installed}, runtime version: ${mod.remote})`).join('\\n')}\\n\\n`\n\n if (isInteractive()) {\n const shouldUpgrade = await confirm({\n default: true,\n message: chalk.yellow(`${message}Do you want to upgrade local versions?`),\n })\n if (shouldUpgrade) {\n await upgradePackages(\n {\n packageManager: (await getPackageManagerChoice(workDir, {interactive: false})).chosen,\n packages: result.map((res) => [res.pkg, res.remote]),\n },\n {output, workDir},\n )\n }\n } else {\n // In this case we warn the user but we don't ask them if they want to upgrade because it's not interactive.\n output.log(chalk.yellow(message))\n }\n }\n }\n\n const config = getDevServerConfig({cliConfig, flags, output, workDir})\n\n if (loadInDashboard) {\n if (!projectId) {\n output.error('Project Id is required to load in dashboard', {exit: 1})\n }\n\n try {\n const project = await getProjectById(projectId!)\n organizationId = project.organizationId!\n } catch (error) {\n devDebug('Error getting organization id from project id', error)\n output.error('Failed to get organization id from project id', {exit: 1})\n }\n }\n\n try {\n const startTime = Date.now()\n const spin = spinner('Starting dev server').start()\n const {close, server} = await startDevServer(config)\n\n const {info: loggerInfo} = server.config.logger\n const {port} = server.config.server\n const httpHost = config.httpHost || 'localhost'\n\n if (loadInDashboard) {\n spin.succeed()\n\n output.log(`Dev server started on port ${port}`)\n output.log(`View your studio in the Sanity dashboard here:`)\n output.log(\n chalk.blue(\n chalk.underline(\n getCoreAppURL({\n httpHost,\n httpPort: port,\n organizationId: organizationId!,\n }),\n ),\n ),\n )\n } else {\n const startupDuration = Date.now() - startTime\n const url = `http://${httpHost || 'localhost'}:${port}${config.basePath}`\n const appType = 'Sanity Studio'\n\n const viteVersion = await readModuleVersion(import.meta.url, 'vite')\n spin.succeed()\n\n loggerInfo(\n `${appType} ` +\n `using ${chalk.cyan(`vite@${viteVersion}`)} ` +\n `ready in ${chalk.cyan(`${Math.ceil(startupDuration)}ms`)} ` +\n `and running at ${chalk.cyan(url)}`,\n )\n }\n\n return {close}\n } catch (err) {\n devDebug('Error starting studio dev server', err)\n throw gracefulServerDeath('dev', config.httpHost, config.httpPort, err)\n }\n}\n"],"names":["isInteractive","chalk","confirm","logSymbols","spinner","semver","startDevServer","gracefulServerDeath","getProjectById","getAppId","compareDependencyVersions","getPackageManagerChoice","upgradePackages","readModuleVersion","warnAboutMissingAppId","checkRequiredDependencies","checkStudioDependencyVersions","shouldAutoUpdate","devDebug","getCoreAppURL","getDevServerConfig","startStudioDevServer","options","cliConfig","flags","output","workDir","projectId","api","organizationId","loadInDashboard","installedSanityVersion","autoUpdatesEnabled","cleanSanityVersion","parse","version","Error","sanityDependencies","name","log","info","result","appId","err","warn","appType","length","message","map","mod","pkg","installed","remote","join","shouldUpgrade","default","yellow","packageManager","interactive","chosen","packages","res","config","error","exit","project","startTime","Date","now","spin","start","close","server","loggerInfo","logger","port","httpHost","succeed","blue","underline","httpPort","startupDuration","url","basePath","viteVersion","cyan","Math","ceil"],"mappings":"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"}
@@ -1,9 +1,7 @@
1
- import { type CliConfig, type GlobalCliClientOptions, type Output } from '@sanity/cli-core';
2
- import { type SanityClient } from '@sanity/client';
1
+ import { type CliConfig, type Output } from '@sanity/cli-core';
3
2
  import { type DevCommand } from '../../commands/dev.js';
4
3
  export type DevFlags = DevCommand['flags'];
5
4
  export interface DevActionOptions {
6
- apiClient: (args: GlobalCliClientOptions) => Promise<SanityClient>;
7
5
  cliConfig: CliConfig;
8
6
  flags: DevFlags;
9
7
  isApp: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/dev/types.ts"],"sourcesContent":["import {type CliConfig, type GlobalCliClientOptions, type Output} from '@sanity/cli-core'\nimport {type SanityClient} from '@sanity/client'\n\nimport {type DevCommand} from '../../commands/dev.js'\n\nexport type DevFlags = DevCommand['flags']\n\nexport interface DevActionOptions {\n apiClient: (args: GlobalCliClientOptions) => Promise<SanityClient>\n cliConfig: CliConfig\n flags: DevFlags\n isApp: boolean\n output: Output\n workDir: string\n}\n"],"names":[],"mappings":"AAOA,WAOC"}
1
+ {"version":3,"sources":["../../../src/actions/dev/types.ts"],"sourcesContent":["import {type CliConfig, type Output} from '@sanity/cli-core'\n\nimport {type DevCommand} from '../../commands/dev.js'\n\nexport type DevFlags = DevCommand['flags']\n\nexport interface DevActionOptions {\n cliConfig: CliConfig\n flags: DevFlags\n isApp: boolean\n output: Output\n workDir: string\n}\n"],"names":[],"mappings":"AAMA,WAMC"}
@@ -1,10 +1,8 @@
1
- import { type ClientConfig } from '@sanity/client';
2
1
  import { type ValidationMarker } from '@sanity/types';
3
2
  import { type ValidationWorkerChannel } from '../../threads/validateDocuments.js';
4
3
  import { type WorkerChannelReceiver } from '../../util/workerChannels.js';
5
4
  import { Level } from './types.js';
6
5
  interface ValidateDocumentsOptions<TReturn = unknown> {
7
- clientConfig: ClientConfig;
8
6
  dataset?: string;
9
7
  level?: Level;
10
8
  maxCustomValidationConcurrency?: number;
@@ -1,8 +1,10 @@
1
1
  import path from 'node:path';
2
2
  import { fileURLToPath } from 'node:url';
3
3
  import { Worker } from 'node:worker_threads';
4
+ import { getGlobalCliClient } from '@sanity/cli-core';
4
5
  import { readPackageUp } from 'read-package-up';
5
6
  import { createReceiver } from '../../util/workerChannels.js';
7
+ import { DOCUMENTS_API_VERSION } from './constants.js';
6
8
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
9
  const defaultReporter = ({ dispose, stream })=>{
8
10
  async function* createValidationGenerator() {
@@ -21,7 +23,11 @@ const defaultReporter = ({ dispose, stream })=>{
21
23
  return createValidationGenerator();
22
24
  };
23
25
  export async function validateDocuments(options) {
24
- const { clientConfig, dataset, level, maxCustomValidationConcurrency, maxFetchConcurrency, ndjsonFilePath, projectId, reporter = defaultReporter, workDir = process.cwd(), workspace } = options;
26
+ const { dataset, level, maxCustomValidationConcurrency, maxFetchConcurrency, ndjsonFilePath, projectId, reporter = defaultReporter, workDir = process.cwd(), workspace } = options;
27
+ const apiClient = await getGlobalCliClient({
28
+ apiVersion: DOCUMENTS_API_VERSION,
29
+ requireUser: true
30
+ });
25
31
  const rootPkgPath = (await readPackageUp({
26
32
  cwd: __dirname
27
33
  }))?.path;
@@ -29,6 +35,20 @@ export async function validateDocuments(options) {
29
35
  throw new Error('Could not find root directory for `sanity` package');
30
36
  }
31
37
  const workerPath = path.join(path.dirname(rootPkgPath), 'dist', 'threads', 'validateDocuments.js');
38
+ const clientConfig = {
39
+ ...apiClient.config(),
40
+ // we set this explictly to true because we pass in a token via the
41
+ // `clientConfiguration` object and also mock a browser environment in
42
+ // this worker which triggers the browser warning
43
+ ignoreBrowserTokenWarning: true,
44
+ // Removing from object so config can be serialized
45
+ // before sent to validation worker
46
+ requester: undefined,
47
+ // we set this explictly to true because the default client configuration
48
+ // from the CLI comes configured with `useProjectHostname: false` when
49
+ // `requireProject` is set to false
50
+ useProjectHostname: true
51
+ };
32
52
  const worker = new Worker(workerPath, {
33
53
  env: process.env,
34
54
  workerData: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/actions/documents/validate.ts"],"sourcesContent":["import path from 'node:path'\nimport {fileURLToPath} from 'node:url'\nimport {Worker} from 'node:worker_threads'\n\nimport {type ClientConfig} from '@sanity/client'\nimport {type ValidationMarker} from '@sanity/types'\nimport {readPackageUp} from 'read-package-up'\n\nimport {\n type ValidateDocumentsWorkerData,\n type ValidationWorkerChannel,\n} from '../../threads/validateDocuments.js'\nimport {createReceiver, type WorkerChannelReceiver} from '../../util/workerChannels.js'\nimport {Level} from './types.js'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\ninterface ValidateDocumentsOptions<TReturn = unknown> {\n clientConfig: ClientConfig\n\n dataset?: string // override\n level?: Level\n maxCustomValidationConcurrency?: number\n maxFetchConcurrency?: number\n ndjsonFilePath?: string\n projectId?: string // override\n reporter?: (worker: WorkerChannelReceiver<ValidationWorkerChannel>) => TReturn\n studioHost?: string\n workDir?: string\n workspace?: string\n}\n\ninterface DocumentValidationResult {\n documentId: string\n documentType: string\n level: ValidationMarker['level']\n markers: ValidationMarker[]\n revision: string\n}\n\nconst defaultReporter = ({dispose, stream}: WorkerChannelReceiver<ValidationWorkerChannel>) => {\n async function* createValidationGenerator() {\n for await (const {documentId, documentType, level, markers, revision} of stream.validation()) {\n const result: DocumentValidationResult = {\n documentId,\n documentType,\n level,\n markers,\n revision,\n }\n\n yield result\n }\n\n await dispose()\n }\n\n return createValidationGenerator()\n}\n\nexport function validateDocuments<TReturn>(\n options: Required<Pick<ValidateDocumentsOptions<TReturn>, 'reporter'>> &\n ValidateDocumentsOptions<TReturn>,\n): Promise<TReturn>\nexport function validateDocuments(\n options: ValidateDocumentsOptions,\n): Promise<AsyncIterable<DocumentValidationResult>>\nexport async function validateDocuments(options: ValidateDocumentsOptions): Promise<unknown> {\n const {\n clientConfig,\n dataset,\n level,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n ndjsonFilePath,\n projectId,\n reporter = defaultReporter,\n workDir = process.cwd(),\n workspace,\n } = options\n\n const rootPkgPath = (await readPackageUp({cwd: __dirname}))?.path\n\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', 'validateDocuments.js')\n\n const worker = new Worker(workerPath, {\n env: process.env,\n workerData: {\n // removes props in the config that make this object fail to serialize\n clientConfig: structuredClone(clientConfig),\n dataset,\n level,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n ndjsonFilePath,\n projectId,\n studioHost: options.studioHost,\n workDir,\n workspace,\n } satisfies ValidateDocumentsWorkerData,\n })\n\n return reporter(createReceiver<ValidationWorkerChannel>(worker))\n}\n"],"names":["path","fileURLToPath","Worker","readPackageUp","createReceiver","__dirname","dirname","url","defaultReporter","dispose","stream","createValidationGenerator","documentId","documentType","level","markers","revision","validation","result","validateDocuments","options","clientConfig","dataset","maxCustomValidationConcurrency","maxFetchConcurrency","ndjsonFilePath","projectId","reporter","workDir","process","cwd","workspace","rootPkgPath","Error","workerPath","join","worker","env","workerData","structuredClone","studioHost"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAC5B,SAAQC,aAAa,QAAO,WAAU;AACtC,SAAQC,MAAM,QAAO,sBAAqB;AAI1C,SAAQC,aAAa,QAAO,kBAAiB;AAM7C,SAAQC,cAAc,QAAmC,+BAA8B;AAGvF,MAAMC,YAAYL,KAAKM,OAAO,CAACL,cAAc,YAAYM,GAAG;AAyB5D,MAAMC,kBAAkB,CAAC,EAACC,OAAO,EAAEC,MAAM,EAAiD;IACxF,gBAAgBC;QACd,WAAW,MAAM,EAACC,UAAU,EAAEC,YAAY,EAAEC,KAAK,EAAEC,OAAO,EAAEC,QAAQ,EAAC,IAAIN,OAAOO,UAAU,GAAI;YAC5F,MAAMC,SAAmC;gBACvCN;gBACAC;gBACAC;gBACAC;gBACAC;YACF;YAEA,MAAME;QACR;QAEA,MAAMT;IACR;IAEA,OAAOE;AACT;AASA,OAAO,eAAeQ,kBAAkBC,OAAiC;IACvE,MAAM,EACJC,YAAY,EACZC,OAAO,EACPR,KAAK,EACLS,8BAA8B,EAC9BC,mBAAmB,EACnBC,cAAc,EACdC,SAAS,EACTC,WAAWnB,eAAe,EAC1BoB,UAAUC,QAAQC,GAAG,EAAE,EACvBC,SAAS,EACV,GAAGX;IAEJ,MAAMY,cAAe,CAAA,MAAM7B,cAAc;QAAC2B,KAAKzB;IAAS,EAAC,GAAIL;IAE7D,IAAI,CAACgC,aAAa;QAChB,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,aAAalC,KAAKmC,IAAI,CAACnC,KAAKM,OAAO,CAAC0B,cAAc,QAAQ,WAAW;IAE3E,MAAMI,SAAS,IAAIlC,OAAOgC,YAAY;QACpCG,KAAKR,QAAQQ,GAAG;QAChBC,YAAY;YACV,sEAAsE;YACtEjB,cAAckB,gBAAgBlB;YAC9BC;YACAR;YACAS;YACAC;YACAC;YACAC;YACAc,YAAYpB,QAAQoB,UAAU;YAC9BZ;YACAG;QACF;IACF;IAEA,OAAOJ,SAASvB,eAAwCgC;AAC1D"}
1
+ {"version":3,"sources":["../../../src/actions/documents/validate.ts"],"sourcesContent":["import path from 'node:path'\nimport {fileURLToPath} from 'node:url'\nimport {Worker} from 'node:worker_threads'\n\nimport {getGlobalCliClient} from '@sanity/cli-core'\nimport {type ClientConfig} from '@sanity/client'\nimport {type ValidationMarker} from '@sanity/types'\nimport {readPackageUp} from 'read-package-up'\n\nimport {\n type ValidateDocumentsWorkerData,\n type ValidationWorkerChannel,\n} from '../../threads/validateDocuments.js'\nimport {createReceiver, type WorkerChannelReceiver} from '../../util/workerChannels.js'\nimport {DOCUMENTS_API_VERSION} from './constants.js'\nimport {Level} from './types.js'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\ninterface ValidateDocumentsOptions<TReturn = unknown> {\n dataset?: string // override\n level?: Level\n maxCustomValidationConcurrency?: number\n maxFetchConcurrency?: number\n ndjsonFilePath?: string\n projectId?: string // override\n reporter?: (worker: WorkerChannelReceiver<ValidationWorkerChannel>) => TReturn\n studioHost?: string\n workDir?: string\n workspace?: string\n}\n\ninterface DocumentValidationResult {\n documentId: string\n documentType: string\n level: ValidationMarker['level']\n markers: ValidationMarker[]\n revision: string\n}\n\nconst defaultReporter = ({dispose, stream}: WorkerChannelReceiver<ValidationWorkerChannel>) => {\n async function* createValidationGenerator() {\n for await (const {documentId, documentType, level, markers, revision} of stream.validation()) {\n const result: DocumentValidationResult = {\n documentId,\n documentType,\n level,\n markers,\n revision,\n }\n\n yield result\n }\n\n await dispose()\n }\n\n return createValidationGenerator()\n}\n\nexport function validateDocuments<TReturn>(\n options: Required<Pick<ValidateDocumentsOptions<TReturn>, 'reporter'>> &\n ValidateDocumentsOptions<TReturn>,\n): Promise<TReturn>\nexport function validateDocuments(\n options: ValidateDocumentsOptions,\n): Promise<AsyncIterable<DocumentValidationResult>>\nexport async function validateDocuments(options: ValidateDocumentsOptions): Promise<unknown> {\n const {\n dataset,\n level,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n ndjsonFilePath,\n projectId,\n reporter = defaultReporter,\n workDir = process.cwd(),\n workspace,\n } = options\n\n const apiClient = await getGlobalCliClient({\n apiVersion: DOCUMENTS_API_VERSION,\n requireUser: true,\n })\n\n const rootPkgPath = (await readPackageUp({cwd: __dirname}))?.path\n\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', 'validateDocuments.js')\n\n const clientConfig: ClientConfig = {\n ...apiClient.config(),\n // we set this explictly to true because we pass in a token via the\n // `clientConfiguration` object and also mock a browser environment in\n // this worker which triggers the browser warning\n ignoreBrowserTokenWarning: true,\n // Removing from object so config can be serialized\n // before sent to validation worker\n requester: undefined,\n // we set this explictly to true because the default client configuration\n // from the CLI comes configured with `useProjectHostname: false` when\n // `requireProject` is set to false\n useProjectHostname: true,\n }\n\n const worker = new Worker(workerPath, {\n env: process.env,\n workerData: {\n // removes props in the config that make this object fail to serialize\n clientConfig: structuredClone(clientConfig),\n dataset,\n level,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n ndjsonFilePath,\n projectId,\n studioHost: options.studioHost,\n workDir,\n workspace,\n } satisfies ValidateDocumentsWorkerData,\n })\n\n return reporter(createReceiver<ValidationWorkerChannel>(worker))\n}\n"],"names":["path","fileURLToPath","Worker","getGlobalCliClient","readPackageUp","createReceiver","DOCUMENTS_API_VERSION","__dirname","dirname","url","defaultReporter","dispose","stream","createValidationGenerator","documentId","documentType","level","markers","revision","validation","result","validateDocuments","options","dataset","maxCustomValidationConcurrency","maxFetchConcurrency","ndjsonFilePath","projectId","reporter","workDir","process","cwd","workspace","apiClient","apiVersion","requireUser","rootPkgPath","Error","workerPath","join","clientConfig","config","ignoreBrowserTokenWarning","requester","undefined","useProjectHostname","worker","env","workerData","structuredClone","studioHost"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAC5B,SAAQC,aAAa,QAAO,WAAU;AACtC,SAAQC,MAAM,QAAO,sBAAqB;AAE1C,SAAQC,kBAAkB,QAAO,mBAAkB;AAGnD,SAAQC,aAAa,QAAO,kBAAiB;AAM7C,SAAQC,cAAc,QAAmC,+BAA8B;AACvF,SAAQC,qBAAqB,QAAO,iBAAgB;AAGpD,MAAMC,YAAYP,KAAKQ,OAAO,CAACP,cAAc,YAAYQ,GAAG;AAuB5D,MAAMC,kBAAkB,CAAC,EAACC,OAAO,EAAEC,MAAM,EAAiD;IACxF,gBAAgBC;QACd,WAAW,MAAM,EAACC,UAAU,EAAEC,YAAY,EAAEC,KAAK,EAAEC,OAAO,EAAEC,QAAQ,EAAC,IAAIN,OAAOO,UAAU,GAAI;YAC5F,MAAMC,SAAmC;gBACvCN;gBACAC;gBACAC;gBACAC;gBACAC;YACF;YAEA,MAAME;QACR;QAEA,MAAMT;IACR;IAEA,OAAOE;AACT;AASA,OAAO,eAAeQ,kBAAkBC,OAAiC;IACvE,MAAM,EACJC,OAAO,EACPP,KAAK,EACLQ,8BAA8B,EAC9BC,mBAAmB,EACnBC,cAAc,EACdC,SAAS,EACTC,WAAWlB,eAAe,EAC1BmB,UAAUC,QAAQC,GAAG,EAAE,EACvBC,SAAS,EACV,GAAGV;IAEJ,MAAMW,YAAY,MAAM9B,mBAAmB;QACzC+B,YAAY5B;QACZ6B,aAAa;IACf;IAEA,MAAMC,cAAe,CAAA,MAAMhC,cAAc;QAAC2B,KAAKxB;IAAS,EAAC,GAAIP;IAE7D,IAAI,CAACoC,aAAa;QAChB,MAAM,IAAIC,MAAM;IAClB;IAEA,MAAMC,aAAatC,KAAKuC,IAAI,CAACvC,KAAKQ,OAAO,CAAC4B,cAAc,QAAQ,WAAW;IAE3E,MAAMI,eAA6B;QACjC,GAAGP,UAAUQ,MAAM,EAAE;QACrB,mEAAmE;QACnE,sEAAsE;QACtE,iDAAiD;QACjDC,2BAA2B;QAC3B,mDAAmD;QACnD,mCAAmC;QACnCC,WAAWC;QACX,yEAAyE;QACzE,sEAAsE;QACtE,mCAAmC;QACnCC,oBAAoB;IACtB;IAEA,MAAMC,SAAS,IAAI5C,OAAOoC,YAAY;QACpCS,KAAKjB,QAAQiB,GAAG;QAChBC,YAAY;YACV,sEAAsE;YACtER,cAAcS,gBAAgBT;YAC9BjB;YACAP;YACAQ;YACAC;YACAC;YACAC;YACAuB,YAAY5B,QAAQ4B,UAAU;YAC9BrB;YACAG;QACF;IACF;IAEA,OAAOJ,SAASvB,eAAwCyC;AAC1D"}