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

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 (527) hide show
  1. package/README.md +2907 -109
  2. package/dist/actions/dataset/create.d.ts +49 -0
  3. package/dist/actions/dataset/create.js +48 -0
  4. package/dist/actions/dataset/create.js.map +1 -0
  5. package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
  6. package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
  7. package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
  8. package/dist/actions/debug/gatherDebugInfo.js +15 -21
  9. package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
  10. package/dist/actions/debug/types.d.ts +0 -2
  11. package/dist/actions/debug/types.js.map +1 -1
  12. package/dist/actions/deploy/deployApp.js +13 -0
  13. package/dist/actions/deploy/deployApp.js.map +1 -1
  14. package/dist/actions/init/remoteTemplate.js +1 -1
  15. package/dist/actions/init/remoteTemplate.js.map +1 -1
  16. package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
  17. package/dist/actions/manifest/extractAppManifest.js +51 -0
  18. package/dist/actions/manifest/extractAppManifest.js.map +1 -0
  19. package/dist/actions/manifest/extractManifest.js +1 -1
  20. package/dist/actions/manifest/extractManifest.js.map +1 -1
  21. package/dist/actions/manifest/types.d.ts +6 -1
  22. package/dist/actions/manifest/types.js.map +1 -1
  23. package/dist/actions/media/importAspects.js +2 -1
  24. package/dist/actions/media/importAspects.js.map +1 -1
  25. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +1 -1
  26. package/dist/actions/telemetry/resolveConsent.d.ts +1 -9
  27. package/dist/actions/telemetry/resolveConsent.js +2 -2
  28. package/dist/actions/telemetry/resolveConsent.js.map +1 -1
  29. package/dist/actions/telemetry/setConsent.d.ts +1 -4
  30. package/dist/actions/telemetry/setConsent.js +4 -8
  31. package/dist/actions/telemetry/setConsent.js.map +1 -1
  32. package/dist/commands/dataset/create.d.ts +0 -2
  33. package/dist/commands/dataset/create.js +8 -54
  34. package/dist/commands/dataset/create.js.map +1 -1
  35. package/dist/commands/debug.js +5 -9
  36. package/dist/commands/debug.js.map +1 -1
  37. package/dist/commands/init.d.ts +6 -1
  38. package/dist/commands/init.js +358 -20
  39. package/dist/commands/init.js.map +1 -1
  40. package/dist/commands/manifest/extract.js +7 -8
  41. package/dist/commands/manifest/extract.js.map +1 -1
  42. package/dist/commands/telemetry/disable.js +0 -1
  43. package/dist/commands/telemetry/disable.js.map +1 -1
  44. package/dist/commands/telemetry/enable.js +0 -1
  45. package/dist/commands/telemetry/enable.js.map +1 -1
  46. package/dist/commands/telemetry/status.js +1 -3
  47. package/dist/commands/telemetry/status.js.map +1 -1
  48. package/dist/config/createCliConfig.d.ts +9 -0
  49. package/dist/hooks/prerun/flushTelemetry.worker.d.ts +2 -0
  50. package/dist/hooks/prerun/flushTelemetry.worker.js +22 -0
  51. package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -0
  52. package/dist/hooks/prerun/setupTelemetry.js +65 -1
  53. package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
  54. package/dist/prompts/init/promptForTypescript.d.ts +2 -0
  55. package/dist/prompts/init/promptForTypescript.js +15 -0
  56. package/dist/prompts/init/promptForTypescript.js.map +1 -0
  57. package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
  58. package/dist/prompts/promptForDatasetAclMode.js +27 -0
  59. package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
  60. package/dist/prompts/promptForDatasetName.d.ts +1 -1
  61. package/dist/prompts/promptForDatasetName.js +4 -1
  62. package/dist/prompts/promptForDatasetName.js.map +1 -1
  63. package/dist/services/organizations.d.ts +3 -1
  64. package/dist/services/organizations.js +2 -1
  65. package/dist/services/organizations.js.map +1 -1
  66. package/dist/services/telemetry.d.ts +2 -0
  67. package/dist/services/telemetry.js +20 -0
  68. package/dist/services/telemetry.js.map +1 -0
  69. package/dist/services/user.d.ts +5 -0
  70. package/dist/services/user.js +12 -1
  71. package/dist/services/user.js.map +1 -1
  72. package/dist/services/userApplications.d.ts +3 -1
  73. package/dist/services/userApplications.js +5 -1
  74. package/dist/services/userApplications.js.map +1 -1
  75. package/dist/telemetry/cli.telemetry.d.ts +20 -0
  76. package/dist/telemetry/cli.telemetry.js +8 -0
  77. package/dist/telemetry/cli.telemetry.js.map +1 -0
  78. package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +5 -0
  79. package/dist/telemetry/store/cleanupOldTelemetryFiles.js +30 -0
  80. package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +1 -0
  81. package/dist/telemetry/store/createTelemetryStore.d.ts +39 -0
  82. package/dist/telemetry/store/createTelemetryStore.js +95 -0
  83. package/dist/telemetry/store/createTelemetryStore.js.map +1 -0
  84. package/dist/telemetry/store/createTraceId.d.ts +10 -0
  85. package/dist/telemetry/store/createTraceId.js +10 -0
  86. package/dist/telemetry/store/createTraceId.js.map +1 -0
  87. package/dist/telemetry/store/debug.d.ts +5 -0
  88. package/dist/telemetry/store/debug.js +7 -0
  89. package/dist/telemetry/store/debug.js.map +1 -0
  90. package/dist/telemetry/store/findTelemetryFiles.d.ts +13 -0
  91. package/dist/telemetry/store/findTelemetryFiles.js +34 -0
  92. package/dist/telemetry/store/findTelemetryFiles.js.map +1 -0
  93. package/dist/telemetry/store/flushTelemetryFiles.d.ts +20 -0
  94. package/dist/telemetry/store/flushTelemetryFiles.js +107 -0
  95. package/dist/telemetry/store/flushTelemetryFiles.js.map +1 -0
  96. package/dist/telemetry/store/generateTelemetryFilePath.d.ts +17 -0
  97. package/dist/telemetry/store/generateTelemetryFilePath.js +30 -0
  98. package/dist/telemetry/store/generateTelemetryFilePath.js.map +1 -0
  99. package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +27 -0
  100. package/dist/telemetry/store/getTelemetryBaseInfo.js +34 -0
  101. package/dist/telemetry/store/getTelemetryBaseInfo.js.map +1 -0
  102. package/dist/telemetry/store/logger.d.ts +6 -0
  103. package/dist/telemetry/store/logger.js +54 -0
  104. package/dist/telemetry/store/logger.js.map +1 -0
  105. package/dist/telemetry/store/trace.d.ts +6 -0
  106. package/dist/telemetry/store/trace.js +150 -0
  107. package/dist/telemetry/store/trace.js.map +1 -0
  108. package/dist/telemetry/utils/readNDJSON.d.ts +10 -0
  109. package/dist/telemetry/utils/readNDJSON.js +18 -0
  110. package/dist/telemetry/utils/readNDJSON.js.map +1 -0
  111. package/dist/util/detectRuntime.d.ts +8 -0
  112. package/dist/util/detectRuntime.js +20 -0
  113. package/dist/util/detectRuntime.js.map +1 -0
  114. package/dist/util/isStaging.d.ts +7 -0
  115. package/dist/util/isStaging.js +10 -0
  116. package/dist/util/isStaging.js.map +1 -0
  117. package/dist/util/parseArguments.d.ts +35 -0
  118. package/dist/util/parseArguments.js +42 -0
  119. package/dist/util/parseArguments.js.map +1 -0
  120. package/oclif.manifest.json +7 -1
  121. package/package.json +25 -18
  122. package/templates/app-quickstart/src/App.css +20 -0
  123. package/templates/app-quickstart/src/App.tsx +25 -0
  124. package/templates/app-quickstart/src/ExampleComponent.css +90 -0
  125. package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
  126. package/templates/app-sanity-ui/src/App.tsx +34 -0
  127. package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
  128. package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
  129. package/templates/blog/README.md +11 -0
  130. package/templates/blog/schemaTypes/author.js +50 -0
  131. package/templates/blog/schemaTypes/blockContent.js +67 -0
  132. package/templates/blog/schemaTypes/category.js +19 -0
  133. package/templates/blog/schemaTypes/index.js +6 -0
  134. package/templates/blog/schemaTypes/post.js +65 -0
  135. package/templates/blog/static/.gitkeep +1 -0
  136. package/templates/clean/README.md +9 -0
  137. package/templates/clean/schemaTypes/index.js +1 -0
  138. package/templates/clean/static/.gitkeep +1 -0
  139. package/templates/ecommerce/README.md +11 -0
  140. package/templates/ecommerce/plugins/.gitkeep +1 -0
  141. package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
  142. package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
  143. package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
  144. package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
  145. package/templates/ecommerce/schemaTypes/category.js +39 -0
  146. package/templates/ecommerce/schemaTypes/index.js +23 -0
  147. package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
  148. package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
  149. package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
  150. package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
  151. package/templates/ecommerce/schemaTypes/product.js +83 -0
  152. package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
  153. package/templates/ecommerce/schemaTypes/vendor.js +39 -0
  154. package/templates/ecommerce/static/.gitkeep +1 -0
  155. package/templates/get-started/README.md +9 -0
  156. package/templates/get-started/plugins/.gitkeep +1 -0
  157. package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
  158. package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
  159. package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
  160. package/templates/get-started/schemaTypes/index.ts +1 -0
  161. package/templates/get-started/static/.gitkeep +1 -0
  162. package/templates/moviedb/README.md +10 -0
  163. package/templates/moviedb/schemaTypes/blockContent.js +67 -0
  164. package/templates/moviedb/schemaTypes/castMember.js +37 -0
  165. package/templates/moviedb/schemaTypes/crewMember.js +52 -0
  166. package/templates/moviedb/schemaTypes/index.js +22 -0
  167. package/templates/moviedb/schemaTypes/movie.js +85 -0
  168. package/templates/moviedb/schemaTypes/person.js +37 -0
  169. package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
  170. package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
  171. package/templates/moviedb/schemaTypes/screening.js +81 -0
  172. package/templates/moviedb/static/.gitkeep +1 -0
  173. package/templates/quickstart/README.md +9 -0
  174. package/templates/quickstart/schemaTypes/index.js +1 -0
  175. package/templates/quickstart/static/.gitkeep +1 -0
  176. package/templates/shared/gitignore.txt +29 -0
  177. package/templates/shared/tsconfig.json +17 -0
  178. package/templates/shopify/README.md +85 -0
  179. package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
  180. package/templates/shopify/components/icons/Shopify.tsx +20 -0
  181. package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
  182. package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
  183. package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
  184. package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
  185. package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
  186. package/templates/shopify/components/media/ColorTheme.tsx +38 -0
  187. package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
  188. package/templates/shopify/components/studio/Navbar.tsx +29 -0
  189. package/templates/shopify/constants.ts +61 -0
  190. package/templates/shopify/docs/features.md +158 -0
  191. package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
  192. package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
  193. package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
  194. package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
  195. package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
  196. package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
  197. package/templates/shopify/schemaTypes/documents/page.ts +70 -0
  198. package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
  199. package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
  200. package/templates/shopify/schemaTypes/index.ts +108 -0
  201. package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
  202. package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
  203. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
  204. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
  205. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
  206. package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
  207. package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
  208. package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
  209. package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
  210. package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
  211. package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
  212. package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
  213. package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
  214. package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
  215. package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
  216. package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
  217. package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
  218. package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
  219. package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
  220. package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
  221. package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
  222. package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
  223. package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
  224. package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
  225. package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
  226. package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
  227. package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
  228. package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
  229. package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
  230. package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
  231. package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
  232. package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
  233. package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
  234. package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
  235. package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
  236. package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
  237. package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
  238. package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
  239. package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
  240. package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
  241. package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
  242. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
  243. package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
  244. package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
  245. package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
  246. package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
  247. package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
  248. package/templates/shopify/static/.gitkeep +1 -0
  249. package/templates/shopify/structure/collectionStructure.ts +9 -0
  250. package/templates/shopify/structure/colorThemeStructure.ts +9 -0
  251. package/templates/shopify/structure/homeStructure.ts +9 -0
  252. package/templates/shopify/structure/index.ts +57 -0
  253. package/templates/shopify/structure/pageStructure.ts +11 -0
  254. package/templates/shopify/structure/productStructure.ts +51 -0
  255. package/templates/shopify/structure/settingStructure.ts +9 -0
  256. package/templates/shopify/utils/blocksToText.ts +20 -0
  257. package/templates/shopify/utils/defineStructure.ts +11 -0
  258. package/templates/shopify/utils/getPriceRange.ts +24 -0
  259. package/templates/shopify/utils/shopifyUrls.ts +22 -0
  260. package/templates/shopify/utils/validateSlug.ts +18 -0
  261. package/templates/shopify-online-storefront/README.md +54 -0
  262. package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
  263. package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
  264. package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
  265. package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
  266. package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
  267. package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
  268. package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
  269. package/templates/shopify-online-storefront/constants.ts +18 -0
  270. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
  271. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
  272. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
  273. package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
  274. package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
  275. package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
  276. package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
  277. package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
  278. package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
  279. package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
  280. package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
  281. package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
  282. package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
  283. package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
  284. package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
  285. package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
  286. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
  287. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
  288. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
  289. package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
  290. package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
  291. package/templates/shopify-online-storefront/structure/index.ts +37 -0
  292. package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
  293. package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
  294. package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
  295. package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
  296. package/dist/actions/build/__tests__/buildApp.test.js +0 -367
  297. package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
  298. package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
  299. package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
  300. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
  301. package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
  302. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
  303. package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
  304. package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
  305. package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
  306. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
  307. package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
  308. package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
  309. package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
  310. package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
  311. package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
  312. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
  313. package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
  314. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
  315. package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
  316. package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
  317. package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
  318. package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
  319. package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
  320. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
  321. package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
  322. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
  323. package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
  324. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
  325. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
  326. package/dist/actions/media/__tests__/importMedia.test.js +0 -182
  327. package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
  328. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
  329. package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
  330. package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
  331. package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
  332. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
  333. package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
  334. package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
  335. package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
  336. package/dist/commands/__tests__/blueprints.test.js +0 -54
  337. package/dist/commands/__tests__/blueprints.test.js.map +0 -1
  338. package/dist/commands/__tests__/build.test.js +0 -132
  339. package/dist/commands/__tests__/build.test.js.map +0 -1
  340. package/dist/commands/__tests__/codemod.test.js +0 -271
  341. package/dist/commands/__tests__/codemod.test.js.map +0 -1
  342. package/dist/commands/__tests__/debug.test.js +0 -590
  343. package/dist/commands/__tests__/debug.test.js.map +0 -1
  344. package/dist/commands/__tests__/deploy.test.js +0 -1945
  345. package/dist/commands/__tests__/deploy.test.js.map +0 -1
  346. package/dist/commands/__tests__/dev.test.js +0 -453
  347. package/dist/commands/__tests__/dev.test.js.map +0 -1
  348. package/dist/commands/__tests__/exec.test.js +0 -207
  349. package/dist/commands/__tests__/exec.test.js.map +0 -1
  350. package/dist/commands/__tests__/init/init.authentication.test.js +0 -73
  351. package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
  352. package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
  353. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
  354. package/dist/commands/__tests__/init/init.plan.test.js +0 -279
  355. package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
  356. package/dist/commands/__tests__/init/init.setup.test.js +0 -335
  357. package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
  358. package/dist/commands/__tests__/install.test.js +0 -282
  359. package/dist/commands/__tests__/install.test.js.map +0 -1
  360. package/dist/commands/__tests__/learn.test.js +0 -29
  361. package/dist/commands/__tests__/learn.test.js.map +0 -1
  362. package/dist/commands/__tests__/logout.test.js +0 -91
  363. package/dist/commands/__tests__/logout.test.js.map +0 -1
  364. package/dist/commands/__tests__/manage.test.js +0 -110
  365. package/dist/commands/__tests__/manage.test.js.map +0 -1
  366. package/dist/commands/__tests__/migration.test.js +0 -119
  367. package/dist/commands/__tests__/migration.test.js.map +0 -1
  368. package/dist/commands/__tests__/preview.test.js +0 -261
  369. package/dist/commands/__tests__/preview.test.js.map +0 -1
  370. package/dist/commands/__tests__/start.test.js +0 -253
  371. package/dist/commands/__tests__/start.test.js.map +0 -1
  372. package/dist/commands/__tests__/undeploy.test.js +0 -382
  373. package/dist/commands/__tests__/undeploy.test.js.map +0 -1
  374. package/dist/commands/__tests__/versions.test.js +0 -142
  375. package/dist/commands/__tests__/versions.test.js.map +0 -1
  376. package/dist/commands/backup/__tests__/disable.test.js +0 -204
  377. package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
  378. package/dist/commands/backup/__tests__/download.test.js +0 -768
  379. package/dist/commands/backup/__tests__/download.test.js.map +0 -1
  380. package/dist/commands/backup/__tests__/enable.test.js +0 -286
  381. package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
  382. package/dist/commands/backup/__tests__/list.test.js +0 -330
  383. package/dist/commands/backup/__tests__/list.test.js.map +0 -1
  384. package/dist/commands/cors/__tests__/add.test.js +0 -376
  385. package/dist/commands/cors/__tests__/add.test.js.map +0 -1
  386. package/dist/commands/cors/__tests__/delete.test.js +0 -308
  387. package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
  388. package/dist/commands/cors/__tests__/list.test.js +0 -241
  389. package/dist/commands/cors/__tests__/list.test.js.map +0 -1
  390. package/dist/commands/dataset/__tests__/copy.test.js +0 -628
  391. package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
  392. package/dist/commands/dataset/__tests__/create.test.js +0 -342
  393. package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
  394. package/dist/commands/dataset/__tests__/delete.test.js +0 -231
  395. package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
  396. package/dist/commands/dataset/__tests__/export.test.js +0 -601
  397. package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
  398. package/dist/commands/dataset/__tests__/import.test.js +0 -53
  399. package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
  400. package/dist/commands/dataset/__tests__/list.test.js +0 -216
  401. package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
  402. package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
  403. package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
  404. package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
  405. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
  406. package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
  407. package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
  408. package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
  409. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
  410. package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
  411. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
  412. package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
  413. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
  414. package/dist/commands/docs/__tests__/browse.test.js +0 -29
  415. package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
  416. package/dist/commands/docs/__tests__/read.test.js +0 -78
  417. package/dist/commands/docs/__tests__/read.test.js.map +0 -1
  418. package/dist/commands/docs/__tests__/search.test.js +0 -255
  419. package/dist/commands/docs/__tests__/search.test.js.map +0 -1
  420. package/dist/commands/documents/__tests__/create.test.js +0 -1030
  421. package/dist/commands/documents/__tests__/create.test.js.map +0 -1
  422. package/dist/commands/documents/__tests__/delete.test.js +0 -300
  423. package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
  424. package/dist/commands/documents/__tests__/get.test.js +0 -182
  425. package/dist/commands/documents/__tests__/get.test.js.map +0 -1
  426. package/dist/commands/documents/__tests__/query.test.js +0 -300
  427. package/dist/commands/documents/__tests__/query.test.js.map +0 -1
  428. package/dist/commands/documents/__tests__/validate.test.js +0 -249
  429. package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
  430. package/dist/commands/graphql/__tests__/list.test.js +0 -240
  431. package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
  432. package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
  433. package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
  434. package/dist/commands/hook/__tests__/attempt.test.js +0 -275
  435. package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
  436. package/dist/commands/hook/__tests__/create.test.js +0 -119
  437. package/dist/commands/hook/__tests__/create.test.js.map +0 -1
  438. package/dist/commands/hook/__tests__/delete.test.js +0 -233
  439. package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
  440. package/dist/commands/hook/__tests__/list.test.js +0 -145
  441. package/dist/commands/hook/__tests__/list.test.js.map +0 -1
  442. package/dist/commands/hook/__tests__/logs.test.js +0 -798
  443. package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
  444. package/dist/commands/manifest/__tests__/extract.test.js +0 -132
  445. package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
  446. package/dist/commands/mcp/__tests__/configure.test.js +0 -397
  447. package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
  448. package/dist/commands/media/__tests__/create-aspect.test.js +0 -173
  449. package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
  450. package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
  451. package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
  452. package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
  453. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
  454. package/dist/commands/media/__tests__/export.test.js +0 -697
  455. package/dist/commands/media/__tests__/export.test.js.map +0 -1
  456. package/dist/commands/media/__tests__/import.test.js +0 -347
  457. package/dist/commands/media/__tests__/import.test.js.map +0 -1
  458. package/dist/commands/openapi/__tests__/get.test.js +0 -149
  459. package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
  460. package/dist/commands/openapi/__tests__/list.test.js +0 -113
  461. package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
  462. package/dist/commands/projects/__tests__/list.test.js +0 -154
  463. package/dist/commands/projects/__tests__/list.test.js.map +0 -1
  464. package/dist/commands/schema/__tests__/delete.test.js +0 -454
  465. package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
  466. package/dist/commands/schema/__tests__/deploy.test.js +0 -348
  467. package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
  468. package/dist/commands/schema/__tests__/extract.test.js +0 -121
  469. package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
  470. package/dist/commands/schema/__tests__/list.test.js +0 -399
  471. package/dist/commands/schema/__tests__/list.test.js.map +0 -1
  472. package/dist/commands/schema/__tests__/validate.test.js +0 -121
  473. package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
  474. package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
  475. package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
  476. package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
  477. package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
  478. package/dist/commands/telemetry/__tests__/status.test.js +0 -155
  479. package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
  480. package/dist/commands/tokens/__tests__/add.test.js +0 -435
  481. package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
  482. package/dist/commands/tokens/__tests__/delete.test.js +0 -405
  483. package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
  484. package/dist/commands/tokens/__tests__/list.test.js +0 -395
  485. package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
  486. package/dist/commands/users/__tests__/invite.test.js +0 -362
  487. package/dist/commands/users/__tests__/invite.test.js.map +0 -1
  488. package/dist/commands/users/__tests__/list.test.js +0 -407
  489. package/dist/commands/users/__tests__/list.test.js.map +0 -1
  490. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
  491. package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
  492. package/dist/services/__tests__/datasetAliases.test.js +0 -131
  493. package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
  494. package/dist/services/__tests__/datasets.test.js +0 -436
  495. package/dist/services/__tests__/datasets.test.js.map +0 -1
  496. package/dist/services/__tests__/graphql.test.js +0 -43
  497. package/dist/services/__tests__/graphql.test.js.map +0 -1
  498. package/dist/services/__tests__/mediaLibraries.test.js +0 -88
  499. package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
  500. package/dist/services/__tests__/projects.test.js +0 -41
  501. package/dist/services/__tests__/projects.test.js.map +0 -1
  502. package/dist/services/__tests__/userApplications.test.js +0 -113
  503. package/dist/services/__tests__/userApplications.test.js.map +0 -1
  504. package/dist/util/__tests__/appId.test.js +0 -31
  505. package/dist/util/__tests__/appId.test.js.map +0 -1
  506. package/dist/util/__tests__/cliClient.test.js +0 -184
  507. package/dist/util/__tests__/cliClient.test.js.map +0 -1
  508. package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
  509. package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
  510. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
  511. package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
  512. package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
  513. package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
  514. package/dist/util/__tests__/getCliVersion.test.js +0 -28
  515. package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
  516. package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
  517. package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
  518. package/dist/util/__tests__/getWorkspace.test.js +0 -37
  519. package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
  520. package/dist/util/__tests__/readPackageJson.test.js +0 -69
  521. package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
  522. package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
  523. package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
  524. package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
  525. package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
  526. package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
  527. package/dist/util/validation/ __tests__/validateDocuments.test.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/documents/__tests__/create.test.ts"],"sourcesContent":["import {randomUUID} from 'node:crypto'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport {runCommand} from '@oclif/test'\nimport {getProjectCliClient} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {watch as chokidarWatch} from 'chokidar'\nimport {execa, execaSync} from 'execa'\nimport json5 from 'json5'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {CreateDocumentCommand} from '../create.js'\n\nvi.mock('node:fs/promises')\nvi.mock('node:os')\nvi.mock('chokidar', () => ({\n watch: vi.fn(),\n}))\nvi.mock('execa')\nvi.mock('json5')\n\nvi.mock('node:crypto', async () => {\n return {\n randomUUID: vi.fn(),\n }\n})\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockFs = vi.mocked(fs)\nconst mockOs = vi.mocked(os)\nconst mockChokidarWatch = vi.mocked(chokidarWatch)\nconst mockExeca = vi.mocked(execa)\nconst mockExecaSync = vi.mocked(execaSync)\nconst mockJson5 = vi.mocked(json5)\nconst mockRandomUUID = vi.mocked(randomUUID)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\n// Helper to set environment variable for tests\nfunction withEditorEnv(testFn: () => Promise<void>) {\n return async () => {\n vi.stubEnv('EDITOR', 'vim')\n try {\n await testFn()\n } finally {\n vi.unstubAllEnvs()\n }\n }\n}\n\n// Base configuration used across tests\nconst baseConfig = {\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n}\n\nconst defaultMocks = {\n cliConfig: baseConfig,\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\n// Helper functions\nconst setupEditorMocks = () => {\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.unlink.mockResolvedValue(undefined)\n mockExecaSync.mockReturnValue(undefined as never)\n}\n\nconst setupWatchMocks = () => {\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.unlink.mockResolvedValue(undefined)\n}\n\ndescribe('#documents:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create one or more documents\n\n USAGE\n $ sanity documents create [FILE] [-d <value>] [--id <value>] [--json5]\n [--missing] [--replace] [--watch]\n\n ARGUMENTS\n [FILE] JSON file to create document(s) from\n\n FLAGS\n -d, --dataset=<value> Dataset to create document(s) in (overrides config)\n --id=<value> Specify a document ID to use. Will fetch remote\n document ID and populate editor.\n --json5 Use JSON5 file type to allow a \"simplified\" version of\n JSON\n --missing On duplicate document IDs, don't modify the target\n document(s)\n --replace On duplicate document IDs, replace existing document\n with specified document(s)\n --watch Write the documents whenever the target file or buffer\n changes\n\n DESCRIPTION\n Create one or more documents\n\n EXAMPLES\n Create the document specified in \"myDocument.json\"\n\n $ sanity documents create myDocument.json\n\n Open configured $EDITOR and create the specified document(s)\n\n $ sanity documents create\n\n Fetch document with the ID \"myDocId\" and open configured $EDITOR with the\n current document content (if any). Replace document with the edited version\n when the editor closes\n\n $ sanity documents create --id myDocId --replace\n\n Open configured $EDITOR and replace the document with the given content on\n each save. Use JSON5 file extension and parser for simplified syntax.\n\n $ sanity documents create --id myDocId --watch --replace --json5\n\n \"\n `)\n })\n\n test('creates document from JSON file and displays success message', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockFs.readFile).toHaveBeenCalledWith(\n path.resolve(process.cwd(), 'test-doc.json'),\n 'utf8',\n )\n expect(mockTransaction).toHaveBeenCalledWith([{create: mockDoc}])\n })\n\n test('creates document with replace flag', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--replace'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Upserted:')\n expect(stdout).toContain('test-doc')\n expect(mockTransaction).toHaveBeenCalledWith([{createOrReplace: mockDoc}])\n })\n\n test('creates document with missing flag', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--missing'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Skipped (already exists):')\n expect(stdout).toContain('test-doc')\n expect(mockTransaction).toHaveBeenCalledWith([{createIfNotExists: mockDoc}])\n })\n\n test(\n 'opens editor when no file specified and creates document from editor content',\n withEditorEnv(async () => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n\n const {stdout} = await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(mockFs.mkdir).toHaveBeenCalledWith('/tmp/sanity-cli', {\n mode: 0o700,\n recursive: true,\n })\n expect(mockExecaSync).toHaveBeenCalled()\n }),\n )\n\n test('uses custom dataset from --dataset flag instead of config', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(\n CreateDocumentCommand,\n ['test-doc.json', '--dataset', 'staging'],\n {\n mocks: {\n ...defaultMocks,\n },\n },\n )\n\n expect(stdout).toContain('Created:')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('throws error when both --replace and --missing flags are used', async () => {\n const {error} = await testCommand(\n CreateDocumentCommand,\n ['test-doc.json', '--replace', '--missing'],\n {mocks: defaultMocks},\n )\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Cannot use both --replace and --missing')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when --id and file path are both provided', async () => {\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--id', 'myDocId'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Cannot use --id when specifying a file path')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no project ID is configured', async () => {\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n },\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {\n api: {\n dataset: undefined,\n projectId: testProjectId,\n },\n },\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('displays error message when file cannot be read', async () => {\n mockFs.readFile.mockRejectedValue(new Error('File not found'))\n\n const {error} = await testCommand(CreateDocumentCommand, ['nonexistent.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to create documents')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('validates document has required _type property', async () => {\n const invalidDoc = {title: 'Test Post'} // Missing _type\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(invalidDoc))\n mockJson5.parse.mockReturnValue(invalidDoc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to create documents')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test(\n 'uses JSON5 when --json5 flag is provided',\n withEditorEnv(async () => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n })\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n\n await testCommand(CreateDocumentCommand, ['--json5'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(mockJson5.stringify).toHaveBeenCalled()\n expect(mockFs.writeFile).toHaveBeenCalledWith(\n expect.stringContaining('.json5'),\n expect.any(String),\n {\n encoding: 'utf8',\n mode: 0o600,\n },\n )\n }),\n )\n\n describe('validation', () => {\n test.each([\n ['non-object document', 'not an object', 'Document must be an object'],\n [\n 'document without _type',\n {title: 'Test'},\n 'Document must have a `_type` property of type string',\n ],\n ['document with empty _type', {_type: '', title: 'Test'}, 'Document _type cannot be empty'],\n [\n 'document with invalid _type format (starts with number)',\n {_type: '1invalid', title: 'Test'},\n 'Document _type must start with a letter',\n ],\n [\n 'document with invalid _type format (special chars)',\n {_type: 'invalid@type', title: 'Test'},\n 'Document _type must start with a letter and contain only alphanumeric characters',\n ],\n [\n 'document with empty _id',\n {_id: ' ', _type: 'test', title: 'Test'},\n 'Document _id cannot be empty',\n ],\n [\n 'document with invalid _id format',\n {_id: 'invalid@id', _type: 'test', title: 'Test'},\n 'Document _id can only contain alphanumeric characters',\n ],\n [\n 'document with _id too long',\n {_id: 'a'.repeat(201), _type: 'test', title: 'Test'},\n 'Document _id cannot be longer than 200 characters',\n ],\n ])('validates %s', async (description, doc, expectedErrorSubstring) => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(doc))\n mockJson5.parse.mockReturnValue(doc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(expectedErrorSubstring)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test.each([\n [\n 'multiple documents with invalid first document',\n [{title: 'Invalid'}, {_type: 'valid', title: 'Valid'}],\n 'Document at index 0 must have a `_type` property of type string',\n ],\n [\n 'multiple documents with invalid second document',\n [{_type: 'valid', title: 'Valid'}, {title: 'Invalid'}],\n 'Document at index 1 must have a `_type` property of type string',\n ],\n ])('validates %s', async (description, docs, expectedErrorSubstring) => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(docs))\n mockJson5.parse.mockReturnValue(docs)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-docs.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(expectedErrorSubstring)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('allows documents with reserved fields but logs debug warning', async () => {\n const docWithReservedFields = {\n _createdAt: '2024-01-01T00:00:00Z',\n _id: 'test-doc',\n _rev: 'some-revision',\n _type: 'post',\n _updatedAt: '2024-01-02T00:00:00Z',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(docWithReservedFields))\n mockJson5.parse.mockReturnValue(docWithReservedFields)\n\n // Should not throw error, but should proceed with document creation\n const {stdout} = await testCommand(CreateDocumentCommand, ['doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockTransaction).toHaveBeenCalledWith([{create: docWithReservedFields}])\n })\n\n test('validates empty document array throws error', async () => {\n const emptyArray: unknown[] = []\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(emptyArray))\n mockJson5.parse.mockReturnValue(emptyArray)\n\n const {error} = await testCommand(CreateDocumentCommand, ['empty-docs.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No documents provided')\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('batch operations', () => {\n test.each([\n ['create', 'create', 'Created:'],\n ['createOrReplace', 'replace', 'Upserted:'],\n ['createIfNotExists', 'missing', 'Skipped (already exists):'],\n ])('handles multiple documents with %s operation', async (operation, flag, expectedMessage) => {\n const mockDocs = [\n {_id: 'doc1', _type: 'post', title: 'Post 1'},\n {_id: 'doc2', _type: 'post', title: 'Post 2'},\n ]\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: operation === 'createIfNotExists' ? 'update' : 'create'},\n {id: 'doc2', operation: operation === 'createIfNotExists' ? 'update' : 'create'},\n ],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDocs))\n mockJson5.parse.mockReturnValue(mockDocs)\n\n const args = ['docs.json']\n if (flag !== 'create') args.push(`--${flag}`)\n\n const {stdout} = await testCommand(CreateDocumentCommand, args, {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain(expectedMessage)\n expect(stdout).toContain('doc1')\n expect(stdout).toContain('doc2')\n\n const expectedMutations = mockDocs.map((doc) => ({[operation]: doc}))\n expect(mockTransaction).toHaveBeenCalledWith(expectedMutations)\n })\n\n test('handles mixed results for createIfNotExists', async () => {\n const mockDocs = [\n {_id: 'doc1', _type: 'post', title: 'Post 1'},\n {_id: 'doc2', _type: 'post', title: 'Post 2'},\n {_id: 'doc3', _type: 'post', title: 'Post 3'},\n ]\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'create'}, // Created\n {id: 'doc2', operation: 'update'}, // Skipped (already exists)\n {id: 'doc3', operation: 'create'}, // Created\n ],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDocs))\n mockJson5.parse.mockReturnValue(mockDocs)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['docs.json', '--missing'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('doc1')\n expect(stdout).toContain('doc3')\n expect(stdout).toContain('Skipped (already exists):')\n expect(stdout).toContain('doc2')\n })\n })\n\n describe('editor workflow', () => {\n test(\n 'fetches existing document with --id flag',\n withEditorEnv(async () => {\n const existingDoc = {\n _id: 'existing-doc',\n _type: 'post',\n title: 'Existing Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'existing-doc', operation: 'update'}],\n }),\n } as never)\n\n const mockGetDocument = vi.fn().mockResolvedValue(existingDoc)\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify({...existingDoc, title: 'Updated Post'}))\n mockJson5.parse.mockReturnValue({...existingDoc, title: 'Updated Post'})\n mockJson5.stringify.mockReturnValue(JSON.stringify(existingDoc, null, 2))\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['--id', 'existing-doc'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(mockGetDocument).toHaveBeenCalledWith('existing-doc')\n expect(mockFs.writeFile).toHaveBeenCalledWith(\n expect.stringContaining('existing-doc.json'),\n JSON.stringify(existingDoc, null, 2),\n expect.objectContaining({mode: 0o600}),\n )\n expect(stdout).toContain('Created:')\n }),\n )\n\n test(\n 'handles no changes made in editor',\n withEditorEnv(async () => {\n const mockTransaction = vi.fn()\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n\n // Set up a predictable UUID so the test can verify no changes were made\n const testUuid = '123e4567-e89b-12d3-a456-426614174000'\n mockRandomUUID.mockReturnValue(testUuid)\n\n const defaultDoc = {\n _id: testUuid,\n _type: 'specify-me',\n }\n\n // First mock the writeFile call for initial template\n const writeFileContent = JSON.stringify(defaultDoc, null, 2)\n mockJson5.stringify.mockReturnValue(writeFileContent)\n\n // Set up the file read to return the exact same content structure\n mockFs.readFile.mockResolvedValue(writeFileContent)\n // Return the exact same object structure that was written\n mockJson5.parse.mockReturnValue(defaultDoc)\n\n await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n // The key test - transaction should not have been called since no changes were made\n expect(mockTransaction).not.toHaveBeenCalled()\n }),\n )\n\n test(\n 'handles write error with already exists hint',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockRejectedValue(new Error('Document already exists')),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n\n const {error} = await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to write documents: Document already exists')\n expect(error?.message).toContain('Perhaps you want to use `--replace` or `--missing`?')\n expect(error?.oclif?.exit).toBe(1)\n }),\n )\n\n test(\n 'handles file cleanup errors silently',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n // Mock unlink to throw an error (should be caught silently)\n mockFs.unlink.mockRejectedValue(new Error('Permission denied'))\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n\n const {stdout} = await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n // Should still succeed despite file cleanup error\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockFs.unlink).toHaveBeenCalled()\n }),\n )\n })\n\n describe('watch mode', () => {\n test(\n 'enables watch mode and logs appropriate messages',\n withEditorEnv(async () => {\n const mockWatcher = {\n on: vi.fn().mockReturnThis(),\n }\n mockChokidarWatch.mockReturnValue(mockWatcher as never)\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupWatchMocks()\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n mockExeca.mockResolvedValue({} as never)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['--watch'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Watch mode:')\n expect(stdout).toContain('Will write documents on each save.')\n expect(stdout).toContain('Press Ctrl + C to cancel watch mode.')\n expect(mockWatcher.on).toHaveBeenCalledWith('change', expect.any(Function))\n expect(mockExeca).toHaveBeenCalledWith('vim', expect.any(Array), {stdio: 'inherit'})\n expect(mockChokidarWatch).toHaveBeenCalledWith(expect.stringContaining('.json'))\n }),\n )\n\n test(\n 'handles file change events in watch mode',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Updated Post',\n }\n\n let changeHandler: () => Promise<void>\n const mockWatcher = {\n on: vi.fn().mockImplementation((event: string, handler: () => Promise<void>) => {\n if (event === 'change') {\n changeHandler = handler\n }\n return mockWatcher\n }),\n }\n mockChokidarWatch.mockReturnValue(mockWatcher as never)\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupWatchMocks()\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n mockExeca.mockResolvedValue({} as never)\n\n // Mock file read to return different content for file change\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n await testCommand(CreateDocumentCommand, ['--watch'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n // Simulate file change\n expect(changeHandler!).toBeDefined()\n await changeHandler!()\n\n expect(mockTransaction).toHaveBeenCalledWith([{create: mockDoc}])\n }),\n )\n })\n})\n"],"names":["randomUUID","fs","os","path","runCommand","getProjectCliClient","testCommand","watch","chokidarWatch","execa","execaSync","json5","afterEach","describe","expect","test","vi","NO_PROJECT_ID","CreateDocumentCommand","mock","fn","actual","importActual","mockFs","mocked","mockOs","mockChokidarWatch","mockExeca","mockExecaSync","mockJson5","mockRandomUUID","mockGetProjectCliClient","testProjectId","testDataset","withEditorEnv","testFn","stubEnv","unstubAllEnvs","baseConfig","api","dataset","projectId","defaultMocks","cliConfig","projectRoot","directory","type","token","setupEditorMocks","tmpdir","mockReturnValue","mkdir","mockResolvedValue","undefined","writeFile","unlink","setupWatchMocks","clearAllMocks","stdout","toMatchInlineSnapshot","mockDoc","_id","_type","title","mockTransaction","commit","results","id","operation","transaction","readFile","JSON","stringify","parse","mocks","toContain","toHaveBeenCalledWith","resolve","process","cwd","create","createOrReplace","createIfNotExists","getDocument","mode","recursive","toHaveBeenCalled","objectContaining","error","toBeInstanceOf","Error","message","oclif","exit","toBe","toEqual","mockRejectedValue","invalidDoc","stringContaining","any","String","encoding","each","repeat","description","doc","expectedErrorSubstring","docs","docWithReservedFields","_createdAt","_rev","_updatedAt","emptyArray","flag","expectedMessage","mockDocs","args","push","expectedMutations","map","existingDoc","mockGetDocument","testUuid","defaultDoc","writeFileContent","not","mockWatcher","on","mockReturnThis","Function","Array","stdio","changeHandler","mockImplementation","event","handler","toBeDefined"],"mappings":"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"}
