@sanity/cli 6.0.0-alpha.9 → 6.1.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 -291
- 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 +34 -13
- package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
- package/dist/actions/mcp/editorConfigs.js +231 -109
- package/dist/actions/mcp/editorConfigs.js.map +1 -1
- package/dist/actions/mcp/promptForMCPSetup.js +16 -7
- package/dist/actions/mcp/promptForMCPSetup.js.map +1 -1
- package/dist/actions/mcp/setupMCP.js +62 -23
- package/dist/actions/mcp/setupMCP.js.map +1 -1
- package/dist/actions/mcp/types.js.map +1 -1
- package/dist/actions/mcp/validateEditorTokens.js +56 -0
- package/dist/actions/mcp/validateEditorTokens.js.map +1 -0
- 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/telemetry/telemetryDebug.js +2 -2
- package/dist/actions/telemetry/telemetryDebug.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 +55 -32
- 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 +4 -2
- 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 +5 -8
- 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 +16 -10
- 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/mcp.js +55 -1
- package/dist/services/mcp.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 +33 -23
- package/dist/util/getLocalPackageVersion.js.map +1 -1
- package/dist/util/getProjectDefaults.js +22 -28
- 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/gitConfig.js +45 -0
- package/dist/util/gitConfig.js.map +1 -0
- 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 +1285 -492
- package/package.json +72 -73
- 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,7 +1,8 @@
|
|
|
1
|
-
import { Args
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
2
|
import { getProjectCliClient, SanityCommand, subdebug } from '@sanity/cli-core';
|
|
3
3
|
import { DOCUMENTS_API_VERSION } from '../../actions/documents/constants.js';
|
|
4
|
-
import {
|
|
4
|
+
import { promptForProject } from '../../prompts/promptForProject.js';
|
|
5
|
+
import { getDatasetFlag, getProjectIdFlag } from '../../util/sharedFlags.js';
|
|
5
6
|
const deleteDocumentDebug = subdebug('documents:delete');
|
|
6
7
|
export class DeleteDocumentCommand extends SanityCommand {
|
|
7
8
|
static args = {
|
|
@@ -31,11 +32,20 @@ export class DeleteDocumentCommand extends SanityCommand {
|
|
|
31
32
|
{
|
|
32
33
|
command: '<%= config.bin %> <%= command.id %> doc1 doc2',
|
|
33
34
|
description: 'Delete the document with ID "doc1" and "doc2"'
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
command: '<%= config.bin %> <%= command.id %> myDocId --project-id abc123',
|
|
38
|
+
description: 'Delete a document from a specific project'
|
|
34
39
|
}
|
|
35
40
|
];
|
|
36
41
|
static flags = {
|
|
37
|
-
|
|
38
|
-
description: '
|
|
42
|
+
...getProjectIdFlag({
|
|
43
|
+
description: 'Project ID to delete from',
|
|
44
|
+
semantics: 'override'
|
|
45
|
+
}),
|
|
46
|
+
...getDatasetFlag({
|
|
47
|
+
description: 'Dataset to delete from',
|
|
48
|
+
semantics: 'override'
|
|
39
49
|
})
|
|
40
50
|
};
|
|
41
51
|
// Disable strict mode to allow for more flexible input
|
|
@@ -55,14 +65,11 @@ export class DeleteDocumentCommand extends SanityCommand {
|
|
|
55
65
|
exit: 1
|
|
56
66
|
});
|
|
57
67
|
}
|
|
58
|
-
// Get project configuration
|
|
59
|
-
const cliConfig = await this.
|
|
60
|
-
const projectId = await this.getProjectId(
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
exit: 1
|
|
64
|
-
});
|
|
65
|
-
}
|
|
68
|
+
// Get project configuration (may not exist when running outside a project directory)
|
|
69
|
+
const cliConfig = await this.tryGetCliConfig();
|
|
70
|
+
const projectId = await this.getProjectId({
|
|
71
|
+
fallback: ()=>promptForProject({})
|
|
72
|
+
});
|
|
66
73
|
if (!cliConfig.api?.dataset && !dataset) {
|
|
67
74
|
this.error('No dataset specified. Either configure a dataset in sanity.cli.ts or use the --dataset flag', {
|
|
68
75
|
exit: 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/documents/delete.ts"],"sourcesContent":["import {Args
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/documents/delete.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {DOCUMENTS_API_VERSION} from '../../actions/documents/constants.js'\nimport {promptForProject} from '../../prompts/promptForProject.js'\nimport {getDatasetFlag, getProjectIdFlag} from '../../util/sharedFlags.js'\n\nconst deleteDocumentDebug = subdebug('documents:delete')\n\nexport class DeleteDocumentCommand extends SanityCommand<typeof DeleteDocumentCommand> {\n static override args = {\n id: Args.string({\n description: 'Document ID to delete',\n required: true,\n }),\n ids: Args.string({\n description: 'Additional document IDs to delete',\n required: false,\n }),\n }\n\n static override description = 'Delete one or more documents from the projects configured dataset'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> myDocId',\n description: 'Delete the document with the ID \"myDocId\"',\n },\n {\n command: \"<%= config.bin %> <%= command.id %> 'myDocId'\",\n description: 'ID wrapped in double or single quote works equally well',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --dataset=blog someDocId',\n description: 'Delete document with ID \"someDocId\" from dataset \"blog\"',\n },\n {\n command: '<%= config.bin %> <%= command.id %> doc1 doc2',\n description: 'Delete the document with ID \"doc1\" and \"doc2\"',\n },\n {\n command: '<%= config.bin %> <%= command.id %> myDocId --project-id abc123',\n description: 'Delete a document from a specific project',\n },\n ]\n\n static override flags = {\n ...getProjectIdFlag({description: 'Project ID to delete from', semantics: 'override'}),\n ...getDatasetFlag({description: 'Dataset to delete from', semantics: 'override'}),\n }\n\n // Disable strict mode to allow for more flexible input\n // This is needed for supporting multiple document IDs\n static override strict = false\n\n public async run(): Promise<void> {\n const {args, argv, flags} = await this.parse(DeleteDocumentCommand)\n const {id} = args\n const {dataset} = flags\n\n // Collect all document IDs from args and argv\n const ids = [id, ...argv.slice(1)].filter(Boolean) as string[]\n\n if (ids.length === 0) {\n this.error('Document ID must be specified', {exit: 1})\n }\n\n // Get project configuration (may not exist when running outside a project directory)\n const cliConfig = await this.tryGetCliConfig()\n\n const projectId = await this.getProjectId({fallback: () => promptForProject({})})\n\n if (!cliConfig.api?.dataset && !dataset) {\n this.error(\n 'No dataset specified. Either configure a dataset in sanity.cli.ts or use the --dataset flag',\n {exit: 1},\n )\n }\n\n const targetDataset = dataset || cliConfig.api?.dataset\n\n try {\n const projectClient = await getProjectCliClient({\n apiVersion: DOCUMENTS_API_VERSION,\n dataset: targetDataset,\n projectId,\n requireUser: true,\n })\n\n const transaction = projectClient.transaction()\n for (const id of ids) {\n transaction.delete(id)\n }\n const {results} = await transaction.commit()\n const deleted = results.filter((res) => res.operation === 'delete').map((res) => res.id)\n const notFound = ids.filter((id) => !deleted.includes(id))\n\n if (deleted.length > 0) {\n this.log(`Deleted ${deleted.length} ${deleted.length === 1 ? 'document' : 'documents'}`)\n }\n\n if (notFound.length > 0) {\n this.error(\n `${notFound.length === 1 ? 'Document' : 'Documents'} not found: ${notFound.join(', ')}`,\n {\n exit: 1,\n },\n )\n }\n } catch (error) {\n const err = error as Error\n deleteDocumentDebug(`Error deleting documents ${ids.join(', ')}`, err)\n this.error(\n `Failed to delete ${ids.length} ${ids.length === 1 ? 'document' : 'documents'}: ${err.message}`,\n {\n exit: 1,\n },\n )\n }\n }\n}\n"],"names":["Args","getProjectCliClient","SanityCommand","subdebug","DOCUMENTS_API_VERSION","promptForProject","getDatasetFlag","getProjectIdFlag","deleteDocumentDebug","DeleteDocumentCommand","args","id","string","description","required","ids","examples","command","flags","semantics","strict","run","argv","parse","dataset","slice","filter","Boolean","length","error","exit","cliConfig","tryGetCliConfig","projectId","getProjectId","fallback","api","targetDataset","projectClient","apiVersion","requireUser","transaction","delete","results","commit","deleted","res","operation","map","notFound","includes","log","join","err","message"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Args, Flags } from '@oclif/core';
|
|
2
2
|
import { colorizeJson, getProjectCliClient, SanityCommand, subdebug } from '@sanity/cli-core';
|
|
3
3
|
import { DOCUMENTS_API_VERSION } from '../../actions/documents/constants.js';
|
|
4
|
-
import {
|
|
4
|
+
import { promptForProject } from '../../prompts/promptForProject.js';
|
|
5
|
+
import { getDatasetFlag, getProjectIdFlag } from '../../util/sharedFlags.js';
|
|
5
6
|
const getDocumentDebug = subdebug('documents:get');
|
|
6
7
|
export class GetDocumentCommand extends SanityCommand {
|
|
7
8
|
static args = {
|
|
@@ -23,12 +24,20 @@ export class GetDocumentCommand extends SanityCommand {
|
|
|
23
24
|
{
|
|
24
25
|
command: '<%= config.bin %> <%= command.id %> myDocId --dataset production',
|
|
25
26
|
description: 'Get document from a specific dataset'
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
command: '<%= config.bin %> <%= command.id %> myDocId --project-id abc123',
|
|
30
|
+
description: 'Get a document from a specific project'
|
|
26
31
|
}
|
|
27
32
|
];
|
|
28
33
|
static flags = {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
...getProjectIdFlag({
|
|
35
|
+
description: 'Project ID to get document from',
|
|
36
|
+
semantics: 'override'
|
|
37
|
+
}),
|
|
38
|
+
...getDatasetFlag({
|
|
39
|
+
description: 'Dataset to get document from',
|
|
40
|
+
semantics: 'override'
|
|
32
41
|
}),
|
|
33
42
|
pretty: Flags.boolean({
|
|
34
43
|
default: false,
|
|
@@ -39,14 +48,10 @@ export class GetDocumentCommand extends SanityCommand {
|
|
|
39
48
|
const { args, flags } = await this.parse(GetDocumentCommand);
|
|
40
49
|
const { documentId } = args;
|
|
41
50
|
const { dataset, pretty } = flags;
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
this.error(NO_PROJECT_ID, {
|
|
47
|
-
exit: 1
|
|
48
|
-
});
|
|
49
|
-
}
|
|
51
|
+
const cliConfig = await this.tryGetCliConfig();
|
|
52
|
+
const projectId = await this.getProjectId({
|
|
53
|
+
fallback: ()=>promptForProject({})
|
|
54
|
+
});
|
|
50
55
|
if (!cliConfig.api?.dataset && !dataset) {
|
|
51
56
|
this.error('No dataset specified. Either configure a dataset in sanity.cli.ts or use the --dataset flag', {
|
|
52
57
|
exit: 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/documents/get.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {colorizeJson, getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {DOCUMENTS_API_VERSION} from '../../actions/documents/constants.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/documents/get.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {colorizeJson, getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {DOCUMENTS_API_VERSION} from '../../actions/documents/constants.js'\nimport {promptForProject} from '../../prompts/promptForProject.js'\nimport {getDatasetFlag, getProjectIdFlag} from '../../util/sharedFlags.js'\n\nconst getDocumentDebug = subdebug('documents:get')\n\nexport class GetDocumentCommand extends SanityCommand<typeof GetDocumentCommand> {\n static override args = {\n documentId: Args.string({\n description: 'Document ID to retrieve',\n required: true,\n }),\n }\n\n static override description = 'Get and print a document by ID'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> myDocId',\n description: 'Get the document with ID \"myDocId\"',\n },\n {\n command: '<%= config.bin %> <%= command.id %> myDocId --pretty',\n description: 'Get document with colorized JSON output',\n },\n {\n command: '<%= config.bin %> <%= command.id %> myDocId --dataset production',\n description: 'Get document from a specific dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> myDocId --project-id abc123',\n description: 'Get a document from a specific project',\n },\n ]\n\n static override flags = {\n ...getProjectIdFlag({\n description: 'Project ID to get document from',\n semantics: 'override',\n }),\n ...getDatasetFlag({description: 'Dataset to get document from', semantics: 'override'}),\n pretty: Flags.boolean({\n default: false,\n description: 'Colorize JSON output',\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(GetDocumentCommand)\n const {documentId} = args\n const {dataset, pretty} = flags\n\n const cliConfig = await this.tryGetCliConfig()\n\n const projectId = await this.getProjectId({fallback: () => promptForProject({})})\n\n if (!cliConfig.api?.dataset && !dataset) {\n this.error(\n 'No dataset specified. Either configure a dataset in sanity.cli.ts or use the --dataset flag',\n {exit: 1},\n )\n }\n\n const targetDataset = dataset || cliConfig.api?.dataset\n\n try {\n const projectClient = await getProjectCliClient({\n apiVersion: DOCUMENTS_API_VERSION,\n dataset: targetDataset,\n projectId,\n requireUser: true,\n })\n\n const doc = await projectClient.getDocument(documentId)\n\n if (!doc) {\n this.error(`Document \"${documentId}\" not found in dataset \"${targetDataset}\"`, {exit: 1})\n }\n\n // Output the document\n if (pretty) {\n this.log(colorizeJson(doc))\n } else {\n this.log(JSON.stringify(doc, null, 2))\n }\n } catch (error) {\n const err = error as Error\n\n getDocumentDebug(`Error fetching document ${documentId}`, err)\n this.error(`Failed to fetch document: ${err.message}`, {exit: 1})\n }\n }\n}\n"],"names":["Args","Flags","colorizeJson","getProjectCliClient","SanityCommand","subdebug","DOCUMENTS_API_VERSION","promptForProject","getDatasetFlag","getProjectIdFlag","getDocumentDebug","GetDocumentCommand","args","documentId","string","description","required","examples","command","flags","semantics","pretty","boolean","default","run","parse","dataset","cliConfig","tryGetCliConfig","projectId","getProjectId","fallback","api","error","exit","targetDataset","projectClient","apiVersion","requireUser","doc","getDocument","log","JSON","stringify","err","message"],"mappings":"AAAA,SAAQA,IAAI,EAAEC,KAAK,QAAO,cAAa;AACvC,SAAQC,YAAY,EAAEC,mBAAmB,EAAEC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAE3F,SAAQC,qBAAqB,QAAO,uCAAsC;AAC1E,SAAQC,gBAAgB,QAAO,oCAAmC;AAClE,SAAQC,cAAc,EAAEC,gBAAgB,QAAO,4BAA2B;AAE1E,MAAMC,mBAAmBL,SAAS;AAElC,OAAO,MAAMM,2BAA2BP;IACtC,OAAgBQ,OAAO;QACrBC,YAAYb,KAAKc,MAAM,CAAC;YACtBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,iCAAgC;IAE9D,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,OAAgBI,QAAQ;QACtB,GAAGV,iBAAiB;YAClBM,aAAa;YACbK,WAAW;QACb,EAAE;QACF,GAAGZ,eAAe;YAACO,aAAa;YAAgCK,WAAW;QAAU,EAAE;QACvFC,QAAQpB,MAAMqB,OAAO,CAAC;YACpBC,SAAS;YACTR,aAAa;QACf;IACF,EAAC;IAED,MAAaS,MAAqB;QAChC,MAAM,EAACZ,IAAI,EAAEO,KAAK,EAAC,GAAG,MAAM,IAAI,CAACM,KAAK,CAACd;QACvC,MAAM,EAACE,UAAU,EAAC,GAAGD;QACrB,MAAM,EAACc,OAAO,EAAEL,MAAM,EAAC,GAAGF;QAE1B,MAAMQ,YAAY,MAAM,IAAI,CAACC,eAAe;QAE5C,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY,CAAC;YAACC,UAAU,IAAMxB,iBAAiB,CAAC;QAAE;QAE/E,IAAI,CAACoB,UAAUK,GAAG,EAAEN,WAAW,CAACA,SAAS;YACvC,IAAI,CAACO,KAAK,CACR,+FACA;gBAACC,MAAM;YAAC;QAEZ;QAEA,MAAMC,gBAAgBT,WAAWC,UAAUK,GAAG,EAAEN;QAEhD,IAAI;YACF,MAAMU,gBAAgB,MAAMjC,oBAAoB;gBAC9CkC,YAAY/B;gBACZoB,SAASS;gBACTN;gBACAS,aAAa;YACf;YAEA,MAAMC,MAAM,MAAMH,cAAcI,WAAW,CAAC3B;YAE5C,IAAI,CAAC0B,KAAK;gBACR,IAAI,CAACN,KAAK,CAAC,CAAC,UAAU,EAAEpB,WAAW,wBAAwB,EAAEsB,cAAc,CAAC,CAAC,EAAE;oBAACD,MAAM;gBAAC;YACzF;YAEA,sBAAsB;YACtB,IAAIb,QAAQ;gBACV,IAAI,CAACoB,GAAG,CAACvC,aAAaqC;YACxB,OAAO;gBACL,IAAI,CAACE,GAAG,CAACC,KAAKC,SAAS,CAACJ,KAAK,MAAM;YACrC;QACF,EAAE,OAAON,OAAO;YACd,MAAMW,MAAMX;YAEZvB,iBAAiB,CAAC,wBAAwB,EAAEG,YAAY,EAAE+B;YAC1D,IAAI,CAACX,KAAK,CAAC,CAAC,0BAA0B,EAAEW,IAAIC,OAAO,EAAE,EAAE;gBAACX,MAAM;YAAC;QACjE;IACF;AACF"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Args, Flags } from '@oclif/core';
|
|
2
2
|
import { colorizeJson, getProjectCliClient, SanityCommand, subdebug } from '@sanity/cli-core';
|
|
3
3
|
import { DOCUMENTS_API_VERSION } from '../../actions/documents/constants.js';
|
|
4
|
-
import {
|
|
4
|
+
import { promptForProject } from '../../prompts/promptForProject.js';
|
|
5
|
+
import { getDatasetFlag, getProjectIdFlag } from '../../util/sharedFlags.js';
|
|
5
6
|
const queryDocumentDebug = subdebug('documents:query');
|
|
6
7
|
export class QueryDocumentCommand extends SanityCommand {
|
|
7
8
|
static args = {
|
|
@@ -23,9 +24,21 @@ export class QueryDocumentCommand extends SanityCommand {
|
|
|
23
24
|
{
|
|
24
25
|
command: '<%= config.bin %> <%= command.id %> \'*[_id == "header"] { "headerText": pt::text(body) }\' --api-version v2021-06-07',
|
|
25
26
|
description: 'Use API version v2021-06-07 and do a query'
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
command: '<%= config.bin %> <%= command.id %> \'*[_type == "post"]\' --project-id abc123 --dataset production',
|
|
30
|
+
description: 'Query documents in a specific project and dataset'
|
|
26
31
|
}
|
|
27
32
|
];
|
|
28
33
|
static flags = {
|
|
34
|
+
...getProjectIdFlag({
|
|
35
|
+
description: 'Project ID to query',
|
|
36
|
+
semantics: 'override'
|
|
37
|
+
}),
|
|
38
|
+
...getDatasetFlag({
|
|
39
|
+
description: 'Dataset to query',
|
|
40
|
+
semantics: 'override'
|
|
41
|
+
}),
|
|
29
42
|
anonymous: Flags.boolean({
|
|
30
43
|
default: false,
|
|
31
44
|
description: 'Send the query without any authorization token'
|
|
@@ -34,33 +47,28 @@ export class QueryDocumentCommand extends SanityCommand {
|
|
|
34
47
|
description: `API version to use (defaults to ${DOCUMENTS_API_VERSION})`,
|
|
35
48
|
env: 'SANITY_CLI_QUERY_API_VERSION'
|
|
36
49
|
}),
|
|
37
|
-
dataset: Flags.string({
|
|
38
|
-
char: 'd',
|
|
39
|
-
description: 'Dataset to query (overrides config)'
|
|
40
|
-
}),
|
|
41
50
|
pretty: Flags.boolean({
|
|
42
51
|
default: false,
|
|
43
52
|
description: 'Colorize JSON output'
|
|
44
53
|
}),
|
|
45
54
|
project: Flags.string({
|
|
46
|
-
|
|
47
|
-
|
|
55
|
+
deprecated: {
|
|
56
|
+
to: 'project-id'
|
|
57
|
+
},
|
|
58
|
+
description: 'Project ID to query',
|
|
59
|
+
hidden: true
|
|
48
60
|
})
|
|
49
61
|
};
|
|
50
62
|
async run() {
|
|
51
63
|
const { args, flags } = await this.parse(QueryDocumentCommand);
|
|
52
64
|
const { query } = args;
|
|
53
|
-
const { anonymous, 'api-version': apiVersion, dataset, pretty
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
65
|
+
const { anonymous, 'api-version': apiVersion, dataset, pretty } = flags;
|
|
66
|
+
const cliConfig = await this.tryGetCliConfig();
|
|
67
|
+
const projectId = await this.getProjectId({
|
|
68
|
+
deprecatedFlagName: 'project',
|
|
69
|
+
fallback: ()=>promptForProject({})
|
|
70
|
+
});
|
|
58
71
|
const requireUser = !anonymous;
|
|
59
|
-
if (!targetProject) {
|
|
60
|
-
this.error(NO_PROJECT_ID, {
|
|
61
|
-
exit: 1
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
72
|
if (!cliConfig.api?.dataset && !dataset) {
|
|
65
73
|
this.error('No dataset specified. Either configure a dataset in sanity.cli.ts or use the --dataset flag', {
|
|
66
74
|
exit: 1
|
|
@@ -75,7 +83,7 @@ export class QueryDocumentCommand extends SanityCommand {
|
|
|
75
83
|
const projectClient = await getProjectCliClient({
|
|
76
84
|
apiVersion: targetApiVersion,
|
|
77
85
|
dataset: targetDataset,
|
|
78
|
-
projectId
|
|
86
|
+
projectId,
|
|
79
87
|
requireUser
|
|
80
88
|
});
|
|
81
89
|
const docs = await projectClient.fetch(query);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/documents/query.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {colorizeJson, getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {DOCUMENTS_API_VERSION} from '../../actions/documents/constants.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/documents/query.ts"],"sourcesContent":["import {Args, Flags} from '@oclif/core'\nimport {colorizeJson, getProjectCliClient, SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {DOCUMENTS_API_VERSION} from '../../actions/documents/constants.js'\nimport {promptForProject} from '../../prompts/promptForProject.js'\nimport {getDatasetFlag, getProjectIdFlag} from '../../util/sharedFlags.js'\n\nconst queryDocumentDebug = subdebug('documents:query')\n\nexport class QueryDocumentCommand extends SanityCommand<typeof QueryDocumentCommand> {\n static override args = {\n query: Args.string({\n description: 'GROQ query to run against the dataset',\n required: true,\n }),\n }\n\n static override description = 'Query for documents'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> \\'*[_type == \"movie\"][0..4]\\'',\n description: 'Fetch 5 documents of type \"movie\"',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> \\'*[_type == \"movie\"]|order(releaseDate asc)[0]{title}\\' --dataset staging',\n description: 'Fetch title of the oldest movie in the dataset named \"staging\"',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> \\'*[_id == \"header\"] { \"headerText\": pt::text(body) }\\' --api-version v2021-06-07',\n description: 'Use API version v2021-06-07 and do a query',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> \\'*[_type == \"post\"]\\' --project-id abc123 --dataset production',\n description: 'Query documents in a specific project and dataset',\n },\n ]\n\n static override flags = {\n ...getProjectIdFlag({description: 'Project ID to query', semantics: 'override'}),\n ...getDatasetFlag({description: 'Dataset to query', semantics: 'override'}),\n anonymous: Flags.boolean({\n default: false,\n description: 'Send the query without any authorization token',\n }),\n 'api-version': Flags.string({\n description: `API version to use (defaults to ${DOCUMENTS_API_VERSION})`,\n env: 'SANITY_CLI_QUERY_API_VERSION',\n }),\n pretty: Flags.boolean({\n default: false,\n description: 'Colorize JSON output',\n }),\n project: Flags.string({\n deprecated: {to: 'project-id'},\n description: 'Project ID to query',\n hidden: true,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(QueryDocumentCommand)\n const {query} = args\n const {anonymous, 'api-version': apiVersion, dataset, pretty} = flags\n\n const cliConfig = await this.tryGetCliConfig()\n\n const projectId = await this.getProjectId({\n deprecatedFlagName: 'project',\n fallback: () => promptForProject({}),\n })\n\n const requireUser = !anonymous\n\n if (!cliConfig.api?.dataset && !dataset) {\n this.error(\n 'No dataset specified. Either configure a dataset in sanity.cli.ts or use the --dataset flag',\n {exit: 1},\n )\n }\n\n const targetDataset = dataset || cliConfig.api?.dataset\n const targetApiVersion = apiVersion || DOCUMENTS_API_VERSION\n\n if (!apiVersion) {\n this.warn(`--api-version not specified, using \\`${DOCUMENTS_API_VERSION}\\``)\n }\n\n try {\n const projectClient = await getProjectCliClient({\n apiVersion: targetApiVersion,\n dataset: targetDataset,\n projectId,\n requireUser,\n })\n\n const docs = await projectClient.fetch(query)\n\n if (!docs) {\n this.error('Query returned no results', {exit: 1})\n }\n\n // Output the query results\n if (pretty) {\n this.log(colorizeJson(docs))\n } else {\n this.log(JSON.stringify(docs, null, 2))\n }\n } catch (error) {\n const err = error as Error\n\n queryDocumentDebug(`Error running query: ${query}`, err)\n\n // Provide more context in error messages\n const errorMsg = err.message.toLowerCase().includes('syntax')\n ? `Invalid GROQ query syntax: ${err.message}`\n : `Failed to run query: ${err.message}`\n\n this.error(`${errorMsg}\\nQuery: ${query}`, {exit: 1})\n }\n }\n}\n"],"names":["Args","Flags","colorizeJson","getProjectCliClient","SanityCommand","subdebug","DOCUMENTS_API_VERSION","promptForProject","getDatasetFlag","getProjectIdFlag","queryDocumentDebug","QueryDocumentCommand","args","query","string","description","required","examples","command","flags","semantics","anonymous","boolean","default","env","pretty","project","deprecated","to","hidden","run","parse","apiVersion","dataset","cliConfig","tryGetCliConfig","projectId","getProjectId","deprecatedFlagName","fallback","requireUser","api","error","exit","targetDataset","targetApiVersion","warn","projectClient","docs","fetch","log","JSON","stringify","err","errorMsg","message","toLowerCase","includes"],"mappings":"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"}
|
|
@@ -2,10 +2,11 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { styleText } from 'node:util';
|
|
4
4
|
import { Flags } from '@oclif/core';
|
|
5
|
-
import { SanityCommand } from '@sanity/cli-core';
|
|
5
|
+
import { ProjectRootNotFoundError, SanityCommand } from '@sanity/cli-core';
|
|
6
6
|
import { confirm, logSymbols } from '@sanity/cli-core/ux';
|
|
7
7
|
import { validateDocuments } from '../../actions/documents/validate.js';
|
|
8
8
|
import { reporters } from '../../actions/documents/validation/reporters/index.js';
|
|
9
|
+
import { getDatasetFlag, getProjectIdFlag } from '../../util/sharedFlags.js';
|
|
9
10
|
export class ValidateDocumentsCommand extends SanityCommand {
|
|
10
11
|
static description = 'Validate documents in a dataset against the studio schema';
|
|
11
12
|
static examples = [
|
|
@@ -24,12 +25,20 @@ export class ValidateDocumentsCommand extends SanityCommand {
|
|
|
24
25
|
{
|
|
25
26
|
command: '<%= config.bin %> <%= command.id %> --level info',
|
|
26
27
|
description: 'Report out info level validation markers too'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
command: '<%= config.bin %> <%= command.id %> --project-id abc123 --dataset production',
|
|
31
|
+
description: 'Validate documents in a specific project and dataset'
|
|
27
32
|
}
|
|
28
33
|
];
|
|
29
34
|
static flags = {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
...getProjectIdFlag({
|
|
36
|
+
description: 'Override the project ID used. By default, this is derived from the given workspace',
|
|
37
|
+
semantics: 'specify'
|
|
38
|
+
}),
|
|
39
|
+
...getDatasetFlag({
|
|
40
|
+
description: 'Override the dataset used. By default, this is derived from the given workspace',
|
|
41
|
+
semantics: 'specify'
|
|
33
42
|
}),
|
|
34
43
|
file: Flags.string({
|
|
35
44
|
description: 'Provide a path to either an .ndjson file or a tarball containing an .ndjson file'
|
|
@@ -39,7 +48,7 @@ export class ValidateDocumentsCommand extends SanityCommand {
|
|
|
39
48
|
}),
|
|
40
49
|
level: Flags.custom({
|
|
41
50
|
default: 'warning',
|
|
42
|
-
description: 'The minimum level reported
|
|
51
|
+
description: 'The minimum level reported. Defaults to warning',
|
|
43
52
|
options: [
|
|
44
53
|
'error',
|
|
45
54
|
'warning',
|
|
@@ -52,7 +61,7 @@ export class ValidateDocumentsCommand extends SanityCommand {
|
|
|
52
61
|
}),
|
|
53
62
|
'max-fetch-concurrency': Flags.integer({
|
|
54
63
|
default: 25,
|
|
55
|
-
description: 'Specify how many `client.fetch` requests are
|
|
64
|
+
description: 'Specify how many `client.fetch` requests are allowed to run concurrently'
|
|
56
65
|
}),
|
|
57
66
|
workspace: Flags.string({
|
|
58
67
|
description: 'The name of the workspace to use when downloading and validating all documents'
|
|
@@ -65,10 +74,22 @@ export class ValidateDocumentsCommand extends SanityCommand {
|
|
|
65
74
|
};
|
|
66
75
|
async run() {
|
|
67
76
|
const { flags } = await this.parse(ValidateDocumentsCommand);
|
|
68
|
-
const { dataset, file, format, level, 'max-custom-validation-concurrency': maxCustomValidationConcurrency, 'max-fetch-concurrency': maxFetchConcurrency, workspace } = flags;
|
|
77
|
+
const { dataset, file, format, level, 'max-custom-validation-concurrency': maxCustomValidationConcurrency, 'max-fetch-concurrency': maxFetchConcurrency, 'project-id': projectId, workspace } = flags;
|
|
69
78
|
const unattendedMode = Boolean(flags.yes);
|
|
70
|
-
|
|
71
|
-
|
|
79
|
+
let workDir;
|
|
80
|
+
let cliConfig;
|
|
81
|
+
try {
|
|
82
|
+
const root = await this.getProjectRoot();
|
|
83
|
+
workDir = root.directory;
|
|
84
|
+
cliConfig = await this.getCliConfig();
|
|
85
|
+
} catch (err) {
|
|
86
|
+
if (err instanceof ProjectRootNotFoundError) {
|
|
87
|
+
this.error('This command must be run from within a Sanity project directory (requires studio schema for validation)', {
|
|
88
|
+
exit: 1
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
throw err;
|
|
92
|
+
}
|
|
72
93
|
if (!unattendedMode) {
|
|
73
94
|
this.log(`${styleText('yellow', `${logSymbols.warning} Warning:`)} This command ${file ? 'reads all documents from your input file' : 'downloads all documents from your dataset'} and processes them through your local schema within a ` + `simulated browser environment.\n`);
|
|
74
95
|
this.log(`Potential pitfalls:\n`);
|
|
@@ -116,6 +137,7 @@ export class ValidateDocumentsCommand extends SanityCommand {
|
|
|
116
137
|
maxCustomValidationConcurrency,
|
|
117
138
|
maxFetchConcurrency,
|
|
118
139
|
ndjsonFilePath,
|
|
140
|
+
projectId,
|
|
119
141
|
reporter: (worker)=>{
|
|
120
142
|
const reporter = format && format in reporters ? reporters[format] : reporters.pretty;
|
|
121
143
|
return reporter({
|
|
@@ -124,7 +146,7 @@ export class ValidateDocumentsCommand extends SanityCommand {
|
|
|
124
146
|
worker
|
|
125
147
|
});
|
|
126
148
|
},
|
|
127
|
-
studioHost: cliConfig
|
|
149
|
+
studioHost: cliConfig.studioHost,
|
|
128
150
|
workDir,
|
|
129
151
|
workspace
|
|
130
152
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/documents/validate.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport {confirm, logSymbols} from '@sanity/cli-core/ux'\n\nimport {type Level} from '../../actions/documents/types.js'\nimport {validateDocuments} from '../../actions/documents/validate.js'\nimport {reporters} from '../../actions/documents/validation/reporters/index.js'\n\nexport class ValidateDocumentsCommand extends SanityCommand<typeof ValidateDocumentsCommand> {\n static description = 'Validate documents in a dataset against the studio schema'\n\n static examples = [\n {\n command: '<%= config.bin %> <%= command.id %> --workspace default',\n description: 'Validates all documents in a Sanity project with more than one workspace',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --workspace default --dataset staging',\n description: 'Override the dataset specified in the workspace',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --yes > report.txt',\n description: 'Save the results of the report into a file',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --level info',\n description: 'Report out info level validation markers too',\n },\n ]\n\n static flags = {\n dataset: Flags.string({\n char: 'd',\n description:\n 'Override the dataset used. By default, this is derived from the given workspace',\n }),\n file: Flags.string({\n description:\n 'Provide a path to either an .ndjson file or a tarball containing an .ndjson file',\n }),\n format: Flags.string({\n description:\n 'The output format used to print the found validation markers and report progress',\n }),\n level: Flags.custom<Level>({\n default: 'warning',\n description: 'The minimum level reported out. Defaults to warning',\n options: ['error', 'warning', 'info'],\n })(),\n 'max-custom-validation-concurrency': Flags.integer({\n default: 5,\n description: 'Specify how many custom validators can run concurrently',\n }),\n 'max-fetch-concurrency': Flags.integer({\n default: 25,\n description: 'Specify how many `client.fetch` requests are allow concurrency at once',\n }),\n workspace: Flags.string({\n description: 'The name of the workspace to use when downloading and validating all documents',\n }),\n yes: Flags.boolean({\n char: 'y',\n default: false,\n description: 'Skips the first confirmation prompt',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(ValidateDocumentsCommand)\n const {\n dataset,\n file,\n format,\n level,\n 'max-custom-validation-concurrency': maxCustomValidationConcurrency,\n 'max-fetch-concurrency': maxFetchConcurrency,\n workspace,\n } = flags\n const unattendedMode = Boolean(flags.yes)\n\n const cliConfig = await this.getCliConfig()\n const workDir = (await this.getProjectRoot()).directory\n\n if (!unattendedMode) {\n this.log(\n `${styleText('yellow', `${logSymbols.warning} Warning:`)} This command ${\n file\n ? 'reads all documents from your input file'\n : 'downloads all documents from your dataset'\n } and processes them through your local schema within a ` +\n `simulated browser environment.\\n`,\n )\n this.log(`Potential pitfalls:\\n`)\n this.log(\n `- Processes all documents locally (excluding assets). Large datasets may require more resources.`,\n )\n this.log(\n `- Executes all custom validation functions. Some functions may need to be refactored for compatibility.`,\n )\n this.log(\n `- Not all standard browser features are available and may cause issues while loading your Studio.`,\n )\n this.log(\n `- Adheres to document permissions. Ensure this account can see all desired documents.`,\n )\n if (file) {\n this.log(\n `- Checks for missing document references against the live dataset if not found in your file.`,\n )\n }\n\n const confirmed = await confirm({\n default: true,\n message: `Are you sure you want to continue?`,\n })\n\n if (!confirmed) {\n this.error('User aborted', {exit: 1})\n }\n }\n\n if (format && !(format in reporters)) {\n const formatter = new Intl.ListFormat('en-US', {\n style: 'long',\n type: 'conjunction',\n })\n this.error(\n `Did not recognize format '${format}'. Available formats are ${formatter.format(\n Object.keys(reporters).map((key) => `'${key}'`),\n )}`,\n {exit: 1},\n )\n }\n\n let ndjsonFilePath\n if (file) {\n const filePath = path.resolve(workDir, file)\n\n const stat = await fs.promises.stat(filePath)\n if (!stat.isFile()) {\n this.error(`'--file' must point to a valid ndjson file or tarball`, {exit: 1})\n }\n\n ndjsonFilePath = filePath\n }\n\n try {\n const overallLevel = await validateDocuments({\n dataset,\n level,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n ndjsonFilePath,\n reporter: (worker) => {\n const reporter =\n format && format in reporters\n ? reporters[format as keyof typeof reporters]\n : reporters.pretty\n\n return reporter({flags, output: this.output, worker})\n },\n studioHost: cliConfig?.studioHost,\n workDir,\n workspace,\n })\n\n if (overallLevel === 'error') {\n this.exit(1)\n }\n } catch (err) {\n this.error(err instanceof Error ? err.message : String(err), {exit: 1})\n }\n }\n}\n"],"names":["fs","path","styleText","Flags","SanityCommand","confirm","logSymbols","validateDocuments","reporters","ValidateDocumentsCommand","description","examples","command","flags","dataset","string","char","file","format","level","custom","default","options","integer","workspace","yes","boolean","run","parse","maxCustomValidationConcurrency","maxFetchConcurrency","unattendedMode","Boolean","cliConfig","getCliConfig","workDir","getProjectRoot","directory","log","warning","confirmed","message","error","exit","formatter","Intl","ListFormat","style","type","Object","keys","map","key","ndjsonFilePath","filePath","resolve","stat","promises","isFile","overallLevel","reporter","worker","pretty","output","studioHost","err","Error","String"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/documents/validate.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport {styleText} from 'node:util'\n\nimport {Flags} from '@oclif/core'\nimport {type CliConfig, ProjectRootNotFoundError, SanityCommand} from '@sanity/cli-core'\nimport {confirm, logSymbols} from '@sanity/cli-core/ux'\n\nimport {type Level} from '../../actions/documents/types.js'\nimport {validateDocuments} from '../../actions/documents/validate.js'\nimport {reporters} from '../../actions/documents/validation/reporters/index.js'\nimport {getDatasetFlag, getProjectIdFlag} from '../../util/sharedFlags.js'\n\nexport class ValidateDocumentsCommand extends SanityCommand<typeof ValidateDocumentsCommand> {\n static description = 'Validate documents in a dataset against the studio schema'\n\n static examples = [\n {\n command: '<%= config.bin %> <%= command.id %> --workspace default',\n description: 'Validates all documents in a Sanity project with more than one workspace',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --workspace default --dataset staging',\n description: 'Override the dataset specified in the workspace',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --yes > report.txt',\n description: 'Save the results of the report into a file',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --level info',\n description: 'Report out info level validation markers too',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --project-id abc123 --dataset production',\n description: 'Validate documents in a specific project and dataset',\n },\n ]\n\n static flags = {\n ...getProjectIdFlag({\n description:\n 'Override the project ID used. By default, this is derived from the given workspace',\n semantics: 'specify',\n }),\n ...getDatasetFlag({\n description:\n 'Override the dataset used. By default, this is derived from the given workspace',\n semantics: 'specify',\n }),\n file: Flags.string({\n description:\n 'Provide a path to either an .ndjson file or a tarball containing an .ndjson file',\n }),\n format: Flags.string({\n description:\n 'The output format used to print the found validation markers and report progress',\n }),\n level: Flags.custom<Level>({\n default: 'warning',\n description: 'The minimum level reported. Defaults to warning',\n options: ['error', 'warning', 'info'],\n })(),\n 'max-custom-validation-concurrency': Flags.integer({\n default: 5,\n description: 'Specify how many custom validators can run concurrently',\n }),\n 'max-fetch-concurrency': Flags.integer({\n default: 25,\n description: 'Specify how many `client.fetch` requests are allowed to run concurrently',\n }),\n workspace: Flags.string({\n description: 'The name of the workspace to use when downloading and validating all documents',\n }),\n yes: Flags.boolean({\n char: 'y',\n default: false,\n description: 'Skips the first confirmation prompt',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(ValidateDocumentsCommand)\n const {\n dataset,\n file,\n format,\n level,\n 'max-custom-validation-concurrency': maxCustomValidationConcurrency,\n 'max-fetch-concurrency': maxFetchConcurrency,\n 'project-id': projectId,\n workspace,\n } = flags\n const unattendedMode = Boolean(flags.yes)\n\n let workDir: string\n let cliConfig: CliConfig\n try {\n const root = await this.getProjectRoot()\n workDir = root.directory\n cliConfig = await this.getCliConfig()\n } catch (err) {\n if (err instanceof ProjectRootNotFoundError) {\n this.error(\n 'This command must be run from within a Sanity project directory (requires studio schema for validation)',\n {exit: 1},\n )\n }\n throw err\n }\n\n if (!unattendedMode) {\n this.log(\n `${styleText('yellow', `${logSymbols.warning} Warning:`)} This command ${\n file\n ? 'reads all documents from your input file'\n : 'downloads all documents from your dataset'\n } and processes them through your local schema within a ` +\n `simulated browser environment.\\n`,\n )\n this.log(`Potential pitfalls:\\n`)\n this.log(\n `- Processes all documents locally (excluding assets). Large datasets may require more resources.`,\n )\n this.log(\n `- Executes all custom validation functions. Some functions may need to be refactored for compatibility.`,\n )\n this.log(\n `- Not all standard browser features are available and may cause issues while loading your Studio.`,\n )\n this.log(\n `- Adheres to document permissions. Ensure this account can see all desired documents.`,\n )\n if (file) {\n this.log(\n `- Checks for missing document references against the live dataset if not found in your file.`,\n )\n }\n\n const confirmed = await confirm({\n default: true,\n message: `Are you sure you want to continue?`,\n })\n\n if (!confirmed) {\n this.error('User aborted', {exit: 1})\n }\n }\n\n if (format && !(format in reporters)) {\n const formatter = new Intl.ListFormat('en-US', {\n style: 'long',\n type: 'conjunction',\n })\n this.error(\n `Did not recognize format '${format}'. Available formats are ${formatter.format(\n Object.keys(reporters).map((key) => `'${key}'`),\n )}`,\n {exit: 1},\n )\n }\n\n let ndjsonFilePath\n if (file) {\n const filePath = path.resolve(workDir, file)\n\n const stat = await fs.promises.stat(filePath)\n if (!stat.isFile()) {\n this.error(`'--file' must point to a valid ndjson file or tarball`, {exit: 1})\n }\n\n ndjsonFilePath = filePath\n }\n\n try {\n const overallLevel = await validateDocuments({\n dataset,\n level,\n maxCustomValidationConcurrency,\n maxFetchConcurrency,\n ndjsonFilePath,\n projectId,\n reporter: (worker) => {\n const reporter =\n format && format in reporters\n ? reporters[format as keyof typeof reporters]\n : reporters.pretty\n\n return reporter({flags, output: this.output, worker})\n },\n studioHost: cliConfig.studioHost,\n workDir,\n workspace,\n })\n\n if (overallLevel === 'error') {\n this.exit(1)\n }\n } catch (err) {\n this.error(err instanceof Error ? err.message : String(err), {exit: 1})\n }\n }\n}\n"],"names":["fs","path","styleText","Flags","ProjectRootNotFoundError","SanityCommand","confirm","logSymbols","validateDocuments","reporters","getDatasetFlag","getProjectIdFlag","ValidateDocumentsCommand","description","examples","command","flags","semantics","file","string","format","level","custom","default","options","integer","workspace","yes","boolean","char","run","parse","dataset","maxCustomValidationConcurrency","maxFetchConcurrency","projectId","unattendedMode","Boolean","workDir","cliConfig","root","getProjectRoot","directory","getCliConfig","err","error","exit","log","warning","confirmed","message","formatter","Intl","ListFormat","style","type","Object","keys","map","key","ndjsonFilePath","filePath","resolve","stat","promises","isFile","overallLevel","reporter","worker","pretty","output","studioHost","Error","String"],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { Flags } from '@oclif/core';
|
|
2
2
|
import { isInteractive, SanityCommand } from '@sanity/cli-core';
|
|
3
3
|
import { confirm, spinner } from '@sanity/cli-core/ux';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
4
|
+
import get from 'lodash-es/get.js';
|
|
5
|
+
import { extractGraphQLAPIs } from '../../actions/graphql/extractGraphQLAPIs.js';
|
|
6
6
|
import gen1 from '../../actions/graphql/gen1/index.js';
|
|
7
7
|
import gen2 from '../../actions/graphql/gen2/index.js';
|
|
8
8
|
import gen3 from '../../actions/graphql/gen3/index.js';
|
|
9
|
-
import { getGraphQLAPIs } from '../../actions/graphql/getGraphQLAPIs.js';
|
|
10
9
|
import { graphqlDebug } from '../../actions/graphql/graphqlDebug.js';
|
|
11
10
|
import { resolveApiGeneration } from '../../actions/graphql/resolveApiGeneration.js';
|
|
12
11
|
import { SchemaError } from '../../actions/graphql/SchemaError.js';
|
|
13
12
|
import { deployGraphQLAPI, getClientUrl, getCurrentSchemaProps, validateGraphQLAPI } from '../../services/graphql.js';
|
|
13
|
+
import { getDatasetFlag } from '../../util/sharedFlags.js';
|
|
14
14
|
const apiIdRegex = /^[a-z0-9_-]+$/;
|
|
15
15
|
const generations = {
|
|
16
16
|
gen1,
|
|
@@ -48,8 +48,9 @@ export class GraphQLDeployCommand extends SanityCommand {
|
|
|
48
48
|
description: 'Only deploy API with this ID. Can be specified multiple times.',
|
|
49
49
|
multiple: true
|
|
50
50
|
}),
|
|
51
|
-
|
|
52
|
-
description: 'Deploy API for the given dataset'
|
|
51
|
+
...getDatasetFlag({
|
|
52
|
+
description: 'Deploy API for the given dataset',
|
|
53
|
+
semantics: 'specify'
|
|
53
54
|
}),
|
|
54
55
|
'dry-run': Flags.boolean({
|
|
55
56
|
default: false,
|
|
@@ -87,10 +88,21 @@ export class GraphQLDeployCommand extends SanityCommand {
|
|
|
87
88
|
let apiDefs = [];
|
|
88
89
|
let spin;
|
|
89
90
|
try {
|
|
90
|
-
apiDefs = await
|
|
91
|
+
apiDefs = await extractGraphQLAPIs(workDir, {
|
|
92
|
+
nonNullDocumentFieldsFlag,
|
|
93
|
+
withUnionCache
|
|
94
|
+
});
|
|
91
95
|
} catch (error) {
|
|
92
|
-
|
|
93
|
-
|
|
96
|
+
if (error instanceof SchemaError) {
|
|
97
|
+
debug('Schema validation errors: %O', error.problemGroups);
|
|
98
|
+
error.print(this.output);
|
|
99
|
+
this.error('Fix the schema errors above and try again', {
|
|
100
|
+
exit: 1
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
debug('Failed to resolve GraphQL APIs: %O', error);
|
|
104
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
105
|
+
this.error(`Failed to resolve GraphQL APIs: ${message}`, {
|
|
94
106
|
exit: 1
|
|
95
107
|
});
|
|
96
108
|
}
|
|
@@ -141,7 +153,7 @@ export class GraphQLDeployCommand extends SanityCommand {
|
|
|
141
153
|
});
|
|
142
154
|
}
|
|
143
155
|
if (apiDef.id) {
|
|
144
|
-
if (
|
|
156
|
+
if (!apiIdRegex.test(apiDef.id)) {
|
|
145
157
|
this.error(`Invalid GraphQL API id "${apiDef.id}" - only a-z, 0-9, underscore and dashes are allowed`, {
|
|
146
158
|
exit: 1
|
|
147
159
|
});
|
|
@@ -165,7 +177,7 @@ export class GraphQLDeployCommand extends SanityCommand {
|
|
|
165
177
|
}
|
|
166
178
|
index++;
|
|
167
179
|
const { apiName, dataset, tag } = this.getApiIdentifiers(apiDef, datasetFlag, tagFlag);
|
|
168
|
-
const {
|
|
180
|
+
const { playground, projectId } = apiDef;
|
|
169
181
|
spin = spinner(`Generating GraphQL API: ${apiName}`).start();
|
|
170
182
|
if (!dataset) {
|
|
171
183
|
spin.fail();
|
|
@@ -173,6 +185,27 @@ export class GraphQLDeployCommand extends SanityCommand {
|
|
|
173
185
|
exit: 1
|
|
174
186
|
});
|
|
175
187
|
}
|
|
188
|
+
// Handle extraction errors early (computed in worker), before network calls and prompts.
|
|
189
|
+
// Continue the loop so all API errors are reported — don't exit on the first failure.
|
|
190
|
+
if (apiDef.schemaErrors?.length) {
|
|
191
|
+
spin.fail();
|
|
192
|
+
new SchemaError(apiDef.schemaErrors).print(this.output, `Schema errors in ${apiName}`);
|
|
193
|
+
hasErrors = true;
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (apiDef.extractionError) {
|
|
197
|
+
debug('Failed to extract schema', apiDef.extractionError);
|
|
198
|
+
spin.fail();
|
|
199
|
+
this.log(`Failed to extract schema for ${apiName}: ${apiDef.extractionError}`);
|
|
200
|
+
hasErrors = true;
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
if (!apiDef.extracted) {
|
|
204
|
+
spin.fail();
|
|
205
|
+
this.log(`Failed to extract schema for ${apiName}: No extraction result`);
|
|
206
|
+
hasErrors = true;
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
176
209
|
let currentGeneration;
|
|
177
210
|
let playgroundEnabled;
|
|
178
211
|
try {
|
|
@@ -216,28 +249,16 @@ export class GraphQLDeployCommand extends SanityCommand {
|
|
|
216
249
|
let apiSpec;
|
|
217
250
|
try {
|
|
218
251
|
const generateSchema = generations[generation];
|
|
219
|
-
|
|
220
|
-
// Allow CLI flag to override configured setting
|
|
221
|
-
nonNullDocumentFields: nonNullDocumentFieldsFlag === undefined ? nonNullDocumentFields : nonNullDocumentFieldsFlag,
|
|
222
|
-
withUnionCache
|
|
223
|
-
});
|
|
224
|
-
apiSpec = generateSchema(extracted, {
|
|
252
|
+
apiSpec = generateSchema(apiDef.extracted, {
|
|
225
253
|
filterSuffix: apiDef.filterSuffix
|
|
226
254
|
});
|
|
227
255
|
} catch (err) {
|
|
228
|
-
debug('Failed to
|
|
256
|
+
debug('Failed to generate schema', err);
|
|
229
257
|
spin.fail();
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
});
|
|
235
|
-
} else {
|
|
236
|
-
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
237
|
-
this.error(`Failed to extract schema: ${message}`, {
|
|
238
|
-
exit: 1
|
|
239
|
-
});
|
|
240
|
-
}
|
|
258
|
+
const message = err instanceof Error ? err.message : 'Unknown error';
|
|
259
|
+
this.error(`Failed to generate schema: ${message}`, {
|
|
260
|
+
exit: 1
|
|
261
|
+
});
|
|
241
262
|
}
|
|
242
263
|
let valid;
|
|
243
264
|
try {
|
|
@@ -287,8 +308,15 @@ export class GraphQLDeployCommand extends SanityCommand {
|
|
|
287
308
|
}
|
|
288
309
|
spin.succeed();
|
|
289
310
|
} else if (dryRun) {
|
|
290
|
-
|
|
291
|
-
|
|
311
|
+
// isResultValid() already set the spinner state (succeed or warn).
|
|
312
|
+
// Check whether changes were forced so we print the correct message.
|
|
313
|
+
const { breakingChanges, dangerousChanges } = this.filterChanges(valid);
|
|
314
|
+
if (breakingChanges.length > 0 || dangerousChanges.length > 0) {
|
|
315
|
+
this.renderBreakingChanges(valid);
|
|
316
|
+
this.log('Forced with `--force`, skipping deploy (dry run)');
|
|
317
|
+
} else {
|
|
318
|
+
this.log('GraphQL API is valid and has no breaking changes');
|
|
319
|
+
}
|
|
292
320
|
continue;
|
|
293
321
|
}
|
|
294
322
|
deployTasks.push({
|