@sanity/cli 6.0.0-alpha.9 → 6.0.0
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 +602 -258
- package/bin/run.js +2 -0
- package/dist/SanityHelp.js +51 -23
- package/dist/SanityHelp.js.map +1 -1
- package/dist/actions/auth/authServer.js +28 -22
- package/dist/actions/auth/authServer.js.map +1 -1
- package/dist/actions/auth/login/getProvider.js +49 -38
- package/dist/actions/auth/login/getProvider.js.map +1 -1
- package/dist/actions/auth/login/getSSOProvider.js +25 -19
- package/dist/actions/auth/login/getSSOProvider.js.map +1 -1
- package/dist/actions/auth/login/login.js +12 -33
- package/dist/actions/auth/login/login.js.map +1 -1
- package/dist/actions/auth/types.js.map +1 -1
- package/dist/actions/backup/downloadAsset.js +9 -9
- package/dist/actions/backup/downloadAsset.js.map +1 -1
- package/dist/actions/backup/downloadDocument.js +8 -8
- package/dist/actions/backup/downloadDocument.js.map +1 -1
- package/dist/actions/build/buildApp.js +55 -18
- package/dist/actions/build/buildApp.js.map +1 -1
- package/dist/actions/build/buildStaticFiles.js +3 -2
- package/dist/actions/build/buildStaticFiles.js.map +1 -1
- package/dist/actions/build/buildStudio.js +72 -44
- package/dist/actions/build/buildStudio.js.map +1 -1
- package/dist/actions/build/buildVendorDependencies.js +18 -52
- package/dist/actions/build/buildVendorDependencies.js.map +1 -1
- package/dist/actions/build/checkRequiredDependencies.js +13 -8
- package/dist/actions/build/checkRequiredDependencies.js.map +1 -1
- package/dist/actions/build/checkStudioDependencyVersions.js +19 -17
- package/dist/actions/build/checkStudioDependencyVersions.js.map +1 -1
- package/dist/actions/build/createExternalFromImportMap.js +1 -1
- package/dist/actions/build/createExternalFromImportMap.js.map +1 -1
- package/dist/actions/build/determineBasePath.js +5 -2
- package/dist/actions/build/determineBasePath.js.map +1 -1
- package/dist/actions/build/getViteConfig.js +47 -4
- package/dist/actions/build/getViteConfig.js.map +1 -1
- package/dist/actions/build/handlePrereleaseVersions.js +44 -0
- package/dist/actions/build/handlePrereleaseVersions.js.map +1 -0
- package/dist/actions/build/renderDocument.js +6 -10
- package/dist/actions/build/renderDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js +4 -4
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js +3 -3
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js +1 -0
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js +2 -2
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js +1 -1
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js.map +1 -1
- package/dist/actions/build/shouldAutoUpdate.js +2 -0
- package/dist/actions/build/shouldAutoUpdate.js.map +1 -1
- package/dist/actions/build/types.js.map +1 -1
- package/dist/actions/build/writeFavicons.js +3 -5
- package/dist/actions/build/writeFavicons.js.map +1 -1
- package/dist/actions/build/writeSanityRuntime.js +4 -3
- package/dist/actions/build/writeSanityRuntime.js.map +1 -1
- package/dist/actions/codemods/reactIconsV3.js +2 -2
- package/dist/actions/codemods/reactIconsV3.js.map +1 -1
- package/dist/actions/dataset/create.js +7 -1
- package/dist/actions/dataset/create.js.map +1 -1
- package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -1
- package/dist/actions/dataset/resolveDataset.js +26 -0
- package/dist/actions/dataset/resolveDataset.js.map +1 -0
- package/dist/actions/debug/formatters.js +22 -0
- package/dist/actions/debug/formatters.js.map +1 -0
- package/dist/actions/deploy/createStudioUserApplication.js +17 -4
- package/dist/actions/deploy/createStudioUserApplication.js.map +1 -1
- package/dist/actions/deploy/deployApp.js +41 -15
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/deploy/deployStudio.js +92 -44
- package/dist/actions/deploy/deployStudio.js.map +1 -1
- package/dist/actions/deploy/deployStudioSchemasAndManifests.js +55 -0
- package/dist/actions/deploy/deployStudioSchemasAndManifests.js.map +1 -0
- package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js +120 -0
- package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js.map +1 -0
- package/dist/actions/deploy/findUserApplicationForStudio.js +35 -12
- package/dist/actions/deploy/findUserApplicationForStudio.js.map +1 -1
- package/dist/actions/deploy/types.js +10 -1
- package/dist/actions/deploy/types.js.map +1 -1
- package/dist/actions/deploy/urlUtils.js +21 -0
- package/dist/actions/deploy/urlUtils.js.map +1 -0
- package/dist/actions/dev/getDashboardAppUrl.js +48 -0
- package/dist/actions/dev/getDashboardAppUrl.js.map +1 -0
- package/dist/actions/dev/getDevServerConfig.js +7 -3
- package/dist/actions/dev/getDevServerConfig.js.map +1 -1
- package/dist/actions/dev/startAppDevServer.js +3 -3
- package/dist/actions/dev/startAppDevServer.js.map +1 -1
- package/dist/actions/dev/startStudioDevServer.js +14 -14
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/doctor/checks/cliInstallation.js +56 -0
- package/dist/actions/doctor/checks/cliInstallation.js.map +1 -0
- package/dist/actions/doctor/checks/index.js +16 -0
- package/dist/actions/doctor/checks/index.js.map +1 -0
- package/dist/actions/doctor/runDoctorChecks.js +56 -0
- package/dist/actions/doctor/runDoctorChecks.js.map +1 -0
- package/dist/actions/doctor/types.js +3 -0
- package/dist/actions/doctor/types.js.map +1 -0
- package/dist/actions/documents/types.js.map +1 -1
- package/dist/actions/documents/validate.js +11 -2
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/actions/documents/validateDocuments.worker.js +4 -4
- package/dist/actions/documents/validateDocuments.worker.js.map +1 -1
- package/dist/actions/documents/validation/reporters/jsonReporter.js +1 -1
- package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js +1 -1
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/tree.js +108 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/tree.js.map +1 -0
- package/dist/actions/graphql/SchemaError.js +4 -26
- package/dist/actions/graphql/SchemaError.js.map +1 -1
- package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js +540 -0
- package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js.map +1 -0
- package/dist/actions/graphql/__tests__/fixtures/test-studio.js +1143 -0
- package/dist/actions/graphql/__tests__/fixtures/test-studio.js.map +1 -0
- package/dist/actions/graphql/__tests__/fixtures/union-refs.js +591 -0
- package/dist/actions/graphql/__tests__/fixtures/union-refs.js.map +1 -0
- package/dist/actions/graphql/__tests__/helpers.js +23 -0
- package/dist/actions/graphql/__tests__/helpers.js.map +1 -0
- package/dist/actions/graphql/extractFromSanitySchema.js +5 -5
- package/dist/actions/graphql/extractFromSanitySchema.js.map +1 -1
- package/dist/actions/graphql/extractGraphQLAPIs.js +150 -0
- package/dist/actions/graphql/extractGraphQLAPIs.js.map +1 -0
- package/dist/actions/graphql/extractGraphQLAPIs.worker.js +12 -0
- package/dist/actions/graphql/extractGraphQLAPIs.worker.js.map +1 -0
- package/dist/actions/graphql/gen1/generateTypeFilters.js +1 -1
- package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -1
- package/dist/actions/graphql/gen1/generateTypeQueries.js +2 -1
- package/dist/actions/graphql/gen1/generateTypeQueries.js.map +1 -1
- package/dist/actions/graphql/gen1/index.js +5 -5
- package/dist/actions/graphql/gen1/index.js.map +1 -1
- package/dist/actions/graphql/gen2/generateTypeQueries.js +1 -1
- package/dist/actions/graphql/gen2/generateTypeQueries.js.map +1 -1
- package/dist/actions/graphql/gen2/index.js +6 -6
- package/dist/actions/graphql/gen2/index.js.map +1 -1
- package/dist/actions/graphql/gen3/generateTypeQueries.js +3 -4
- package/dist/actions/graphql/gen3/generateTypeQueries.js.map +1 -1
- package/dist/actions/graphql/gen3/index.js +6 -7
- package/dist/actions/graphql/gen3/index.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js +15 -57
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.worker.js +75 -106
- package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -1
- package/dist/actions/graphql/helpers.js +13 -0
- package/dist/actions/graphql/helpers.js.map +1 -1
- package/dist/actions/graphql/resolveGraphQLApisFromWorkspaces.js +187 -0
- package/dist/actions/graphql/resolveGraphQLApisFromWorkspaces.js.map +1 -0
- package/dist/actions/graphql/types.js +1 -1
- package/dist/actions/graphql/types.js.map +1 -1
- package/dist/actions/init/bootstrapLocalTemplate.js +10 -8
- package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -1
- package/dist/actions/init/bootstrapRemoteTemplate.js +6 -5
- package/dist/actions/init/bootstrapRemoteTemplate.js.map +1 -1
- package/dist/actions/init/bootstrapTemplate.js.map +1 -1
- package/dist/actions/init/checkNextJsReactCompatibility.js +1 -1
- package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -1
- package/dist/actions/init/createAppCliConfig.js.map +1 -1
- package/dist/actions/init/createCliConfig.js.map +1 -1
- package/dist/actions/init/createPackageManifest.js +21 -9
- package/dist/actions/init/createPackageManifest.js.map +1 -1
- package/dist/actions/init/remoteTemplate.js +1 -2
- package/dist/actions/init/remoteTemplate.js.map +1 -1
- package/dist/actions/init/sdkAppDependencies.js +19 -0
- package/dist/actions/init/sdkAppDependencies.js.map +1 -0
- package/dist/actions/init/studioDependencies.js.map +1 -0
- package/dist/actions/init/templates/appQuickstart.js +1 -22
- package/dist/actions/init/templates/appQuickstart.js.map +1 -1
- package/dist/actions/init/templates/appSanityUi.js +3 -22
- package/dist/actions/init/templates/appSanityUi.js.map +1 -1
- package/dist/actions/init/types.js.map +1 -1
- package/dist/actions/manifest/SchemaIcon.js +6 -4
- package/dist/actions/manifest/SchemaIcon.js.map +1 -1
- package/dist/actions/manifest/blockTypeTransformer.js +67 -0
- package/dist/actions/manifest/blockTypeTransformer.js.map +1 -0
- package/dist/actions/manifest/debug.js +4 -0
- package/dist/actions/manifest/debug.js.map +1 -0
- package/dist/actions/manifest/extractAppManifest.js +39 -22
- package/dist/actions/manifest/extractAppManifest.js.map +1 -1
- package/dist/actions/manifest/extractManifest.js +27 -78
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/manifest/extractManifest.worker.js +30 -0
- package/dist/actions/manifest/extractManifest.worker.js.map +1 -0
- package/dist/actions/manifest/extractWorkspaceManifest.js +31 -372
- package/dist/actions/manifest/extractWorkspaceManifest.js.map +1 -1
- package/dist/actions/manifest/iconResolver.js +30 -0
- package/dist/actions/manifest/iconResolver.js.map +1 -0
- package/dist/actions/manifest/referenceTransformer.js +51 -0
- package/dist/actions/manifest/referenceTransformer.js.map +1 -0
- package/dist/actions/manifest/schemaTypeHelpers.js +2 -2
- package/dist/actions/manifest/schemaTypeHelpers.js.map +1 -1
- package/dist/actions/manifest/schemaTypeTransformer.js +168 -0
- package/dist/actions/manifest/schemaTypeTransformer.js.map +1 -0
- package/dist/actions/manifest/transformerUtils.js +40 -0
- package/dist/actions/manifest/transformerUtils.js.map +1 -0
- package/dist/actions/manifest/types.js +5 -0
- package/dist/actions/manifest/types.js.map +1 -1
- package/dist/actions/manifest/validationTransformer.js +84 -0
- package/dist/actions/manifest/validationTransformer.js.map +1 -0
- package/dist/actions/manifest/writeManifestFile.js +30 -0
- package/dist/actions/manifest/writeManifestFile.js.map +1 -0
- package/dist/actions/manifest/writeWorkspaceFiles.js +30 -0
- package/dist/actions/manifest/writeWorkspaceFiles.js.map +1 -0
- package/dist/actions/mcp/detectAvailableEditors.js +16 -4
- package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
- package/dist/actions/mcp/editorConfigs.js +64 -6
- package/dist/actions/mcp/editorConfigs.js.map +1 -1
- package/dist/actions/mcp/setupMCP.js.map +1 -1
- package/dist/actions/mcp/writeMCPConfig.js +27 -15
- package/dist/actions/mcp/writeMCPConfig.js.map +1 -1
- package/dist/actions/media/buildNdjsonIndex.js +32 -0
- package/dist/actions/media/buildNdjsonIndex.js.map +1 -0
- package/dist/actions/media/importAspects.js +2 -11
- package/dist/actions/media/importAspects.js.map +1 -1
- package/dist/actions/media/importMedia.js +22 -18
- package/dist/actions/media/importMedia.js.map +1 -1
- package/dist/actions/organizations/findOrganizationByUserName.js +5 -0
- package/dist/actions/organizations/findOrganizationByUserName.js.map +1 -0
- package/dist/actions/organizations/getOrganization.js +3 -2
- package/dist/actions/organizations/getOrganization.js.map +1 -1
- package/dist/actions/organizations/getOrganizationChoices.js +27 -19
- package/dist/actions/organizations/getOrganizationChoices.js.map +1 -1
- package/dist/actions/organizations/types.js +3 -0
- package/dist/actions/organizations/types.js.map +1 -0
- package/dist/actions/projects/getManageUrl.js +1 -2
- package/dist/actions/projects/getManageUrl.js.map +1 -1
- package/dist/actions/schema/deleteSchemaAction.js +14 -30
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
- package/dist/actions/schema/deploySchemas.js +22 -91
- package/dist/actions/schema/deploySchemas.js.map +1 -1
- package/dist/actions/schema/extractSanitySchema.worker.js +0 -5
- package/dist/actions/schema/extractSanitySchema.worker.js.map +1 -1
- package/dist/actions/schema/extractSanityWorkspace.worker.js +24 -0
- package/dist/actions/schema/extractSanityWorkspace.worker.js.map +1 -0
- package/dist/actions/schema/extractSchema.js +8 -40
- package/dist/actions/schema/extractSchema.js.map +1 -1
- package/dist/actions/schema/extractSchemaWatcher.js +128 -0
- package/dist/actions/schema/extractSchemaWatcher.js.map +1 -0
- package/dist/actions/schema/formatSchemaValidation.js +5 -1
- package/dist/actions/schema/formatSchemaValidation.js.map +1 -1
- package/dist/actions/schema/getExtractOptions.js +16 -0
- package/dist/actions/schema/getExtractOptions.js.map +1 -0
- package/dist/actions/schema/listSchemas.js +53 -56
- package/dist/actions/schema/listSchemas.js.map +1 -1
- package/dist/actions/schema/matchSchemaPattern.js +22 -0
- package/dist/actions/schema/matchSchemaPattern.js.map +1 -0
- package/dist/actions/schema/runSchemaExtraction.js +39 -0
- package/dist/actions/schema/runSchemaExtraction.js.map +1 -0
- package/dist/actions/schema/types.js +8 -0
- package/dist/actions/schema/types.js.map +1 -1
- package/dist/actions/schema/uniqueWorkspaces.worker.js +24 -0
- package/dist/actions/schema/uniqueWorkspaces.worker.js.map +1 -0
- package/dist/actions/schema/updateWorkspaceSchema.js +63 -0
- package/dist/actions/schema/updateWorkspaceSchema.js.map +1 -0
- package/dist/actions/schema/uploadSchemaToLexicon.js +87 -0
- package/dist/actions/schema/uploadSchemaToLexicon.js.map +1 -0
- package/dist/actions/schema/utils/SchemaExtractionError.js +10 -0
- package/dist/actions/schema/utils/SchemaExtractionError.js.map +1 -0
- package/dist/actions/schema/utils/schemaStoreValidation.js +1 -15
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -1
- package/dist/actions/schema/validateSchema.worker.js +1 -8
- package/dist/actions/schema/validateSchema.worker.js.map +1 -1
- package/dist/actions/schema/watchExtractSchema.js +72 -0
- package/dist/actions/schema/watchExtractSchema.js.map +1 -0
- package/dist/actions/telemetry/isTrueish.js +10 -0
- package/dist/actions/telemetry/isTrueish.js.map +1 -0
- package/dist/actions/telemetry/resolveConsent.js +2 -1
- package/dist/actions/telemetry/resolveConsent.js.map +1 -1
- package/dist/actions/telemetry/setConsent.js +2 -1
- package/dist/actions/telemetry/setConsent.js.map +1 -1
- package/dist/actions/users/getMembersForProject.js.map +1 -1
- package/dist/actions/users/getPendingInvitations.js +1 -1
- package/dist/actions/users/getPendingInvitations.js.map +1 -1
- package/dist/actions/users/types.js.map +1 -1
- package/dist/actions/versions/filterSanityModules.js.map +1 -1
- package/dist/actions/versions/findSanityModulesVersions.js +2 -3
- package/dist/actions/versions/findSanityModulesVersions.js.map +1 -1
- package/dist/actions/versions/getFormatters.js +1 -1
- package/dist/actions/versions/getFormatters.js.map +1 -1
- package/dist/actions/versions/tryFindLatestVersion.js +1 -1
- package/dist/actions/versions/tryFindLatestVersion.js.map +1 -1
- package/dist/commands/backup/disable.js +22 -7
- package/dist/commands/backup/disable.js.map +1 -1
- package/dist/commands/backup/download.js +19 -10
- package/dist/commands/backup/download.js.map +1 -1
- package/dist/commands/backup/enable.js +22 -7
- package/dist/commands/backup/enable.js.map +1 -1
- package/dist/commands/backup/list.js +20 -8
- package/dist/commands/backup/list.js.map +1 -1
- package/dist/commands/build.js +2 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/cors/add.js +20 -7
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +22 -7
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/cors/list.js +22 -7
- package/dist/commands/cors/list.js.map +1 -1
- package/dist/commands/dataset/alias/create.js +26 -7
- package/dist/commands/dataset/alias/create.js.map +1 -1
- package/dist/commands/dataset/alias/delete.js +20 -7
- package/dist/commands/dataset/alias/delete.js.map +1 -1
- package/dist/commands/dataset/alias/link.js +20 -7
- package/dist/commands/dataset/alias/link.js.map +1 -1
- package/dist/commands/dataset/alias/unlink.js +20 -7
- package/dist/commands/dataset/alias/unlink.js.map +1 -1
- package/dist/commands/dataset/copy.js +45 -30
- package/dist/commands/dataset/copy.js.map +1 -1
- package/dist/commands/dataset/create.js +32 -7
- package/dist/commands/dataset/create.js.map +1 -1
- package/dist/commands/dataset/delete.js +16 -7
- package/dist/commands/dataset/delete.js.map +1 -1
- package/dist/commands/dataset/embeddings/disable.js +77 -0
- package/dist/commands/dataset/embeddings/disable.js.map +1 -0
- package/dist/commands/dataset/embeddings/enable.js +141 -0
- package/dist/commands/dataset/embeddings/enable.js.map +1 -0
- package/dist/commands/dataset/embeddings/status.js +72 -0
- package/dist/commands/dataset/embeddings/status.js.map +1 -0
- package/dist/commands/dataset/export.js +25 -16
- package/dist/commands/dataset/export.js.map +1 -1
- package/dist/commands/dataset/import.js +306 -1
- package/dist/commands/dataset/import.js.map +1 -1
- package/dist/commands/dataset/list.js +22 -7
- package/dist/commands/dataset/list.js.map +1 -1
- package/dist/commands/dataset/visibility/get.js +18 -7
- package/dist/commands/dataset/visibility/get.js.map +1 -1
- package/dist/commands/dataset/visibility/set.js +22 -7
- package/dist/commands/dataset/visibility/set.js.map +1 -1
- package/dist/commands/debug.js +4 -2
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/deploy.js +22 -11
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.js +2 -4
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.js +125 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/documents/create.js +19 -12
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/documents/delete.js +19 -12
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/documents/get.js +17 -12
- package/dist/commands/documents/get.js.map +1 -1
- package/dist/commands/documents/query.js +26 -18
- package/dist/commands/documents/query.js.map +1 -1
- package/dist/commands/documents/validate.js +32 -10
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/deploy.js +58 -30
- package/dist/commands/graphql/deploy.js.map +1 -1
- package/dist/commands/graphql/list.js +15 -7
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/graphql/undeploy.js +37 -19
- package/dist/commands/graphql/undeploy.js.map +1 -1
- package/dist/commands/hook/attempt.js +22 -7
- package/dist/commands/hook/attempt.js.map +1 -1
- package/dist/commands/hook/create.js +23 -8
- package/dist/commands/hook/create.js.map +1 -1
- package/dist/commands/hook/delete.js +22 -7
- package/dist/commands/hook/delete.js.map +1 -1
- package/dist/commands/hook/list.js +22 -7
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/hook/logs.js +21 -8
- package/dist/commands/hook/logs.js.map +1 -1
- package/dist/commands/init.js +46 -28
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +19 -6
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +8 -6
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/manage.js +0 -1
- package/dist/commands/manage.js.map +1 -1
- package/dist/commands/manifest/extract.js +14 -10
- package/dist/commands/manifest/extract.js.map +1 -1
- package/dist/commands/mcp/configure.js +1 -1
- package/dist/commands/mcp/configure.js.map +1 -1
- package/dist/commands/media/create-aspect.js +4 -4
- package/dist/commands/media/create-aspect.js.map +1 -1
- package/dist/commands/media/delete-aspect.js +9 -7
- package/dist/commands/media/delete-aspect.js.map +1 -1
- package/dist/commands/media/deploy-aspect.js +22 -9
- package/dist/commands/media/deploy-aspect.js.map +1 -1
- package/dist/commands/media/export.js +9 -7
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +10 -8
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/preview.js +2 -4
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/projects/list.js +2 -1
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/delete.js +33 -34
- package/dist/commands/schema/delete.js.map +1 -1
- package/dist/commands/schema/deploy.js +19 -30
- package/dist/commands/schema/deploy.js.map +1 -1
- package/dist/commands/schema/extract.js +32 -4
- package/dist/commands/schema/extract.js.map +1 -1
- package/dist/commands/schema/list.js +10 -31
- package/dist/commands/schema/list.js.map +1 -1
- package/dist/commands/tokens/add.js +24 -7
- package/dist/commands/tokens/add.js.map +1 -1
- package/dist/commands/tokens/delete.js +20 -7
- package/dist/commands/tokens/delete.js.map +1 -1
- package/dist/commands/tokens/list.js +20 -7
- package/dist/commands/tokens/list.js.map +1 -1
- package/dist/commands/users/invite.js +24 -7
- package/dist/commands/users/invite.js.map +1 -1
- package/dist/commands/users/list.js +76 -33
- package/dist/commands/users/list.js.map +1 -1
- package/dist/commands/versions.js +1 -1
- package/dist/commands/versions.js.map +1 -1
- package/dist/config/createCliConfig.js +1 -2
- package/dist/config/createCliConfig.js.map +1 -1
- package/dist/exports/_internal.d.ts +132 -0
- package/dist/exports/_internal.js +4 -0
- package/dist/exports/_internal.js.map +1 -0
- package/dist/exports/index.d.ts +113 -0
- package/dist/exports/index.js +6 -0
- package/dist/exports/index.js.map +1 -0
- package/dist/hooks/init/checkForUpdates.js +14 -0
- package/dist/hooks/init/checkForUpdates.js.map +1 -0
- package/dist/hooks/prerun/flushTelemetry.worker.js +1 -1
- package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -1
- package/dist/hooks/prerun/injectEnvVariables.js +9 -1
- package/dist/hooks/prerun/injectEnvVariables.js.map +1 -1
- package/dist/hooks/prerun/setupTelemetry.js +9 -3
- package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
- package/dist/prompts/promptForProject.js +64 -0
- package/dist/prompts/promptForProject.js.map +1 -0
- package/dist/{actions/auth/login/promptProviders.js → prompts/promptForProviders.js} +3 -3
- package/dist/prompts/promptForProviders.js.map +1 -0
- package/dist/prompts/selectMediaLibrary.js +1 -1
- package/dist/prompts/selectMediaLibrary.js.map +1 -1
- package/dist/server/devServer.js +4 -2
- package/dist/server/devServer.js.map +1 -1
- package/dist/server/previewServer.js +2 -2
- package/dist/server/previewServer.js.map +1 -1
- package/dist/server/vite/plugin-schema-extraction.js +201 -0
- package/dist/server/vite/plugin-schema-extraction.js.map +1 -0
- package/dist/server/vite/plugin-typegen.js +217 -0
- package/dist/server/vite/plugin-typegen.js.map +1 -0
- package/dist/services/auth.js +42 -3
- package/dist/services/auth.js.map +1 -1
- package/dist/services/datasets.js +7 -5
- package/dist/services/datasets.js.map +1 -1
- package/dist/services/docs.js +2 -2
- package/dist/services/docs.js.map +1 -1
- package/dist/services/embeddings.js +25 -0
- package/dist/services/embeddings.js.map +1 -0
- package/dist/services/getUrlHeaders.js +7 -18
- package/dist/services/getUrlHeaders.js.map +1 -1
- package/dist/services/grants.js +13 -0
- package/dist/services/grants.js.map +1 -0
- package/dist/services/graphql.js +1 -1
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/projects.js +4 -2
- package/dist/services/projects.js.map +1 -1
- package/dist/services/schemas.js +1 -1
- package/dist/services/schemas.js.map +1 -1
- package/dist/services/telemetry.js +2 -1
- package/dist/services/telemetry.js.map +1 -1
- package/dist/services/userApplications.js +21 -6
- package/dist/services/userApplications.js.map +1 -1
- package/dist/telemetry/extractSchema.telemetry.js +10 -0
- package/dist/telemetry/extractSchema.telemetry.js.map +1 -1
- package/dist/types/grants.js +3 -0
- package/dist/types/grants.js.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/util/checkProjectPermissions.js +21 -0
- package/dist/util/checkProjectPermissions.js.map +1 -0
- package/dist/util/cliClient.js +5 -3
- package/dist/util/cliClient.js.map +1 -1
- package/dist/util/compareDependencyVersions.js +74 -38
- package/dist/util/compareDependencyVersions.js.map +1 -1
- package/dist/util/createExpiringConfig.js +64 -0
- package/dist/util/createExpiringConfig.js.map +1 -0
- package/dist/util/detectFramework.js +135 -0
- package/dist/util/detectFramework.js.map +1 -0
- package/dist/util/errorMessages.js +0 -1
- package/dist/util/errorMessages.js.map +1 -1
- package/dist/util/extractDocumentsFromNdjsonOrTarball.js +1 -2
- package/dist/util/extractDocumentsFromNdjsonOrTarball.js.map +1 -1
- package/dist/util/getCliVersion.js +1 -1
- package/dist/util/getCliVersion.js.map +1 -1
- package/dist/util/getLocalPackageVersion.js +31 -23
- package/dist/util/getLocalPackageVersion.js.map +1 -1
- package/dist/util/getProjectDefaults.js.map +1 -1
- package/dist/util/getSharedServerConfig.js +1 -0
- package/dist/util/getSharedServerConfig.js.map +1 -1
- package/dist/util/getWorkspace.js +1 -1
- package/dist/util/getWorkspace.js.map +1 -1
- package/dist/util/isSchemaError.js +11 -0
- package/dist/util/isSchemaError.js.map +1 -0
- package/dist/util/isTar.js +8 -0
- package/dist/util/isTar.js.map +1 -0
- package/dist/util/packageManager/getPeerDependencies.js +44 -0
- package/dist/util/packageManager/getPeerDependencies.js.map +1 -0
- package/dist/util/packageManager/installationInfo/analyzeIssues.js +225 -0
- package/dist/util/packageManager/installationInfo/analyzeIssues.js.map +1 -0
- package/dist/util/packageManager/installationInfo/commands.js +73 -0
- package/dist/util/packageManager/installationInfo/commands.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectCliInstallation.js +66 -0
- package/dist/util/packageManager/installationInfo/detectCliInstallation.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectGlobals.js +295 -0
- package/dist/util/packageManager/installationInfo/detectGlobals.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectPackages.js +190 -0
- package/dist/util/packageManager/installationInfo/detectPackages.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectWorkspace.js +192 -0
- package/dist/util/packageManager/installationInfo/detectWorkspace.js.map +1 -0
- package/dist/util/packageManager/installationInfo/index.js +4 -0
- package/dist/util/packageManager/installationInfo/index.js.map +1 -0
- package/dist/util/packageManager/installationInfo/readJsonFile.js +14 -0
- package/dist/util/packageManager/installationInfo/readJsonFile.js.map +1 -0
- package/dist/util/packageManager/installationInfo/resolveVersionRange.js +42 -0
- package/dist/util/packageManager/installationInfo/resolveVersionRange.js.map +1 -0
- package/dist/util/packageManager/installationInfo/types.js +3 -0
- package/dist/util/packageManager/installationInfo/types.js.map +1 -0
- package/dist/util/packageManager/packageManagerChoice.js +1 -20
- package/dist/util/packageManager/packageManagerChoice.js.map +1 -1
- package/dist/util/packageManager/upgradePackages.js +4 -1
- package/dist/util/packageManager/upgradePackages.js.map +1 -1
- package/dist/util/promiseRaceWithTimeout.js +28 -0
- package/dist/util/promiseRaceWithTimeout.js.map +1 -0
- package/dist/util/readdirRecursive.js.map +1 -1
- package/dist/util/resolveLatestVersions.js +2 -2
- package/dist/util/resolveLatestVersions.js.map +1 -1
- package/dist/util/sharedFlags.js +54 -0
- package/dist/util/sharedFlags.js.map +1 -0
- package/dist/util/telemetry/cleanupOldTelemetryFiles.js +30 -0
- package/dist/util/telemetry/cleanupOldTelemetryFiles.js.map +1 -0
- package/dist/util/telemetry/createTelemetryStore.js +95 -0
- package/dist/util/telemetry/createTelemetryStore.js.map +1 -0
- package/dist/util/telemetry/createTraceId.js +10 -0
- package/dist/util/telemetry/createTraceId.js.map +1 -0
- package/dist/util/telemetry/findTelemetryFiles.js +35 -0
- package/dist/util/telemetry/findTelemetryFiles.js.map +1 -0
- package/dist/util/telemetry/flushTelemetryFiles.js +118 -0
- package/dist/util/telemetry/flushTelemetryFiles.js.map +1 -0
- package/dist/util/telemetry/generateTelemetryFilePath.js +30 -0
- package/dist/util/telemetry/generateTelemetryFilePath.js.map +1 -0
- package/dist/util/telemetry/logger.js +59 -0
- package/dist/util/telemetry/logger.js.map +1 -0
- package/dist/util/telemetry/readNDJSON.js +28 -0
- package/dist/util/telemetry/readNDJSON.js.map +1 -0
- package/dist/util/telemetry/telemetryStoreDebug.js +7 -0
- package/dist/util/telemetry/telemetryStoreDebug.js.map +1 -0
- package/dist/util/telemetry/trace.js +150 -0
- package/dist/util/telemetry/trace.js.map +1 -0
- package/dist/util/toForwardSlashes.js +8 -0
- package/dist/util/toForwardSlashes.js.map +1 -0
- package/dist/util/update/fetchLatestVersion.js +21 -0
- package/dist/util/update/fetchLatestVersion.js.map +1 -0
- package/dist/util/update/getUpdateCommand.js +20 -0
- package/dist/util/update/getUpdateCommand.js.map +1 -0
- package/dist/util/update/isInstalledUsingYarn.js +17 -0
- package/dist/util/update/isInstalledUsingYarn.js.map +1 -0
- package/dist/util/update/showNotificationUpdate.js +31 -0
- package/dist/util/update/showNotificationUpdate.js.map +1 -0
- package/dist/util/update/updateChecker.js +60 -0
- package/dist/util/update/updateChecker.js.map +1 -0
- package/dist/util/update/updateCheckerDebug.js +4 -0
- package/dist/util/update/updateCheckerDebug.js.map +1 -0
- package/oclif.config.js +1 -0
- package/oclif.manifest.json +900 -107
- package/package.json +72 -71
- package/static/favicons/apple-touch-icon.png +0 -0
- package/static/favicons/favicon-192.png +0 -0
- package/static/favicons/favicon-512.png +0 -0
- package/static/favicons/favicon-96.png +0 -0
- package/static/favicons/favicon.ico +0 -0
- package/static/favicons/favicon.svg +12 -0
- package/dist/actions/auth/login/promptProviders.js.map +0 -1
- package/dist/actions/dev/getCoreAppUrl.js +0 -10
- package/dist/actions/dev/getCoreAppUrl.js.map +0 -1
- package/dist/actions/schema/schemaStoreTypes.js +0 -19
- package/dist/actions/schema/schemaStoreTypes.js.map +0 -1
- package/dist/actions/schema/utils/manifestExtractor.js +0 -33
- package/dist/actions/schema/utils/manifestExtractor.js.map +0 -1
- package/dist/actions/schema/utils/manifestReader.js +0 -71
- package/dist/actions/schema/utils/manifestReader.js.map +0 -1
- package/dist/index.d.ts +0 -2326
- package/dist/index.js +0 -6
- package/dist/index.js.map +0 -1
- package/dist/studioDependencies.js.map +0 -1
- package/dist/typings/deepSortObject.d.js +0 -2
- package/dist/typings/deepSortObject.d.js.map +0 -1
- package/dist/util/findNdjsonEntry.js +0 -21
- package/dist/util/findNdjsonEntry.js.map +0 -1
- package/dist/util/importStudioConfig.js +0 -40
- package/dist/util/importStudioConfig.js.map +0 -1
- package/dist/util/readModuleVersion.js +0 -15
- package/dist/util/readModuleVersion.js.map +0 -1
- package/dist/util/readPackageJson.js +0 -44
- package/dist/util/readPackageJson.js.map +0 -1
- package/dist/util/readPackageManifest.js +0 -46
- package/dist/util/readPackageManifest.js.map +0 -1
- package/dist/util/uniqBy.js +0 -14
- package/dist/util/uniqBy.js.map +0 -1
- package/dist/util/workerChannels.js +0 -172
- package/dist/util/workerChannels.js.map +0 -1
- /package/dist/{studioDependencies.js → actions/init/studioDependencies.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/deploy/deployStudio.ts"],"sourcesContent":["import {basename, dirname} from 'node:path'\nimport {styleText} from 'node:util'\nimport {createGzip} from 'node:zlib'\n\nimport {CLIError} from '@oclif/core/errors'\nimport {spinner} from '@sanity/cli-core/ux'\nimport {pack} from 'tar-fs'\n\nimport {createDeployment} from '../../services/userApplications.js'\nimport {getAppId} from '../../util/appId.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\nimport {readModuleVersion} from '../../util/readModuleVersion.js'\nimport {buildStudio} from '../build/buildStudio.js'\nimport {shouldAutoUpdate} from '../build/shouldAutoUpdate.js'\nimport {checkDir} from './checkDir.js'\nimport {createStudioUserApplication} from './createStudioUserApplication.js'\nimport {deployDebug} from './deployDebug.js'\nimport {findUserApplicationForStudio} from './findUserApplicationForStudio.js'\nimport {type DeployAppOptions} from './types.js'\n\nexport async function deployStudio(options: DeployAppOptions) {\n const {cliConfig, exit, flags, output, sourceDir, workDir} = options\n\n const appHost = cliConfig.studioHost\n const appId = getAppId(cliConfig)\n const projectId = cliConfig.api?.projectId\n const installedSanityVersion = await readModuleVersion(sourceDir, 'sanity')\n const isAutoUpdating = shouldAutoUpdate({cliConfig, flags, output})\n\n if (!installedSanityVersion) {\n output.error(`Failed to find installed sanity version`, {exit: 1})\n return\n }\n\n if (!projectId) {\n output.error(NO_PROJECT_ID, {exit: 1})\n return\n }\n\n let spin = spinner('Verifying local content')\n\n try {\n let userApplication = await findUserApplicationForStudio({\n appHost,\n appId,\n output,\n projectId,\n })\n\n if (!userApplication) {\n // otherwise, prompt the user for a hostname\n output.log('Your project has not been assigned a studio hostname.')\n output.log('To deploy your Sanity Studio to our hosted sanity.studio service,')\n output.log('you will need one. Please enter the part you want to use.')\n\n userApplication = await createStudioUserApplication(projectId)\n\n deployDebug('Created user application', userApplication)\n }\n\n deployDebug('Found user application', userApplication)\n\n // Always build the project, unless --no-build is passed\n const shouldBuild = flags.build\n if (shouldBuild) {\n deployDebug(`Building studio`)\n await buildStudio({\n autoUpdatesEnabled: isAutoUpdating,\n cliConfig,\n exit,\n flags,\n outDir: sourceDir,\n output,\n workDir,\n })\n }\n\n // TODO: Implement schema deployment\n // await deploySchemasAction(\n // {\n // 'extract-manifest': shouldBuild,\n // 'manifest-dir': `${sourceDir}/static`,\n // 'schema-required': flags['schema-required'],\n // 'verbose': flags.verbose,\n // },\n // {...context, manifestExtractor: createManifestExtractor(context)},\n // )\n\n // Ensure that the directory exists, is a directory and seems to have valid content\n spin = spin.start()\n try {\n await checkDir(sourceDir)\n spin.succeed()\n } catch (err) {\n spin.fail()\n deployDebug('Error checking directory', err)\n output.error('Error checking directory', {exit: 1})\n }\n\n // Create a tarball of the given directory\n const parentDir = dirname(sourceDir)\n const base = basename(sourceDir)\n const tarball = pack(parentDir, {entries: [base]}).pipe(createGzip())\n\n spin = spinner('Deploying to sanity.studio').start()\n\n const {location} = await createDeployment({\n applicationId: userApplication.id,\n isApp: false,\n isAutoUpdating,\n projectId,\n tarball,\n version: installedSanityVersion,\n })\n\n spin.succeed()\n\n // And let the user know we're done\n output.log(`\\nSuccess! Studio deployed to ${styleText('cyan', location || 'unknown URL')}`)\n\n if (!appId) {\n output.log(`\\nAdd ${styleText('cyan', `deployment: { appId: '${userApplication.id}' }`)}`)\n output.log(`to sanity.cli.js or sanity.cli.ts`)\n output.log(`to avoid prompting on next deploy.`)\n }\n } catch (error) {\n // if the error is a CLIError, we can just output the message and exit\n if (error instanceof CLIError) {\n output.error(error.message, {exit: 1})\n return\n }\n\n spin.fail()\n deployDebug('Error deploying studio', error)\n output.error(`Error deploying studio: ${error}`, {exit: 1})\n }\n}\n"],"names":["basename","dirname","styleText","createGzip","CLIError","spinner","pack","createDeployment","getAppId","NO_PROJECT_ID","readModuleVersion","buildStudio","shouldAutoUpdate","checkDir","createStudioUserApplication","deployDebug","findUserApplicationForStudio","deployStudio","options","cliConfig","exit","flags","output","sourceDir","workDir","appHost","studioHost","appId","projectId","api","installedSanityVersion","isAutoUpdating","error","spin","userApplication","log","shouldBuild","build","autoUpdatesEnabled","outDir","start","succeed","err","fail","parentDir","base","tarball","entries","pipe","location","applicationId","id","isApp","version","message"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/deploy/deployStudio.ts"],"sourcesContent":["import {basename, dirname} from 'node:path'\nimport {styleText} from 'node:util'\nimport {createGzip, type Gzip} from 'node:zlib'\n\nimport {CLIError} from '@oclif/core/errors'\nimport {spinner} from '@sanity/cli-core/ux'\nimport {type StudioManifest} from 'sanity'\nimport {pack} from 'tar-fs'\n\nimport {createDeployment} from '../../services/userApplications.js'\nimport {getAppId} from '../../util/appId.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\nimport {getLocalPackageVersion} from '../../util/getLocalPackageVersion.js'\nimport {buildStudio} from '../build/buildStudio.js'\nimport {shouldAutoUpdate} from '../build/shouldAutoUpdate.js'\nimport {formatSchemaValidation} from '../schema/formatSchemaValidation.js'\nimport {SchemaExtractionError} from '../schema/utils/SchemaExtractionError.js'\nimport {checkDir} from './checkDir.js'\nimport {createStudioUserApplication} from './createStudioUserApplication.js'\nimport {deployDebug} from './deployDebug.js'\nimport {deployStudioSchemasAndManifests} from './deployStudioSchemasAndManifests.js'\nimport {findUserApplicationForStudio} from './findUserApplicationForStudio.js'\nimport {type DeployAppOptions} from './types.js'\n\nexport async function deployStudio(options: DeployAppOptions) {\n const {cliConfig, flags, output, projectRoot, sourceDir} = options\n\n const workDir = projectRoot.directory\n const configPath = projectRoot.path\n\n const appHost = cliConfig.studioHost\n const appId = getAppId(cliConfig)\n const projectId = cliConfig.api?.projectId\n const installedSanityVersion = await getLocalPackageVersion('sanity', workDir)\n const isAutoUpdating = shouldAutoUpdate({cliConfig, flags, output})\n\n const isExternal = !!flags.external\n const urlType: 'external' | 'internal' = isExternal ? 'external' : 'internal'\n\n if (!installedSanityVersion) {\n output.error(`Failed to find installed sanity version`, {exit: 1})\n return\n }\n\n if (!projectId) {\n output.error(NO_PROJECT_ID, {exit: 1})\n return\n }\n\n let spin = spinner('Verifying local content')\n\n try {\n let userApplication = await findUserApplicationForStudio({\n appHost,\n appId,\n output,\n projectId,\n urlType,\n })\n\n if (!userApplication) {\n if (isExternal) {\n output.log('Your project has not been registered with an external studio URL.')\n output.log('Please enter the full URL where your studio is hosted.')\n } else {\n output.log('Your project has not been assigned a studio hostname.')\n output.log('To deploy your Sanity Studio to our hosted sanity.studio service,')\n output.log('you will need one. Please enter the subdomain you want to use.')\n }\n\n userApplication = await createStudioUserApplication({projectId, urlType})\n\n deployDebug('Created user application', userApplication)\n }\n\n deployDebug('Found user application', userApplication)\n\n // Always build the project, unless --no-build is passed or --external is passed\n const shouldBuild = flags.build && !isExternal\n if (shouldBuild) {\n deployDebug(`Building studio`)\n await buildStudio({\n autoUpdatesEnabled: isAutoUpdating,\n calledFromDeploy: true,\n cliConfig,\n flags,\n outDir: sourceDir,\n output,\n workDir,\n })\n }\n\n let studioManifest: StudioManifest | null = null\n try {\n studioManifest = await deployStudioSchemasAndManifests({\n configPath,\n isExternal,\n outPath: `${sourceDir}/static`,\n projectId,\n schemaRequired: flags['schema-required'],\n verbose: flags.verbose,\n workDir,\n })\n } catch (error) {\n deployDebug('Error deploying studio schemas and manifests', error)\n if (error instanceof SchemaExtractionError) {\n output.error(formatSchemaValidation(error.validation || []), {exit: 1})\n }\n output.error(`Error deploying studio schemas and manifests: ${error}`, {exit: 1})\n }\n\n if (!studioManifest) {\n output.error('Failed to generate studio manifest. Please check your schemas and manifests.', {\n exit: 1,\n })\n }\n\n let tarball: Gzip | undefined\n\n if (!isExternal) {\n // Ensure that the directory exists, is a directory and seems to have valid content\n spin = spin.start()\n try {\n await checkDir(sourceDir)\n spin.succeed()\n } catch (err) {\n spin.fail()\n deployDebug('Error checking directory', err)\n output.error('Error checking directory', {exit: 1})\n }\n\n // Create a tarball of the given directory\n const parentDir = dirname(sourceDir)\n const base = basename(sourceDir)\n tarball = pack(parentDir, {entries: [base]}).pipe(createGzip())\n }\n\n spin = spinner(isExternal ? 'Registering studio' : 'Deploying to sanity.studio').start()\n\n const {location} = await createDeployment({\n applicationId: userApplication.id,\n isApp: false,\n isAutoUpdating,\n manifest: studioManifest,\n projectId,\n tarball,\n version: installedSanityVersion,\n })\n\n spin.succeed()\n\n if (isExternal) {\n output.log(`\\nSuccess! Studio registered`)\n } else {\n output.log(`\\nSuccess! Studio deployed to ${styleText('cyan', location)}`)\n }\n\n if (!appId) {\n const example = `Example:\nexport default defineCliConfig({\n //…\n deployment: {\n ${styleText('cyan', `appId: '${userApplication.id}'`)},\n },\n //…\n})`\n output.log(`\\nAdd ${styleText('cyan', `appId: '${userApplication.id}'`)}`)\n output.log(`to the \\`deployment\\` section in sanity.cli.js or sanity.cli.ts`)\n output.log(`to avoid prompting for application id on next deploy.`)\n output.log(`\\n${example}`)\n }\n } catch (error) {\n // if the error is a CLIError, we can just output the message and exit\n if (error instanceof CLIError) {\n output.error(error.message, {exit: 1})\n return\n }\n\n spin.fail()\n deployDebug('Error deploying studio', error)\n output.error(`Error deploying studio: ${error}`, {exit: 1})\n }\n}\n"],"names":["basename","dirname","styleText","createGzip","CLIError","spinner","pack","createDeployment","getAppId","NO_PROJECT_ID","getLocalPackageVersion","buildStudio","shouldAutoUpdate","formatSchemaValidation","SchemaExtractionError","checkDir","createStudioUserApplication","deployDebug","deployStudioSchemasAndManifests","findUserApplicationForStudio","deployStudio","options","cliConfig","flags","output","projectRoot","sourceDir","workDir","directory","configPath","path","appHost","studioHost","appId","projectId","api","installedSanityVersion","isAutoUpdating","isExternal","external","urlType","error","exit","spin","userApplication","log","shouldBuild","build","autoUpdatesEnabled","calledFromDeploy","outDir","studioManifest","outPath","schemaRequired","verbose","validation","tarball","start","succeed","err","fail","parentDir","base","entries","pipe","location","applicationId","id","isApp","manifest","version","example","message"],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { styleText } from 'node:util';
|
|
2
|
+
import { ux } from '@oclif/core/ux';
|
|
3
|
+
import { getCliTelemetry, studioWorkerTask, subdebug } from '@sanity/cli-core';
|
|
4
|
+
import { SchemaDeploy } from '../../telemetry/extractSchema.telemetry.js';
|
|
5
|
+
import { SchemaExtractionError } from '../schema/utils/SchemaExtractionError.js';
|
|
6
|
+
const debug = subdebug('deployStudioSchemasAndManifests');
|
|
7
|
+
/**
|
|
8
|
+
* 1. Extracts the create manifest in dist/static (automatically deployed with studio)
|
|
9
|
+
* 2. Deploys the schemas to /schemas endpoint
|
|
10
|
+
* 3. Creates a studio manifest, uploads it to user application and lexicon
|
|
11
|
+
*/ export async function deployStudioSchemasAndManifests(options) {
|
|
12
|
+
const { configPath, isExternal, outPath, projectId, schemaRequired, verbose, workDir } = options;
|
|
13
|
+
const trace = getCliTelemetry().trace(SchemaDeploy, {
|
|
14
|
+
// If the studio is externally hosted, we don't need to extract the manifest
|
|
15
|
+
extractManifest: !isExternal,
|
|
16
|
+
manifestDir: outPath,
|
|
17
|
+
schemaRequired
|
|
18
|
+
});
|
|
19
|
+
try {
|
|
20
|
+
trace.start();
|
|
21
|
+
const result = await studioWorkerTask(new URL('deployStudioSchemasAndManifests.worker.js', import.meta.url), {
|
|
22
|
+
env: {
|
|
23
|
+
...process.env,
|
|
24
|
+
// Workers don't inherit TTY state — propagate color support from parent
|
|
25
|
+
...process.stdout.isTTY && !process.env.NO_COLOR ? {
|
|
26
|
+
FORCE_COLOR: '1'
|
|
27
|
+
} : {}
|
|
28
|
+
},
|
|
29
|
+
name: 'deployStudioSchemasAndManifests',
|
|
30
|
+
studioRootPath: workDir,
|
|
31
|
+
workerData: {
|
|
32
|
+
configPath,
|
|
33
|
+
isExternal,
|
|
34
|
+
outPath,
|
|
35
|
+
projectId,
|
|
36
|
+
schemaRequired,
|
|
37
|
+
verbose,
|
|
38
|
+
workDir
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
debug('Result %o', result);
|
|
42
|
+
// If the schema is required, we throw an error
|
|
43
|
+
if (result.type === 'error') {
|
|
44
|
+
throw new SchemaExtractionError(result.error, result.validation);
|
|
45
|
+
}
|
|
46
|
+
trace.complete();
|
|
47
|
+
ux.stdout(`${styleText('gray', '↳ List deployed schemas with:')} ${styleText('cyan', 'sanity schema list')}`);
|
|
48
|
+
return result.studioManifest;
|
|
49
|
+
} catch (err) {
|
|
50
|
+
trace.error(err);
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=deployStudioSchemasAndManifests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/deploy/deployStudioSchemasAndManifests.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {ux} from '@oclif/core/ux'\nimport {getCliTelemetry, studioWorkerTask, subdebug} from '@sanity/cli-core'\nimport {type SchemaValidationProblemGroup} from '@sanity/types'\nimport {type StudioManifest} from 'sanity'\n\nimport {SchemaDeploy} from '../../telemetry/extractSchema.telemetry.js'\nimport {SchemaExtractionError} from '../schema/utils/SchemaExtractionError.js'\nimport {type DeployStudioSchemasAndManifestsWorkerData} from './types.js'\n\ntype DeployStudioSchemasAndManifestsWorkerMessage =\n | {\n error: string\n type: 'error'\n validation?: SchemaValidationProblemGroup[]\n }\n | {\n studioManifest: StudioManifest | null\n type: 'success'\n }\n\nconst debug = subdebug('deployStudioSchemasAndManifests')\n\n/**\n * 1. Extracts the create manifest in dist/static (automatically deployed with studio)\n * 2. Deploys the schemas to /schemas endpoint\n * 3. Creates a studio manifest, uploads it to user application and lexicon\n */\nexport async function deployStudioSchemasAndManifests(\n options: DeployStudioSchemasAndManifestsWorkerData,\n): Promise<StudioManifest | null> {\n const {configPath, isExternal, outPath, projectId, schemaRequired, verbose, workDir} = options\n\n const trace = getCliTelemetry().trace(SchemaDeploy, {\n // If the studio is externally hosted, we don't need to extract the manifest\n extractManifest: !isExternal,\n manifestDir: outPath,\n schemaRequired,\n })\n\n try {\n trace.start()\n const result = await studioWorkerTask<DeployStudioSchemasAndManifestsWorkerMessage>(\n new URL('deployStudioSchemasAndManifests.worker.js', import.meta.url),\n {\n env: {\n ...process.env,\n // Workers don't inherit TTY state — propagate color support from parent\n ...(process.stdout.isTTY && !process.env.NO_COLOR ? {FORCE_COLOR: '1'} : {}),\n },\n name: 'deployStudioSchemasAndManifests',\n studioRootPath: workDir,\n workerData: {\n configPath,\n isExternal,\n outPath,\n projectId,\n schemaRequired,\n verbose,\n workDir,\n } satisfies DeployStudioSchemasAndManifestsWorkerData,\n },\n )\n\n debug('Result %o', result)\n\n // If the schema is required, we throw an error\n if (result.type === 'error') {\n throw new SchemaExtractionError(result.error, result.validation)\n }\n\n trace.complete()\n ux.stdout(\n `${styleText('gray', '↳ List deployed schemas with:')} ${styleText('cyan', 'sanity schema list')}`,\n )\n return result.studioManifest\n } catch (err) {\n trace.error(err)\n throw err\n }\n}\n"],"names":["styleText","ux","getCliTelemetry","studioWorkerTask","subdebug","SchemaDeploy","SchemaExtractionError","debug","deployStudioSchemasAndManifests","options","configPath","isExternal","outPath","projectId","schemaRequired","verbose","workDir","trace","extractManifest","manifestDir","start","result","URL","url","env","process","stdout","isTTY","NO_COLOR","FORCE_COLOR","name","studioRootPath","workerData","type","error","validation","complete","studioManifest","err"],"mappings":"AAAA,SAAQA,SAAS,QAAO,YAAW;AAEnC,SAAQC,EAAE,QAAO,iBAAgB;AACjC,SAAQC,eAAe,EAAEC,gBAAgB,EAAEC,QAAQ,QAAO,mBAAkB;AAI5E,SAAQC,YAAY,QAAO,6CAA4C;AACvE,SAAQC,qBAAqB,QAAO,2CAA0C;AAc9E,MAAMC,QAAQH,SAAS;AAEvB;;;;CAIC,GACD,OAAO,eAAeI,gCACpBC,OAAkD;IAElD,MAAM,EAACC,UAAU,EAAEC,UAAU,EAAEC,OAAO,EAAEC,SAAS,EAAEC,cAAc,EAAEC,OAAO,EAAEC,OAAO,EAAC,GAAGP;IAEvF,MAAMQ,QAAQf,kBAAkBe,KAAK,CAACZ,cAAc;QAClD,4EAA4E;QAC5Ea,iBAAiB,CAACP;QAClBQ,aAAaP;QACbE;IACF;IAEA,IAAI;QACFG,MAAMG,KAAK;QACX,MAAMC,SAAS,MAAMlB,iBACnB,IAAImB,IAAI,6CAA6C,YAAYC,GAAG,GACpE;YACEC,KAAK;gBACH,GAAGC,QAAQD,GAAG;gBACd,wEAAwE;gBACxE,GAAIC,QAAQC,MAAM,CAACC,KAAK,IAAI,CAACF,QAAQD,GAAG,CAACI,QAAQ,GAAG;oBAACC,aAAa;gBAAG,IAAI,CAAC,CAAC;YAC7E;YACAC,MAAM;YACNC,gBAAgBf;YAChBgB,YAAY;gBACVtB;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;gBACAC;YACF;QACF;QAGFT,MAAM,aAAac;QAEnB,+CAA+C;QAC/C,IAAIA,OAAOY,IAAI,KAAK,SAAS;YAC3B,MAAM,IAAI3B,sBAAsBe,OAAOa,KAAK,EAAEb,OAAOc,UAAU;QACjE;QAEAlB,MAAMmB,QAAQ;QACdnC,GAAGyB,MAAM,CACP,GAAG1B,UAAU,QAAQ,iCAAiC,CAAC,EAAEA,UAAU,QAAQ,uBAAuB;QAEpG,OAAOqB,OAAOgB,cAAc;IAC9B,EAAE,OAAOC,KAAK;QACZrB,MAAMiB,KAAK,CAACI;QACZ,MAAMA;IACR;AACF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { isMainThread, parentPort, workerData } from 'node:worker_threads';
|
|
2
|
+
import { getStudioWorkspaces, subdebug } from '@sanity/cli-core';
|
|
3
|
+
import { extractWorkspaceManifest } from '../manifest/extractWorkspaceManifest.js';
|
|
4
|
+
import { writeManifestFile } from '../manifest/writeManifestFile.js';
|
|
5
|
+
import { updateWorkspacesSchemas } from '../schema/updateWorkspaceSchema.js';
|
|
6
|
+
import { uploadSchemaToLexicon } from '../schema/uploadSchemaToLexicon.js';
|
|
7
|
+
import { extractValidationFromSchemaError } from '../schema/utils/extractValidationFromSchemaError.js';
|
|
8
|
+
import { deployStudioSchemasAndManifestsWorkerData } from './types.js';
|
|
9
|
+
const debug = subdebug('deployStudioSchemasAndManifests.worker');
|
|
10
|
+
async function main() {
|
|
11
|
+
if (isMainThread || !parentPort) {
|
|
12
|
+
throw new Error('Should only be run in a worker!');
|
|
13
|
+
}
|
|
14
|
+
const { configPath, isExternal, outPath, projectId, schemaRequired, verbose, workDir } = deployStudioSchemasAndManifestsWorkerData.parse(workerData);
|
|
15
|
+
try {
|
|
16
|
+
debug('Deploying studio schemas and manifests from config path %s', configPath);
|
|
17
|
+
const workspaces = await getStudioWorkspaces(configPath);
|
|
18
|
+
debug('Workspaces %o', workspaces);
|
|
19
|
+
if (workspaces.length === 0) {
|
|
20
|
+
throw new Error('No workspaces found');
|
|
21
|
+
}
|
|
22
|
+
debug('Handling deployment for %s', isExternal ? 'external' : 'internal');
|
|
23
|
+
let studioManifest = null;
|
|
24
|
+
if (isExternal) {
|
|
25
|
+
;
|
|
26
|
+
[studioManifest] = await handleExternalDeployment({
|
|
27
|
+
projectId,
|
|
28
|
+
schemaRequired,
|
|
29
|
+
verbose,
|
|
30
|
+
workDir,
|
|
31
|
+
workspaces
|
|
32
|
+
});
|
|
33
|
+
} else {
|
|
34
|
+
;
|
|
35
|
+
[studioManifest] = await handleInternalDeployment({
|
|
36
|
+
outPath,
|
|
37
|
+
projectId,
|
|
38
|
+
verbose,
|
|
39
|
+
workDir,
|
|
40
|
+
workspaces
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
parentPort.postMessage({
|
|
44
|
+
studioManifest,
|
|
45
|
+
type: 'success'
|
|
46
|
+
});
|
|
47
|
+
} catch (error) {
|
|
48
|
+
debug('Error deploying studio schemas and manifests', error);
|
|
49
|
+
const validation = await extractValidationFromSchemaError(error, workDir);
|
|
50
|
+
parentPort.postMessage({
|
|
51
|
+
error: error instanceof Error ? error.message : String(error),
|
|
52
|
+
type: 'error',
|
|
53
|
+
validation
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function writeWorkspaceToDist({ outPath, workDir, workspaces }) {
|
|
58
|
+
// Get the create manifest workspace
|
|
59
|
+
const workspaceManifests = await extractWorkspaceManifest(workspaces, workDir);
|
|
60
|
+
await writeManifestFile({
|
|
61
|
+
outPath,
|
|
62
|
+
workDir,
|
|
63
|
+
workspaceManifests
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* External deployments:
|
|
68
|
+
* 1. Update the workspace schemas to the /schemas endpoint IF --schema-required is passed
|
|
69
|
+
* 2. Update server-side schemas
|
|
70
|
+
*/ async function handleExternalDeployment({ projectId, schemaRequired, verbose, workDir, workspaces }) {
|
|
71
|
+
const [studioManifest] = await Promise.all([
|
|
72
|
+
uploadSchemaToLexicon({
|
|
73
|
+
projectId,
|
|
74
|
+
verbose,
|
|
75
|
+
workDir,
|
|
76
|
+
workspaces
|
|
77
|
+
}),
|
|
78
|
+
schemaRequired ? updateWorkspacesSchemas({
|
|
79
|
+
verbose,
|
|
80
|
+
workspaces
|
|
81
|
+
}) : undefined
|
|
82
|
+
]);
|
|
83
|
+
return [
|
|
84
|
+
studioManifest
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
*
|
|
89
|
+
* Internal deployments:
|
|
90
|
+
* 1. Write the workspace manifests to the dist directory
|
|
91
|
+
* 2. Update the workspaces schemas to the /schemas endpoint
|
|
92
|
+
* 3. Update server-side schemas
|
|
93
|
+
*
|
|
94
|
+
* @param workspaces - The workspaces to deploy
|
|
95
|
+
*/ async function handleInternalDeployment({ outPath, projectId, verbose, workDir, workspaces }) {
|
|
96
|
+
const [studioManifest] = await Promise.all([
|
|
97
|
+
uploadSchemaToLexicon({
|
|
98
|
+
projectId,
|
|
99
|
+
verbose,
|
|
100
|
+
workDir,
|
|
101
|
+
workspaces
|
|
102
|
+
}),
|
|
103
|
+
writeWorkspaceToDist({
|
|
104
|
+
outPath,
|
|
105
|
+
workDir,
|
|
106
|
+
workspaces
|
|
107
|
+
}),
|
|
108
|
+
// Updates the workspaces schemas to /schemas endpoint
|
|
109
|
+
updateWorkspacesSchemas({
|
|
110
|
+
verbose,
|
|
111
|
+
workspaces
|
|
112
|
+
})
|
|
113
|
+
]);
|
|
114
|
+
return [
|
|
115
|
+
studioManifest
|
|
116
|
+
];
|
|
117
|
+
}
|
|
118
|
+
await main();
|
|
119
|
+
|
|
120
|
+
//# sourceMappingURL=deployStudioSchemasAndManifests.worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/deploy/deployStudioSchemasAndManifests.worker.ts"],"sourcesContent":["import {isMainThread, parentPort, workerData} from 'node:worker_threads'\n\nimport {getStudioWorkspaces, subdebug} from '@sanity/cli-core'\nimport {type StudioManifest, type Workspace} from 'sanity'\n\nimport {extractWorkspaceManifest} from '../manifest/extractWorkspaceManifest.js'\nimport {writeManifestFile} from '../manifest/writeManifestFile.js'\nimport {updateWorkspacesSchemas} from '../schema/updateWorkspaceSchema.js'\nimport {uploadSchemaToLexicon} from '../schema/uploadSchemaToLexicon.js'\nimport {extractValidationFromSchemaError} from '../schema/utils/extractValidationFromSchemaError.js'\nimport {deployStudioSchemasAndManifestsWorkerData} from './types.js'\n\nconst debug = subdebug('deployStudioSchemasAndManifests.worker')\n\nasync function main() {\n if (isMainThread || !parentPort) {\n throw new Error('Should only be run in a worker!')\n }\n\n const {configPath, isExternal, outPath, projectId, schemaRequired, verbose, workDir} =\n deployStudioSchemasAndManifestsWorkerData.parse(workerData)\n\n try {\n debug('Deploying studio schemas and manifests from config path %s', configPath)\n const workspaces = await getStudioWorkspaces(configPath)\n debug('Workspaces %o', workspaces)\n\n if (workspaces.length === 0) {\n throw new Error('No workspaces found')\n }\n\n debug('Handling deployment for %s', isExternal ? 'external' : 'internal')\n\n let studioManifest: StudioManifest | null = null\n\n if (isExternal) {\n ;[studioManifest] = await handleExternalDeployment({\n projectId,\n schemaRequired,\n verbose,\n workDir,\n workspaces,\n })\n } else {\n ;[studioManifest] = await handleInternalDeployment({\n outPath,\n projectId,\n verbose,\n workDir,\n workspaces,\n })\n }\n\n parentPort.postMessage({\n studioManifest,\n type: 'success',\n })\n } catch (error) {\n debug('Error deploying studio schemas and manifests', error)\n const validation = await extractValidationFromSchemaError(error, workDir)\n parentPort.postMessage({\n error: error instanceof Error ? error.message : String(error),\n type: 'error',\n validation,\n })\n }\n}\n\nasync function writeWorkspaceToDist({\n outPath,\n workDir,\n workspaces,\n}: {\n outPath: string\n workDir: string\n workspaces: Workspace[]\n}) {\n // Get the create manifest workspace\n const workspaceManifests = await extractWorkspaceManifest(workspaces, workDir)\n\n await writeManifestFile({\n outPath,\n workDir,\n workspaceManifests,\n })\n}\n\n/**\n * External deployments:\n * 1. Update the workspace schemas to the /schemas endpoint IF --schema-required is passed\n * 2. Update server-side schemas\n */\nasync function handleExternalDeployment({\n projectId,\n schemaRequired,\n verbose,\n workDir,\n workspaces,\n}: {\n projectId: string\n schemaRequired: boolean\n verbose: boolean\n workDir: string\n workspaces: Workspace[]\n}): Promise<[StudioManifest | null]> {\n const [studioManifest] = await Promise.all([\n uploadSchemaToLexicon({\n projectId,\n verbose,\n workDir,\n workspaces,\n }),\n schemaRequired ? updateWorkspacesSchemas({verbose, workspaces}) : undefined,\n ])\n\n return [studioManifest]\n}\n\n/**\n *\n * Internal deployments:\n * 1. Write the workspace manifests to the dist directory\n * 2. Update the workspaces schemas to the /schemas endpoint\n * 3. Update server-side schemas\n *\n * @param workspaces - The workspaces to deploy\n */\nasync function handleInternalDeployment({\n outPath,\n projectId,\n verbose,\n workDir,\n workspaces,\n}: {\n outPath: string\n projectId: string\n verbose: boolean\n workDir: string\n workspaces: Workspace[]\n}): Promise<[StudioManifest | null]> {\n const [studioManifest] = await Promise.all([\n uploadSchemaToLexicon({\n projectId,\n verbose,\n workDir,\n workspaces,\n }),\n writeWorkspaceToDist({outPath, workDir, workspaces}),\n // Updates the workspaces schemas to /schemas endpoint\n updateWorkspacesSchemas({\n verbose,\n workspaces,\n }),\n ])\n\n return [studioManifest]\n}\n\nawait main()\n"],"names":["isMainThread","parentPort","workerData","getStudioWorkspaces","subdebug","extractWorkspaceManifest","writeManifestFile","updateWorkspacesSchemas","uploadSchemaToLexicon","extractValidationFromSchemaError","deployStudioSchemasAndManifestsWorkerData","debug","main","Error","configPath","isExternal","outPath","projectId","schemaRequired","verbose","workDir","parse","workspaces","length","studioManifest","handleExternalDeployment","handleInternalDeployment","postMessage","type","error","validation","message","String","writeWorkspaceToDist","workspaceManifests","Promise","all","undefined"],"mappings":"AAAA,SAAQA,YAAY,EAAEC,UAAU,EAAEC,UAAU,QAAO,sBAAqB;AAExE,SAAQC,mBAAmB,EAAEC,QAAQ,QAAO,mBAAkB;AAG9D,SAAQC,wBAAwB,QAAO,0CAAyC;AAChF,SAAQC,iBAAiB,QAAO,mCAAkC;AAClE,SAAQC,uBAAuB,QAAO,qCAAoC;AAC1E,SAAQC,qBAAqB,QAAO,qCAAoC;AACxE,SAAQC,gCAAgC,QAAO,sDAAqD;AACpG,SAAQC,yCAAyC,QAAO,aAAY;AAEpE,MAAMC,QAAQP,SAAS;AAEvB,eAAeQ;IACb,IAAIZ,gBAAgB,CAACC,YAAY;QAC/B,MAAM,IAAIY,MAAM;IAClB;IAEA,MAAM,EAACC,UAAU,EAAEC,UAAU,EAAEC,OAAO,EAAEC,SAAS,EAAEC,cAAc,EAAEC,OAAO,EAAEC,OAAO,EAAC,GAClFV,0CAA0CW,KAAK,CAACnB;IAElD,IAAI;QACFS,MAAM,8DAA8DG;QACpE,MAAMQ,aAAa,MAAMnB,oBAAoBW;QAC7CH,MAAM,iBAAiBW;QAEvB,IAAIA,WAAWC,MAAM,KAAK,GAAG;YAC3B,MAAM,IAAIV,MAAM;QAClB;QAEAF,MAAM,8BAA8BI,aAAa,aAAa;QAE9D,IAAIS,iBAAwC;QAE5C,IAAIT,YAAY;;YACb,CAACS,eAAe,GAAG,MAAMC,yBAAyB;gBACjDR;gBACAC;gBACAC;gBACAC;gBACAE;YACF;QACF,OAAO;;YACJ,CAACE,eAAe,GAAG,MAAME,yBAAyB;gBACjDV;gBACAC;gBACAE;gBACAC;gBACAE;YACF;QACF;QAEArB,WAAW0B,WAAW,CAAC;YACrBH;YACAI,MAAM;QACR;IACF,EAAE,OAAOC,OAAO;QACdlB,MAAM,gDAAgDkB;QACtD,MAAMC,aAAa,MAAMrB,iCAAiCoB,OAAOT;QACjEnB,WAAW0B,WAAW,CAAC;YACrBE,OAAOA,iBAAiBhB,QAAQgB,MAAME,OAAO,GAAGC,OAAOH;YACvDD,MAAM;YACNE;QACF;IACF;AACF;AAEA,eAAeG,qBAAqB,EAClCjB,OAAO,EACPI,OAAO,EACPE,UAAU,EAKX;IACC,oCAAoC;IACpC,MAAMY,qBAAqB,MAAM7B,yBAAyBiB,YAAYF;IAEtE,MAAMd,kBAAkB;QACtBU;QACAI;QACAc;IACF;AACF;AAEA;;;;CAIC,GACD,eAAeT,yBAAyB,EACtCR,SAAS,EACTC,cAAc,EACdC,OAAO,EACPC,OAAO,EACPE,UAAU,EAOX;IACC,MAAM,CAACE,eAAe,GAAG,MAAMW,QAAQC,GAAG,CAAC;QACzC5B,sBAAsB;YACpBS;YACAE;YACAC;YACAE;QACF;QACAJ,iBAAiBX,wBAAwB;YAACY;YAASG;QAAU,KAAKe;KACnE;IAED,OAAO;QAACb;KAAe;AACzB;AAEA;;;;;;;;CAQC,GACD,eAAeE,yBAAyB,EACtCV,OAAO,EACPC,SAAS,EACTE,OAAO,EACPC,OAAO,EACPE,UAAU,EAOX;IACC,MAAM,CAACE,eAAe,GAAG,MAAMW,QAAQC,GAAG,CAAC;QACzC5B,sBAAsB;YACpBS;YACAE;YACAC;YACAE;QACF;QACAW,qBAAqB;YAACjB;YAASI;YAASE;QAAU;QAClD,sDAAsD;QACtDf,wBAAwB;YACtBY;YACAG;QACF;KACD;IAED,OAAO;QAACE;KAAe;AACzB;AAEA,MAAMZ"}
|
|
@@ -3,15 +3,17 @@
|
|
|
3
3
|
*/ import { select, Separator, spinner } from '@sanity/cli-core/ux';
|
|
4
4
|
import { createUserApplication, getUserApplication, getUserApplications } from '../../services/userApplications.js';
|
|
5
5
|
import { deployDebug } from './deployDebug.js';
|
|
6
|
+
import { normalizeUrl, validateUrl } from './urlUtils.js';
|
|
6
7
|
export async function findUserApplicationForStudio(options) {
|
|
7
|
-
const { appHost, appId, output, projectId } = options;
|
|
8
|
+
const { appHost, appId, output, projectId, urlType = 'internal' } = options;
|
|
8
9
|
const spin = spinner('Checking project info').start();
|
|
9
10
|
const userApplication = await findUserApplication({
|
|
10
11
|
appHost,
|
|
11
12
|
appId,
|
|
12
13
|
output,
|
|
13
14
|
projectId,
|
|
14
|
-
spin
|
|
15
|
+
spin,
|
|
16
|
+
urlType
|
|
15
17
|
});
|
|
16
18
|
spin.succeed();
|
|
17
19
|
if (userApplication) {
|
|
@@ -23,10 +25,12 @@ export async function findUserApplicationForStudio(options) {
|
|
|
23
25
|
// Get existing user applications (if any),
|
|
24
26
|
// based on the configured project ID
|
|
25
27
|
if (projectId) {
|
|
26
|
-
|
|
28
|
+
const allApps = await getUserApplications({
|
|
27
29
|
appType: 'studio',
|
|
28
30
|
projectId
|
|
29
31
|
});
|
|
32
|
+
// Filter by urlType so external deploys only see external studios and vice versa
|
|
33
|
+
userApplications = allApps?.filter((app)=>app.urlType === urlType) ?? [];
|
|
30
34
|
}
|
|
31
35
|
// If no applications are found, return null
|
|
32
36
|
if (!userApplications?.length) {
|
|
@@ -34,6 +38,8 @@ export async function findUserApplicationForStudio(options) {
|
|
|
34
38
|
}
|
|
35
39
|
// If there are user applications, allow the user to select one of the existing host names,
|
|
36
40
|
// or to create a new one
|
|
41
|
+
const newLabel = urlType === 'external' ? 'Register new external studio URL' : 'Create new studio hostname';
|
|
42
|
+
const selectMessage = urlType === 'external' ? 'Select existing external studio, or register a new one' : 'Select existing studio hostname, or create a new one';
|
|
37
43
|
const choices = userApplications.map((app)=>({
|
|
38
44
|
name: app.title ?? app.appHost,
|
|
39
45
|
value: app.appHost
|
|
@@ -41,13 +47,13 @@ export async function findUserApplicationForStudio(options) {
|
|
|
41
47
|
const selected = await select({
|
|
42
48
|
choices: [
|
|
43
49
|
{
|
|
44
|
-
name:
|
|
50
|
+
name: newLabel,
|
|
45
51
|
value: 'NEW_STUDIO'
|
|
46
52
|
},
|
|
47
53
|
new Separator(),
|
|
48
54
|
...choices
|
|
49
55
|
],
|
|
50
|
-
message:
|
|
56
|
+
message: selectMessage
|
|
51
57
|
});
|
|
52
58
|
// If the user wants to create a new deployed application, return null
|
|
53
59
|
if (selected === 'NEW_STUDIO') {
|
|
@@ -57,7 +63,7 @@ export async function findUserApplicationForStudio(options) {
|
|
|
57
63
|
return userApplications.find((app)=>app.appHost === selected);
|
|
58
64
|
}
|
|
59
65
|
async function findUserApplication(options) {
|
|
60
|
-
const { appHost, appId, output, projectId } = options;
|
|
66
|
+
const { appHost, appId, output, projectId, urlType } = options;
|
|
61
67
|
let { spin } = options;
|
|
62
68
|
let userApplication = null;
|
|
63
69
|
// If the config has an appId, check for apps with that ID
|
|
@@ -83,9 +89,21 @@ async function findUserApplication(options) {
|
|
|
83
89
|
}
|
|
84
90
|
// As a fallback, if studioHost (deprecated) is configured, check for apps with that host
|
|
85
91
|
if (appHost) {
|
|
92
|
+
// For external URLs, validate and normalize before lookup/creation
|
|
93
|
+
const resolvedHost = urlType === 'external' ? normalizeUrl(appHost) : appHost;
|
|
94
|
+
if (urlType === 'external') {
|
|
95
|
+
const validation = validateUrl(resolvedHost);
|
|
96
|
+
if (validation !== true) {
|
|
97
|
+
spin.fail();
|
|
98
|
+
output.error(validation, {
|
|
99
|
+
exit: 1
|
|
100
|
+
});
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
86
104
|
try {
|
|
87
105
|
userApplication = await getUserApplication({
|
|
88
|
-
appHost,
|
|
106
|
+
appHost: resolvedHost,
|
|
89
107
|
isSdkApp: false,
|
|
90
108
|
projectId
|
|
91
109
|
});
|
|
@@ -95,16 +113,21 @@ async function findUserApplication(options) {
|
|
|
95
113
|
}
|
|
96
114
|
// Otherwise, try to create an app with the configured host
|
|
97
115
|
try {
|
|
98
|
-
|
|
99
|
-
|
|
116
|
+
if (urlType === 'external') {
|
|
117
|
+
output.log('Your project has not been registered with an external studio URL.');
|
|
118
|
+
output.log(`Registering ${resolvedHost}`);
|
|
119
|
+
} else {
|
|
120
|
+
output.log('Your project has not been assigned a studio hostname.');
|
|
121
|
+
output.log(`Creating https://${resolvedHost}.sanity.studio`);
|
|
122
|
+
}
|
|
100
123
|
output.log('');
|
|
101
|
-
spin = spinner('Creating studio hostname').start();
|
|
124
|
+
spin = spinner(urlType === 'external' ? 'Registering external studio' : 'Creating studio hostname').start();
|
|
102
125
|
const response = await createUserApplication({
|
|
103
126
|
appType: 'studio',
|
|
104
127
|
body: {
|
|
105
|
-
appHost,
|
|
128
|
+
appHost: resolvedHost,
|
|
106
129
|
type: 'studio',
|
|
107
|
-
urlType
|
|
130
|
+
urlType
|
|
108
131
|
},
|
|
109
132
|
projectId
|
|
110
133
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/deploy/findUserApplicationForStudio.ts"],"sourcesContent":["/**\n * Helper functions to find a user application for a Sanity studio.\n */\n\nimport {type Output} from '@sanity/cli-core'\nimport {select, Separator, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\n\nimport {\n createUserApplication,\n getUserApplication,\n getUserApplications,\n type UserApplication,\n} from '../../services/userApplications.js'\nimport {deployDebug} from './deployDebug.js'\n\ninterface FindUserApplicationForStudioOptions {\n output: Output\n projectId: string\n\n appHost?: string\n appId?: string\n}\n\nexport async function findUserApplicationForStudio(options: FindUserApplicationForStudioOptions) {\n const {appHost, appId, output, projectId} = options\n\n const spin = spinner('Checking project info').start()\n\n const userApplication = await findUserApplication({\n appHost,\n appId,\n output,\n projectId,\n spin,\n })\n\n spin.succeed()\n\n if (userApplication) {\n return userApplication\n }\n\n // No user application found, so let's list out the existing user applications\n // along with an option to create a new one\n let userApplications: Array<UserApplication> = []\n\n // Get existing user applications (if any),\n // based on the configured project ID\n if (projectId) {\n userApplications = await getUserApplications({\n appType: 'studio',\n projectId,\n })\n }\n\n // If no applications are found, return null\n if (!userApplications?.length) {\n return null\n }\n\n // If there are user applications, allow the user to select one of the existing host names,\n // or to create a new one\n const choices = userApplications.map((app) => ({\n name: app.title ?? app.appHost,\n value: app.appHost,\n }))\n\n const selected = await select({\n choices: [\n {name: 'Create new studio hostname', value: 'NEW_STUDIO'},\n new Separator(),\n ...choices,\n ],\n message: 'Select existing studio hostname, or create a new one',\n })\n\n // If the user wants to create a new deployed application, return null\n if (selected === 'NEW_STUDIO') {\n return null\n }\n\n // Otherwise, return the selected user application\n return userApplications.find((app) => app.appHost === selected)!\n}\n\ninterface FindUserApplicationFromConfigOptions {\n output: Output\n projectId: string\n spin: SpinnerInstance\n\n appHost?: string\n appId?: string\n}\n\nasync function findUserApplication(\n options: FindUserApplicationFromConfigOptions,\n): Promise<UserApplication | null> {\n const {appHost, appId, output, projectId} = options\n let {spin} = options\n\n let userApplication: UserApplication | null = null\n\n // If the config has an appId, check for apps with that ID\n if (appId) {\n try {\n userApplication = await getUserApplication({appId, isSdkApp: false, projectId})\n\n if (userApplication) {\n return userApplication\n }\n\n // If appID is specified but no app is found with it, throw an error\n throw new Error(`Cannot find app with app ID ${appId}`)\n } catch (error) {\n spin.fail()\n deployDebug('Error finding user application', error)\n output.error(`Error finding user application: ${error?.message}`, {exit: 1})\n }\n }\n\n // As a fallback, if studioHost (deprecated) is configured, check for apps with that host\n if (appHost) {\n try {\n userApplication = await getUserApplication({appHost, isSdkApp: false, projectId})\n\n // We've found the application — return it\n if (userApplication) {\n return userApplication\n }\n\n // Otherwise, try to create an app with the configured host\n try {\n output.log('Your project has not been assigned a studio hostname.')\n output.log(`Creating https://${appHost}.sanity.studio`)\n output.log('')\n spin = spinner('Creating studio hostname').start()\n\n const response = await createUserApplication({\n appType: 'studio',\n body: {\n appHost,\n type: 'studio',\n urlType: 'internal',\n },\n projectId,\n })\n spin.succeed()\n\n return response\n } catch (e) {\n spin.fail()\n // if the name is taken, it should return a 409 so we relay to the user\n if ([402, 409].includes(e?.statusCode)) {\n output.error(e?.response?.body?.message || 'Bad request', {exit: 1})\n return null\n }\n // otherwise, it's a fatal error\n deployDebug('Error creating user application from config', e)\n output.error(\n `Error creating user application from config: ${e instanceof Error ? e.message : e}`,\n {exit: 1},\n )\n }\n } catch (error) {\n spin.fail()\n deployDebug('Error finding user application', error)\n output.error(\n `Error finding user application: ${error instanceof Error ? error.message : error.toString()}`,\n {exit: 1},\n )\n }\n }\n\n // If no appID and no appHost, just return and proceed to check for studios with the project ID\n return null\n}\n"],"names":["select","Separator","spinner","createUserApplication","getUserApplication","getUserApplications","deployDebug","findUserApplicationForStudio","options","appHost","appId","output","projectId","spin","start","userApplication","findUserApplication","succeed","userApplications","appType","length","choices","map","app","name","title","value","selected","message","find","isSdkApp","Error","error","fail","exit","log","response","body","type","urlType","e","includes","statusCode","toString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/deploy/findUserApplicationForStudio.ts"],"sourcesContent":["/**\n * Helper functions to find a user application for a Sanity studio.\n */\n\nimport {type Output} from '@sanity/cli-core'\nimport {select, Separator, spinner, type SpinnerInstance} from '@sanity/cli-core/ux'\n\nimport {\n createUserApplication,\n getUserApplication,\n getUserApplications,\n type UserApplication,\n} from '../../services/userApplications.js'\nimport {deployDebug} from './deployDebug.js'\nimport {normalizeUrl, validateUrl} from './urlUtils.js'\n\ninterface FindUserApplicationForStudioOptions {\n output: Output\n projectId: string\n\n appHost?: string\n appId?: string\n urlType?: 'external' | 'internal'\n}\n\nexport async function findUserApplicationForStudio(options: FindUserApplicationForStudioOptions) {\n const {appHost, appId, output, projectId, urlType = 'internal'} = options\n\n const spin = spinner('Checking project info').start()\n\n const userApplication = await findUserApplication({\n appHost,\n appId,\n output,\n projectId,\n spin,\n urlType,\n })\n\n spin.succeed()\n\n if (userApplication) {\n return userApplication\n }\n\n // No user application found, so let's list out the existing user applications\n // along with an option to create a new one\n let userApplications: Array<UserApplication> = []\n\n // Get existing user applications (if any),\n // based on the configured project ID\n if (projectId) {\n const allApps = await getUserApplications({\n appType: 'studio',\n projectId,\n })\n // Filter by urlType so external deploys only see external studios and vice versa\n userApplications = allApps?.filter((app) => app.urlType === urlType) ?? []\n }\n\n // If no applications are found, return null\n if (!userApplications?.length) {\n return null\n }\n\n // If there are user applications, allow the user to select one of the existing host names,\n // or to create a new one\n const newLabel =\n urlType === 'external' ? 'Register new external studio URL' : 'Create new studio hostname'\n const selectMessage =\n urlType === 'external'\n ? 'Select existing external studio, or register a new one'\n : 'Select existing studio hostname, or create a new one'\n\n const choices = userApplications.map((app) => ({\n name: app.title ?? app.appHost,\n value: app.appHost,\n }))\n\n const selected = await select({\n choices: [{name: newLabel, value: 'NEW_STUDIO'}, new Separator(), ...choices],\n message: selectMessage,\n })\n\n // If the user wants to create a new deployed application, return null\n if (selected === 'NEW_STUDIO') {\n return null\n }\n\n // Otherwise, return the selected user application\n return userApplications.find((app) => app.appHost === selected)!\n}\n\ninterface FindUserApplicationFromConfigOptions {\n output: Output\n projectId: string\n spin: SpinnerInstance\n urlType: 'external' | 'internal'\n\n appHost?: string\n appId?: string\n}\n\nasync function findUserApplication(\n options: FindUserApplicationFromConfigOptions,\n): Promise<UserApplication | null> {\n const {appHost, appId, output, projectId, urlType} = options\n let {spin} = options\n\n let userApplication: UserApplication | null = null\n\n // If the config has an appId, check for apps with that ID\n if (appId) {\n try {\n userApplication = await getUserApplication({appId, isSdkApp: false, projectId})\n\n if (userApplication) {\n return userApplication\n }\n\n // If appID is specified but no app is found with it, throw an error\n throw new Error(`Cannot find app with app ID ${appId}`)\n } catch (error) {\n spin.fail()\n deployDebug('Error finding user application', error)\n output.error(`Error finding user application: ${error?.message}`, {exit: 1})\n }\n }\n\n // As a fallback, if studioHost (deprecated) is configured, check for apps with that host\n if (appHost) {\n // For external URLs, validate and normalize before lookup/creation\n const resolvedHost = urlType === 'external' ? normalizeUrl(appHost) : appHost\n\n if (urlType === 'external') {\n const validation = validateUrl(resolvedHost)\n if (validation !== true) {\n spin.fail()\n output.error(validation, {exit: 1})\n return null\n }\n }\n\n try {\n userApplication = await getUserApplication({\n appHost: resolvedHost,\n isSdkApp: false,\n projectId,\n })\n\n // We've found the application — return it\n if (userApplication) {\n return userApplication\n }\n\n // Otherwise, try to create an app with the configured host\n try {\n if (urlType === 'external') {\n output.log('Your project has not been registered with an external studio URL.')\n output.log(`Registering ${resolvedHost}`)\n } else {\n output.log('Your project has not been assigned a studio hostname.')\n output.log(`Creating https://${resolvedHost}.sanity.studio`)\n }\n output.log('')\n spin = spinner(\n urlType === 'external' ? 'Registering external studio' : 'Creating studio hostname',\n ).start()\n\n const response = await createUserApplication({\n appType: 'studio',\n body: {\n appHost: resolvedHost,\n type: 'studio',\n urlType,\n },\n projectId,\n })\n spin.succeed()\n\n return response\n } catch (e) {\n spin.fail()\n // if the name is taken, it should return a 409 so we relay to the user\n if ([402, 409].includes(e?.statusCode)) {\n output.error(e?.response?.body?.message || 'Bad request', {exit: 1})\n return null\n }\n // otherwise, it's a fatal error\n deployDebug('Error creating user application from config', e)\n output.error(\n `Error creating user application from config: ${e instanceof Error ? e.message : e}`,\n {exit: 1},\n )\n }\n } catch (error) {\n spin.fail()\n deployDebug('Error finding user application', error)\n output.error(\n `Error finding user application: ${error instanceof Error ? error.message : error.toString()}`,\n {exit: 1},\n )\n }\n }\n\n // If no appID and no appHost, just return and proceed to check for studios with the project ID\n return null\n}\n"],"names":["select","Separator","spinner","createUserApplication","getUserApplication","getUserApplications","deployDebug","normalizeUrl","validateUrl","findUserApplicationForStudio","options","appHost","appId","output","projectId","urlType","spin","start","userApplication","findUserApplication","succeed","userApplications","allApps","appType","filter","app","length","newLabel","selectMessage","choices","map","name","title","value","selected","message","find","isSdkApp","Error","error","fail","exit","resolvedHost","validation","log","response","body","type","e","includes","statusCode","toString"],"mappings":"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"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const deployStudioSchemasAndManifestsWorkerData = z.object({
|
|
3
|
+
configPath: z.string(),
|
|
4
|
+
isExternal: z.boolean(),
|
|
5
|
+
outPath: z.string(),
|
|
6
|
+
projectId: z.string(),
|
|
7
|
+
schemaRequired: z.boolean(),
|
|
8
|
+
verbose: z.boolean(),
|
|
9
|
+
workDir: z.string()
|
|
10
|
+
});
|
|
2
11
|
|
|
3
12
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/deploy/types.ts"],"sourcesContent":["import {type CliConfig, type Output} from '@sanity/cli-core'\n\nimport {DeployCommand} from '../../commands/deploy.js'\n\nexport type DeployFlags = DeployCommand['flags']\n\nexport interface DeployAppOptions {\n cliConfig: CliConfig\n
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/deploy/types.ts"],"sourcesContent":["import {type CliConfig, type Output, type ProjectRootResult} from '@sanity/cli-core'\nimport {z} from 'zod'\n\nimport {DeployCommand} from '../../commands/deploy.js'\n\nexport type DeployFlags = DeployCommand['flags']\n\nexport interface DeployAppOptions {\n cliConfig: CliConfig\n flags: DeployFlags\n output: Output\n projectRoot: ProjectRootResult\n sourceDir: string\n}\n\nexport const deployStudioSchemasAndManifestsWorkerData = z.object({\n configPath: z.string(),\n isExternal: z.boolean(),\n outPath: z.string(),\n projectId: z.string(),\n schemaRequired: z.boolean(),\n verbose: z.boolean(),\n workDir: z.string(),\n})\n\nexport type DeployStudioSchemasAndManifestsWorkerData = z.infer<\n typeof deployStudioSchemasAndManifestsWorkerData\n>\n"],"names":["z","deployStudioSchemasAndManifestsWorkerData","object","configPath","string","isExternal","boolean","outPath","projectId","schemaRequired","verbose","workDir"],"mappings":"AACA,SAAQA,CAAC,QAAO,MAAK;AAcrB,OAAO,MAAMC,4CAA4CD,EAAEE,MAAM,CAAC;IAChEC,YAAYH,EAAEI,MAAM;IACpBC,YAAYL,EAAEM,OAAO;IACrBC,SAASP,EAAEI,MAAM;IACjBI,WAAWR,EAAEI,MAAM;IACnBK,gBAAgBT,EAAEM,OAAO;IACzBI,SAASV,EAAEM,OAAO;IAClBK,SAASX,EAAEI,MAAM;AACnB,GAAE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validates that the given string is a valid http or https URL.
|
|
3
|
+
* Returns `true` if valid, or an error message string if invalid.
|
|
4
|
+
*/ export function validateUrl(url) {
|
|
5
|
+
try {
|
|
6
|
+
const parsed = new URL(url);
|
|
7
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
8
|
+
return 'URL must use http or https protocol';
|
|
9
|
+
}
|
|
10
|
+
return true;
|
|
11
|
+
} catch {
|
|
12
|
+
return 'Invalid URL. Please enter a valid http or https URL';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Normalizes a URL by removing trailing slashes.
|
|
17
|
+
*/ export function normalizeUrl(url) {
|
|
18
|
+
return url.replace(/\/+$/, '');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=urlUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/deploy/urlUtils.ts"],"sourcesContent":["/**\n * Validates that the given string is a valid http or https URL.\n * Returns `true` if valid, or an error message string if invalid.\n */\nexport function validateUrl(url: string): string | true {\n try {\n const parsed = new URL(url)\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n return 'URL must use http or https protocol'\n }\n return true\n } catch {\n return 'Invalid URL. Please enter a valid http or https URL'\n }\n}\n\n/**\n * Normalizes a URL by removing trailing slashes.\n */\nexport function normalizeUrl(url: string): string {\n return url.replace(/\\/+$/, '')\n}\n"],"names":["validateUrl","url","parsed","URL","protocol","normalizeUrl","replace"],"mappings":"AAAA;;;CAGC,GACD,OAAO,SAASA,YAAYC,GAAW;IACrC,IAAI;QACF,MAAMC,SAAS,IAAIC,IAAIF;QACvB,IAAIC,OAAOE,QAAQ,KAAK,WAAWF,OAAOE,QAAQ,KAAK,UAAU;YAC/D,OAAO;QACT;QACA,OAAO;IACT,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEA;;CAEC,GACD,OAAO,SAASC,aAAaJ,GAAW;IACtC,OAAOA,IAAIK,OAAO,CAAC,QAAQ;AAC7B"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { getSanityUrl, subdebug } from '@sanity/cli-core';
|
|
2
|
+
const debug = subdebug('dev:getDashboardAppURL');
|
|
3
|
+
const DEFAULT_TIMEOUT = 5000;
|
|
4
|
+
const getDefaultDashboardURL = ({ organizationId, url })=>{
|
|
5
|
+
return getSanityUrl(`/@${organizationId}?${new URLSearchParams({
|
|
6
|
+
dev: url
|
|
7
|
+
}).toString()}`);
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Gets the dashboard URL from API or uses the default dashboard URL
|
|
11
|
+
*/ export const getDashboardAppURL = async ({ httpHost = 'localhost', httpPort = 3333, organizationId })=>{
|
|
12
|
+
const url = `http://${httpHost}:${httpPort}`;
|
|
13
|
+
const abortController = new AbortController();
|
|
14
|
+
// Wait for 5 seconds before aborting the request
|
|
15
|
+
const timer = setTimeout(()=>abortController.abort(), DEFAULT_TIMEOUT);
|
|
16
|
+
try {
|
|
17
|
+
const queryParams = new URLSearchParams({
|
|
18
|
+
organizationId,
|
|
19
|
+
url
|
|
20
|
+
});
|
|
21
|
+
const res = await globalThis.fetch(getSanityUrl(`/api/dashboard/mode/development/resolve-url?${queryParams.toString()}`), {
|
|
22
|
+
signal: abortController.signal
|
|
23
|
+
});
|
|
24
|
+
if (!res.ok) {
|
|
25
|
+
debug(`Failed to fetch dashboard URL: ${res.statusText}`);
|
|
26
|
+
return getDefaultDashboardURL({
|
|
27
|
+
organizationId,
|
|
28
|
+
url
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const body = await res.json();
|
|
32
|
+
// <dashboard-app-url>/<orgniazationId>?dev=<dev-server-url>
|
|
33
|
+
return body?.url ?? getDefaultDashboardURL({
|
|
34
|
+
organizationId,
|
|
35
|
+
url
|
|
36
|
+
});
|
|
37
|
+
} catch (err) {
|
|
38
|
+
debug(`Failed to fetch dashboard URL: ${err instanceof Error ? err.message : String(err)}`);
|
|
39
|
+
return getDefaultDashboardURL({
|
|
40
|
+
organizationId,
|
|
41
|
+
url
|
|
42
|
+
});
|
|
43
|
+
} finally{
|
|
44
|
+
clearTimeout(timer);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=getDashboardAppUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/dev/getDashboardAppUrl.ts"],"sourcesContent":["import {getSanityUrl, subdebug} from '@sanity/cli-core'\n\nconst debug = subdebug('dev:getDashboardAppURL')\n\nconst DEFAULT_TIMEOUT = 5000\n\nconst getDefaultDashboardURL = ({\n organizationId,\n url,\n}: {\n organizationId: string\n url: string\n}): string => {\n return getSanityUrl(\n `/@${organizationId}?${new URLSearchParams({\n dev: url,\n }).toString()}`,\n )\n}\n\n/**\n * Gets the dashboard URL from API or uses the default dashboard URL\n */\nexport const getDashboardAppURL = async ({\n httpHost = 'localhost',\n httpPort = 3333,\n organizationId,\n}: {\n httpHost?: string\n httpPort?: number\n organizationId: string\n}): Promise<string> => {\n const url = `http://${httpHost}:${httpPort}`\n\n const abortController = new AbortController()\n // Wait for 5 seconds before aborting the request\n const timer = setTimeout(() => abortController.abort(), DEFAULT_TIMEOUT)\n try {\n const queryParams = new URLSearchParams({\n organizationId,\n url,\n })\n\n const res = await globalThis.fetch(\n getSanityUrl(`/api/dashboard/mode/development/resolve-url?${queryParams.toString()}`),\n {\n signal: abortController.signal,\n },\n )\n\n if (!res.ok) {\n debug(`Failed to fetch dashboard URL: ${res.statusText}`)\n return getDefaultDashboardURL({organizationId, url})\n }\n\n const body = await res.json()\n // <dashboard-app-url>/<orgniazationId>?dev=<dev-server-url>\n return body?.url ?? getDefaultDashboardURL({organizationId, url})\n } catch (err) {\n debug(`Failed to fetch dashboard URL: ${err instanceof Error ? err.message : String(err)}`)\n return getDefaultDashboardURL({organizationId, url})\n } finally {\n clearTimeout(timer)\n }\n}\n"],"names":["getSanityUrl","subdebug","debug","DEFAULT_TIMEOUT","getDefaultDashboardURL","organizationId","url","URLSearchParams","dev","toString","getDashboardAppURL","httpHost","httpPort","abortController","AbortController","timer","setTimeout","abort","queryParams","res","globalThis","fetch","signal","ok","statusText","body","json","err","Error","message","String","clearTimeout"],"mappings":"AAAA,SAAQA,YAAY,EAAEC,QAAQ,QAAO,mBAAkB;AAEvD,MAAMC,QAAQD,SAAS;AAEvB,MAAME,kBAAkB;AAExB,MAAMC,yBAAyB,CAAC,EAC9BC,cAAc,EACdC,GAAG,EAIJ;IACC,OAAON,aACL,CAAC,EAAE,EAAEK,eAAe,CAAC,EAAE,IAAIE,gBAAgB;QACzCC,KAAKF;IACP,GAAGG,QAAQ,IAAI;AAEnB;AAEA;;CAEC,GACD,OAAO,MAAMC,qBAAqB,OAAO,EACvCC,WAAW,WAAW,EACtBC,WAAW,IAAI,EACfP,cAAc,EAKf;IACC,MAAMC,MAAM,CAAC,OAAO,EAAEK,SAAS,CAAC,EAAEC,UAAU;IAE5C,MAAMC,kBAAkB,IAAIC;IAC5B,iDAAiD;IACjD,MAAMC,QAAQC,WAAW,IAAMH,gBAAgBI,KAAK,IAAId;IACxD,IAAI;QACF,MAAMe,cAAc,IAAIX,gBAAgB;YACtCF;YACAC;QACF;QAEA,MAAMa,MAAM,MAAMC,WAAWC,KAAK,CAChCrB,aAAa,CAAC,4CAA4C,EAAEkB,YAAYT,QAAQ,IAAI,GACpF;YACEa,QAAQT,gBAAgBS,MAAM;QAChC;QAGF,IAAI,CAACH,IAAII,EAAE,EAAE;YACXrB,MAAM,CAAC,+BAA+B,EAAEiB,IAAIK,UAAU,EAAE;YACxD,OAAOpB,uBAAuB;gBAACC;gBAAgBC;YAAG;QACpD;QAEA,MAAMmB,OAAO,MAAMN,IAAIO,IAAI;QAC3B,4DAA4D;QAC5D,OAAOD,MAAMnB,OAAOF,uBAAuB;YAACC;YAAgBC;QAAG;IACjE,EAAE,OAAOqB,KAAK;QACZzB,MAAM,CAAC,+BAA+B,EAAEyB,eAAeC,QAAQD,IAAIE,OAAO,GAAGC,OAAOH,MAAM;QAC1F,OAAOvB,uBAAuB;YAACC;YAAgBC;QAAG;IACpD,SAAU;QACRyB,aAAahB;IACf;AACF,EAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
+
import { getSanityEnvVar } from '@sanity/cli-core';
|
|
2
3
|
import { spinner } from '@sanity/cli-core/ux';
|
|
3
4
|
import { getSharedServerConfig } from '../../util/getSharedServerConfig.js';
|
|
4
5
|
export function getDevServerConfig({ cliConfig, flags, output, workDir }) {
|
|
@@ -12,16 +13,19 @@ export function getDevServerConfig({ cliConfig, flags, output, workDir }) {
|
|
|
12
13
|
workDir
|
|
13
14
|
});
|
|
14
15
|
configSpinner.succeed();
|
|
16
|
+
const isApp = cliConfig && 'app' in cliConfig;
|
|
15
17
|
const env = process.env;
|
|
16
18
|
const reactStrictMode = env.SANITY_STUDIO_REACT_STRICT_MODE ? env.SANITY_STUDIO_REACT_STRICT_MODE === 'true' : Boolean(cliConfig?.reactStrictMode);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
const envBasePath = getSanityEnvVar('BASEPATH', isApp ?? false);
|
|
20
|
+
if (envBasePath && cliConfig?.project?.basePath) {
|
|
21
|
+
output.warn(`Overriding configured base path (${cliConfig.project.basePath}) with value from environment variable (${envBasePath})`);
|
|
19
22
|
}
|
|
20
23
|
return {
|
|
21
24
|
...baseConfig,
|
|
22
25
|
reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,
|
|
23
26
|
reactStrictMode,
|
|
24
|
-
staticPath: path.join(workDir, 'static')
|
|
27
|
+
staticPath: path.join(workDir, 'static'),
|
|
28
|
+
typegen: cliConfig?.typegen
|
|
25
29
|
};
|
|
26
30
|
}
|
|
27
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/dev/getDevServerConfig.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {type CliConfig, type Output} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\n\nimport {type DevServerOptions} from '../../server/devServer.js'\nimport {getSharedServerConfig} from '../../util/getSharedServerConfig.js'\nimport {type DevFlags} from './types.js'\n\nexport function getDevServerConfig({\n cliConfig,\n flags,\n output,\n workDir,\n}: {\n cliConfig?: CliConfig\n flags: DevFlags\n output: Output\n workDir: string\n}): Omit<DevServerOptions, 'spinner'> {\n const configSpinner = spinner('Checking configuration files...')\n\n const baseConfig = getSharedServerConfig({\n cliConfig,\n flags: {\n host: flags.host,\n port: flags.port,\n },\n workDir,\n })\n\n configSpinner.succeed()\n\n const env = process.env\n const reactStrictMode = env.SANITY_STUDIO_REACT_STRICT_MODE\n ? env.SANITY_STUDIO_REACT_STRICT_MODE === 'true'\n : Boolean(cliConfig?.reactStrictMode)\n\n if (
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/dev/getDevServerConfig.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {type CliConfig, getSanityEnvVar, type Output} from '@sanity/cli-core'\nimport {spinner} from '@sanity/cli-core/ux'\n\nimport {type DevServerOptions} from '../../server/devServer.js'\nimport {getSharedServerConfig} from '../../util/getSharedServerConfig.js'\nimport {type DevFlags} from './types.js'\n\nexport function getDevServerConfig({\n cliConfig,\n flags,\n output,\n workDir,\n}: {\n cliConfig?: CliConfig\n flags: DevFlags\n output: Output\n workDir: string\n}): Omit<DevServerOptions, 'spinner'> {\n const configSpinner = spinner('Checking configuration files...')\n\n const baseConfig = getSharedServerConfig({\n cliConfig,\n flags: {\n host: flags.host,\n port: flags.port,\n },\n workDir,\n })\n\n configSpinner.succeed()\n\n const isApp = cliConfig && 'app' in cliConfig\n const env = process.env\n const reactStrictMode = env.SANITY_STUDIO_REACT_STRICT_MODE\n ? env.SANITY_STUDIO_REACT_STRICT_MODE === 'true'\n : Boolean(cliConfig?.reactStrictMode)\n\n const envBasePath = getSanityEnvVar('BASEPATH', isApp ?? false)\n if (envBasePath && cliConfig?.project?.basePath) {\n output.warn(\n `Overriding configured base path (${cliConfig.project.basePath}) with value from environment variable (${envBasePath})`,\n )\n }\n\n return {\n ...baseConfig,\n reactCompiler: cliConfig && 'reactCompiler' in cliConfig ? cliConfig.reactCompiler : undefined,\n reactStrictMode,\n staticPath: path.join(workDir, 'static'),\n typegen: cliConfig?.typegen,\n }\n}\n"],"names":["path","getSanityEnvVar","spinner","getSharedServerConfig","getDevServerConfig","cliConfig","flags","output","workDir","configSpinner","baseConfig","host","port","succeed","isApp","env","process","reactStrictMode","SANITY_STUDIO_REACT_STRICT_MODE","Boolean","envBasePath","project","basePath","warn","reactCompiler","undefined","staticPath","join","typegen"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAE5B,SAAwBC,eAAe,QAAoB,mBAAkB;AAC7E,SAAQC,OAAO,QAAO,sBAAqB;AAG3C,SAAQC,qBAAqB,QAAO,sCAAqC;AAGzE,OAAO,SAASC,mBAAmB,EACjCC,SAAS,EACTC,KAAK,EACLC,MAAM,EACNC,OAAO,EAMR;IACC,MAAMC,gBAAgBP,QAAQ;IAE9B,MAAMQ,aAAaP,sBAAsB;QACvCE;QACAC,OAAO;YACLK,MAAML,MAAMK,IAAI;YAChBC,MAAMN,MAAMM,IAAI;QAClB;QACAJ;IACF;IAEAC,cAAcI,OAAO;IAErB,MAAMC,QAAQT,aAAa,SAASA;IACpC,MAAMU,MAAMC,QAAQD,GAAG;IACvB,MAAME,kBAAkBF,IAAIG,+BAA+B,GACvDH,IAAIG,+BAA+B,KAAK,SACxCC,QAAQd,WAAWY;IAEvB,MAAMG,cAAcnB,gBAAgB,YAAYa,SAAS;IACzD,IAAIM,eAAef,WAAWgB,SAASC,UAAU;QAC/Cf,OAAOgB,IAAI,CACT,CAAC,iCAAiC,EAAElB,UAAUgB,OAAO,CAACC,QAAQ,CAAC,wCAAwC,EAAEF,YAAY,CAAC,CAAC;IAE3H;IAEA,OAAO;QACL,GAAGV,UAAU;QACbc,eAAenB,aAAa,mBAAmBA,YAAYA,UAAUmB,aAAa,GAAGC;QACrFR;QACAS,YAAY1B,KAAK2B,IAAI,CAACnB,SAAS;QAC/BoB,SAASvB,WAAWuB;IACtB;AACF"}
|
|
@@ -2,7 +2,7 @@ import { styleText } from 'node:util';
|
|
|
2
2
|
import { startDevServer } from '../../server/devServer.js';
|
|
3
3
|
import { gracefulServerDeath } from '../../server/gracefulServerDeath.js';
|
|
4
4
|
import { devDebug } from './devDebug.js';
|
|
5
|
-
import {
|
|
5
|
+
import { getDashboardAppURL } from './getDashboardAppUrl.js';
|
|
6
6
|
import { getDevServerConfig } from './getDevServerConfig.js';
|
|
7
7
|
export async function startAppDevServer(options) {
|
|
8
8
|
const { cliConfig, flags, output, workDir } = options;
|
|
@@ -34,7 +34,7 @@ export async function startAppDevServer(options) {
|
|
|
34
34
|
});
|
|
35
35
|
const { port } = server.config.server;
|
|
36
36
|
const httpHost = config.httpHost || 'localhost';
|
|
37
|
-
const
|
|
37
|
+
const dashboardAppUrl = await getDashboardAppURL({
|
|
38
38
|
httpHost,
|
|
39
39
|
httpPort: port,
|
|
40
40
|
organizationId
|
|
@@ -44,7 +44,7 @@ export async function startAppDevServer(options) {
|
|
|
44
44
|
output.log(styleText([
|
|
45
45
|
'blue',
|
|
46
46
|
'underline'
|
|
47
|
-
],
|
|
47
|
+
], dashboardAppUrl));
|
|
48
48
|
return {
|
|
49
49
|
close
|
|
50
50
|
};
|