@@ -1,300 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { testCommand } from '@sanity/cli-test';
3
- import { afterEach, describe, expect, test, vi } from 'vitest';
4
- import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
5
- import { DeleteDocumentCommand } from '../delete.js';
6
- const testProjectId = 'test-project';
7
- const testDataset = 'production';
8
- const defaultMocks = {
9
- cliConfig: {
10
- api: {
11
- dataset: testDataset,
12
- projectId: testProjectId
13
- }
14
- },
15
- projectRoot: {
16
- directory: '/test/path',
17
- path: '/test/path/sanity.config.ts',
18
- type: 'studio'
19
- },
20
- token: 'test-token'
21
- };
22
- const mockTransaction = vi.hoisted(()=>vi.fn());
23
- const mockGetProjectCliClient = vi.hoisted(()=>vi.fn().mockResolvedValue({
24
- transaction: mockTransaction
25
- }));
26
- vi.mock('@sanity/cli-core', async ()=>{
27
- const actual = await vi.importActual('@sanity/cli-core');
28
- return {
29
- ...actual,
30
- getProjectCliClient: mockGetProjectCliClient
31
- };
32
- });
33
- describe('#documents:delete', ()=>{
34
- afterEach(()=>{
35
- vi.clearAllMocks();
36
- });
37
- test('--help works', async ()=>{
38
- const { stdout } = await runCommand([
39
- 'documents delete',
40
- '--help'
41
- ]);
42
- expect(stdout).toMatchInlineSnapshot(`
43
- "Delete one or more documents from the projects configured dataset
44
-
45
- USAGE
46
- $ sanity documents delete ID... [IDS...] [--dataset <value>]
47
-
48
- ARGUMENTS
49
- ID... Document ID to delete
50
- [IDS...] Additional document IDs to delete
51
-
52
- FLAGS
53
- --dataset=<value> NAME to override dataset
54
-
55
- DESCRIPTION
56
- Delete one or more documents from the projects configured dataset
57
-
58
- EXAMPLES
59
- Delete the document with the ID "myDocId"
60
-
61
- $ sanity documents delete myDocId
62
-
63
- ID wrapped in double or single quote works equally well
64
-
65
- $ sanity documents delete 'myDocId'
66
-
67
- Delete document with ID "someDocId" from dataset "blog"
68
-
69
- $ sanity documents delete --dataset=blog someDocId
70
-
71
- Delete the document with ID "doc1" and "doc2"
72
-
73
- $ sanity documents delete doc1 doc2
74
-
75
- "
76
- `);
77
- });
78
- test('deletes a single document successfully', async ()=>{
79
- const mockDelete = vi.fn();
80
- const mockCommit = vi.fn().mockResolvedValue({
81
- results: [
82
- {
83
- id: 'test-doc',
84
- operation: 'delete'
85
- }
86
- ]
87
- });
88
- mockTransaction.mockReturnValue({
89
- commit: mockCommit,
90
- delete: mockDelete
91
- });
92
- const { stdout } = await testCommand(DeleteDocumentCommand, [
93
- 'test-doc'
94
- ], {
95
- mocks: defaultMocks
96
- });
97
- expect(stdout).toContain('Deleted 1 document');
98
- expect(mockDelete).toHaveBeenCalledWith('test-doc');
99
- expect(mockCommit).toHaveBeenCalled();
100
- });
101
- test('deletes multiple documents successfully', async ()=>{
102
- const mockDelete = vi.fn();
103
- const mockCommit = vi.fn().mockResolvedValue({
104
- results: [
105
- {
106
- id: 'doc1',
107
- operation: 'delete'
108
- },
109
- {
110
- id: 'doc2',
111
- operation: 'delete'
112
- },
113
- {
114
- id: 'doc3',
115
- operation: 'delete'
116
- }
117
- ]
118
- });
119
- mockTransaction.mockReturnValue({
120
- commit: mockCommit,
121
- delete: mockDelete
122
- });
123
- const { stdout } = await testCommand(DeleteDocumentCommand, [
124
- 'doc1',
125
- 'doc2',
126
- 'doc3'
127
- ], {
128
- mocks: defaultMocks
129
- });
130
- expect(stdout).toContain('Deleted 3 documents');
131
- expect(mockDelete).toHaveBeenCalledWith('doc1');
132
- expect(mockDelete).toHaveBeenCalledWith('doc2');
133
- expect(mockDelete).toHaveBeenCalledWith('doc3');
134
- expect(mockCommit).toHaveBeenCalled();
135
- });
136
- test('handles documents not found', async ()=>{
137
- const mockDelete = vi.fn();
138
- const mockCommit = vi.fn().mockResolvedValue({
139
- results: [
140
- {
141
- id: 'doc1',
142
- operation: 'delete'
143
- }
144
- ]
145
- });
146
- mockTransaction.mockReturnValue({
147
- commit: mockCommit,
148
- delete: mockDelete
149
- });
150
- const { error } = await testCommand(DeleteDocumentCommand, [
151
- 'doc1',
152
- 'nonexistent-doc'
153
- ], {
154
- mocks: defaultMocks
155
- });
156
- expect(error).toBeInstanceOf(Error);
157
- expect(error?.message).toContain('Document not found: nonexistent-doc');
158
- expect(mockDelete).toHaveBeenCalledWith('doc1');
159
- expect(mockDelete).toHaveBeenCalledWith('nonexistent-doc');
160
- expect(mockCommit).toHaveBeenCalled();
161
- });
162
- test('uses custom dataset when --dataset flag is provided', async ()=>{
163
- const mockDelete = vi.fn();
164
- const mockCommit = vi.fn().mockResolvedValue({
165
- results: [
166
- {
167
- id: 'test-doc',
168
- operation: 'delete'
169
- }
170
- ]
171
- });
172
- mockTransaction.mockReturnValue({
173
- commit: mockCommit,
174
- delete: mockDelete
175
- });
176
- await testCommand(DeleteDocumentCommand, [
177
- 'test-doc',
178
- '--dataset',
179
- 'staging'
180
- ], {
181
- mocks: defaultMocks
182
- });
183
- expect(mockDelete).toHaveBeenCalledWith('test-doc');
184
- // Verify that the projectApiClient was called with the staging dataset
185
- expect(mockGetProjectCliClient).toHaveBeenCalledWith(expect.objectContaining({
186
- dataset: 'staging',
187
- projectId: testProjectId
188
- }));
189
- });
190
- test('throws error when no project ID is configured', async ()=>{
191
- const { error } = await testCommand(DeleteDocumentCommand, [
192
- 'test-doc'
193
- ], {
194
- mocks: {
195
- ...defaultMocks,
196
- cliConfig: {
197
- api: {
198
- dataset: testDataset,
199
- projectId: undefined
200
- }
201
- }
202
- }
203
- });
204
- expect(error).toBeInstanceOf(Error);
205
- expect(error?.message).toEqual(NO_PROJECT_ID);
206
- expect(error?.oclif?.exit).toBe(1);
207
- });
208
- test('throws error when no dataset is configured and none provided', async ()=>{
209
- const { error } = await testCommand(DeleteDocumentCommand, [
210
- 'test-doc'
211
- ], {
212
- mocks: {
213
- ...defaultMocks,
214
- cliConfig: {
215
- api: {
216
- dataset: undefined,
217
- projectId: testProjectId
218
- }
219
- }
220
- }
221
- });
222
- expect(error).toBeInstanceOf(Error);
223
- expect(error?.message).toContain('No dataset specified');
224
- expect(error?.oclif?.exit).toBe(1);
225
- });
226
- test('handles transaction errors gracefully', async ()=>{
227
- const mockDelete = vi.fn();
228
- const mockCommit = vi.fn().mockRejectedValue(new Error('Transaction failed'));
229
- mockTransaction.mockReturnValue({
230
- commit: mockCommit,
231
- delete: mockDelete
232
- });
233
- const { error } = await testCommand(DeleteDocumentCommand, [
234
- 'test-doc'
235
- ], {
236
- mocks: defaultMocks
237
- });
238
- expect(error).toBeInstanceOf(Error);
239
- expect(error?.message).toContain('Failed to delete 1 document: Transaction failed');
240
- expect(error?.oclif?.exit).toBe(1);
241
- expect(mockDelete).toHaveBeenCalledWith('test-doc');
242
- });
243
- test('requires document ID argument', async ()=>{
244
- const { error } = await testCommand(DeleteDocumentCommand, [], {
245
- mocks: defaultMocks
246
- });
247
- expect(error).toBeInstanceOf(Error);
248
- expect(error?.message).toContain('Missing 1 required arg');
249
- });
250
- test('shows singular message when deleting one document', async ()=>{
251
- const mockDelete = vi.fn();
252
- const mockCommit = vi.fn().mockResolvedValue({
253
- results: [
254
- {
255
- id: 'test-doc',
256
- operation: 'delete'
257
- }
258
- ]
259
- });
260
- mockTransaction.mockReturnValue({
261
- commit: mockCommit,
262
- delete: mockDelete
263
- });
264
- const { stdout } = await testCommand(DeleteDocumentCommand, [
265
- 'test-doc'
266
- ], {
267
- mocks: defaultMocks
268
- });
269
- expect(stdout).toContain('Deleted 1 document');
270
- expect(stdout).not.toContain('documents');
271
- });
272
- test('shows plural message when deleting multiple documents', async ()=>{
273
- const mockDelete = vi.fn();
274
- const mockCommit = vi.fn().mockResolvedValue({
275
- results: [
276
- {
277
- id: 'doc1',
278
- operation: 'delete'
279
- },
280
- {
281
- id: 'doc2',
282
- operation: 'delete'
283
- }
284
- ]
285
- });
286
- mockTransaction.mockReturnValue({
287
- commit: mockCommit,
288
- delete: mockDelete
289
- });
290
- const { stdout } = await testCommand(DeleteDocumentCommand, [
291
- 'doc1',
292
- 'doc2'
293
- ], {
294
- mocks: defaultMocks
295
- });
296
- expect(stdout).toContain('Deleted 2 documents');
297
- });
298
- });
299
-
300
- //# sourceMappingURL=delete.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/commands/documents/__tests__/delete.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DeleteDocumentCommand} from '../delete.js'\n\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\nconst defaultMocks = {\n cliConfig: {api: {dataset: testDataset, projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\nconst mockTransaction = vi.hoisted(() => vi.fn())\nconst mockGetProjectCliClient = vi.hoisted(() =>\n vi.fn().mockResolvedValue({\n transaction: mockTransaction,\n }),\n)\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: mockGetProjectCliClient,\n }\n})\n\ndescribe('#documents:delete', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents delete', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Delete one or more documents from the projects configured dataset\n\n USAGE\n $ sanity documents delete ID... [IDS...] [--dataset <value>]\n\n ARGUMENTS\n ID... Document ID to delete\n [IDS...] Additional document IDs to delete\n\n FLAGS\n --dataset=<value> NAME to override dataset\n\n DESCRIPTION\n Delete one or more documents from the projects configured dataset\n\n EXAMPLES\n Delete the document with the ID \"myDocId\"\n\n $ sanity documents delete myDocId\n\n ID wrapped in double or single quote works equally well\n\n $ sanity documents delete 'myDocId'\n\n Delete document with ID \"someDocId\" from dataset \"blog\"\n\n $ sanity documents delete --dataset=blog someDocId\n\n Delete the document with ID \"doc1\" and \"doc2\"\n\n $ sanity documents delete doc1 doc2\n\n \"\n `)\n })\n\n test('deletes a single document successfully', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 1 document')\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('deletes multiple documents successfully', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n {id: 'doc3', operation: 'delete'},\n ],\n })\n\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2', 'doc3'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 3 documents')\n expect(mockDelete).toHaveBeenCalledWith('doc1')\n expect(mockDelete).toHaveBeenCalledWith('doc2')\n expect(mockDelete).toHaveBeenCalledWith('doc3')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('handles documents not found', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'doc1', operation: 'delete'}],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['doc1', 'nonexistent-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Document not found: nonexistent-doc')\n expect(mockDelete).toHaveBeenCalledWith('doc1')\n expect(mockDelete).toHaveBeenCalledWith('nonexistent-doc')\n expect(mockCommit).toHaveBeenCalled()\n })\n\n test('uses custom dataset when --dataset flag is provided', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n await testCommand(DeleteDocumentCommand, ['test-doc', '--dataset', 'staging'], {\n mocks: defaultMocks,\n })\n\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n // Verify that the projectApiClient was called with the staging dataset\n expect(mockGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n projectId: testProjectId,\n }),\n )\n })\n\n test('throws error when no project ID is configured', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: testDataset, projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {dataset: undefined, projectId: testProjectId}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('handles transaction errors gracefully', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockRejectedValue(new Error('Transaction failed'))\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to delete 1 document: Transaction failed')\n expect(error?.oclif?.exit).toBe(1)\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n })\n\n test('requires document ID argument', async () => {\n const {error} = await testCommand(DeleteDocumentCommand, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Missing 1 required arg')\n })\n\n test('shows singular message when deleting one document', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 1 document')\n expect(stdout).not.toContain('documents')\n })\n\n test('shows plural message when deleting multiple documents', async () => {\n const mockDelete = vi.fn()\n const mockCommit = vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n ],\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('Deleted 2 documents')\n })\n})\n"],"names":["runCommand","testCommand","afterEach","describe","expect","test","vi","NO_PROJECT_ID","DeleteDocumentCommand","testProjectId","testDataset","defaultMocks","cliConfig","api","dataset","projectId","projectRoot","directory","path","type","token","mockTransaction","hoisted","fn","mockGetProjectCliClient","mockResolvedValue","transaction","mock","actual","importActual","getProjectCliClient","clearAllMocks","stdout","toMatchInlineSnapshot","mockDelete","mockCommit","results","id","operation","mockReturnValue","commit","delete","mocks","toContain","toHaveBeenCalledWith","toHaveBeenCalled","error","toBeInstanceOf","Error","message","objectContaining","undefined","toEqual","oclif","exit","toBe","mockRejectedValue","not"],"mappings":"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"}
@@ -1,182 +0,0 @@
1
- import { runCommand } from '@oclif/test';
2
- import { chalk } from '@sanity/cli-core/ux';
3
- import { testCommand } from '@sanity/cli-test';
4
- import { afterEach, describe, expect, test, vi } from 'vitest';
5
- import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
6
- import { GetDocumentCommand } from '../get.js';
7
- const testProjectId = 'test-project';
8
- const testDataset = 'production';
9
- const defaultMocks = {
10
- cliConfig: {
11
- api: {
12
- dataset: testDataset,
13
- projectId: testProjectId
14
- }
15
- },
16
- projectRoot: {
17
- directory: '/test/path',
18
- path: '/test/path/sanity.config.ts',
19
- type: 'studio'
20
- },
21
- token: 'test-token'
22
- };
23
- const mockGetDocument = vi.hoisted(()=>vi.fn());
24
- vi.mock('@sanity/cli-core', async ()=>{
25
- const actual = await vi.importActual('@sanity/cli-core');
26
- return {
27
- ...actual,
28
- getProjectCliClient: vi.fn().mockResolvedValue({
29
- getDocument: mockGetDocument
30
- })
31
- };
32
- });
33
- describe('#documents:get', ()=>{
34
- afterEach(()=>{
35
- vi.clearAllMocks();
36
- });
37
- test('--help works', async ()=>{
38
- const { stdout } = await runCommand([
39
- 'documents get',
40
- '--help'
41
- ]);
42
- expect(stdout).toContain('Get and print a document by ID');
43
- expect(stdout).toContain('ARGUMENTS');
44
- expect(stdout).toContain('DOCUMENTID');
45
- });
46
- test('retrieves and displays a document successfully', async ()=>{
47
- const mockDoc = {
48
- _id: 'test-doc',
49
- _type: 'post',
50
- content: 'This is a test post',
51
- title: 'Test Post'
52
- };
53
- mockGetDocument.mockResolvedValue(mockDoc);
54
- const { stdout } = await testCommand(GetDocumentCommand, [
55
- 'test-doc'
56
- ], {
57
- mocks: defaultMocks
58
- });
59
- expect(stdout).toContain('"_id": "test-doc"');
60
- expect(stdout).toContain('"title": "Test Post"');
61
- expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
62
- });
63
- test('displays colorized output when --pretty flag is used', async ()=>{
64
- const mockDoc = {
65
- _id: 'test-doc',
66
- _type: 'post',
67
- title: 'Test Post'
68
- };
69
- mockGetDocument.mockResolvedValue(mockDoc);
70
- const originalChalkLevel = chalk.level;
71
- // Force colorization
72
- chalk.level = 3;
73
- const { stdout } = await testCommand(GetDocumentCommand, [
74
- 'test-doc',
75
- '--pretty'
76
- ], {
77
- capture: {
78
- stripAnsi: false
79
- },
80
- mocks: defaultMocks
81
- });
82
- // Reset chalk level
83
- chalk.level = originalChalkLevel;
84
- // Check that the output contains the document data
85
- expect(stdout).toContain('test-doc');
86
- expect(stdout).toContain('Test Post');
87
- expect(stdout).toContain('_id');
88
- expect(stdout).toContain('_type');
89
- expect(stdout).toContain('title');
90
- // eslint-disable-next-line no-control-regex
91
- expect(stdout).toMatch(/\u001B\[\d+m/);
92
- expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
93
- });
94
- test('uses custom dataset when --dataset flag is provided', async ()=>{
95
- const mockDoc = {
96
- _id: 'test-doc',
97
- _type: 'post',
98
- title: 'Test Post'
99
- };
100
- mockGetDocument.mockResolvedValue(mockDoc);
101
- const { stdout } = await testCommand(GetDocumentCommand, [
102
- 'test-doc',
103
- '--dataset',
104
- 'staging'
105
- ], {
106
- mocks: defaultMocks
107
- });
108
- expect(stdout).toContain('"_id": "test-doc"');
109
- expect(stdout).toContain('"title": "Test Post"');
110
- expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
111
- });
112
- test('throws error when document is not found', async ()=>{
113
- mockGetDocument.mockResolvedValue(null);
114
- const { error } = await testCommand(GetDocumentCommand, [
115
- 'nonexistent-doc'
116
- ], {
117
- mocks: defaultMocks
118
- });
119
- expect(error).toBeInstanceOf(Error);
120
- expect(error?.message).toContain('Document "nonexistent-doc" not found');
121
- expect(error?.oclif?.exit).toBe(1);
122
- expect(mockGetDocument).toHaveBeenCalledWith('nonexistent-doc');
123
- });
124
- test('throws error when no project ID is configured', async ()=>{
125
- const { error } = await testCommand(GetDocumentCommand, [
126
- 'test-doc'
127
- ], {
128
- mocks: {
129
- ...defaultMocks,
130
- cliConfig: {
131
- api: {
132
- dataset: 'production',
133
- projectId: undefined
134
- }
135
- }
136
- }
137
- });
138
- expect(error).toBeInstanceOf(Error);
139
- expect(error?.message).toEqual(NO_PROJECT_ID);
140
- expect(error?.oclif?.exit).toBe(1);
141
- });
142
- test('throws error when no dataset is configured and none provided', async ()=>{
143
- const { error } = await testCommand(GetDocumentCommand, [
144
- 'test-doc'
145
- ], {
146
- mocks: {
147
- ...defaultMocks,
148
- cliConfig: {
149
- api: {
150
- dataset: undefined,
151
- projectId: testProjectId
152
- }
153
- }
154
- }
155
- });
156
- expect(error).toBeInstanceOf(Error);
157
- expect(error?.message).toContain('No dataset specified');
158
- expect(error?.oclif?.exit).toBe(1);
159
- });
160
- test('handles client errors gracefully', async ()=>{
161
- mockGetDocument.mockRejectedValue(new Error('Network error'));
162
- const { error } = await testCommand(GetDocumentCommand, [
163
- 'test-doc'
164
- ], {
165
- mocks: defaultMocks
166
- });
167
- expect(error).toBeInstanceOf(Error);
168
- expect(error?.message).toContain('Failed to fetch document');
169
- expect(error?.oclif?.exit).toBe(1);
170
- expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
171
- });
172
- test('requires document ID argument', async ()=>{
173
- const { error } = await testCommand(GetDocumentCommand, [], {
174
- mocks: defaultMocks
175
- });
176
- expect(error).toBeInstanceOf(Error);
177
- expect(error?.message).toContain('Missing 1 required arg');
178
- expect(error?.oclif?.exit).toBe(2);
179
- });
180
- });
181
-
182
- //# sourceMappingURL=get.test.js.map