@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.
- package/dist/actions/dataset/create.d.ts +49 -0
- package/dist/actions/dataset/create.js +48 -0
- package/dist/actions/dataset/create.js.map +1 -0
- package/dist/actions/dataset/determineDatasetAclMode.d.ts +37 -0
- package/dist/actions/dataset/determineDatasetAclMode.js +36 -0
- package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -0
- package/dist/actions/debug/gatherDebugInfo.js +15 -21
- package/dist/actions/debug/gatherDebugInfo.js.map +1 -1
- package/dist/actions/debug/types.d.ts +0 -2
- package/dist/actions/debug/types.js.map +1 -1
- package/dist/actions/deploy/deployApp.js +13 -0
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/dev/startStudioDevServer.js +3 -8
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/dev/types.d.ts +1 -3
- package/dist/actions/dev/types.js.map +1 -1
- package/dist/actions/documents/validate.d.ts +0 -2
- package/dist/actions/documents/validate.js +21 -1
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/actions/exec/execScript.js +1 -1
- package/dist/actions/exec/execScript.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
- package/dist/actions/init/remoteTemplate.js +1 -1
- package/dist/actions/init/remoteTemplate.js.map +1 -1
- package/dist/actions/manifest/extractAppManifest.d.ts +20 -0
- package/dist/actions/manifest/extractAppManifest.js +51 -0
- package/dist/actions/manifest/extractAppManifest.js.map +1 -0
- package/dist/actions/manifest/extractManifest.js +2 -5
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/manifest/types.d.ts +6 -1
- package/dist/actions/manifest/types.js.map +1 -1
- package/dist/actions/media/importAspects.js +2 -1
- package/dist/actions/media/importAspects.js.map +1 -1
- package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
- package/dist/actions/schema/deleteSchemaAction.js +12 -17
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
- package/dist/actions/schema/deploySchemas.d.ts +15 -0
- package/dist/actions/schema/deploySchemas.js +98 -0
- package/dist/actions/schema/deploySchemas.js.map +1 -0
- package/dist/actions/schema/listSchemas.d.ts +12 -0
- package/dist/actions/schema/listSchemas.js +119 -0
- package/dist/actions/schema/listSchemas.js.map +1 -0
- package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
- package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
- package/dist/actions/schema/utils/debug.d.ts +2 -0
- package/dist/actions/schema/utils/debug.js +5 -0
- package/dist/actions/schema/utils/debug.js.map +1 -0
- package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
- package/dist/actions/schema/utils/manifestExtractor.js +12 -17
- package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
- package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
- package/dist/actions/schema/utils/manifestReader.js +6 -12
- package/dist/actions/schema/utils/manifestReader.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
- package/dist/actions/schema/utils/schemaStoreValidation.js +38 -125
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
- package/dist/actions/users/getMembersForProject.d.ts +1 -3
- package/dist/actions/users/getMembersForProject.js +6 -17
- package/dist/actions/users/getMembersForProject.js.map +1 -1
- package/dist/actions/users/types.d.ts +0 -11
- package/dist/actions/users/types.js.map +1 -1
- package/dist/commands/backup/disable.js +5 -11
- package/dist/commands/backup/disable.js.map +1 -1
- package/dist/commands/backup/enable.js +5 -11
- package/dist/commands/backup/enable.js.map +1 -1
- package/dist/commands/backup/list.js +7 -8
- package/dist/commands/backup/list.js.map +1 -1
- package/dist/commands/cors/add.js +5 -13
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +7 -15
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/cors/list.js +2 -10
- package/dist/commands/cors/list.js.map +1 -1
- package/dist/commands/dataset/create.d.ts +0 -2
- package/dist/commands/dataset/create.js +8 -54
- package/dist/commands/dataset/create.js.map +1 -1
- package/dist/commands/dataset/export.js +4 -4
- package/dist/commands/dataset/export.js.map +1 -1
- package/dist/commands/debug.js +5 -9
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/dev.js +0 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/documents/create.d.ts +1 -0
- package/dist/commands/documents/create.js +10 -9
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/documents/delete.js +2 -3
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/documents/get.js +2 -3
- package/dist/commands/documents/get.js.map +1 -1
- package/dist/commands/documents/query.js +2 -3
- package/dist/commands/documents/query.js.map +1 -1
- package/dist/commands/documents/validate.js +0 -20
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/list.js +2 -2
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/graphql/undeploy.js +4 -9
- package/dist/commands/graphql/undeploy.js.map +1 -1
- package/dist/commands/hook/create.js +2 -6
- package/dist/commands/hook/create.js.map +1 -1
- package/dist/commands/hook/delete.js +5 -17
- package/dist/commands/hook/delete.js.map +1 -1
- package/dist/commands/hook/list.js +2 -8
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/init.d.ts +6 -1
- package/dist/commands/init.js +358 -20
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/manifest/extract.js +7 -8
- package/dist/commands/manifest/extract.js.map +1 -1
- package/dist/commands/media/export.js +2 -2
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +2 -2
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/projects/list.js +2 -6
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/delete.d.ts +1 -1
- package/dist/commands/schema/delete.js +20 -23
- package/dist/commands/schema/delete.js.map +1 -1
- package/dist/commands/schema/deploy.d.ts +16 -0
- package/dist/commands/schema/deploy.js +98 -0
- package/dist/commands/schema/deploy.js.map +1 -0
- package/dist/commands/schema/list.d.ts +15 -0
- package/dist/commands/schema/list.js +104 -0
- package/dist/commands/schema/list.js.map +1 -0
- package/dist/commands/tokens/add.js +3 -5
- package/dist/commands/tokens/add.js.map +1 -1
- package/dist/commands/users/invite.js +6 -17
- package/dist/commands/users/invite.js.map +1 -1
- package/dist/commands/users/list.js +4 -7
- package/dist/commands/users/list.js.map +1 -1
- package/dist/config/createCliConfig.d.ts +13 -4
- package/dist/prompts/init/promptForTypescript.d.ts +2 -0
- package/dist/prompts/init/promptForTypescript.js +15 -0
- package/dist/prompts/init/promptForTypescript.js.map +1 -0
- package/dist/prompts/promptForDatasetAclMode.d.ts +9 -0
- package/dist/prompts/promptForDatasetAclMode.js +27 -0
- package/dist/prompts/promptForDatasetAclMode.js.map +1 -0
- package/dist/prompts/promptForDatasetName.d.ts +1 -1
- package/dist/prompts/promptForDatasetName.js +4 -1
- package/dist/prompts/promptForDatasetName.js.map +1 -1
- package/dist/services/backup.d.ts +8 -0
- package/dist/services/backup.js +19 -0
- package/dist/services/backup.js.map +1 -1
- package/dist/services/cors.d.ts +23 -0
- package/dist/services/cors.js +38 -0
- package/dist/services/cors.js.map +1 -0
- package/dist/services/graphql.d.ts +7 -0
- package/dist/services/graphql.js +11 -0
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/hooks.d.ts +2 -0
- package/dist/services/hooks.js +19 -0
- package/dist/services/hooks.js.map +1 -1
- package/dist/services/organizations.d.ts +4 -2
- package/dist/services/organizations.js +3 -2
- package/dist/services/organizations.js.map +1 -1
- package/dist/services/projects.d.ts +11 -0
- package/dist/services/projects.js +41 -0
- package/dist/services/projects.js.map +1 -1
- package/dist/services/schemas.d.ts +4 -0
- package/dist/services/schemas.js +40 -0
- package/dist/services/schemas.js.map +1 -0
- package/dist/services/user.d.ts +13 -0
- package/dist/services/user.js +27 -3
- package/dist/services/user.js.map +1 -1
- package/dist/services/userApplications.d.ts +3 -1
- package/dist/services/userApplications.js +5 -1
- package/dist/services/userApplications.js.map +1 -1
- package/dist/util/errorMessages.d.ts +1 -0
- package/dist/util/errorMessages.js +1 -0
- package/dist/util/errorMessages.js.map +1 -1
- package/dist/util/getCliVersion.js +1 -1
- package/dist/util/getCliVersion.js.map +1 -1
- package/dist/util/readPackageJson.d.ts +1 -15
- package/dist/util/readPackageJson.js +1 -1
- package/dist/util/readPackageJson.js.map +1 -1
- package/dist/util/uniqBy.d.ts +1 -0
- package/dist/util/uniqBy.js +14 -0
- package/dist/util/uniqBy.js.map +1 -0
- package/oclif.manifest.json +284 -139
- package/package.json +36 -33
- package/templates/app-quickstart/src/App.css +20 -0
- package/templates/app-quickstart/src/App.tsx +25 -0
- package/templates/app-quickstart/src/ExampleComponent.css +90 -0
- package/templates/app-quickstart/src/ExampleComponent.tsx +37 -0
- package/templates/app-sanity-ui/src/App.tsx +34 -0
- package/templates/app-sanity-ui/src/ExampleComponent.tsx +34 -0
- package/templates/app-sanity-ui/src/SanityUI.tsx +23 -0
- package/templates/blog/README.md +11 -0
- package/templates/blog/schemaTypes/author.js +50 -0
- package/templates/blog/schemaTypes/blockContent.js +67 -0
- package/templates/blog/schemaTypes/category.js +19 -0
- package/templates/blog/schemaTypes/index.js +6 -0
- package/templates/blog/schemaTypes/post.js +65 -0
- package/templates/blog/static/.gitkeep +1 -0
- package/templates/clean/README.md +9 -0
- package/templates/clean/schemaTypes/index.js +1 -0
- package/templates/clean/static/.gitkeep +1 -0
- package/templates/ecommerce/README.md +11 -0
- package/templates/ecommerce/plugins/.gitkeep +1 -0
- package/templates/ecommerce/plugins/barcode-input/BarcodeInput.js +62 -0
- package/templates/ecommerce/plugins/barcode-input/index.js +9 -0
- package/templates/ecommerce/plugins/barcode-input/schemaType.js +60 -0
- package/templates/ecommerce/schemaTypes/blockContent.js +67 -0
- package/templates/ecommerce/schemaTypes/category.js +39 -0
- package/templates/ecommerce/schemaTypes/index.js +23 -0
- package/templates/ecommerce/schemaTypes/locale/localeBlockContent.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/localeString.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/localeText.js +19 -0
- package/templates/ecommerce/schemaTypes/locale/supportedLanguages.js +5 -0
- package/templates/ecommerce/schemaTypes/product.js +83 -0
- package/templates/ecommerce/schemaTypes/productVariant.js +52 -0
- package/templates/ecommerce/schemaTypes/vendor.js +39 -0
- package/templates/ecommerce/static/.gitkeep +1 -0
- package/templates/get-started/README.md +9 -0
- package/templates/get-started/plugins/.gitkeep +1 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/CustomDefaultLayout.tsx +16 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/GetStartedTutorial.tsx +104 -0
- package/templates/get-started/plugins/sanity-plugin-tutorial/index.ts +11 -0
- package/templates/get-started/schemaTypes/index.ts +1 -0
- package/templates/get-started/static/.gitkeep +1 -0
- package/templates/moviedb/README.md +10 -0
- package/templates/moviedb/schemaTypes/blockContent.js +67 -0
- package/templates/moviedb/schemaTypes/castMember.js +37 -0
- package/templates/moviedb/schemaTypes/crewMember.js +52 -0
- package/templates/moviedb/schemaTypes/index.js +22 -0
- package/templates/moviedb/schemaTypes/movie.js +85 -0
- package/templates/moviedb/schemaTypes/person.js +37 -0
- package/templates/moviedb/schemaTypes/plotSummaries.js +20 -0
- package/templates/moviedb/schemaTypes/plotSummary.js +24 -0
- package/templates/moviedb/schemaTypes/screening.js +81 -0
- package/templates/moviedb/static/.gitkeep +1 -0
- package/templates/quickstart/README.md +9 -0
- package/templates/quickstart/schemaTypes/index.js +1 -0
- package/templates/quickstart/static/.gitkeep +1 -0
- package/templates/shared/gitignore.txt +29 -0
- package/templates/shared/tsconfig.json +17 -0
- package/templates/shopify/README.md +85 -0
- package/templates/shopify/components/hotspots/ProductTooltip.tsx +38 -0
- package/templates/shopify/components/icons/Shopify.tsx +20 -0
- package/templates/shopify/components/inputs/CollectionHidden.tsx +23 -0
- package/templates/shopify/components/inputs/PlaceholderString.tsx +20 -0
- package/templates/shopify/components/inputs/ProductHidden.tsx +64 -0
- package/templates/shopify/components/inputs/ProductVariantHidden.tsx +24 -0
- package/templates/shopify/components/inputs/ProxyString.tsx +32 -0
- package/templates/shopify/components/media/ColorTheme.tsx +38 -0
- package/templates/shopify/components/media/ShopifyDocumentStatus.tsx +82 -0
- package/templates/shopify/components/studio/Navbar.tsx +29 -0
- package/templates/shopify/constants.ts +61 -0
- package/templates/shopify/docs/features.md +158 -0
- package/templates/shopify/plugins/customDocumentActions/index.ts +55 -0
- package/templates/shopify/plugins/customDocumentActions/shopifyDelete.tsx +144 -0
- package/templates/shopify/plugins/customDocumentActions/shopifyLink.ts +39 -0
- package/templates/shopify/plugins/customDocumentActions/types.ts +14 -0
- package/templates/shopify/schemaTypes/documents/collection.tsx +142 -0
- package/templates/shopify/schemaTypes/documents/colorTheme.tsx +44 -0
- package/templates/shopify/schemaTypes/documents/page.ts +70 -0
- package/templates/shopify/schemaTypes/documents/product.tsx +132 -0
- package/templates/shopify/schemaTypes/documents/productVariant.tsx +67 -0
- package/templates/shopify/schemaTypes/index.ts +108 -0
- package/templates/shopify/schemaTypes/objects/collection/collectionGroupType.ts +27 -0
- package/templates/shopify/schemaTypes/objects/collection/collectionLinksType.ts +16 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorObjectType.tsx +48 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionColorType.tsx +50 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeObjectType.ts +40 -0
- package/templates/shopify/schemaTypes/objects/customProductOption/customProductOptionSizeType.ts +49 -0
- package/templates/shopify/schemaTypes/objects/global/footerType.ts +22 -0
- package/templates/shopify/schemaTypes/objects/global/menuLinksType.ts +21 -0
- package/templates/shopify/schemaTypes/objects/global/menuType.ts +17 -0
- package/templates/shopify/schemaTypes/objects/global/notFoundPageType.ts +37 -0
- package/templates/shopify/schemaTypes/objects/hotspot/imageWithProductHotspotsType.ts +48 -0
- package/templates/shopify/schemaTypes/objects/hotspot/productHotspotsType.tsx +17 -0
- package/templates/shopify/schemaTypes/objects/hotspot/spotType.tsx +60 -0
- package/templates/shopify/schemaTypes/objects/link/linkEmailType.tsx +34 -0
- package/templates/shopify/schemaTypes/objects/link/linkExternalType.tsx +37 -0
- package/templates/shopify/schemaTypes/objects/link/linkInternalType.tsx +33 -0
- package/templates/shopify/schemaTypes/objects/link/linkProductType.tsx +60 -0
- package/templates/shopify/schemaTypes/objects/module/accordionGroupType.ts +33 -0
- package/templates/shopify/schemaTypes/objects/module/accordionType.ts +28 -0
- package/templates/shopify/schemaTypes/objects/module/callToActionType.tsx +85 -0
- package/templates/shopify/schemaTypes/objects/module/calloutType.ts +38 -0
- package/templates/shopify/schemaTypes/objects/module/collectionReferenceType.tsx +47 -0
- package/templates/shopify/schemaTypes/objects/module/gridItemType.ts +41 -0
- package/templates/shopify/schemaTypes/objects/module/gridType.ts +28 -0
- package/templates/shopify/schemaTypes/objects/module/heroType.tsx +40 -0
- package/templates/shopify/schemaTypes/objects/module/imageCallToActionType.tsx +19 -0
- package/templates/shopify/schemaTypes/objects/module/imageFeatureType.ts +80 -0
- package/templates/shopify/schemaTypes/objects/module/imageFeaturesType.tsx +51 -0
- package/templates/shopify/schemaTypes/objects/module/instagramType.ts +35 -0
- package/templates/shopify/schemaTypes/objects/module/productFeaturesType.tsx +50 -0
- package/templates/shopify/schemaTypes/objects/module/productReferenceType.tsx +42 -0
- package/templates/shopify/schemaTypes/objects/seoType.ts +31 -0
- package/templates/shopify/schemaTypes/objects/shopify/collectionRuleType.tsx +37 -0
- package/templates/shopify/schemaTypes/objects/shopify/inventoryType.ts +25 -0
- package/templates/shopify/schemaTypes/objects/shopify/optionType.tsx +31 -0
- package/templates/shopify/schemaTypes/objects/shopify/placeholderStringType.ts +11 -0
- package/templates/shopify/schemaTypes/objects/shopify/priceRangeType.ts +20 -0
- package/templates/shopify/schemaTypes/objects/shopify/productWithVariantType.tsx +142 -0
- package/templates/shopify/schemaTypes/objects/shopify/proxyStringType.ts +12 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopType.ts +15 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyCollectionType.ts +84 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyProductType.ts +131 -0
- package/templates/shopify/schemaTypes/objects/shopify/shopifyProductVariantType.ts +121 -0
- package/templates/shopify/schemaTypes/portableText/portableTextSimpleType.tsx +45 -0
- package/templates/shopify/schemaTypes/portableText/portableTextType.tsx +52 -0
- package/templates/shopify/schemaTypes/singletons/homeType.ts +49 -0
- package/templates/shopify/schemaTypes/singletons/settingsType.ts +96 -0
- package/templates/shopify/static/.gitkeep +1 -0
- package/templates/shopify/structure/collectionStructure.ts +9 -0
- package/templates/shopify/structure/colorThemeStructure.ts +9 -0
- package/templates/shopify/structure/homeStructure.ts +9 -0
- package/templates/shopify/structure/index.ts +57 -0
- package/templates/shopify/structure/pageStructure.ts +11 -0
- package/templates/shopify/structure/productStructure.ts +51 -0
- package/templates/shopify/structure/settingStructure.ts +9 -0
- package/templates/shopify/utils/blocksToText.ts +20 -0
- package/templates/shopify/utils/defineStructure.ts +11 -0
- package/templates/shopify/utils/getPriceRange.ts +24 -0
- package/templates/shopify/utils/shopifyUrls.ts +22 -0
- package/templates/shopify/utils/validateSlug.ts +18 -0
- package/templates/shopify-online-storefront/README.md +54 -0
- package/templates/shopify-online-storefront/components/icons/Shopify.tsx +22 -0
- package/templates/shopify-online-storefront/components/inputs/CollectionHidden.tsx +23 -0
- package/templates/shopify-online-storefront/components/inputs/PlaceholderString.tsx +25 -0
- package/templates/shopify-online-storefront/components/inputs/ProductHidden.tsx +66 -0
- package/templates/shopify-online-storefront/components/inputs/ProductVariantHidden.tsx +25 -0
- package/templates/shopify-online-storefront/components/inputs/ProxyString.tsx +38 -0
- package/templates/shopify-online-storefront/components/media/ShopifyDocumentStatus.tsx +83 -0
- package/templates/shopify-online-storefront/constants.ts +18 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/index.ts +45 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyDelete.tsx +144 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/shopifyLink.ts +39 -0
- package/templates/shopify-online-storefront/plugins/shopifyDocumentActions/types.ts +14 -0
- package/templates/shopify-online-storefront/schemaTypes/blocks/blockContent.ts +32 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/collection.tsx +83 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/product.tsx +102 -0
- package/templates/shopify-online-storefront/schemaTypes/documents/productVariant.tsx +82 -0
- package/templates/shopify-online-storefront/schemaTypes/index.ts +43 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/accordion.ts +31 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/accordionGroup.ts +35 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/callout.ts +40 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/inventory.ts +30 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/option.ts +30 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/priceRange.ts +22 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/proxyString.ts +11 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollection.ts +109 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyCollectionRule.tsx +45 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProduct.ts +165 -0
- package/templates/shopify-online-storefront/schemaTypes/objects/shopifyProductVariant.ts +151 -0
- package/templates/shopify-online-storefront/structure/collectionStructure.ts +9 -0
- package/templates/shopify-online-storefront/structure/index.ts +37 -0
- package/templates/shopify-online-storefront/structure/productStructure.ts +35 -0
- package/templates/shopify-online-storefront/utils/defineStructure.ts +11 -0
- package/templates/shopify-online-storefront/utils/getPriceRange.ts +24 -0
- package/templates/shopify-online-storefront/utils/shopifyUrls.ts +22 -0
- package/dist/actions/build/__tests__/buildApp.test.js +0 -367
- package/dist/actions/build/__tests__/buildApp.test.js.map +0 -1
- package/dist/actions/build/__tests__/buildStudio.test.js +0 -561
- package/dist/actions/build/__tests__/buildStudio.test.js.map +0 -1
- package/dist/actions/build/__tests__/checkRequiredDependencies.test.js +0 -233
- package/dist/actions/build/__tests__/checkRequiredDependencies.test.js.map +0 -1
- package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js +0 -414
- package/dist/actions/build/__tests__/checkStudioDependencyVersions.test.js.map +0 -1
- package/dist/actions/build/__tests__/determineBasePath.test.js +0 -24
- package/dist/actions/build/__tests__/determineBasePath.test.js.map +0 -1
- package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js +0 -109
- package/dist/actions/build/__tests__/getAutoUpdatesImportMap.test.js.map +0 -1
- package/dist/actions/build/__tests__/getViteConfig.test.js +0 -493
- package/dist/actions/build/__tests__/getViteConfig.test.js.map +0 -1
- package/dist/actions/build/__tests__/renderDocument.test.js +0 -278
- package/dist/actions/build/__tests__/renderDocument.test.js.map +0 -1
- package/dist/actions/build/__tests__/shouldAutoUpdate.test.js +0 -153
- package/dist/actions/build/__tests__/shouldAutoUpdate.test.js.map +0 -1
- package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js +0 -657
- package/dist/actions/build/renderDocumentWorker/__tests__/renderDocumentWorker.test.js.map +0 -1
- package/dist/actions/cors/constants.d.ts +0 -1
- package/dist/actions/cors/constants.js +0 -3
- package/dist/actions/cors/constants.js.map +0 -1
- package/dist/actions/cors/types.d.ts +0 -9
- package/dist/actions/cors/types.js +0 -3
- package/dist/actions/cors/types.js.map +0 -1
- package/dist/actions/dataset/__tests__/validateDatasetName.test.js +0 -182
- package/dist/actions/dataset/__tests__/validateDatasetName.test.js.map +0 -1
- package/dist/actions/deploy/__tests__/checkDir.test.js +0 -120
- package/dist/actions/deploy/__tests__/checkDir.test.js.map +0 -1
- package/dist/actions/docs/__tests__/normalizeDocsPath.test.js +0 -16
- package/dist/actions/docs/__tests__/normalizeDocsPath.test.js.map +0 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js +0 -124
- package/dist/actions/documents/validation/reporters/prettyReporter/__tests__/formatDocumentValidation.test.js.map +0 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +0 -274
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +0 -1
- package/dist/actions/media/__tests__/importMedia.test.js +0 -182
- package/dist/actions/media/__tests__/importMedia.test.js.map +0 -1
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
- package/dist/actions/schema/__tests__/formatSchemaValidation.test.js +0 -174
- package/dist/actions/schema/__tests__/formatSchemaValidation.test.js.map +0 -1
- package/dist/actions/schema/__tests__/validateAction.test.js +0 -281
- package/dist/actions/schema/__tests__/validateAction.test.js.map +0 -1
- package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
- package/dist/actions/schema/schemaStoreConstants.js +0 -4
- package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
- package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
- package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
- package/dist/actions/schema/utils/schemaApiClient.js +0 -17
- package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
- package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js +0 -27
- package/dist/actions/telemetry/__tests__/fetchTelemetryConsent.test.js.map +0 -1
- package/dist/actions/users/__tests__/validateEmail.test.js +0 -16
- package/dist/actions/users/__tests__/validateEmail.test.js.map +0 -1
- package/dist/actions/users/apiVersion.d.ts +0 -6
- package/dist/actions/users/apiVersion.js +0 -7
- package/dist/actions/users/apiVersion.js.map +0 -1
- package/dist/commands/__tests__/blueprints.test.js +0 -54
- package/dist/commands/__tests__/blueprints.test.js.map +0 -1
- package/dist/commands/__tests__/build.test.js +0 -132
- package/dist/commands/__tests__/build.test.js.map +0 -1
- package/dist/commands/__tests__/codemod.test.js +0 -271
- package/dist/commands/__tests__/codemod.test.js.map +0 -1
- package/dist/commands/__tests__/debug.test.js +0 -697
- package/dist/commands/__tests__/debug.test.js.map +0 -1
- package/dist/commands/__tests__/deploy.test.js +0 -1913
- package/dist/commands/__tests__/deploy.test.js.map +0 -1
- package/dist/commands/__tests__/dev.test.js +0 -410
- package/dist/commands/__tests__/dev.test.js.map +0 -1
- package/dist/commands/__tests__/exec.test.js +0 -207
- package/dist/commands/__tests__/exec.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.authentication.test.js +0 -60
- package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -196
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.plan.test.js +0 -220
- package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.setup.test.js +0 -279
- package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
- package/dist/commands/__tests__/install.test.js +0 -258
- package/dist/commands/__tests__/install.test.js.map +0 -1
- package/dist/commands/__tests__/learn.test.js +0 -29
- package/dist/commands/__tests__/learn.test.js.map +0 -1
- package/dist/commands/__tests__/logout.test.js +0 -88
- package/dist/commands/__tests__/logout.test.js.map +0 -1
- package/dist/commands/__tests__/manage.test.js +0 -105
- package/dist/commands/__tests__/manage.test.js.map +0 -1
- package/dist/commands/__tests__/migration.test.js +0 -119
- package/dist/commands/__tests__/migration.test.js.map +0 -1
- package/dist/commands/__tests__/preview.test.js +0 -261
- package/dist/commands/__tests__/preview.test.js.map +0 -1
- package/dist/commands/__tests__/start.test.js +0 -253
- package/dist/commands/__tests__/start.test.js.map +0 -1
- package/dist/commands/__tests__/undeploy.test.js +0 -382
- package/dist/commands/__tests__/undeploy.test.js.map +0 -1
- package/dist/commands/__tests__/versions.test.js +0 -134
- package/dist/commands/__tests__/versions.test.js.map +0 -1
- package/dist/commands/backup/__tests__/disable.test.js +0 -207
- package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/download.test.js +0 -679
- package/dist/commands/backup/__tests__/download.test.js.map +0 -1
- package/dist/commands/backup/__tests__/enable.test.js +0 -317
- package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/list.test.js +0 -321
- package/dist/commands/backup/__tests__/list.test.js.map +0 -1
- package/dist/commands/cors/__tests__/add.test.js +0 -346
- package/dist/commands/cors/__tests__/add.test.js.map +0 -1
- package/dist/commands/cors/__tests__/delete.test.js +0 -293
- package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
- package/dist/commands/cors/__tests__/list.test.js +0 -218
- package/dist/commands/cors/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/copy.test.js +0 -520
- package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/create.test.js +0 -312
- package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/delete.test.js +0 -224
- package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/export.test.js +0 -561
- package/dist/commands/dataset/__tests__/export.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/import.test.js +0 -53
- package/dist/commands/dataset/__tests__/import.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/list.test.js +0 -174
- package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/create.test.js +0 -299
- package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -236
- package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/link.test.js +0 -336
- package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -298
- package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -147
- package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -245
- package/dist/commands/dataset/visibility/__tests__/set.test.js.map +0 -1
- package/dist/commands/docs/__tests__/browse.test.js +0 -29
- package/dist/commands/docs/__tests__/browse.test.js.map +0 -1
- package/dist/commands/docs/__tests__/read.test.js +0 -78
- package/dist/commands/docs/__tests__/read.test.js.map +0 -1
- package/dist/commands/docs/__tests__/search.test.js +0 -254
- package/dist/commands/docs/__tests__/search.test.js.map +0 -1
- package/dist/commands/documents/__tests__/create.test.js +0 -967
- package/dist/commands/documents/__tests__/create.test.js.map +0 -1
- package/dist/commands/documents/__tests__/delete.test.js +0 -268
- package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
- package/dist/commands/documents/__tests__/get.test.js +0 -209
- package/dist/commands/documents/__tests__/get.test.js.map +0 -1
- package/dist/commands/documents/__tests__/query.test.js +0 -405
- package/dist/commands/documents/__tests__/query.test.js.map +0 -1
- package/dist/commands/documents/__tests__/validate.test.js +0 -226
- package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/list.test.js +0 -228
- package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/undeploy.test.js +0 -384
- package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
- package/dist/commands/hook/__tests__/attempt.test.js +0 -260
- package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
- package/dist/commands/hook/__tests__/create.test.js +0 -121
- package/dist/commands/hook/__tests__/create.test.js.map +0 -1
- package/dist/commands/hook/__tests__/delete.test.js +0 -220
- package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
- package/dist/commands/hook/__tests__/list.test.js +0 -138
- package/dist/commands/hook/__tests__/list.test.js.map +0 -1
- package/dist/commands/hook/__tests__/logs.test.js +0 -770
- package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
- package/dist/commands/manifest/__tests__/extract.test.js +0 -123
- package/dist/commands/manifest/__tests__/extract.test.js.map +0 -1
- package/dist/commands/mcp/__tests__/configure.test.js +0 -397
- package/dist/commands/mcp/__tests__/configure.test.js.map +0 -1
- package/dist/commands/media/__tests__/create-aspect.test.js +0 -160
- package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/delete-aspect.test.js +0 -333
- package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -632
- package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/export.test.js +0 -398
- package/dist/commands/media/__tests__/export.test.js.map +0 -1
- package/dist/commands/media/__tests__/import.test.js +0 -281
- package/dist/commands/media/__tests__/import.test.js.map +0 -1
- package/dist/commands/openapi/__tests__/get.test.js +0 -149
- package/dist/commands/openapi/__tests__/get.test.js.map +0 -1
- package/dist/commands/openapi/__tests__/list.test.js +0 -113
- package/dist/commands/openapi/__tests__/list.test.js.map +0 -1
- package/dist/commands/projects/__tests__/list.test.js +0 -153
- package/dist/commands/projects/__tests__/list.test.js.map +0 -1
- package/dist/commands/schema/__tests__/delete.test.js +0 -209
- package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
- package/dist/commands/schema/__tests__/extract.test.js +0 -113
- package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
- package/dist/commands/schema/__tests__/validate.test.js +0 -104
- package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/disable.test.js +0 -145
- package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/enable.test.js +0 -131
- package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/status.test.js +0 -153
- package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/add.test.js +0 -420
- package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/delete.test.js +0 -375
- package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/list.test.js +0 -368
- package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
- package/dist/commands/users/__tests__/invite.test.js +0 -341
- package/dist/commands/users/__tests__/invite.test.js.map +0 -1
- package/dist/commands/users/__tests__/list.test.js +0 -401
- package/dist/commands/users/__tests__/list.test.js.map +0 -1
- package/dist/hooks/prerun/__tests__/setupTelemetry.test.js +0 -77
- package/dist/hooks/prerun/__tests__/setupTelemetry.test.js.map +0 -1
- package/dist/services/__tests__/datasetAliases.test.js +0 -131
- package/dist/services/__tests__/datasetAliases.test.js.map +0 -1
- package/dist/services/__tests__/datasets.test.js +0 -436
- package/dist/services/__tests__/datasets.test.js.map +0 -1
- package/dist/services/__tests__/graphql.test.js +0 -43
- package/dist/services/__tests__/graphql.test.js.map +0 -1
- package/dist/services/__tests__/mediaLibraries.test.js +0 -88
- package/dist/services/__tests__/mediaLibraries.test.js.map +0 -1
- package/dist/services/__tests__/projects.test.js +0 -41
- package/dist/services/__tests__/projects.test.js.map +0 -1
- package/dist/services/__tests__/userApplications.test.js +0 -113
- package/dist/services/__tests__/userApplications.test.js.map +0 -1
- package/dist/util/__tests__/appId.test.js +0 -31
- package/dist/util/__tests__/appId.test.js.map +0 -1
- package/dist/util/__tests__/cliClient.test.js +0 -184
- package/dist/util/__tests__/cliClient.test.js.map +0 -1
- package/dist/util/__tests__/compareDependencyVersions.test.js +0 -426
- package/dist/util/__tests__/compareDependencyVersions.test.js.map +0 -1
- package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js +0 -74
- package/dist/util/__tests__/extractDocumentsFromNdjsonOrTarball.test.js.map +0 -1
- package/dist/util/__tests__/findNdjsonEntry.test.js +0 -54
- package/dist/util/__tests__/findNdjsonEntry.test.js.map +0 -1
- package/dist/util/__tests__/getCliVersion.test.js +0 -28
- package/dist/util/__tests__/getCliVersion.test.js.map +0 -1
- package/dist/util/__tests__/getLocalPackageVersion.test.js +0 -84
- package/dist/util/__tests__/getLocalPackageVersion.test.js.map +0 -1
- package/dist/util/__tests__/getWorkspace.test.js +0 -37
- package/dist/util/__tests__/getWorkspace.test.js.map +0 -1
- package/dist/util/__tests__/readPackageJson.test.js +0 -69
- package/dist/util/__tests__/readPackageJson.test.js.map +0 -1
- package/dist/util/__tests__/warnAboutMissingAppId.test.js +0 -28
- package/dist/util/__tests__/warnAboutMissingAppId.test.js.map +0 -1
- package/dist/util/packageManager/__tests__/installPackages.test.js +0 -388
- package/dist/util/packageManager/__tests__/installPackages.test.js.map +0 -1
- package/dist/util/validation/ __tests__/validateDocuments.test.js +0 -274
- 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 {getCliConfig, 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('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\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)\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\n// Helper functions moved to outer scope to fix linting\nconst setupBaseMocks = (additionalConfig = {}) => {\n mockGetCliConfig.mockResolvedValue({...baseConfig, ...additionalConfig})\n}\n\nconst setupMocks = () => {\n setupBaseMocks()\n const mockClient = {\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n return mockClient\n}\n\nconst setupEditorMocks = () => {\n setupBaseMocks()\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 setupBaseMocks()\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 = {\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient 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\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(mockClient.transaction).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 = {\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient 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\n expect(stdout).toContain('Upserted:')\n expect(stdout).toContain('test-doc')\n expect(mockClient.transaction).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 = {\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient 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\n expect(stdout).toContain('Skipped (already exists):')\n expect(stdout).toContain('test-doc')\n expect(mockClient.transaction).toHaveBeenCalledWith([{createIfNotExists: mockDoc}])\n })\n\n test(\n 'opens editor when no file specified and creates document from editor content',\n withEditorEnv(async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockFs.unlink.mockResolvedValue(undefined)\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n mockExecaSync.mockReturnValue(undefined as never)\n\n const {stdout} = await testCommand(CreateDocumentCommand, [])\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 setupMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, [\n 'test-doc.json',\n '--dataset',\n 'staging',\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 setupBaseMocks()\n\n const {error} = await testCommand(CreateDocumentCommand, [\n 'test-doc.json',\n '--replace',\n '--missing',\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 setupBaseMocks()\n\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--id', 'myDocId'])\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 mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'])\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 mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: undefined,\n projectId: testProjectId,\n },\n })\n\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'])\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 setupBaseMocks()\n mockGetProjectCliClient.mockResolvedValue({} as never)\n mockFs.readFile.mockRejectedValue(new Error('File not found'))\n\n const {error} = await testCommand(CreateDocumentCommand, ['nonexistent.json'])\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 setupBaseMocks()\n mockGetProjectCliClient.mockResolvedValue({} as never)\n mockFs.readFile.mockResolvedValue(JSON.stringify(invalidDoc))\n mockJson5.parse.mockReturnValue(invalidDoc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'])\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 mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockFs.unlink.mockResolvedValue(undefined)\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n mockExecaSync.mockReturnValue(undefined as never)\n\n await testCommand(CreateDocumentCommand, ['--json5'])\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 setupMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(doc))\n mockJson5.parse.mockReturnValue(doc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'])\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 setupMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(docs))\n mockJson5.parse.mockReturnValue(docs)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-docs.json'])\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 setupMocks()\n const mockClient = {\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\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\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockClient.transaction).toHaveBeenCalledWith([{create: docWithReservedFields}])\n })\n\n test('validates empty document array throws error', async () => {\n const emptyArray: unknown[] = []\n\n setupMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(emptyArray))\n mockJson5.parse.mockReturnValue(emptyArray)\n\n const {error} = await testCommand(CreateDocumentCommand, ['empty-docs.json'])\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 = {\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 setupMocks()\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\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\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(mockClient.transaction).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 = {\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 setupMocks()\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDocs))\n mockJson5.parse.mockReturnValue(mockDocs)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['docs.json', '--missing'])\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 mockClient = {\n getDocument: vi.fn().mockResolvedValue(existingDoc),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'existing-doc', operation: 'update'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient 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\n expect(mockClient.getDocument).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 mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn(),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient 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\n // The key test - transaction should not have been called since no changes were made\n expect(mockClient.transaction).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 mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockRejectedValue(new Error('Document already exists')),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient 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\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 mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient 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\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 mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient 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\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 mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient 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\n // Simulate file change\n expect(changeHandler!).toBeDefined()\n await changeHandler!()\n\n expect(mockClient.transaction).toHaveBeenCalledWith([{create: mockDoc}])\n }),\n )\n })\n})\n"],"names":["randomUUID","fs","os","path","runCommand","getCliConfig","getProjectCliClient","testCommand","watch","chokidarWatch","execa","execaSync","json5","afterEach","describe","expect","test","vi","NO_PROJECT_ID","CreateDocumentCommand","mock","fn","findProjectRoot","mockResolvedValue","directory","root","type","getCliToken","mockGetCliConfig","mocked","mockGetProjectCliClient","mockFs","mockOs","mockChokidarWatch","mockExeca","mockExecaSync","mockJson5","mockRandomUUID","testProjectId","testDataset","withEditorEnv","testFn","stubEnv","unstubAllEnvs","baseConfig","api","dataset","projectId","setupBaseMocks","additionalConfig","setupMocks","mockClient","transaction","mockReturnValue","commit","results","id","operation","setupEditorMocks","tmpdir","mkdir","undefined","writeFile","unlink","setupWatchMocks","clearAllMocks","stdout","toMatchInlineSnapshot","mockDoc","_id","_type","title","mockTransaction","readFile","JSON","stringify","parse","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","testUuid","defaultDoc","writeFileContent","not","mockWatcher","on","mockReturnThis","Function","Array","stdio","changeHandler","mockImplementation","event","handler","toBeDefined"],"mappings":"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"}
|
|
@@ -1,268 +0,0 @@
|
|
|
1
|
-
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
|
|
3
|
-
import { testCommand } from '@sanity/cli-test';
|
|
4
|
-
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
|
|
5
|
-
import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
|
|
6
|
-
import { DeleteDocumentCommand } from '../delete.js';
|
|
7
|
-
// Mock the config functions
|
|
8
|
-
vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
|
|
9
|
-
findProjectRoot: vi.fn().mockResolvedValue({
|
|
10
|
-
directory: '/test/path',
|
|
11
|
-
root: '/test/path',
|
|
12
|
-
type: 'studio'
|
|
13
|
-
})
|
|
14
|
-
}));
|
|
15
|
-
vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
|
|
16
|
-
getCliConfig: vi.fn().mockResolvedValue({
|
|
17
|
-
api: {
|
|
18
|
-
dataset: 'production',
|
|
19
|
-
projectId: 'test-project'
|
|
20
|
-
}
|
|
21
|
-
})
|
|
22
|
-
}));
|
|
23
|
-
vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
|
|
24
|
-
getProjectCliClient: vi.fn()
|
|
25
|
-
}));
|
|
26
|
-
vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
|
|
27
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
28
|
-
}));
|
|
29
|
-
// Mock the project API client
|
|
30
|
-
const mockTransaction = vi.fn();
|
|
31
|
-
const mockCommit = vi.fn();
|
|
32
|
-
const mockDelete = vi.fn();
|
|
33
|
-
// Get the mocked functions
|
|
34
|
-
const mockedGetCliConfig = vi.mocked(getCliConfig);
|
|
35
|
-
const mockedGetProjectCliClient = vi.mocked(getProjectCliClient);
|
|
36
|
-
describe('documents delete', ()=>{
|
|
37
|
-
beforeEach(()=>{
|
|
38
|
-
// Setup transaction chain
|
|
39
|
-
mockDelete.mockReturnValue({
|
|
40
|
-
commit: mockCommit,
|
|
41
|
-
delete: mockDelete
|
|
42
|
-
});
|
|
43
|
-
mockTransaction.mockReturnValue({
|
|
44
|
-
commit: mockCommit,
|
|
45
|
-
delete: mockDelete
|
|
46
|
-
});
|
|
47
|
-
mockedGetProjectCliClient.mockResolvedValue({
|
|
48
|
-
transaction: mockTransaction
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
afterEach(()=>{
|
|
52
|
-
vi.clearAllMocks();
|
|
53
|
-
mockTransaction.mockReset();
|
|
54
|
-
mockCommit.mockReset();
|
|
55
|
-
mockDelete.mockReset();
|
|
56
|
-
});
|
|
57
|
-
test('--help works', async ()=>{
|
|
58
|
-
const { stdout } = await runCommand([
|
|
59
|
-
'documents delete',
|
|
60
|
-
'--help'
|
|
61
|
-
]);
|
|
62
|
-
expect(stdout).toMatchInlineSnapshot(`
|
|
63
|
-
"Delete one or more documents from the projects configured dataset
|
|
64
|
-
|
|
65
|
-
USAGE
|
|
66
|
-
$ sanity documents delete ID... [IDS...] [--dataset <value>]
|
|
67
|
-
|
|
68
|
-
ARGUMENTS
|
|
69
|
-
ID... Document ID to delete
|
|
70
|
-
[IDS...] Additional document IDs to delete
|
|
71
|
-
|
|
72
|
-
FLAGS
|
|
73
|
-
--dataset=<value> NAME to override dataset
|
|
74
|
-
|
|
75
|
-
DESCRIPTION
|
|
76
|
-
Delete one or more documents from the projects configured dataset
|
|
77
|
-
|
|
78
|
-
EXAMPLES
|
|
79
|
-
Delete the document with the ID "myDocId"
|
|
80
|
-
|
|
81
|
-
$ sanity documents delete myDocId
|
|
82
|
-
|
|
83
|
-
ID wrapped in double or single quote works equally well
|
|
84
|
-
|
|
85
|
-
$ sanity documents delete 'myDocId'
|
|
86
|
-
|
|
87
|
-
Delete document with ID "someDocId" from dataset "blog"
|
|
88
|
-
|
|
89
|
-
$ sanity documents delete --dataset=blog someDocId
|
|
90
|
-
|
|
91
|
-
Delete the document with ID "doc1" and "doc2"
|
|
92
|
-
|
|
93
|
-
$ sanity documents delete doc1 doc2
|
|
94
|
-
|
|
95
|
-
"
|
|
96
|
-
`);
|
|
97
|
-
});
|
|
98
|
-
test('deletes a single document successfully', async ()=>{
|
|
99
|
-
mockCommit.mockResolvedValue({
|
|
100
|
-
results: [
|
|
101
|
-
{
|
|
102
|
-
id: 'test-doc',
|
|
103
|
-
operation: 'delete'
|
|
104
|
-
}
|
|
105
|
-
]
|
|
106
|
-
});
|
|
107
|
-
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
108
|
-
'test-doc'
|
|
109
|
-
]);
|
|
110
|
-
expect(stdout).toContain('Deleted 1 document');
|
|
111
|
-
expect(mockDelete).toHaveBeenCalledWith('test-doc');
|
|
112
|
-
expect(mockCommit).toHaveBeenCalled();
|
|
113
|
-
});
|
|
114
|
-
test('deletes multiple documents successfully', async ()=>{
|
|
115
|
-
mockCommit.mockResolvedValue({
|
|
116
|
-
results: [
|
|
117
|
-
{
|
|
118
|
-
id: 'doc1',
|
|
119
|
-
operation: 'delete'
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
id: 'doc2',
|
|
123
|
-
operation: 'delete'
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
id: 'doc3',
|
|
127
|
-
operation: 'delete'
|
|
128
|
-
}
|
|
129
|
-
]
|
|
130
|
-
});
|
|
131
|
-
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
132
|
-
'doc1',
|
|
133
|
-
'doc2',
|
|
134
|
-
'doc3'
|
|
135
|
-
]);
|
|
136
|
-
expect(stdout).toContain('Deleted 3 documents');
|
|
137
|
-
expect(mockDelete).toHaveBeenCalledWith('doc1');
|
|
138
|
-
expect(mockDelete).toHaveBeenCalledWith('doc2');
|
|
139
|
-
expect(mockDelete).toHaveBeenCalledWith('doc3');
|
|
140
|
-
expect(mockCommit).toHaveBeenCalled();
|
|
141
|
-
});
|
|
142
|
-
test('handles documents not found', async ()=>{
|
|
143
|
-
mockCommit.mockResolvedValue({
|
|
144
|
-
results: [
|
|
145
|
-
{
|
|
146
|
-
id: 'doc1',
|
|
147
|
-
operation: 'delete'
|
|
148
|
-
}
|
|
149
|
-
]
|
|
150
|
-
});
|
|
151
|
-
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
152
|
-
'doc1',
|
|
153
|
-
'nonexistent-doc'
|
|
154
|
-
]);
|
|
155
|
-
expect(error).toBeInstanceOf(Error);
|
|
156
|
-
expect(error?.message).toContain('Document not found: nonexistent-doc');
|
|
157
|
-
expect(mockDelete).toHaveBeenCalledWith('doc1');
|
|
158
|
-
expect(mockDelete).toHaveBeenCalledWith('nonexistent-doc');
|
|
159
|
-
expect(mockCommit).toHaveBeenCalled();
|
|
160
|
-
});
|
|
161
|
-
test('uses custom dataset when --dataset flag is provided', async ()=>{
|
|
162
|
-
mockCommit.mockResolvedValue({
|
|
163
|
-
results: [
|
|
164
|
-
{
|
|
165
|
-
id: 'test-doc',
|
|
166
|
-
operation: 'delete'
|
|
167
|
-
}
|
|
168
|
-
]
|
|
169
|
-
});
|
|
170
|
-
await testCommand(DeleteDocumentCommand, [
|
|
171
|
-
'test-doc',
|
|
172
|
-
'--dataset',
|
|
173
|
-
'staging'
|
|
174
|
-
]);
|
|
175
|
-
expect(mockDelete).toHaveBeenCalledWith('test-doc');
|
|
176
|
-
// Verify that the getProjectCliClient was called with the staging dataset
|
|
177
|
-
expect(mockedGetProjectCliClient).toHaveBeenCalledWith(expect.objectContaining({
|
|
178
|
-
dataset: 'staging',
|
|
179
|
-
projectId: 'test-project'
|
|
180
|
-
}));
|
|
181
|
-
});
|
|
182
|
-
test('throws error when no project ID is configured', async ()=>{
|
|
183
|
-
mockedGetCliConfig.mockResolvedValue({
|
|
184
|
-
api: {
|
|
185
|
-
dataset: 'production',
|
|
186
|
-
projectId: undefined
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
190
|
-
'test-doc'
|
|
191
|
-
]);
|
|
192
|
-
expect(error).toBeInstanceOf(Error);
|
|
193
|
-
expect(error?.message).toEqual(NO_PROJECT_ID);
|
|
194
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
195
|
-
// Restore the original mock for other tests
|
|
196
|
-
mockedGetCliConfig.mockResolvedValue({
|
|
197
|
-
api: {
|
|
198
|
-
dataset: 'production',
|
|
199
|
-
projectId: 'test-project'
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
test('throws error when no dataset is configured and none provided', async ()=>{
|
|
204
|
-
mockedGetCliConfig.mockResolvedValueOnce({
|
|
205
|
-
api: {
|
|
206
|
-
dataset: undefined,
|
|
207
|
-
projectId: 'test-project'
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
211
|
-
'test-doc'
|
|
212
|
-
]);
|
|
213
|
-
expect(error).toBeInstanceOf(Error);
|
|
214
|
-
expect(error?.message).toContain('No dataset specified');
|
|
215
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
216
|
-
});
|
|
217
|
-
test('handles transaction errors gracefully', async ()=>{
|
|
218
|
-
mockCommit.mockRejectedValue(new Error('Transaction failed'));
|
|
219
|
-
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
220
|
-
'test-doc'
|
|
221
|
-
]);
|
|
222
|
-
expect(error).toBeInstanceOf(Error);
|
|
223
|
-
expect(error?.message).toContain('Failed to delete 1 document: Transaction failed');
|
|
224
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
225
|
-
expect(mockDelete).toHaveBeenCalledWith('test-doc');
|
|
226
|
-
});
|
|
227
|
-
test('requires document ID argument', async ()=>{
|
|
228
|
-
const { error } = await testCommand(DeleteDocumentCommand, []);
|
|
229
|
-
expect(error).toBeInstanceOf(Error);
|
|
230
|
-
expect(error?.message).toContain('Missing 1 required arg');
|
|
231
|
-
});
|
|
232
|
-
test('shows singular message when deleting one document', async ()=>{
|
|
233
|
-
mockCommit.mockResolvedValue({
|
|
234
|
-
results: [
|
|
235
|
-
{
|
|
236
|
-
id: 'test-doc',
|
|
237
|
-
operation: 'delete'
|
|
238
|
-
}
|
|
239
|
-
]
|
|
240
|
-
});
|
|
241
|
-
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
242
|
-
'test-doc'
|
|
243
|
-
]);
|
|
244
|
-
expect(stdout).toContain('Deleted 1 document');
|
|
245
|
-
expect(stdout).not.toContain('documents');
|
|
246
|
-
});
|
|
247
|
-
test('shows plural message when deleting multiple documents', async ()=>{
|
|
248
|
-
mockCommit.mockResolvedValue({
|
|
249
|
-
results: [
|
|
250
|
-
{
|
|
251
|
-
id: 'doc1',
|
|
252
|
-
operation: 'delete'
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
id: 'doc2',
|
|
256
|
-
operation: 'delete'
|
|
257
|
-
}
|
|
258
|
-
]
|
|
259
|
-
});
|
|
260
|
-
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
261
|
-
'doc1',
|
|
262
|
-
'doc2'
|
|
263
|
-
]);
|
|
264
|
-
expect(stdout).toContain('Deleted 2 documents');
|
|
265
|
-
});
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
//# 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 {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {DeleteDocumentCommand} from '../delete.js'\n\n// Mock the config functions\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: 'test-project',\n },\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\n// Mock the project API client\nconst mockTransaction = vi.fn()\nconst mockCommit = vi.fn()\nconst mockDelete = vi.fn()\n\n// Get the mocked functions\nconst mockedGetCliConfig = vi.mocked(getCliConfig)\nconst mockedGetProjectCliClient = vi.mocked(getProjectCliClient)\n\ndescribe('documents delete', () => {\n beforeEach(() => {\n // Setup transaction chain\n mockDelete.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n mockTransaction.mockReturnValue({\n commit: mockCommit,\n delete: mockDelete,\n })\n\n mockedGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n })\n\n afterEach(() => {\n vi.clearAllMocks()\n mockTransaction.mockReset()\n mockCommit.mockReset()\n mockDelete.mockReset()\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 mockCommit.mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'])\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 mockCommit.mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n {id: 'doc3', operation: 'delete'},\n ],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2', 'doc3'])\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 mockCommit.mockResolvedValue({\n results: [{id: 'doc1', operation: 'delete'}],\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['doc1', 'nonexistent-doc'])\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 mockCommit.mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n await testCommand(DeleteDocumentCommand, ['test-doc', '--dataset', 'staging'])\n\n expect(mockDelete).toHaveBeenCalledWith('test-doc')\n // Verify that the getProjectCliClient was called with the staging dataset\n expect(mockedGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n projectId: 'test-project',\n }),\n )\n })\n\n test('throws error when no project ID is configured', async () => {\n mockedGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n\n // Restore the original mock for other tests\n mockedGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: 'test-project',\n },\n })\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n mockedGetCliConfig.mockResolvedValueOnce({\n api: {\n dataset: undefined,\n projectId: 'test-project',\n },\n })\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'])\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 mockCommit.mockRejectedValue(new Error('Transaction failed'))\n\n const {error} = await testCommand(DeleteDocumentCommand, ['test-doc'])\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, [])\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 mockCommit.mockResolvedValue({\n results: [{id: 'test-doc', operation: 'delete'}],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['test-doc'])\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 mockCommit.mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'delete'},\n {id: 'doc2', operation: 'delete'},\n ],\n })\n\n const {stdout} = await testCommand(DeleteDocumentCommand, ['doc1', 'doc2'])\n\n expect(stdout).toContain('Deleted 2 documents')\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","testCommand","afterEach","beforeEach","describe","expect","test","vi","NO_PROJECT_ID","DeleteDocumentCommand","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","api","dataset","projectId","getCliToken","mockTransaction","mockCommit","mockDelete","mockedGetCliConfig","mocked","mockedGetProjectCliClient","mockReturnValue","commit","delete","transaction","clearAllMocks","mockReset","stdout","toMatchInlineSnapshot","results","id","operation","toContain","toHaveBeenCalledWith","toHaveBeenCalled","error","toBeInstanceOf","Error","message","objectContaining","undefined","toEqual","oclif","exit","toBe","mockResolvedValueOnce","mockRejectedValue","not"],"mappings":"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"}
|
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
|
|
3
|
-
import { chalk } from '@sanity/cli-core/ux';
|
|
4
|
-
import { testCommand } from '@sanity/cli-test';
|
|
5
|
-
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
6
|
-
import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
|
|
7
|
-
import { GetDocumentCommand } from '../get.js';
|
|
8
|
-
// Mock the config functions
|
|
9
|
-
vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
|
|
10
|
-
findProjectRoot: vi.fn().mockResolvedValue({
|
|
11
|
-
directory: '/test/path',
|
|
12
|
-
root: '/test/path',
|
|
13
|
-
type: 'studio'
|
|
14
|
-
})
|
|
15
|
-
}));
|
|
16
|
-
vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
|
|
17
|
-
getCliConfig: vi.fn()
|
|
18
|
-
}));
|
|
19
|
-
vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
|
|
20
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
21
|
-
}));
|
|
22
|
-
vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
|
|
23
|
-
getProjectCliClient: vi.fn()
|
|
24
|
-
}));
|
|
25
|
-
const mockGetCliConfig = vi.mocked(getCliConfig);
|
|
26
|
-
const mockGetProjectCliClient = vi.mocked(getProjectCliClient);
|
|
27
|
-
const testProjectId = 'test-project';
|
|
28
|
-
const testDataset = 'production';
|
|
29
|
-
describe('#documents:get', ()=>{
|
|
30
|
-
afterEach(()=>{
|
|
31
|
-
vi.clearAllMocks();
|
|
32
|
-
});
|
|
33
|
-
test('--help works', async ()=>{
|
|
34
|
-
const { stdout } = await runCommand([
|
|
35
|
-
'documents get',
|
|
36
|
-
'--help'
|
|
37
|
-
]);
|
|
38
|
-
expect(stdout).toContain('Get and print a document by ID');
|
|
39
|
-
expect(stdout).toContain('ARGUMENTS');
|
|
40
|
-
expect(stdout).toContain('DOCUMENTID');
|
|
41
|
-
});
|
|
42
|
-
test('retrieves and displays a document successfully', async ()=>{
|
|
43
|
-
const mockDoc = {
|
|
44
|
-
_id: 'test-doc',
|
|
45
|
-
_type: 'post',
|
|
46
|
-
content: 'This is a test post',
|
|
47
|
-
title: 'Test Post'
|
|
48
|
-
};
|
|
49
|
-
mockGetCliConfig.mockResolvedValue({
|
|
50
|
-
api: {
|
|
51
|
-
dataset: testDataset,
|
|
52
|
-
projectId: testProjectId
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
// Mock the getProjectApiClient to return a mock client with getDocument
|
|
56
|
-
const mockGetDocument = vi.fn().mockResolvedValue(mockDoc);
|
|
57
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
58
|
-
getDocument: mockGetDocument
|
|
59
|
-
});
|
|
60
|
-
const { stdout } = await testCommand(GetDocumentCommand, [
|
|
61
|
-
'test-doc'
|
|
62
|
-
]);
|
|
63
|
-
expect(stdout).toContain('"_id": "test-doc"');
|
|
64
|
-
expect(stdout).toContain('"title": "Test Post"');
|
|
65
|
-
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
66
|
-
});
|
|
67
|
-
test('displays colorized output when --pretty flag is used', async ()=>{
|
|
68
|
-
const mockDoc = {
|
|
69
|
-
_id: 'test-doc',
|
|
70
|
-
_type: 'post',
|
|
71
|
-
title: 'Test Post'
|
|
72
|
-
};
|
|
73
|
-
mockGetCliConfig.mockResolvedValue({
|
|
74
|
-
api: {
|
|
75
|
-
dataset: testDataset,
|
|
76
|
-
projectId: testProjectId
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
// Mock the getProjectApiClient to return a mock client with getDocument
|
|
80
|
-
const mockGetDocument = vi.fn().mockResolvedValue(mockDoc);
|
|
81
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
82
|
-
getDocument: mockGetDocument
|
|
83
|
-
});
|
|
84
|
-
const originalChalkLevel = chalk.level;
|
|
85
|
-
// Force colorization
|
|
86
|
-
chalk.level = 3;
|
|
87
|
-
const { stdout } = await testCommand(GetDocumentCommand, [
|
|
88
|
-
'test-doc',
|
|
89
|
-
'--pretty'
|
|
90
|
-
], {
|
|
91
|
-
capture: {
|
|
92
|
-
stripAnsi: false
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
// Reset chalk level
|
|
96
|
-
chalk.level = originalChalkLevel;
|
|
97
|
-
// Check that the output contains the document data
|
|
98
|
-
expect(stdout).toContain('test-doc');
|
|
99
|
-
expect(stdout).toContain('Test Post');
|
|
100
|
-
expect(stdout).toContain('_id');
|
|
101
|
-
expect(stdout).toContain('_type');
|
|
102
|
-
expect(stdout).toContain('title');
|
|
103
|
-
// eslint-disable-next-line no-control-regex
|
|
104
|
-
expect(stdout).toMatch(/\u001B\[\d+m/);
|
|
105
|
-
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
106
|
-
});
|
|
107
|
-
test('uses custom dataset when --dataset flag is provided', async ()=>{
|
|
108
|
-
const mockDoc = {
|
|
109
|
-
_id: 'test-doc',
|
|
110
|
-
_type: 'post',
|
|
111
|
-
title: 'Test Post'
|
|
112
|
-
};
|
|
113
|
-
mockGetCliConfig.mockResolvedValue({
|
|
114
|
-
api: {
|
|
115
|
-
dataset: testDataset,
|
|
116
|
-
projectId: testProjectId
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
// Mock the getProjectApiClient to return a mock client with getDocument
|
|
120
|
-
const mockGetDocument = vi.fn().mockResolvedValue(mockDoc);
|
|
121
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
122
|
-
getDocument: mockGetDocument
|
|
123
|
-
});
|
|
124
|
-
const { stdout } = await testCommand(GetDocumentCommand, [
|
|
125
|
-
'test-doc',
|
|
126
|
-
'--dataset',
|
|
127
|
-
'staging'
|
|
128
|
-
]);
|
|
129
|
-
expect(stdout).toContain('"_id": "test-doc"');
|
|
130
|
-
expect(stdout).toContain('"title": "Test Post"');
|
|
131
|
-
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
132
|
-
});
|
|
133
|
-
test('throws error when document is not found', async ()=>{
|
|
134
|
-
mockGetCliConfig.mockResolvedValue({
|
|
135
|
-
api: {
|
|
136
|
-
dataset: testDataset,
|
|
137
|
-
projectId: testProjectId
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
// Mock the getProjectApiClient to return a mock client with getDocument returning null
|
|
141
|
-
const mockGetDocument = vi.fn().mockResolvedValue(null);
|
|
142
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
143
|
-
getDocument: mockGetDocument
|
|
144
|
-
});
|
|
145
|
-
const { error } = await testCommand(GetDocumentCommand, [
|
|
146
|
-
'nonexistent-doc'
|
|
147
|
-
]);
|
|
148
|
-
expect(error).toBeInstanceOf(Error);
|
|
149
|
-
expect(error?.message).toContain('Document "nonexistent-doc" not found');
|
|
150
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
151
|
-
expect(mockGetDocument).toHaveBeenCalledWith('nonexistent-doc');
|
|
152
|
-
});
|
|
153
|
-
test('throws error when no project ID is configured', async ()=>{
|
|
154
|
-
mockGetCliConfig.mockResolvedValue({
|
|
155
|
-
api: {
|
|
156
|
-
dataset: 'production',
|
|
157
|
-
projectId: undefined
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
const { error } = await testCommand(GetDocumentCommand, [
|
|
161
|
-
'test-doc'
|
|
162
|
-
]);
|
|
163
|
-
expect(error).toBeInstanceOf(Error);
|
|
164
|
-
expect(error?.message).toEqual(NO_PROJECT_ID);
|
|
165
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
166
|
-
});
|
|
167
|
-
test('throws error when no dataset is configured and none provided', async ()=>{
|
|
168
|
-
mockGetCliConfig.mockResolvedValue({
|
|
169
|
-
api: {
|
|
170
|
-
dataset: undefined,
|
|
171
|
-
projectId: testProjectId
|
|
172
|
-
}
|
|
173
|
-
});
|
|
174
|
-
const { error } = await testCommand(GetDocumentCommand, [
|
|
175
|
-
'test-doc'
|
|
176
|
-
]);
|
|
177
|
-
expect(error).toBeInstanceOf(Error);
|
|
178
|
-
expect(error?.message).toContain('No dataset specified');
|
|
179
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
180
|
-
});
|
|
181
|
-
test('handles client errors gracefully', async ()=>{
|
|
182
|
-
mockGetCliConfig.mockResolvedValue({
|
|
183
|
-
api: {
|
|
184
|
-
dataset: testDataset,
|
|
185
|
-
projectId: testProjectId
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
// Mock the getProjectApiClient to return a mock client with getDocument throwing an error
|
|
189
|
-
const mockGetDocument = vi.fn().mockRejectedValue(new Error('Network error'));
|
|
190
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
191
|
-
getDocument: mockGetDocument
|
|
192
|
-
});
|
|
193
|
-
const { error } = await testCommand(GetDocumentCommand, [
|
|
194
|
-
'test-doc'
|
|
195
|
-
]);
|
|
196
|
-
expect(error).toBeInstanceOf(Error);
|
|
197
|
-
expect(error?.message).toContain('Failed to fetch document');
|
|
198
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
199
|
-
expect(mockGetDocument).toHaveBeenCalledWith('test-doc');
|
|
200
|
-
});
|
|
201
|
-
test('requires document ID argument', async ()=>{
|
|
202
|
-
const { error } = await testCommand(GetDocumentCommand, []);
|
|
203
|
-
expect(error).toBeInstanceOf(Error);
|
|
204
|
-
expect(error?.message).toContain('Missing 1 required arg');
|
|
205
|
-
expect(error?.oclif?.exit).toBe(2);
|
|
206
|
-
});
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
//# sourceMappingURL=get.test.js.map
|