@sanity/cli 6.0.0-alpha.5 → 6.0.0-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2907 -109
- 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/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 +1 -1
- 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/utils/uniqByProjectIdDataset.d.ts +1 -1
- package/dist/actions/telemetry/resolveConsent.d.ts +1 -9
- package/dist/actions/telemetry/resolveConsent.js +2 -2
- package/dist/actions/telemetry/resolveConsent.js.map +1 -1
- package/dist/actions/telemetry/setConsent.d.ts +1 -4
- package/dist/actions/telemetry/setConsent.js +4 -8
- package/dist/actions/telemetry/setConsent.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/debug.js +5 -9
- package/dist/commands/debug.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/telemetry/disable.js +0 -1
- package/dist/commands/telemetry/disable.js.map +1 -1
- package/dist/commands/telemetry/enable.js +0 -1
- package/dist/commands/telemetry/enable.js.map +1 -1
- package/dist/commands/telemetry/status.js +1 -3
- package/dist/commands/telemetry/status.js.map +1 -1
- package/dist/config/createCliConfig.d.ts +9 -0
- package/dist/hooks/prerun/flushTelemetry.worker.d.ts +2 -0
- package/dist/hooks/prerun/flushTelemetry.worker.js +22 -0
- package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -0
- package/dist/hooks/prerun/setupTelemetry.js +65 -1
- package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
- 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/organizations.d.ts +3 -1
- package/dist/services/organizations.js +2 -1
- package/dist/services/organizations.js.map +1 -1
- package/dist/services/telemetry.d.ts +2 -0
- package/dist/services/telemetry.js +20 -0
- package/dist/services/telemetry.js.map +1 -0
- package/dist/services/user.d.ts +5 -0
- package/dist/services/user.js +12 -1
- 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/telemetry/cli.telemetry.d.ts +20 -0
- package/dist/telemetry/cli.telemetry.js +8 -0
- package/dist/telemetry/cli.telemetry.js.map +1 -0
- package/dist/telemetry/store/cleanupOldTelemetryFiles.d.ts +5 -0
- package/dist/telemetry/store/cleanupOldTelemetryFiles.js +30 -0
- package/dist/telemetry/store/cleanupOldTelemetryFiles.js.map +1 -0
- package/dist/telemetry/store/createTelemetryStore.d.ts +39 -0
- package/dist/telemetry/store/createTelemetryStore.js +95 -0
- package/dist/telemetry/store/createTelemetryStore.js.map +1 -0
- package/dist/telemetry/store/createTraceId.d.ts +10 -0
- package/dist/telemetry/store/createTraceId.js +10 -0
- package/dist/telemetry/store/createTraceId.js.map +1 -0
- package/dist/telemetry/store/debug.d.ts +5 -0
- package/dist/telemetry/store/debug.js +7 -0
- package/dist/telemetry/store/debug.js.map +1 -0
- package/dist/telemetry/store/findTelemetryFiles.d.ts +13 -0
- package/dist/telemetry/store/findTelemetryFiles.js +34 -0
- package/dist/telemetry/store/findTelemetryFiles.js.map +1 -0
- package/dist/telemetry/store/flushTelemetryFiles.d.ts +20 -0
- package/dist/telemetry/store/flushTelemetryFiles.js +107 -0
- package/dist/telemetry/store/flushTelemetryFiles.js.map +1 -0
- package/dist/telemetry/store/generateTelemetryFilePath.d.ts +17 -0
- package/dist/telemetry/store/generateTelemetryFilePath.js +30 -0
- package/dist/telemetry/store/generateTelemetryFilePath.js.map +1 -0
- package/dist/telemetry/store/getTelemetryBaseInfo.d.ts +27 -0
- package/dist/telemetry/store/getTelemetryBaseInfo.js +34 -0
- package/dist/telemetry/store/getTelemetryBaseInfo.js.map +1 -0
- package/dist/telemetry/store/logger.d.ts +6 -0
- package/dist/telemetry/store/logger.js +54 -0
- package/dist/telemetry/store/logger.js.map +1 -0
- package/dist/telemetry/store/trace.d.ts +6 -0
- package/dist/telemetry/store/trace.js +150 -0
- package/dist/telemetry/store/trace.js.map +1 -0
- package/dist/telemetry/utils/readNDJSON.d.ts +10 -0
- package/dist/telemetry/utils/readNDJSON.js +18 -0
- package/dist/telemetry/utils/readNDJSON.js.map +1 -0
- package/dist/util/detectRuntime.d.ts +8 -0
- package/dist/util/detectRuntime.js +20 -0
- package/dist/util/detectRuntime.js.map +1 -0
- package/dist/util/isStaging.d.ts +7 -0
- package/dist/util/isStaging.js +10 -0
- package/dist/util/isStaging.js.map +1 -0
- package/dist/util/parseArguments.d.ts +35 -0
- package/dist/util/parseArguments.js +42 -0
- package/dist/util/parseArguments.js.map +1 -0
- package/oclif.manifest.json +7 -1
- package/package.json +25 -18
- 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/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__/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/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/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 -590
- package/dist/commands/__tests__/debug.test.js.map +0 -1
- package/dist/commands/__tests__/deploy.test.js +0 -1945
- package/dist/commands/__tests__/deploy.test.js.map +0 -1
- package/dist/commands/__tests__/dev.test.js +0 -453
- 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 -73
- package/dist/commands/__tests__/init/init.authentication.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.create-new-project.test.js +0 -195
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.plan.test.js +0 -279
- package/dist/commands/__tests__/init/init.plan.test.js.map +0 -1
- package/dist/commands/__tests__/init/init.setup.test.js +0 -335
- package/dist/commands/__tests__/init/init.setup.test.js.map +0 -1
- package/dist/commands/__tests__/install.test.js +0 -282
- 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 -91
- package/dist/commands/__tests__/logout.test.js.map +0 -1
- package/dist/commands/__tests__/manage.test.js +0 -110
- 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 -142
- package/dist/commands/__tests__/versions.test.js.map +0 -1
- package/dist/commands/backup/__tests__/disable.test.js +0 -204
- package/dist/commands/backup/__tests__/disable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/download.test.js +0 -768
- package/dist/commands/backup/__tests__/download.test.js.map +0 -1
- package/dist/commands/backup/__tests__/enable.test.js +0 -286
- package/dist/commands/backup/__tests__/enable.test.js.map +0 -1
- package/dist/commands/backup/__tests__/list.test.js +0 -330
- package/dist/commands/backup/__tests__/list.test.js.map +0 -1
- package/dist/commands/cors/__tests__/add.test.js +0 -376
- package/dist/commands/cors/__tests__/add.test.js.map +0 -1
- package/dist/commands/cors/__tests__/delete.test.js +0 -308
- package/dist/commands/cors/__tests__/delete.test.js.map +0 -1
- package/dist/commands/cors/__tests__/list.test.js +0 -241
- package/dist/commands/cors/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/copy.test.js +0 -628
- package/dist/commands/dataset/__tests__/copy.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/create.test.js +0 -342
- package/dist/commands/dataset/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/delete.test.js +0 -231
- package/dist/commands/dataset/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/__tests__/export.test.js +0 -601
- 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 -216
- package/dist/commands/dataset/__tests__/list.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/create.test.js +0 -339
- package/dist/commands/dataset/alias/__tests__/create.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/delete.test.js +0 -247
- package/dist/commands/dataset/alias/__tests__/delete.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/link.test.js +0 -376
- package/dist/commands/dataset/alias/__tests__/link.test.js.map +0 -1
- package/dist/commands/dataset/alias/__tests__/unlink.test.js +0 -313
- package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/get.test.js +0 -128
- package/dist/commands/dataset/visibility/__tests__/get.test.js.map +0 -1
- package/dist/commands/dataset/visibility/__tests__/set.test.js +0 -198
- 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 -255
- package/dist/commands/docs/__tests__/search.test.js.map +0 -1
- package/dist/commands/documents/__tests__/create.test.js +0 -1030
- package/dist/commands/documents/__tests__/create.test.js.map +0 -1
- package/dist/commands/documents/__tests__/delete.test.js +0 -300
- package/dist/commands/documents/__tests__/delete.test.js.map +0 -1
- package/dist/commands/documents/__tests__/get.test.js +0 -182
- package/dist/commands/documents/__tests__/get.test.js.map +0 -1
- package/dist/commands/documents/__tests__/query.test.js +0 -300
- package/dist/commands/documents/__tests__/query.test.js.map +0 -1
- package/dist/commands/documents/__tests__/validate.test.js +0 -249
- package/dist/commands/documents/__tests__/validate.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/list.test.js +0 -240
- package/dist/commands/graphql/__tests__/list.test.js.map +0 -1
- package/dist/commands/graphql/__tests__/undeploy.test.js +0 -410
- package/dist/commands/graphql/__tests__/undeploy.test.js.map +0 -1
- package/dist/commands/hook/__tests__/attempt.test.js +0 -275
- package/dist/commands/hook/__tests__/attempt.test.js.map +0 -1
- package/dist/commands/hook/__tests__/create.test.js +0 -119
- package/dist/commands/hook/__tests__/create.test.js.map +0 -1
- package/dist/commands/hook/__tests__/delete.test.js +0 -233
- package/dist/commands/hook/__tests__/delete.test.js.map +0 -1
- package/dist/commands/hook/__tests__/list.test.js +0 -145
- package/dist/commands/hook/__tests__/list.test.js.map +0 -1
- package/dist/commands/hook/__tests__/logs.test.js +0 -798
- package/dist/commands/hook/__tests__/logs.test.js.map +0 -1
- package/dist/commands/manifest/__tests__/extract.test.js +0 -132
- 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 -173
- package/dist/commands/media/__tests__/create-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/delete-aspect.test.js +0 -342
- package/dist/commands/media/__tests__/delete-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/deploy-aspect.test.js +0 -619
- package/dist/commands/media/__tests__/deploy-aspect.test.js.map +0 -1
- package/dist/commands/media/__tests__/export.test.js +0 -697
- package/dist/commands/media/__tests__/export.test.js.map +0 -1
- package/dist/commands/media/__tests__/import.test.js +0 -347
- 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 -154
- package/dist/commands/projects/__tests__/list.test.js.map +0 -1
- package/dist/commands/schema/__tests__/delete.test.js +0 -454
- package/dist/commands/schema/__tests__/delete.test.js.map +0 -1
- package/dist/commands/schema/__tests__/deploy.test.js +0 -348
- package/dist/commands/schema/__tests__/deploy.test.js.map +0 -1
- package/dist/commands/schema/__tests__/extract.test.js +0 -121
- package/dist/commands/schema/__tests__/extract.test.js.map +0 -1
- package/dist/commands/schema/__tests__/list.test.js +0 -399
- package/dist/commands/schema/__tests__/list.test.js.map +0 -1
- package/dist/commands/schema/__tests__/validate.test.js +0 -121
- package/dist/commands/schema/__tests__/validate.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/disable.test.js +0 -147
- package/dist/commands/telemetry/__tests__/disable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/enable.test.js +0 -133
- package/dist/commands/telemetry/__tests__/enable.test.js.map +0 -1
- package/dist/commands/telemetry/__tests__/status.test.js +0 -155
- package/dist/commands/telemetry/__tests__/status.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/add.test.js +0 -435
- package/dist/commands/tokens/__tests__/add.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/delete.test.js +0 -405
- package/dist/commands/tokens/__tests__/delete.test.js.map +0 -1
- package/dist/commands/tokens/__tests__/list.test.js +0 -395
- package/dist/commands/tokens/__tests__/list.test.js.map +0 -1
- package/dist/commands/users/__tests__/invite.test.js +0 -362
- package/dist/commands/users/__tests__/invite.test.js.map +0 -1
- package/dist/commands/users/__tests__/list.test.js +0 -407
- 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,253 +0,0 @@
|
|
|
1
|
-
import { readFile, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { createServer } from 'node:http';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { runCommand } from '@oclif/test';
|
|
5
|
-
import { testCommand } from '@sanity/cli-test';
|
|
6
|
-
import { describe, expect, test } from 'vitest';
|
|
7
|
-
import { testExample } from '~test/helpers/testExample.js';
|
|
8
|
-
import { PreviewCommand } from '../preview.js';
|
|
9
|
-
describe('#start', ()=>{
|
|
10
|
-
test('help works', async ()=>{
|
|
11
|
-
const { stdout } = await runCommand([
|
|
12
|
-
'start',
|
|
13
|
-
'--help'
|
|
14
|
-
]);
|
|
15
|
-
expect(stdout).toMatchInlineSnapshot(`
|
|
16
|
-
"Starts a server to preview a production build
|
|
17
|
-
|
|
18
|
-
USAGE
|
|
19
|
-
$ sanity start [OUTPUTDIR] [--host <value>] [--port <value>]
|
|
20
|
-
|
|
21
|
-
ARGUMENTS
|
|
22
|
-
[OUTPUTDIR] Output directory
|
|
23
|
-
|
|
24
|
-
FLAGS
|
|
25
|
-
--host=<value> [default: localhost] The local network interface at which to
|
|
26
|
-
listen.
|
|
27
|
-
--port=<value> [default: 3333] TCP port to start server on.
|
|
28
|
-
|
|
29
|
-
DESCRIPTION
|
|
30
|
-
Starts a server to preview a production build
|
|
31
|
-
|
|
32
|
-
ALIASES
|
|
33
|
-
$ sanity start
|
|
34
|
-
|
|
35
|
-
EXAMPLES
|
|
36
|
-
$ sanity start --host=0.0.0.0
|
|
37
|
-
|
|
38
|
-
$ sanity start --port=1942
|
|
39
|
-
|
|
40
|
-
$ sanity start some/build-output-dir
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
`);
|
|
44
|
-
});
|
|
45
|
-
describe('basic-app', ()=>{
|
|
46
|
-
test('should start the example', async ()=>{
|
|
47
|
-
const cwd = await testExample('basic-app', {
|
|
48
|
-
shouldBuild: true
|
|
49
|
-
});
|
|
50
|
-
// Mock the process.cwd() to the example directory
|
|
51
|
-
process.cwd = ()=>cwd;
|
|
52
|
-
const { error, stdout } = await testCommand(PreviewCommand, [
|
|
53
|
-
'--port',
|
|
54
|
-
'3334'
|
|
55
|
-
], {
|
|
56
|
-
config: {
|
|
57
|
-
root: cwd
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
expect(error).toBeUndefined();
|
|
61
|
-
expect(stdout).toContain(`Sanity application using vite@`);
|
|
62
|
-
expect(stdout).toContain(`ready in`);
|
|
63
|
-
expect(stdout).toContain(`ms and running at http://localhost:3334/ (production preview mode)`);
|
|
64
|
-
});
|
|
65
|
-
test('should throw an error if the example has not been built', async ()=>{
|
|
66
|
-
const cwd = await testExample('basic-app', {
|
|
67
|
-
shouldBuild: false
|
|
68
|
-
});
|
|
69
|
-
// Mock the process.cwd() to the example directory
|
|
70
|
-
process.cwd = ()=>cwd;
|
|
71
|
-
const { error, stdout } = await testCommand(PreviewCommand, [], {
|
|
72
|
-
config: {
|
|
73
|
-
root: cwd
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
expect(error).toBeDefined();
|
|
77
|
-
expect(error?.message).toContain('Failed to start preview server');
|
|
78
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
79
|
-
expect(stdout).toContain(`Could not find a production build in the '${cwd}/dist' directory.`);
|
|
80
|
-
expect(stdout).toContain(`Try building your application with 'sanity build' before starting the preview server.`);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
describe('basic-studio', ()=>{
|
|
84
|
-
test('should start the example', async ()=>{
|
|
85
|
-
const cwd = await testExample('basic-studio', {
|
|
86
|
-
shouldBuild: true
|
|
87
|
-
});
|
|
88
|
-
// Mock the process.cwd() to the example directory
|
|
89
|
-
process.cwd = ()=>cwd;
|
|
90
|
-
const { error, stdout } = await testCommand(PreviewCommand, [], {
|
|
91
|
-
config: {
|
|
92
|
-
root: cwd
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
expect(error).toBeUndefined();
|
|
96
|
-
expect(stdout).toContain(`Sanity Studio using vite@`);
|
|
97
|
-
expect(stdout).toContain(`ready in`);
|
|
98
|
-
expect(stdout).toContain(`ms and running at http://localhost:3333/ (production preview mode)`);
|
|
99
|
-
});
|
|
100
|
-
test('should throw an error if the example has not been built', async ()=>{
|
|
101
|
-
const cwd = await testExample('basic-studio', {
|
|
102
|
-
shouldBuild: false
|
|
103
|
-
});
|
|
104
|
-
// Mock the process.cwd() to the example directory
|
|
105
|
-
process.cwd = ()=>cwd;
|
|
106
|
-
const { error, stdout } = await testCommand(PreviewCommand, [], {
|
|
107
|
-
config: {
|
|
108
|
-
root: cwd
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
expect(error).toBeDefined();
|
|
112
|
-
expect(error?.message).toContain('Failed to start preview server');
|
|
113
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
114
|
-
expect(stdout).toContain(`Could not find a production build in the '${cwd}/dist' directory.`);
|
|
115
|
-
expect(stdout).toContain(`Try building your studio with 'sanity build' before starting the preview server.`);
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
test('should use resolved base path from index.html file', async ()=>{
|
|
119
|
-
const cwd = await testExample('basic-studio', {
|
|
120
|
-
shouldBuild: true
|
|
121
|
-
});
|
|
122
|
-
// Mock the process.cwd() to the example directory
|
|
123
|
-
process.cwd = ()=>cwd;
|
|
124
|
-
// Replace the script tag in the index.html file with a script tag that does not have a src attribute
|
|
125
|
-
const indexPath = join(cwd, 'dist', 'index.html');
|
|
126
|
-
const index = await readFile(indexPath, 'utf8');
|
|
127
|
-
// Find the script tag that matches <script src="/static/sanity-D_-mPegc.js" type="module"></script>
|
|
128
|
-
const scriptTag = index.match(/<script src="\/static\/sanity-.*\.js" type="module"><\/script>/);
|
|
129
|
-
const newIndex = index.replace(scriptTag?.[0] || '', '<script src="/custom-base-path/static/sanity-a3cc3d86.js" type="module"></script>');
|
|
130
|
-
await writeFile(indexPath, newIndex);
|
|
131
|
-
const { error, stdout } = await testCommand(PreviewCommand, [
|
|
132
|
-
'--port',
|
|
133
|
-
'3335'
|
|
134
|
-
], {
|
|
135
|
-
config: {
|
|
136
|
-
root: cwd
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
expect(error).toBeUndefined();
|
|
140
|
-
expect(stdout).toContain(`Using resolved base path from static build: /custom-base-path`);
|
|
141
|
-
expect(stdout).toContain(`Sanity Studio using vite@`);
|
|
142
|
-
expect(stdout).toContain(`ready in`);
|
|
143
|
-
expect(stdout).toContain(`ms and running at http://localhost:3335/custom-base-path (production preview mode)`);
|
|
144
|
-
});
|
|
145
|
-
test('should fallback to default basepath when cannot resolve from index.html', async ()=>{
|
|
146
|
-
const cwd = await testExample('basic-studio', {
|
|
147
|
-
shouldBuild: true
|
|
148
|
-
});
|
|
149
|
-
// Mock the process.cwd() to the example directory
|
|
150
|
-
process.cwd = ()=>cwd;
|
|
151
|
-
// Replace the script tag in the index.html file with a script tag that does not have a src attribute
|
|
152
|
-
const indexPath = join(cwd, 'dist', 'index.html');
|
|
153
|
-
const index = await readFile(indexPath, 'utf8');
|
|
154
|
-
// Find the script tag that matches <script src="/static/sanity-D_-mPegc.js" type="module"></script>
|
|
155
|
-
const scriptTag = index.match(/<script src="\/static\/sanity-.*\.js" type="module"><\/script>/);
|
|
156
|
-
const newIndex = index.replace(scriptTag?.[0] || '', '<script src="/sanity-a3cc3d86.js" type="module"></script>');
|
|
157
|
-
await writeFile(indexPath, newIndex);
|
|
158
|
-
const { error, stderr, stdout } = await testCommand(PreviewCommand, [
|
|
159
|
-
'--port',
|
|
160
|
-
'3336'
|
|
161
|
-
], {
|
|
162
|
-
config: {
|
|
163
|
-
root: cwd
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
expect(error).toBeUndefined();
|
|
167
|
-
expect(stderr).toContain(`Could not determine base path from index.html, using "/" as default`);
|
|
168
|
-
expect(stdout).toContain(`Sanity Studio using vite@`);
|
|
169
|
-
expect(stdout).toContain(`ready in`);
|
|
170
|
-
expect(stdout).toContain(`ms and running at http://localhost:3336/ (production preview mode)`);
|
|
171
|
-
});
|
|
172
|
-
test('should throw an error if the index.html file is not found', async ()=>{
|
|
173
|
-
const cwd = await testExample('basic-studio', {
|
|
174
|
-
shouldBuild: true
|
|
175
|
-
});
|
|
176
|
-
// Mock the process.cwd() to the example directory
|
|
177
|
-
process.cwd = ()=>cwd;
|
|
178
|
-
// Remove the index.html file
|
|
179
|
-
await rm(join(cwd, 'dist', 'index.html'));
|
|
180
|
-
const { error } = await testCommand(PreviewCommand, [
|
|
181
|
-
'--port',
|
|
182
|
-
'3337'
|
|
183
|
-
], {
|
|
184
|
-
config: {
|
|
185
|
-
root: cwd
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
expect(error).toBeDefined();
|
|
189
|
-
expect(error?.message).toContain('Failed to start preview server');
|
|
190
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
191
|
-
});
|
|
192
|
-
test('should throw an error if port is already in use', async ()=>{
|
|
193
|
-
const cwd = await testExample('basic-studio', {
|
|
194
|
-
shouldBuild: true
|
|
195
|
-
});
|
|
196
|
-
// Mock the process.cwd() to the example directory
|
|
197
|
-
process.cwd = ()=>cwd;
|
|
198
|
-
// Create a server on port 3338 to block it
|
|
199
|
-
const server = createServer();
|
|
200
|
-
await new Promise((resolve)=>{
|
|
201
|
-
server.listen(3338, 'localhost', resolve);
|
|
202
|
-
});
|
|
203
|
-
try {
|
|
204
|
-
const { error } = await testCommand(PreviewCommand, [
|
|
205
|
-
'--port',
|
|
206
|
-
'3338'
|
|
207
|
-
], {
|
|
208
|
-
config: {
|
|
209
|
-
root: cwd
|
|
210
|
-
}
|
|
211
|
-
});
|
|
212
|
-
expect(error).toBeDefined();
|
|
213
|
-
expect(error?.message).toContain('Port 3338 is already in use');
|
|
214
|
-
expect(error?.oclif?.exit).toBe(1);
|
|
215
|
-
} finally{
|
|
216
|
-
// Clean up the server
|
|
217
|
-
server.close();
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
test('should allow using vite config from sanity.cli.ts', async ()=>{
|
|
221
|
-
const cwd = await testExample('basic-app', {
|
|
222
|
-
shouldBuild: true
|
|
223
|
-
});
|
|
224
|
-
// Mock the process.cwd() to the example directory
|
|
225
|
-
process.cwd = ()=>cwd;
|
|
226
|
-
const existingSanityCli = await readFile(join(cwd, 'sanity.cli.ts'), 'utf8');
|
|
227
|
-
// Create a vite.config.ts file
|
|
228
|
-
await writeFile(join(cwd, 'sanity.cli.ts'), `
|
|
229
|
-
import {defineCliConfig} from '@sanity/cli'
|
|
230
|
-
|
|
231
|
-
export default defineCliConfig({
|
|
232
|
-
app: {
|
|
233
|
-
entry: './src/App.tsx',
|
|
234
|
-
organizationId: 'organizationId',
|
|
235
|
-
},
|
|
236
|
-
vite: {
|
|
237
|
-
preview: {
|
|
238
|
-
port: 1335,
|
|
239
|
-
},
|
|
240
|
-
},
|
|
241
|
-
})
|
|
242
|
-
`);
|
|
243
|
-
const { stdout } = await testCommand(PreviewCommand, [], {
|
|
244
|
-
config: {
|
|
245
|
-
root: cwd
|
|
246
|
-
}
|
|
247
|
-
});
|
|
248
|
-
expect(stdout).toContain(`ms and running at http://localhost:1335/ (production preview mode)`);
|
|
249
|
-
await writeFile(join(cwd, 'sanity.cli.ts'), existingSanityCli);
|
|
250
|
-
});
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
//# sourceMappingURL=start.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/__tests__/start.test.ts"],"sourcesContent":["import {readFile, rm, writeFile} from 'node:fs/promises'\nimport {createServer} from 'node:http'\nimport {join} from 'node:path'\n\nimport {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport {describe, expect, test} from 'vitest'\nimport {testExample} from '~test/helpers/testExample.js'\n\nimport {PreviewCommand} from '../preview.js'\n\ndescribe('#start', () => {\n test('help works', async () => {\n const {stdout} = await runCommand(['start', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Starts a server to preview a production build\n\n USAGE\n $ sanity start [OUTPUTDIR] [--host <value>] [--port <value>]\n\n ARGUMENTS\n [OUTPUTDIR] Output directory\n\n FLAGS\n --host=<value> [default: localhost] The local network interface at which to\n listen.\n --port=<value> [default: 3333] TCP port to start server on.\n\n DESCRIPTION\n Starts a server to preview a production build\n\n ALIASES\n $ sanity start\n\n EXAMPLES\n $ sanity start --host=0.0.0.0\n\n $ sanity start --port=1942\n\n $ sanity start some/build-output-dir\n\n \"\n `)\n })\n\n describe('basic-app', () => {\n test('should start the example', async () => {\n const cwd = await testExample('basic-app', {shouldBuild: true})\n // Mock the process.cwd() to the example directory\n process.cwd = () => cwd\n\n const {error, stdout} = await testCommand(PreviewCommand, ['--port', '3334'], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain(`Sanity application using vite@`)\n expect(stdout).toContain(`ready in`)\n expect(stdout).toContain(`ms and running at http://localhost:3334/ (production preview mode)`)\n })\n\n test('should throw an error if the example has not been built', async () => {\n const cwd = await testExample('basic-app', {shouldBuild: false})\n // Mock the process.cwd() to the example directory\n process.cwd = () => cwd\n\n const {error, stdout} = await testCommand(PreviewCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeDefined()\n expect(error?.message).toContain('Failed to start preview server')\n expect(error?.oclif?.exit).toBe(1)\n expect(stdout).toContain(`Could not find a production build in the '${cwd}/dist' directory.`)\n expect(stdout).toContain(\n `Try building your application with 'sanity build' before starting the preview server.`,\n )\n })\n })\n\n describe('basic-studio', () => {\n test('should start the example', async () => {\n const cwd = await testExample('basic-studio', {shouldBuild: true})\n // Mock the process.cwd() to the example directory\n process.cwd = () => cwd\n\n const {error, stdout} = await testCommand(PreviewCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain(`Sanity Studio using vite@`)\n expect(stdout).toContain(`ready in`)\n expect(stdout).toContain(`ms and running at http://localhost:3333/ (production preview mode)`)\n })\n\n test('should throw an error if the example has not been built', async () => {\n const cwd = await testExample('basic-studio', {shouldBuild: false})\n // Mock the process.cwd() to the example directory\n process.cwd = () => cwd\n\n const {error, stdout} = await testCommand(PreviewCommand, [], {\n config: {root: cwd},\n })\n\n expect(error).toBeDefined()\n expect(error?.message).toContain('Failed to start preview server')\n expect(error?.oclif?.exit).toBe(1)\n expect(stdout).toContain(`Could not find a production build in the '${cwd}/dist' directory.`)\n expect(stdout).toContain(\n `Try building your studio with 'sanity build' before starting the preview server.`,\n )\n })\n })\n\n test('should use resolved base path from index.html file', async () => {\n const cwd = await testExample('basic-studio', {shouldBuild: true})\n // Mock the process.cwd() to the example directory\n process.cwd = () => cwd\n\n // Replace the script tag in the index.html file with a script tag that does not have a src attribute\n const indexPath = join(cwd, 'dist', 'index.html')\n const index = await readFile(indexPath, 'utf8')\n\n // Find the script tag that matches <script src=\"/static/sanity-D_-mPegc.js\" type=\"module\"></script>\n const scriptTag = index.match(/<script src=\"\\/static\\/sanity-.*\\.js\" type=\"module\"><\\/script>/)\n const newIndex = index.replace(\n scriptTag?.[0] || '',\n '<script src=\"/custom-base-path/static/sanity-a3cc3d86.js\" type=\"module\"></script>',\n )\n\n await writeFile(indexPath, newIndex)\n\n const {error, stdout} = await testCommand(PreviewCommand, ['--port', '3335'], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stdout).toContain(`Using resolved base path from static build: /custom-base-path`)\n expect(stdout).toContain(`Sanity Studio using vite@`)\n expect(stdout).toContain(`ready in`)\n expect(stdout).toContain(\n `ms and running at http://localhost:3335/custom-base-path (production preview mode)`,\n )\n })\n\n test('should fallback to default basepath when cannot resolve from index.html', async () => {\n const cwd = await testExample('basic-studio', {shouldBuild: true})\n // Mock the process.cwd() to the example directory\n process.cwd = () => cwd\n\n // Replace the script tag in the index.html file with a script tag that does not have a src attribute\n const indexPath = join(cwd, 'dist', 'index.html')\n const index = await readFile(indexPath, 'utf8')\n\n // Find the script tag that matches <script src=\"/static/sanity-D_-mPegc.js\" type=\"module\"></script>\n const scriptTag = index.match(/<script src=\"\\/static\\/sanity-.*\\.js\" type=\"module\"><\\/script>/)\n const newIndex = index.replace(\n scriptTag?.[0] || '',\n '<script src=\"/sanity-a3cc3d86.js\" type=\"module\"></script>',\n )\n\n await writeFile(indexPath, newIndex)\n\n const {error, stderr, stdout} = await testCommand(PreviewCommand, ['--port', '3336'], {\n config: {root: cwd},\n })\n\n expect(error).toBeUndefined()\n expect(stderr).toContain(`Could not determine base path from index.html, using \"/\" as default`)\n expect(stdout).toContain(`Sanity Studio using vite@`)\n expect(stdout).toContain(`ready in`)\n expect(stdout).toContain(`ms and running at http://localhost:3336/ (production preview mode)`)\n })\n\n test('should throw an error if the index.html file is not found', async () => {\n const cwd = await testExample('basic-studio', {shouldBuild: true})\n // Mock the process.cwd() to the example directory\n process.cwd = () => cwd\n\n // Remove the index.html file\n await rm(join(cwd, 'dist', 'index.html'))\n\n const {error} = await testCommand(PreviewCommand, ['--port', '3337'], {\n config: {root: cwd},\n })\n\n expect(error).toBeDefined()\n expect(error?.message).toContain('Failed to start preview server')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should throw an error if port is already in use', async () => {\n const cwd = await testExample('basic-studio', {shouldBuild: true})\n // Mock the process.cwd() to the example directory\n process.cwd = () => cwd\n\n // Create a server on port 3338 to block it\n const server = createServer()\n await new Promise<void>((resolve) => {\n server.listen(3338, 'localhost', resolve)\n })\n\n try {\n const {error} = await testCommand(PreviewCommand, ['--port', '3338'], {\n config: {root: cwd},\n })\n\n expect(error).toBeDefined()\n expect(error?.message).toContain('Port 3338 is already in use')\n expect(error?.oclif?.exit).toBe(1)\n } finally {\n // Clean up the server\n server.close()\n }\n })\n\n test('should allow using vite config from sanity.cli.ts', async () => {\n const cwd = await testExample('basic-app', {shouldBuild: true})\n // Mock the process.cwd() to the example directory\n process.cwd = () => cwd\n\n const existingSanityCli = await readFile(join(cwd, 'sanity.cli.ts'), 'utf8')\n\n // Create a vite.config.ts file\n await writeFile(\n join(cwd, 'sanity.cli.ts'),\n `\n import {defineCliConfig} from '@sanity/cli'\n\n export default defineCliConfig({\n app: {\n entry: './src/App.tsx',\n organizationId: 'organizationId',\n },\n vite: {\n preview: {\n port: 1335,\n },\n },\n })\n `,\n )\n\n const {stdout} = await testCommand(PreviewCommand, [], {\n config: {root: cwd},\n })\n\n expect(stdout).toContain(`ms and running at http://localhost:1335/ (production preview mode)`)\n\n await writeFile(join(cwd, 'sanity.cli.ts'), existingSanityCli)\n })\n})\n"],"names":["readFile","rm","writeFile","createServer","join","runCommand","testCommand","describe","expect","test","testExample","PreviewCommand","stdout","toMatchInlineSnapshot","cwd","shouldBuild","process","error","config","root","toBeUndefined","toContain","toBeDefined","message","oclif","exit","toBe","indexPath","index","scriptTag","match","newIndex","replace","stderr","server","Promise","resolve","listen","close","existingSanityCli"],"mappings":"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"}
|
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { getCliConfig } from '@sanity/cli-core';
|
|
3
|
-
import { confirm } from '@sanity/cli-core/ux';
|
|
4
|
-
import { testCommand } from '@sanity/cli-test';
|
|
5
|
-
import nock from 'nock';
|
|
6
|
-
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
7
|
-
import { UndeployCommand } from '../undeploy.js';
|
|
8
|
-
vi.mock('@sanity/cli-core/ux', async ()=>{
|
|
9
|
-
const actual = await vi.importActual('@sanity/cli-core/ux');
|
|
10
|
-
return {
|
|
11
|
-
...actual,
|
|
12
|
-
confirm: vi.fn()
|
|
13
|
-
};
|
|
14
|
-
});
|
|
15
|
-
vi.mock('../../../../cli-core/src/config/findProjectRoot.js', async ()=>{
|
|
16
|
-
return {
|
|
17
|
-
findProjectRoot: vi.fn().mockResolvedValue({
|
|
18
|
-
directory: '/test/path',
|
|
19
|
-
root: '/test/path',
|
|
20
|
-
type: 'studio'
|
|
21
|
-
})
|
|
22
|
-
};
|
|
23
|
-
});
|
|
24
|
-
vi.mock('../../../../cli-core/src/config/cli/getCliConfig.js', async ()=>{
|
|
25
|
-
return {
|
|
26
|
-
getCliConfig: vi.fn()
|
|
27
|
-
};
|
|
28
|
-
});
|
|
29
|
-
function mockUserApplicationsApi(options) {
|
|
30
|
-
const { method = 'GET', query = {}, uri } = options;
|
|
31
|
-
const apiHost = 'https://api.sanity.io';
|
|
32
|
-
const apiVersion = 'v2024-08-01';
|
|
33
|
-
return nock(apiHost)[method.toLowerCase()](`/${apiVersion}${uri}`).query({
|
|
34
|
-
tag: 'sanity.cli',
|
|
35
|
-
...query
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
afterEach(()=>{
|
|
39
|
-
vi.clearAllMocks();
|
|
40
|
-
const pending = nock.pendingMocks();
|
|
41
|
-
nock.cleanAll();
|
|
42
|
-
expect(pending, 'pending mocks').toEqual([]);
|
|
43
|
-
});
|
|
44
|
-
describe('#undeploy', ()=>{
|
|
45
|
-
test('--help works', async ()=>{
|
|
46
|
-
const { stdout } = await runCommand([
|
|
47
|
-
'undeploy',
|
|
48
|
-
'--help'
|
|
49
|
-
]);
|
|
50
|
-
expect(stdout).toContain('Removes the deployed Sanity Studio');
|
|
51
|
-
});
|
|
52
|
-
test('undeploys studio when studioHost is configured', async ()=>{
|
|
53
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
54
|
-
api: {
|
|
55
|
-
projectId: 'test'
|
|
56
|
-
},
|
|
57
|
-
studioHost: 'my-host'
|
|
58
|
-
});
|
|
59
|
-
mockUserApplicationsApi({
|
|
60
|
-
query: {
|
|
61
|
-
appHost: 'my-host',
|
|
62
|
-
appType: 'studio'
|
|
63
|
-
},
|
|
64
|
-
uri: '/projects/test/user-applications'
|
|
65
|
-
}).reply(200, {
|
|
66
|
-
appHost: 'my-host',
|
|
67
|
-
id: 'app-id'
|
|
68
|
-
});
|
|
69
|
-
mockUserApplicationsApi({
|
|
70
|
-
method: 'DELETE',
|
|
71
|
-
query: {
|
|
72
|
-
appType: 'studio'
|
|
73
|
-
},
|
|
74
|
-
uri: '/user-applications/app-id'
|
|
75
|
-
}).reply(200);
|
|
76
|
-
const { stdout } = await testCommand(UndeployCommand, [
|
|
77
|
-
'--yes'
|
|
78
|
-
]);
|
|
79
|
-
expect(stdout).toContain('Studio undeploy scheduled');
|
|
80
|
-
});
|
|
81
|
-
test('undeploys application when app id is configured', async ()=>{
|
|
82
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
83
|
-
app: {},
|
|
84
|
-
deployment: {
|
|
85
|
-
appId: 'core-id'
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
mockUserApplicationsApi({
|
|
89
|
-
query: {
|
|
90
|
-
appType: 'coreApp'
|
|
91
|
-
},
|
|
92
|
-
uri: '/user-applications/core-id'
|
|
93
|
-
}).reply(200, {
|
|
94
|
-
appHost: 'core-host',
|
|
95
|
-
id: 'core-id'
|
|
96
|
-
});
|
|
97
|
-
mockUserApplicationsApi({
|
|
98
|
-
method: 'DELETE',
|
|
99
|
-
query: {
|
|
100
|
-
appType: 'coreApp'
|
|
101
|
-
},
|
|
102
|
-
uri: '/user-applications/core-id'
|
|
103
|
-
}).reply(200);
|
|
104
|
-
const { stdout } = await testCommand(UndeployCommand, [
|
|
105
|
-
'--yes'
|
|
106
|
-
]);
|
|
107
|
-
expect(stdout).toContain('Application undeploy scheduled');
|
|
108
|
-
});
|
|
109
|
-
test('does nothing if no application found', async ()=>{
|
|
110
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
111
|
-
api: {
|
|
112
|
-
projectId: 'test'
|
|
113
|
-
},
|
|
114
|
-
studioHost: 'my-host'
|
|
115
|
-
});
|
|
116
|
-
mockUserApplicationsApi({
|
|
117
|
-
query: {
|
|
118
|
-
appHost: 'my-host',
|
|
119
|
-
appType: 'studio'
|
|
120
|
-
},
|
|
121
|
-
uri: '/projects/test/user-applications'
|
|
122
|
-
}).reply(404);
|
|
123
|
-
const { stdout } = await testCommand(UndeployCommand, [
|
|
124
|
-
'--yes'
|
|
125
|
-
]);
|
|
126
|
-
expect(stdout).toContain('Nothing to undeploy');
|
|
127
|
-
});
|
|
128
|
-
test('does nothing if no application found (app config)', async ()=>{
|
|
129
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
130
|
-
app: {},
|
|
131
|
-
deployment: {
|
|
132
|
-
appId: 'core-id'
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
mockUserApplicationsApi({
|
|
136
|
-
query: {
|
|
137
|
-
appType: 'coreApp'
|
|
138
|
-
},
|
|
139
|
-
uri: '/user-applications/core-id'
|
|
140
|
-
}).reply(404);
|
|
141
|
-
const { stdout } = await testCommand(UndeployCommand, [
|
|
142
|
-
'--yes'
|
|
143
|
-
]);
|
|
144
|
-
expect(stdout).toContain('Application with the given ID does not exist.');
|
|
145
|
-
expect(stdout).toContain('Nothing to undeploy.');
|
|
146
|
-
});
|
|
147
|
-
test('does nothing if studioHost and app ID are missing', async ()=>{
|
|
148
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
149
|
-
api: {
|
|
150
|
-
projectId: 'test'
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
const { stdout } = await testCommand(UndeployCommand, [
|
|
154
|
-
'--yes'
|
|
155
|
-
]);
|
|
156
|
-
expect(stdout).toContain('No application ID or studio host provided');
|
|
157
|
-
expect(stdout).toContain('Nothing to undeploy');
|
|
158
|
-
});
|
|
159
|
-
test('does nothing if appId is missing', async ()=>{
|
|
160
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
161
|
-
app: {}
|
|
162
|
-
});
|
|
163
|
-
const { stdout } = await testCommand(UndeployCommand, [
|
|
164
|
-
'--yes'
|
|
165
|
-
]);
|
|
166
|
-
expect(stdout).toContain('No application ID provided');
|
|
167
|
-
expect(stdout).toContain('Nothing to undeploy');
|
|
168
|
-
});
|
|
169
|
-
test('does not undeploy if prompt is rejected', async ()=>{
|
|
170
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
171
|
-
api: {
|
|
172
|
-
projectId: 'test'
|
|
173
|
-
},
|
|
174
|
-
studioHost: 'my-host'
|
|
175
|
-
});
|
|
176
|
-
mockUserApplicationsApi({
|
|
177
|
-
query: {
|
|
178
|
-
appHost: 'my-host',
|
|
179
|
-
appType: 'studio'
|
|
180
|
-
},
|
|
181
|
-
uri: '/projects/test/user-applications'
|
|
182
|
-
}).reply(200, {
|
|
183
|
-
appHost: 'my-host',
|
|
184
|
-
id: 'app-id'
|
|
185
|
-
});
|
|
186
|
-
vi.mocked(confirm).mockResolvedValueOnce(false);
|
|
187
|
-
await testCommand(UndeployCommand, []);
|
|
188
|
-
// No delete call should be made since prompt was rejected
|
|
189
|
-
});
|
|
190
|
-
test('undeploys if prompt is accepted', async ()=>{
|
|
191
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
192
|
-
api: {
|
|
193
|
-
projectId: 'test'
|
|
194
|
-
},
|
|
195
|
-
studioHost: 'my-host'
|
|
196
|
-
});
|
|
197
|
-
mockUserApplicationsApi({
|
|
198
|
-
query: {
|
|
199
|
-
appHost: 'my-host',
|
|
200
|
-
appType: 'studio'
|
|
201
|
-
},
|
|
202
|
-
uri: '/projects/test/user-applications'
|
|
203
|
-
}).reply(200, {
|
|
204
|
-
appHost: 'my-host',
|
|
205
|
-
id: 'app-id'
|
|
206
|
-
});
|
|
207
|
-
mockUserApplicationsApi({
|
|
208
|
-
method: 'DELETE',
|
|
209
|
-
query: {
|
|
210
|
-
appType: 'studio'
|
|
211
|
-
},
|
|
212
|
-
uri: '/user-applications/app-id'
|
|
213
|
-
}).reply(200);
|
|
214
|
-
vi.mocked(confirm).mockResolvedValueOnce(true);
|
|
215
|
-
const { stdout } = await testCommand(UndeployCommand, []);
|
|
216
|
-
expect(stdout).toContain('Studio undeploy scheduled');
|
|
217
|
-
});
|
|
218
|
-
test('undeploys app if prompt is accepted (app config)', async ()=>{
|
|
219
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
220
|
-
app: {},
|
|
221
|
-
deployment: {
|
|
222
|
-
appId: 'core-id'
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
mockUserApplicationsApi({
|
|
226
|
-
query: {
|
|
227
|
-
appType: 'coreApp'
|
|
228
|
-
},
|
|
229
|
-
uri: '/user-applications/core-id'
|
|
230
|
-
}).reply(200, {
|
|
231
|
-
appHost: 'core-host',
|
|
232
|
-
id: 'core-id',
|
|
233
|
-
title: 'core-app'
|
|
234
|
-
});
|
|
235
|
-
mockUserApplicationsApi({
|
|
236
|
-
method: 'DELETE',
|
|
237
|
-
query: {
|
|
238
|
-
appType: 'coreApp'
|
|
239
|
-
},
|
|
240
|
-
uri: '/user-applications/core-id'
|
|
241
|
-
}).reply(200);
|
|
242
|
-
vi.mocked(confirm).mockResolvedValueOnce(true);
|
|
243
|
-
const { stdout } = await testCommand(UndeployCommand, []);
|
|
244
|
-
expect(stdout).toContain('Application undeploy scheduled');
|
|
245
|
-
expect(confirm).toHaveBeenCalledWith(expect.objectContaining({
|
|
246
|
-
message: expect.stringMatching(/This will undeploy the following application:.*Title:.*core-app.*ID:.*core-id/s)
|
|
247
|
-
}));
|
|
248
|
-
});
|
|
249
|
-
test('undeploys app with missing title and reports using fallback value', async ()=>{
|
|
250
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
251
|
-
app: {},
|
|
252
|
-
deployment: {
|
|
253
|
-
appId: 'core-id'
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
mockUserApplicationsApi({
|
|
257
|
-
query: {
|
|
258
|
-
appType: 'coreApp'
|
|
259
|
-
},
|
|
260
|
-
uri: '/user-applications/core-id'
|
|
261
|
-
}).reply(200, {
|
|
262
|
-
appHost: 'core-host',
|
|
263
|
-
id: 'core-id'
|
|
264
|
-
});
|
|
265
|
-
mockUserApplicationsApi({
|
|
266
|
-
method: 'DELETE',
|
|
267
|
-
query: {
|
|
268
|
-
appType: 'coreApp'
|
|
269
|
-
},
|
|
270
|
-
uri: '/user-applications/core-id'
|
|
271
|
-
}).reply(200);
|
|
272
|
-
vi.mocked(confirm).mockResolvedValueOnce(true);
|
|
273
|
-
const { stdout } = await testCommand(UndeployCommand, []);
|
|
274
|
-
expect(stdout).toContain('Application undeploy scheduled');
|
|
275
|
-
expect(stdout).toContain('your application');
|
|
276
|
-
expect(confirm).toHaveBeenCalledWith(expect.objectContaining({
|
|
277
|
-
message: expect.stringMatching(/\(untitled application\)/)
|
|
278
|
-
}));
|
|
279
|
-
});
|
|
280
|
-
test('handles generic errors', async ()=>{
|
|
281
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
282
|
-
api: {
|
|
283
|
-
projectId: 'test'
|
|
284
|
-
},
|
|
285
|
-
studioHost: 'my-host'
|
|
286
|
-
});
|
|
287
|
-
mockUserApplicationsApi({
|
|
288
|
-
query: {
|
|
289
|
-
appHost: 'my-host',
|
|
290
|
-
appType: 'studio'
|
|
291
|
-
},
|
|
292
|
-
uri: '/projects/test/user-applications'
|
|
293
|
-
}).reply(500, {
|
|
294
|
-
message: 'Generic error'
|
|
295
|
-
});
|
|
296
|
-
const { error, stderr } = await testCommand(UndeployCommand, [
|
|
297
|
-
'--yes'
|
|
298
|
-
]);
|
|
299
|
-
expect(error?.message).toContain('Generic error');
|
|
300
|
-
expect(stderr).toContain('Checking application info');
|
|
301
|
-
});
|
|
302
|
-
test('undeploys studio using deployment.appId', async ()=>{
|
|
303
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
304
|
-
api: {
|
|
305
|
-
projectId: 'test'
|
|
306
|
-
},
|
|
307
|
-
deployment: {
|
|
308
|
-
appId: 'app-id'
|
|
309
|
-
}
|
|
310
|
-
});
|
|
311
|
-
const appHost = 'my-studio';
|
|
312
|
-
mockUserApplicationsApi({
|
|
313
|
-
uri: '/projects/test/user-applications/app-id'
|
|
314
|
-
}).reply(200, {
|
|
315
|
-
appHost,
|
|
316
|
-
id: 'app-id'
|
|
317
|
-
});
|
|
318
|
-
mockUserApplicationsApi({
|
|
319
|
-
method: 'DELETE',
|
|
320
|
-
query: {
|
|
321
|
-
appType: 'studio'
|
|
322
|
-
},
|
|
323
|
-
uri: '/user-applications/app-id'
|
|
324
|
-
}).reply(200);
|
|
325
|
-
const { stdout } = await testCommand(UndeployCommand, [
|
|
326
|
-
'--yes'
|
|
327
|
-
]);
|
|
328
|
-
expect(stdout).toContain('Studio undeploy scheduled');
|
|
329
|
-
});
|
|
330
|
-
test('prioritizes deployment.appId over studioHost when both are configured', async ()=>{
|
|
331
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
332
|
-
api: {
|
|
333
|
-
projectId: 'test'
|
|
334
|
-
},
|
|
335
|
-
deployment: {
|
|
336
|
-
appId: 'app-id'
|
|
337
|
-
},
|
|
338
|
-
studioHost: 'my-host'
|
|
339
|
-
});
|
|
340
|
-
const appHost = 'my-host';
|
|
341
|
-
// Should call by appId, NOT by appHost
|
|
342
|
-
mockUserApplicationsApi({
|
|
343
|
-
uri: '/projects/test/user-applications/app-id'
|
|
344
|
-
}).reply(200, {
|
|
345
|
-
appHost,
|
|
346
|
-
id: 'app-id'
|
|
347
|
-
});
|
|
348
|
-
mockUserApplicationsApi({
|
|
349
|
-
method: 'DELETE',
|
|
350
|
-
query: {
|
|
351
|
-
appType: 'studio'
|
|
352
|
-
},
|
|
353
|
-
uri: '/user-applications/app-id'
|
|
354
|
-
}).reply(200);
|
|
355
|
-
const { stdout } = await testCommand(UndeployCommand, [
|
|
356
|
-
'--yes'
|
|
357
|
-
]);
|
|
358
|
-
expect(stdout).toContain('Studio undeploy scheduled');
|
|
359
|
-
});
|
|
360
|
-
test('handles error when deployment.appId does not exist for the org', async ()=>{
|
|
361
|
-
vi.mocked(getCliConfig).mockResolvedValueOnce({
|
|
362
|
-
api: {
|
|
363
|
-
projectId: 'test'
|
|
364
|
-
},
|
|
365
|
-
deployment: {
|
|
366
|
-
appId: 'non-existent-app-id'
|
|
367
|
-
}
|
|
368
|
-
});
|
|
369
|
-
mockUserApplicationsApi({
|
|
370
|
-
uri: '/projects/test/user-applications/non-existent-app-id'
|
|
371
|
-
}).reply(404, {
|
|
372
|
-
message: 'Application not found'
|
|
373
|
-
});
|
|
374
|
-
const { stdout } = await testCommand(UndeployCommand, [
|
|
375
|
-
'--yes'
|
|
376
|
-
]);
|
|
377
|
-
expect(stdout).toContain('Your project has not been assigned an app ID or a studio hostname');
|
|
378
|
-
expect(stdout).toContain('Nothing to undeploy');
|
|
379
|
-
});
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
//# sourceMappingURL=undeploy.test.js.map
|