@sanity/cli 6.0.0-alpha.3 → 6.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/auth/login/{index.js → login.js} +1 -1
- package/dist/actions/auth/login/{index.js.map → login.js.map} +1 -1
- package/dist/actions/dev/startStudioDevServer.js +3 -8
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/dev/types.d.ts +1 -3
- package/dist/actions/dev/types.js.map +1 -1
- package/dist/actions/documents/validate.d.ts +0 -2
- package/dist/actions/documents/validate.js +21 -1
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/actions/exec/execScript.js +1 -1
- package/dist/actions/exec/execScript.js.map +1 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
- package/dist/actions/manifest/extractManifest.js +1 -4
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/organizations/getOrganizationChoices.d.ts +6 -0
- package/dist/actions/organizations/getOrganizationChoices.js +23 -0
- package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +2 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
- package/dist/actions/organizations/hasProjectAttachGrant.d.ts +1 -0
- package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
- package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
- package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
- package/dist/actions/schema/deleteSchemaAction.js +12 -17
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
- package/dist/actions/schema/deploySchemas.d.ts +15 -0
- package/dist/actions/schema/deploySchemas.js +98 -0
- package/dist/actions/schema/deploySchemas.js.map +1 -0
- package/dist/actions/schema/listSchemas.d.ts +12 -0
- package/dist/actions/schema/listSchemas.js +119 -0
- package/dist/actions/schema/listSchemas.js.map +1 -0
- package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
- package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
- package/dist/actions/schema/utils/debug.d.ts +2 -0
- package/dist/actions/schema/utils/debug.js +5 -0
- package/dist/actions/schema/utils/debug.js.map +1 -0
- package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
- package/dist/actions/schema/utils/manifestExtractor.js +12 -17
- package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
- package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
- package/dist/actions/schema/utils/manifestReader.js +6 -12
- package/dist/actions/schema/utils/manifestReader.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
- package/dist/actions/schema/utils/schemaStoreValidation.js +40 -127
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
- package/dist/actions/users/getMembersForProject.d.ts +1 -3
- package/dist/actions/users/getMembersForProject.js +6 -17
- package/dist/actions/users/getMembersForProject.js.map +1 -1
- package/dist/actions/users/types.d.ts +0 -11
- package/dist/actions/users/types.js.map +1 -1
- package/dist/commands/__tests__/debug.test.js +113 -220
- package/dist/commands/__tests__/debug.test.js.map +1 -1
- package/dist/commands/__tests__/deploy.test.js +325 -293
- package/dist/commands/__tests__/deploy.test.js.map +1 -1
- package/dist/commands/__tests__/dev.test.js +62 -19
- package/dist/commands/__tests__/dev.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.authentication.test.js +73 -0
- package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -0
- package/dist/commands/__tests__/init/init.create-new-project.test.js +195 -0
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -0
- package/dist/commands/__tests__/init/init.plan.test.js +279 -0
- package/dist/commands/__tests__/init/init.plan.test.js.map +1 -0
- package/dist/commands/__tests__/init/init.setup.test.js +335 -0
- package/dist/commands/__tests__/init/init.setup.test.js.map +1 -0
- package/dist/commands/__tests__/install.test.js +46 -22
- package/dist/commands/__tests__/install.test.js.map +1 -1
- package/dist/commands/__tests__/logout.test.js +8 -5
- package/dist/commands/__tests__/logout.test.js.map +1 -1
- package/dist/commands/__tests__/manage.test.js +29 -24
- package/dist/commands/__tests__/manage.test.js.map +1 -1
- package/dist/commands/__tests__/migration.test.js +119 -0
- package/dist/commands/__tests__/migration.test.js.map +1 -0
- package/dist/commands/__tests__/versions.test.js +22 -14
- package/dist/commands/__tests__/versions.test.js.map +1 -1
- package/dist/commands/backup/__tests__/disable.test.js +72 -75
- package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
- package/dist/commands/backup/__tests__/download.test.js +169 -80
- package/dist/commands/backup/__tests__/download.test.js.map +1 -1
- package/dist/commands/backup/__tests__/enable.test.js +109 -140
- package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
- package/dist/commands/backup/__tests__/list.test.js +84 -75
- package/dist/commands/backup/__tests__/list.test.js.map +1 -1
- package/dist/commands/backup/disable.js +5 -11
- package/dist/commands/backup/disable.js.map +1 -1
- package/dist/commands/backup/enable.js +5 -11
- package/dist/commands/backup/enable.js.map +1 -1
- package/dist/commands/backup/list.js +7 -8
- package/dist/commands/backup/list.js.map +1 -1
- package/dist/commands/cors/__tests__/add.test.js +68 -38
- package/dist/commands/cors/__tests__/add.test.js.map +1 -1
- package/dist/commands/cors/__tests__/delete.test.js +52 -37
- package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
- package/dist/commands/cors/__tests__/list.test.js +80 -57
- package/dist/commands/cors/__tests__/list.test.js.map +1 -1
- package/dist/commands/cors/add.js +5 -13
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +7 -15
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/cors/list.js +2 -10
- package/dist/commands/cors/list.js.map +1 -1
- package/dist/commands/dataset/__tests__/copy.test.js +197 -89
- package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/create.test.js +147 -117
- package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/delete.test.js +75 -68
- package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/export.test.js +123 -83
- package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/import.test.js +2 -2
- package/dist/commands/dataset/__tests__/import.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/list.test.js +107 -65
- package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
- package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
- package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
- package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
- package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
- package/dist/commands/dataset/export.js +4 -4
- package/dist/commands/dataset/export.js.map +1 -1
- package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
- package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
- package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
- package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
- package/dist/commands/dev.js +0 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs/__tests__/search.test.js +8 -7
- package/dist/commands/docs/__tests__/search.test.js.map +1 -1
- package/dist/commands/documents/__tests__/create.test.js +328 -265
- package/dist/commands/documents/__tests__/create.test.js.map +1 -1
- package/dist/commands/documents/__tests__/delete.test.js +119 -87
- package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
- package/dist/commands/documents/__tests__/get.test.js +68 -95
- package/dist/commands/documents/__tests__/get.test.js.map +1 -1
- package/dist/commands/documents/__tests__/query.test.js +87 -192
- package/dist/commands/documents/__tests__/query.test.js.map +1 -1
- package/dist/commands/documents/__tests__/validate.test.js +52 -29
- package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
- package/dist/commands/documents/create.d.ts +1 -0
- package/dist/commands/documents/create.js +10 -9
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/documents/delete.js +2 -3
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/documents/get.js +2 -3
- package/dist/commands/documents/get.js.map +1 -1
- package/dist/commands/documents/query.js +2 -3
- package/dist/commands/documents/query.js.map +1 -1
- package/dist/commands/documents/validate.js +0 -20
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/__tests__/list.test.js +57 -45
- package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
- package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
- package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
- package/dist/commands/graphql/list.js +2 -2
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/graphql/undeploy.js +4 -9
- package/dist/commands/graphql/undeploy.js.map +1 -1
- package/dist/commands/hook/__tests__/attempt.test.js +48 -33
- package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
- package/dist/commands/hook/__tests__/create.test.js +49 -51
- package/dist/commands/hook/__tests__/create.test.js.map +1 -1
- package/dist/commands/hook/__tests__/delete.test.js +43 -30
- package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
- package/dist/commands/hook/__tests__/list.test.js +38 -31
- package/dist/commands/hook/__tests__/list.test.js.map +1 -1
- package/dist/commands/hook/__tests__/logs.test.js +68 -40
- package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
- package/dist/commands/hook/create.js +2 -6
- package/dist/commands/hook/create.js.map +1 -1
- package/dist/commands/hook/delete.js +5 -17
- package/dist/commands/hook/delete.js.map +1 -1
- package/dist/commands/hook/list.js +2 -8
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.js +151 -18
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manifest/__tests__/extract.test.js +22 -13
- package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
- package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
- package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
- package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
- package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/export.test.js +365 -66
- package/dist/commands/media/__tests__/export.test.js.map +1 -1
- package/dist/commands/media/__tests__/import.test.js +171 -105
- package/dist/commands/media/__tests__/import.test.js.map +1 -1
- package/dist/commands/media/export.js +2 -2
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +2 -2
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/projects/__tests__/list.test.js +5 -4
- package/dist/commands/projects/__tests__/list.test.js.map +1 -1
- package/dist/commands/projects/list.js +2 -6
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/__tests__/delete.test.js +396 -151
- package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
- package/dist/commands/schema/__tests__/deploy.test.js +348 -0
- package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
- package/dist/commands/schema/__tests__/extract.test.js +19 -11
- package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
- package/dist/commands/schema/__tests__/list.test.js +399 -0
- package/dist/commands/schema/__tests__/list.test.js.map +1 -0
- package/dist/commands/schema/__tests__/validate.test.js +27 -10
- package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
- package/dist/commands/schema/delete.d.ts +1 -1
- package/dist/commands/schema/delete.js +20 -23
- package/dist/commands/schema/delete.js.map +1 -1
- package/dist/commands/schema/deploy.d.ts +16 -0
- package/dist/commands/schema/deploy.js +98 -0
- package/dist/commands/schema/deploy.js.map +1 -0
- package/dist/commands/schema/list.d.ts +15 -0
- package/dist/commands/schema/list.js +104 -0
- package/dist/commands/schema/list.js.map +1 -0
- package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
- package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
- package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
- package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
- package/dist/commands/telemetry/__tests__/status.test.js +7 -5
- package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/add.test.js +55 -40
- package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/delete.test.js +72 -42
- package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/list.test.js +87 -60
- package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
- package/dist/commands/tokens/add.js +3 -5
- package/dist/commands/tokens/add.js.map +1 -1
- package/dist/commands/users/__tests__/invite.test.js +100 -79
- package/dist/commands/users/__tests__/invite.test.js.map +1 -1
- package/dist/commands/users/__tests__/list.test.js +186 -180
- package/dist/commands/users/__tests__/list.test.js.map +1 -1
- package/dist/commands/users/invite.js +6 -17
- package/dist/commands/users/invite.js.map +1 -1
- package/dist/commands/users/list.js +4 -7
- package/dist/commands/users/list.js.map +1 -1
- package/dist/config/createCliConfig.d.ts +4 -4
- package/dist/services/backup.d.ts +8 -0
- package/dist/services/backup.js +19 -0
- package/dist/services/backup.js.map +1 -1
- package/dist/services/cors.d.ts +23 -0
- package/dist/services/cors.js +38 -0
- package/dist/services/cors.js.map +1 -0
- package/dist/services/graphql.d.ts +7 -0
- package/dist/services/graphql.js +11 -0
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/hooks.d.ts +2 -0
- package/dist/services/hooks.js +19 -0
- package/dist/services/hooks.js.map +1 -1
- package/dist/services/organizations.d.ts +40 -0
- package/dist/services/organizations.js +41 -0
- package/dist/services/organizations.js.map +1 -0
- package/dist/services/projects.d.ts +31 -0
- package/dist/services/projects.js +71 -1
- package/dist/services/projects.js.map +1 -1
- package/dist/services/schemas.d.ts +4 -0
- package/dist/services/schemas.js +40 -0
- package/dist/services/schemas.js.map +1 -0
- package/dist/services/user.d.ts +10 -0
- package/dist/services/user.js +24 -0
- package/dist/services/user.js.map +1 -0
- package/dist/util/__tests__/getCliVersion.test.js +2 -2
- package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
- package/dist/util/errorMessages.d.ts +1 -0
- package/dist/util/errorMessages.js +1 -0
- package/dist/util/errorMessages.js.map +1 -1
- package/dist/util/getCliVersion.js +1 -1
- package/dist/util/getCliVersion.js.map +1 -1
- package/dist/util/readPackageJson.d.ts +1 -15
- package/dist/util/readPackageJson.js +1 -1
- package/dist/util/readPackageJson.js.map +1 -1
- package/dist/util/uniqBy.d.ts +1 -0
- package/dist/util/uniqBy.js +14 -0
- package/dist/util/uniqBy.js.map +1 -0
- package/oclif.config.js +6 -1
- package/oclif.manifest.json +152 -158
- package/package.json +30 -31
- package/dist/actions/cors/constants.d.ts +0 -1
- package/dist/actions/cors/constants.js +0 -3
- package/dist/actions/cors/constants.js.map +0 -1
- package/dist/actions/cors/types.d.ts +0 -9
- package/dist/actions/cors/types.js +0 -3
- package/dist/actions/cors/types.js.map +0 -1
- package/dist/actions/migration/getMigrationRootDirectory.d.ts +0 -2
- package/dist/actions/migration/getMigrationRootDirectory.js +0 -14
- package/dist/actions/migration/getMigrationRootDirectory.js.map +0 -1
- package/dist/actions/migration/resolveMigrations.d.ts +0 -19
- package/dist/actions/migration/resolveMigrations.js +0 -43
- package/dist/actions/migration/resolveMigrations.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js +0 -65
- package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/minimalSimple.test.js +0 -145
- package/dist/actions/migration/templates/__tests__/minimalSimple.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/renameField.test.js +0 -63
- package/dist/actions/migration/templates/__tests__/renameField.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/renameType.test.js +0 -61
- package/dist/actions/migration/templates/__tests__/renameType.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/stringToPTE.test.js +0 -87
- package/dist/actions/migration/templates/__tests__/stringToPTE.test.js.map +0 -1
- package/dist/actions/migration/templates/index.d.ts +0 -5
- package/dist/actions/migration/templates/index.js +0 -7
- package/dist/actions/migration/templates/index.js.map +0 -1
- package/dist/actions/migration/templates/minimalAdvanced.d.ts +0 -4
- package/dist/actions/migration/templates/minimalAdvanced.js +0 -21
- package/dist/actions/migration/templates/minimalAdvanced.js.map +0 -1
- package/dist/actions/migration/templates/minimalSimple.d.ts +0 -4
- package/dist/actions/migration/templates/minimalSimple.js +0 -61
- package/dist/actions/migration/templates/minimalSimple.js.map +0 -1
- package/dist/actions/migration/templates/renameField.d.ts +0 -4
- package/dist/actions/migration/templates/renameField.js +0 -20
- package/dist/actions/migration/templates/renameField.js.map +0 -1
- package/dist/actions/migration/templates/renameType.d.ts +0 -4
- package/dist/actions/migration/templates/renameType.js +0 -19
- package/dist/actions/migration/templates/renameType.js.map +0 -1
- package/dist/actions/migration/templates/stringToPTE.d.ts +0 -4
- package/dist/actions/migration/templates/stringToPTE.js +0 -32
- package/dist/actions/migration/templates/stringToPTE.js.map +0 -1
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
- package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
- package/dist/actions/schema/schemaStoreConstants.js +0 -4
- package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
- package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
- package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
- package/dist/actions/schema/utils/schemaApiClient.js +0 -17
- package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
- package/dist/actions/users/apiVersion.d.ts +0 -6
- package/dist/actions/users/apiVersion.js +0 -7
- package/dist/actions/users/apiVersion.js.map +0 -1
- package/dist/commands/__tests__/init.test.js +0 -411
- package/dist/commands/__tests__/init.test.js.map +0 -1
- package/dist/commands/migration/__tests__/create.test.js +0 -296
- package/dist/commands/migration/__tests__/create.test.js.map +0 -1
- package/dist/commands/migration/__tests__/list.test.js +0 -166
- package/dist/commands/migration/__tests__/list.test.js.map +0 -1
- package/dist/commands/migration/__tests__/run.test.js +0 -481
- package/dist/commands/migration/__tests__/run.test.js.map +0 -1
- package/dist/commands/migration/create.d.ts +0 -17
- package/dist/commands/migration/create.js +0 -143
- package/dist/commands/migration/create.js.map +0 -1
- package/dist/commands/migration/list.d.ts +0 -9
- package/dist/commands/migration/list.js +0 -61
- package/dist/commands/migration/list.js.map +0 -1
- package/dist/commands/migration/run.d.ts +0 -26
- package/dist/commands/migration/run.js +0 -271
- package/dist/commands/migration/run.js.map +0 -1
- package/dist/util/migration/constants.d.ts +0 -3
- package/dist/util/migration/constants.js +0 -10
- package/dist/util/migration/constants.js.map +0 -1
- package/dist/util/migration/ensureApiVersionFormat.d.ts +0 -9
- package/dist/util/migration/ensureApiVersionFormat.js +0 -16
- package/dist/util/migration/ensureApiVersionFormat.js.map +0 -1
- package/dist/util/migration/prettyMutationFormatter.d.ts +0 -8
- package/dist/util/migration/prettyMutationFormatter.js +0 -141
- package/dist/util/migration/prettyMutationFormatter.js.map +0 -1
- package/dist/utils/migration/resolveMigrationScript.d.ts +0 -44
- package/dist/utils/migration/resolveMigrationScript.js +0 -74
- package/dist/utils/migration/resolveMigrationScript.js.map +0 -1
- /package/dist/actions/auth/login/{index.d.ts → login.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/schema/delete.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {deleteSchemaAction} from '../../actions/schema/deleteSchemaAction.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/schema/delete.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\nimport {parseStringFlag, SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {deleteSchemaAction} from '../../actions/schema/deleteSchemaAction.js'\nimport {parseIds} from '../../actions/schema/utils/schemaStoreValidation.js'\nimport {NO_DATASET_ID, NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst deleteSchemaDebug = subdebug('schema:delete')\n\nexport class DeleteSchemaCommand extends SanityCommand<typeof DeleteSchemaCommand> {\n static override description = 'Delete schema documents by id'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %> --ids sanity.workspace.schema.workspaceName',\n description: 'Delete a single schema',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> --ids sanity.workspace.schema.workspaceName,prefix.sanity.workspace.schema.otherWorkspace',\n description: 'Delete multiple schemas',\n },\n {\n command:\n '<%= config.bin %> <%= command.id %> --no-extract-manifest --ids sanity.workspace.schema.workspaceName',\n description:\n 'Delete using a pre-existing manifest file (config changes in sanity.config will not be picked up)',\n },\n ]\n\n static override flags = {\n dataset: Flags.string({\n description: 'Delete schemas from a specific dataset',\n parse: async (input) => parseStringFlag('dataset', input),\n }),\n 'extract-manifest': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Generate manifest file (disable with --no-extract-manifest)',\n }),\n ids: Flags.string({\n description: 'Comma-separated list of schema ids to delete',\n required: true,\n }),\n 'manifest-dir': Flags.directory({\n default: './dist/static',\n description: 'Directory containing manifest file',\n }),\n verbose: Flags.boolean({\n default: false,\n description: 'Enable verbose logging',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(DeleteSchemaCommand)\n const {dataset} = flags\n\n deleteSchemaDebug('Running schema delete with flags: %O', flags)\n\n const ids = parseIds(flags.ids)\n\n try {\n const workDir = (await this.getProjectRoot()).directory\n const cliConfig = await this.getCliConfig()\n const projectId = await this.getProjectId()\n const cliDataset = cliConfig.api?.dataset\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n if (!cliDataset) {\n this.error(NO_DATASET_ID, {exit: 1})\n }\n\n const result = await deleteSchemaAction({\n dataset,\n extractManifest: flags['extract-manifest'],\n ids,\n manifestDir: flags['manifest-dir'],\n output: this.output,\n projectId,\n verbose: flags['verbose'],\n workDir,\n })\n\n if (result === 'failure') {\n this.error('Failed to delete schemas', {exit: 1})\n }\n } catch (error) {\n const err = error as Error\n deleteSchemaDebug('Error deleting schemas', err)\n this.error(`Failed to delete schemas: ${err.message}`, {exit: 1})\n }\n }\n}\n"],"names":["Flags","parseStringFlag","SanityCommand","subdebug","deleteSchemaAction","parseIds","NO_DATASET_ID","NO_PROJECT_ID","deleteSchemaDebug","DeleteSchemaCommand","description","examples","command","flags","dataset","string","parse","input","boolean","allowNo","default","ids","required","directory","verbose","run","workDir","getProjectRoot","cliConfig","getCliConfig","projectId","getProjectId","cliDataset","api","error","exit","result","extractManifest","manifestDir","output","err","message"],"mappings":"AAAA,SAAQA,KAAK,QAAO,cAAa;AACjC,SAAQC,eAAe,EAAEC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAEzE,SAAQC,kBAAkB,QAAO,6CAA4C;AAC7E,SAAQC,QAAQ,QAAO,sDAAqD;AAC5E,SAAQC,aAAa,EAAEC,aAAa,QAAO,8BAA6B;AAExE,MAAMC,oBAAoBL,SAAS;AAEnC,OAAO,MAAMM,4BAA4BP;IACvC,OAAgBQ,cAAc,gCAA+B;IAE7D,OAAgBC,WAAW;QACzB;YACEC,SAAS;YACTF,aAAa;QACf;QACA;YACEE,SACE;YACFF,aAAa;QACf;QACA;YACEE,SACE;YACFF,aACE;QACJ;KACD,CAAA;IAED,OAAgBG,QAAQ;QACtBC,SAASd,MAAMe,MAAM,CAAC;YACpBL,aAAa;YACbM,OAAO,OAAOC,QAAUhB,gBAAgB,WAAWgB;QACrD;QACA,oBAAoBjB,MAAMkB,OAAO,CAAC;YAChCC,SAAS;YACTC,SAAS;YACTV,aAAa;QACf;QACAW,KAAKrB,MAAMe,MAAM,CAAC;YAChBL,aAAa;YACbY,UAAU;QACZ;QACA,gBAAgBtB,MAAMuB,SAAS,CAAC;YAC9BH,SAAS;YACTV,aAAa;QACf;QACAc,SAASxB,MAAMkB,OAAO,CAAC;YACrBE,SAAS;YACTV,aAAa;QACf;IACF,EAAC;IAED,MAAae,MAAqB;QAChC,MAAM,EAACZ,KAAK,EAAC,GAAG,MAAM,IAAI,CAACG,KAAK,CAACP;QACjC,MAAM,EAACK,OAAO,EAAC,GAAGD;QAElBL,kBAAkB,wCAAwCK;QAE1D,MAAMQ,MAAMhB,SAASQ,MAAMQ,GAAG;QAE9B,IAAI;YACF,MAAMK,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGJ,SAAS;YACvD,MAAMK,YAAY,MAAM,IAAI,CAACC,YAAY;YACzC,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY;YACzC,MAAMC,aAAaJ,UAAUK,GAAG,EAAEnB;YAElC,IAAI,CAACgB,WAAW;gBACd,IAAI,CAACI,KAAK,CAAC3B,eAAe;oBAAC4B,MAAM;gBAAC;YACpC;YAEA,IAAI,CAACH,YAAY;gBACf,IAAI,CAACE,KAAK,CAAC5B,eAAe;oBAAC6B,MAAM;gBAAC;YACpC;YAEA,MAAMC,SAAS,MAAMhC,mBAAmB;gBACtCU;gBACAuB,iBAAiBxB,KAAK,CAAC,mBAAmB;gBAC1CQ;gBACAiB,aAAazB,KAAK,CAAC,eAAe;gBAClC0B,QAAQ,IAAI,CAACA,MAAM;gBACnBT;gBACAN,SAASX,KAAK,CAAC,UAAU;gBACzBa;YACF;YAEA,IAAIU,WAAW,WAAW;gBACxB,IAAI,CAACF,KAAK,CAAC,4BAA4B;oBAACC,MAAM;gBAAC;YACjD;QACF,EAAE,OAAOD,OAAO;YACd,MAAMM,MAAMN;YACZ1B,kBAAkB,0BAA0BgC;YAC5C,IAAI,CAACN,KAAK,CAAC,CAAC,0BAA0B,EAAEM,IAAIC,OAAO,EAAE,EAAE;gBAACN,MAAM;YAAC;QACjE;IACF;AACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SanityCommand } from '@sanity/cli-core';
|
|
2
|
+
export declare class DeploySchemaCommand extends SanityCommand<typeof DeploySchemaCommand> {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: {
|
|
5
|
+
command: string;
|
|
6
|
+
description: string;
|
|
7
|
+
}[];
|
|
8
|
+
static flags: {
|
|
9
|
+
'extract-manifest': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
'manifest-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
tag: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
};
|
|
15
|
+
run(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { parseStringFlag, SanityCommand } from '@sanity/cli-core';
|
|
3
|
+
import { deploySchemas } from '../../actions/schema/deploySchemas.js';
|
|
4
|
+
import { schemasDeployDebug } from '../../actions/schema/utils/debug.js';
|
|
5
|
+
import { parseTag } from '../../actions/schema/utils/schemaStoreValidation.js';
|
|
6
|
+
import { NO_DATASET_ID, NO_PROJECT_ID } from '../../util/errorMessages.js';
|
|
7
|
+
const description = `
|
|
8
|
+
Deploy schema documents into workspace datasets.
|
|
9
|
+
|
|
10
|
+
**Note**: This command is experimental and subject to change.
|
|
11
|
+
|
|
12
|
+
This operation (re-)generates a manifest file describing the sanity config workspace by default.
|
|
13
|
+
To re-use an existing manifest file, use --no-extract-manifest.
|
|
14
|
+
`.trim();
|
|
15
|
+
export class DeploySchemaCommand extends SanityCommand {
|
|
16
|
+
static description = description;
|
|
17
|
+
static examples = [
|
|
18
|
+
{
|
|
19
|
+
command: '<%= config.bin %> <%= command.id %>',
|
|
20
|
+
description: 'Deploy all workspace schemas'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
command: '<%= config.bin %> <%= command.id %> --workspace default',
|
|
24
|
+
description: 'Deploy the schema for only the workspace "default"'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
command: '<%= config.bin %> <%= command.id %> --no-extract-manifest',
|
|
28
|
+
description: 'Runs using a pre-existing manifest file. Config changes in sanity.config will not be picked up in this case.'
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
static flags = {
|
|
32
|
+
'extract-manifest': Flags.boolean({
|
|
33
|
+
allowNo: true,
|
|
34
|
+
default: true,
|
|
35
|
+
description: 'Disables manifest generation - the command will fail if no manifest exists'
|
|
36
|
+
}),
|
|
37
|
+
'manifest-dir': Flags.directory({
|
|
38
|
+
default: './dist/static',
|
|
39
|
+
description: 'Directory containing manifest file',
|
|
40
|
+
helpValue: '<directory>'
|
|
41
|
+
}),
|
|
42
|
+
tag: Flags.string({
|
|
43
|
+
description: 'Add a tag suffix to the schema id',
|
|
44
|
+
helpValue: '<tag>',
|
|
45
|
+
parse: parseTag
|
|
46
|
+
}),
|
|
47
|
+
verbose: Flags.boolean({
|
|
48
|
+
default: false,
|
|
49
|
+
description: 'Print detailed information during deployment'
|
|
50
|
+
}),
|
|
51
|
+
workspace: Flags.string({
|
|
52
|
+
description: 'The name of the workspace to deploy a schema for',
|
|
53
|
+
helpValue: '<name>',
|
|
54
|
+
parse: async (input)=>parseStringFlag('workspace', input)
|
|
55
|
+
})
|
|
56
|
+
};
|
|
57
|
+
async run() {
|
|
58
|
+
const { flags } = await this.parse(DeploySchemaCommand);
|
|
59
|
+
const { tag, workspace } = flags;
|
|
60
|
+
try {
|
|
61
|
+
const workDir = (await this.getProjectRoot()).directory;
|
|
62
|
+
const cliConfig = await this.getCliConfig();
|
|
63
|
+
const projectId = await this.getProjectId();
|
|
64
|
+
const dataset = cliConfig.api?.dataset;
|
|
65
|
+
if (!projectId) {
|
|
66
|
+
this.error(NO_PROJECT_ID, {
|
|
67
|
+
exit: 1
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (!dataset) {
|
|
71
|
+
this.error(NO_DATASET_ID, {
|
|
72
|
+
exit: 1
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const result = await deploySchemas({
|
|
76
|
+
extractManifest: flags['extract-manifest'],
|
|
77
|
+
manifestDir: flags['manifest-dir'],
|
|
78
|
+
output: this.output,
|
|
79
|
+
tag,
|
|
80
|
+
verbose: flags['verbose'],
|
|
81
|
+
workDir,
|
|
82
|
+
workspaceName: workspace
|
|
83
|
+
});
|
|
84
|
+
if (result === 'failure') {
|
|
85
|
+
this.error('Failed to deploy schemas', {
|
|
86
|
+
exit: 1
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
} catch (error) {
|
|
90
|
+
schemasDeployDebug('Failed to deploy schemas', error);
|
|
91
|
+
this.error(`Failed to deploy schemas:\n${error}`, {
|
|
92
|
+
exit: 1
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/schema/deploy.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\nimport {parseStringFlag, SanityCommand} from '@sanity/cli-core'\n\nimport {deploySchemas} from '../../actions/schema/deploySchemas.js'\nimport {schemasDeployDebug} from '../../actions/schema/utils/debug.js'\nimport {parseTag} from '../../actions/schema/utils/schemaStoreValidation.js'\nimport {NO_DATASET_ID, NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst description = `\nDeploy schema documents into workspace datasets.\n\n**Note**: This command is experimental and subject to change.\n\nThis operation (re-)generates a manifest file describing the sanity config workspace by default.\nTo re-use an existing manifest file, use --no-extract-manifest.\n`.trim()\n\nexport class DeploySchemaCommand extends SanityCommand<typeof DeploySchemaCommand> {\n static override description = description\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Deploy all workspace schemas',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --workspace default',\n description: 'Deploy the schema for only the workspace \"default\"',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --no-extract-manifest',\n description:\n 'Runs using a pre-existing manifest file. Config changes in sanity.config will not be picked up in this case.',\n },\n ]\n\n static override flags = {\n 'extract-manifest': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Disables manifest generation - the command will fail if no manifest exists',\n }),\n 'manifest-dir': Flags.directory({\n default: './dist/static',\n description: 'Directory containing manifest file',\n helpValue: '<directory>',\n }),\n tag: Flags.string({\n description: 'Add a tag suffix to the schema id',\n helpValue: '<tag>',\n parse: parseTag,\n }),\n verbose: Flags.boolean({\n default: false,\n description: 'Print detailed information during deployment',\n }),\n workspace: Flags.string({\n description: 'The name of the workspace to deploy a schema for',\n helpValue: '<name>',\n parse: async (input) => parseStringFlag('workspace', input),\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(DeploySchemaCommand)\n const {tag, workspace} = flags\n\n try {\n const workDir = (await this.getProjectRoot()).directory\n const cliConfig = await this.getCliConfig()\n const projectId = await this.getProjectId()\n const dataset = cliConfig.api?.dataset\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n if (!dataset) {\n this.error(NO_DATASET_ID, {exit: 1})\n }\n\n const result = await deploySchemas({\n extractManifest: flags['extract-manifest'],\n manifestDir: flags['manifest-dir'],\n output: this.output,\n tag,\n verbose: flags['verbose'],\n workDir,\n workspaceName: workspace,\n })\n\n if (result === 'failure') {\n this.error('Failed to deploy schemas', {exit: 1})\n }\n } catch (error) {\n schemasDeployDebug('Failed to deploy schemas', error)\n this.error(`Failed to deploy schemas:\\n${error}`, {exit: 1})\n }\n }\n}\n"],"names":["Flags","parseStringFlag","SanityCommand","deploySchemas","schemasDeployDebug","parseTag","NO_DATASET_ID","NO_PROJECT_ID","description","trim","DeploySchemaCommand","examples","command","flags","boolean","allowNo","default","directory","helpValue","tag","string","parse","verbose","workspace","input","run","workDir","getProjectRoot","cliConfig","getCliConfig","projectId","getProjectId","dataset","api","error","exit","result","extractManifest","manifestDir","output","workspaceName"],"mappings":"AAAA,SAAQA,KAAK,QAAO,cAAa;AACjC,SAAQC,eAAe,EAAEC,aAAa,QAAO,mBAAkB;AAE/D,SAAQC,aAAa,QAAO,wCAAuC;AACnE,SAAQC,kBAAkB,QAAO,sCAAqC;AACtE,SAAQC,QAAQ,QAAO,sDAAqD;AAC5E,SAAQC,aAAa,EAAEC,aAAa,QAAO,8BAA6B;AAExE,MAAMC,cAAc,CAAC;;;;;;;AAOrB,CAAC,CAACC,IAAI;AAEN,OAAO,MAAMC,4BAA4BR;IACvC,OAAgBM,cAAcA,YAAW;IAEzC,OAAgBG,WAAW;QACzB;YACEC,SAAS;YACTJ,aAAa;QACf;QACA;YACEI,SAAS;YACTJ,aAAa;QACf;QACA;YACEI,SAAS;YACTJ,aACE;QACJ;KACD,CAAA;IAED,OAAgBK,QAAQ;QACtB,oBAAoBb,MAAMc,OAAO,CAAC;YAChCC,SAAS;YACTC,SAAS;YACTR,aAAa;QACf;QACA,gBAAgBR,MAAMiB,SAAS,CAAC;YAC9BD,SAAS;YACTR,aAAa;YACbU,WAAW;QACb;QACAC,KAAKnB,MAAMoB,MAAM,CAAC;YAChBZ,aAAa;YACbU,WAAW;YACXG,OAAOhB;QACT;QACAiB,SAAStB,MAAMc,OAAO,CAAC;YACrBE,SAAS;YACTR,aAAa;QACf;QACAe,WAAWvB,MAAMoB,MAAM,CAAC;YACtBZ,aAAa;YACbU,WAAW;YACXG,OAAO,OAAOG,QAAUvB,gBAAgB,aAAauB;QACvD;IACF,EAAC;IAED,MAAaC,MAAqB;QAChC,MAAM,EAACZ,KAAK,EAAC,GAAG,MAAM,IAAI,CAACQ,KAAK,CAACX;QACjC,MAAM,EAACS,GAAG,EAAEI,SAAS,EAAC,GAAGV;QAEzB,IAAI;YACF,MAAMa,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGV,SAAS;YACvD,MAAMW,YAAY,MAAM,IAAI,CAACC,YAAY;YACzC,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY;YACzC,MAAMC,UAAUJ,UAAUK,GAAG,EAAED;YAE/B,IAAI,CAACF,WAAW;gBACd,IAAI,CAACI,KAAK,CAAC3B,eAAe;oBAAC4B,MAAM;gBAAC;YACpC;YAEA,IAAI,CAACH,SAAS;gBACZ,IAAI,CAACE,KAAK,CAAC5B,eAAe;oBAAC6B,MAAM;gBAAC;YACpC;YAEA,MAAMC,SAAS,MAAMjC,cAAc;gBACjCkC,iBAAiBxB,KAAK,CAAC,mBAAmB;gBAC1CyB,aAAazB,KAAK,CAAC,eAAe;gBAClC0B,QAAQ,IAAI,CAACA,MAAM;gBACnBpB;gBACAG,SAAST,KAAK,CAAC,UAAU;gBACzBa;gBACAc,eAAejB;YACjB;YAEA,IAAIa,WAAW,WAAW;gBACxB,IAAI,CAACF,KAAK,CAAC,4BAA4B;oBAACC,MAAM;gBAAC;YACjD;QACF,EAAE,OAAOD,OAAO;YACd9B,mBAAmB,4BAA4B8B;YAC/C,IAAI,CAACA,KAAK,CAAC,CAAC,2BAA2B,EAAEA,OAAO,EAAE;gBAACC,MAAM;YAAC;QAC5D;IACF;AACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SanityCommand } from '@sanity/cli-core';
|
|
2
|
+
export declare class ListSchemaCommand extends SanityCommand<typeof ListSchemaCommand> {
|
|
3
|
+
static description: string;
|
|
4
|
+
static examples: {
|
|
5
|
+
command: string;
|
|
6
|
+
description: string;
|
|
7
|
+
}[];
|
|
8
|
+
static flags: {
|
|
9
|
+
'extract-manifest': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
id: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
|
+
'manifest-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<void>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Flags } from '@oclif/core';
|
|
2
|
+
import { SanityCommand } from '@sanity/cli-core';
|
|
3
|
+
import { listSchemas } from '../../actions/schema/listSchemas.js';
|
|
4
|
+
import { schemasListDebug } from '../../actions/schema/utils/debug.js';
|
|
5
|
+
import { parseWorkspaceSchemaId } from '../../actions/schema/utils/schemaStoreValidation.js';
|
|
6
|
+
import { NO_DATASET_ID, NO_PROJECT_ID } from '../../util/errorMessages.js';
|
|
7
|
+
const description = `
|
|
8
|
+
Lists all schemas in the current dataset.
|
|
9
|
+
|
|
10
|
+
**Note**: This command is experimental and subject to change.
|
|
11
|
+
|
|
12
|
+
This operation (re-)generates a manifest file describing the sanity config workspace by default.
|
|
13
|
+
To re-use an existing manifest file, use --no-extract-manifest.
|
|
14
|
+
`.trim();
|
|
15
|
+
export class ListSchemaCommand extends SanityCommand {
|
|
16
|
+
static description = description;
|
|
17
|
+
static examples = [
|
|
18
|
+
{
|
|
19
|
+
command: '<%= config.bin %> <%= command.id %>',
|
|
20
|
+
description: 'List all schemas found in any workspace dataset in a table'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
command: '<%= config.bin %> <%= command.id %> --id _.schemas.workspaceName',
|
|
24
|
+
description: 'Get a schema for a given id'
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
command: '<%= config.bin %> <%= command.id %> --json',
|
|
28
|
+
description: 'Get stored schemas as pretty-printed json-array'
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
command: '<%= config.bin %> <%= command.id %> --json --id _.schemas.workspaceName',
|
|
32
|
+
description: 'Get singular stored schema as pretty-printed json-object'
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
command: '<%= config.bin %> <%= command.id %> --no-extract-manifest',
|
|
36
|
+
description: 'Runs using a pre-existing manifest file. Config changes in sanity.config will not be picked up in this case.'
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
static flags = {
|
|
40
|
+
'extract-manifest': Flags.boolean({
|
|
41
|
+
allowNo: true,
|
|
42
|
+
default: true,
|
|
43
|
+
description: 'Disables manifest generation - the command will fail if no manifest exists'
|
|
44
|
+
}),
|
|
45
|
+
id: Flags.string({
|
|
46
|
+
description: 'Fetch a single schema by id',
|
|
47
|
+
helpValue: '<schema_id>'
|
|
48
|
+
}),
|
|
49
|
+
json: Flags.boolean({
|
|
50
|
+
description: 'Get schema as json'
|
|
51
|
+
}),
|
|
52
|
+
'manifest-dir': Flags.directory({
|
|
53
|
+
default: './dist/static',
|
|
54
|
+
description: 'Directory containing manifest file',
|
|
55
|
+
helpValue: '<directory>'
|
|
56
|
+
})
|
|
57
|
+
};
|
|
58
|
+
async run() {
|
|
59
|
+
const { flags } = await this.parse(ListSchemaCommand);
|
|
60
|
+
try {
|
|
61
|
+
const workDir = (await this.getProjectRoot()).directory;
|
|
62
|
+
const cliConfig = await this.getCliConfig();
|
|
63
|
+
const projectId = await this.getProjectId();
|
|
64
|
+
const dataset = cliConfig.api?.dataset;
|
|
65
|
+
if (!projectId) {
|
|
66
|
+
this.error(NO_PROJECT_ID, {
|
|
67
|
+
exit: 1
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (!dataset) {
|
|
71
|
+
this.error(NO_DATASET_ID, {
|
|
72
|
+
exit: 1
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
const errors = [];
|
|
76
|
+
const id = parseWorkspaceSchemaId(errors, flags.id)?.schemaId;
|
|
77
|
+
if (errors.length > 0) {
|
|
78
|
+
this.error(`Invalid arguments:\n${errors.map((error)=>` - ${error}`).join('\n')}`, {
|
|
79
|
+
exit: 1
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
const result = await listSchemas({
|
|
83
|
+
extractManifest: flags['extract-manifest'],
|
|
84
|
+
id,
|
|
85
|
+
json: !!flags.json,
|
|
86
|
+
manifestDir: flags['manifest-dir'],
|
|
87
|
+
output: this.output,
|
|
88
|
+
workDir
|
|
89
|
+
});
|
|
90
|
+
if (result === 'failure') {
|
|
91
|
+
this.error('Failed to list schemas', {
|
|
92
|
+
exit: 1
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
} catch (error) {
|
|
96
|
+
schemasListDebug('Failed to list schemas', error);
|
|
97
|
+
this.error(`Failed to list schemas:\n${error}`, {
|
|
98
|
+
exit: 1
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/schema/list.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\n\nimport {listSchemas} from '../../actions/schema/listSchemas.js'\nimport {schemasListDebug} from '../../actions/schema/utils/debug.js'\nimport {parseWorkspaceSchemaId} from '../../actions/schema/utils/schemaStoreValidation.js'\nimport {NO_DATASET_ID, NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst description = `\nLists all schemas in the current dataset.\n\n**Note**: This command is experimental and subject to change.\n\nThis operation (re-)generates a manifest file describing the sanity config workspace by default.\nTo re-use an existing manifest file, use --no-extract-manifest.\n`.trim()\n\nexport class ListSchemaCommand extends SanityCommand<typeof ListSchemaCommand> {\n static override description = description\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'List all schemas found in any workspace dataset in a table',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --id _.schemas.workspaceName',\n description: 'Get a schema for a given id',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --json',\n description: 'Get stored schemas as pretty-printed json-array',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --json --id _.schemas.workspaceName',\n description: 'Get singular stored schema as pretty-printed json-object',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --no-extract-manifest',\n description:\n 'Runs using a pre-existing manifest file. Config changes in sanity.config will not be picked up in this case.',\n },\n ]\n\n static override flags = {\n 'extract-manifest': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Disables manifest generation - the command will fail if no manifest exists',\n }),\n id: Flags.string({\n description: 'Fetch a single schema by id',\n helpValue: '<schema_id>',\n }),\n json: Flags.boolean({\n description: 'Get schema as json',\n }),\n 'manifest-dir': Flags.directory({\n default: './dist/static',\n description: 'Directory containing manifest file',\n helpValue: '<directory>',\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(ListSchemaCommand)\n\n try {\n const workDir = (await this.getProjectRoot()).directory\n const cliConfig = await this.getCliConfig()\n const projectId = await this.getProjectId()\n const dataset = cliConfig.api?.dataset\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n if (!dataset) {\n this.error(NO_DATASET_ID, {exit: 1})\n }\n\n const errors: string[] = []\n const id = parseWorkspaceSchemaId(errors, flags.id)?.schemaId\n if (errors.length > 0) {\n this.error(`Invalid arguments:\\n${errors.map((error) => ` - ${error}`).join('\\n')}`, {\n exit: 1,\n })\n }\n\n const result = await listSchemas({\n extractManifest: flags['extract-manifest'],\n id,\n json: !!flags.json,\n manifestDir: flags['manifest-dir'],\n output: this.output,\n workDir,\n })\n\n if (result === 'failure') {\n this.error('Failed to list schemas', {exit: 1})\n }\n } catch (error) {\n schemasListDebug('Failed to list schemas', error)\n this.error(`Failed to list schemas:\\n${error}`, {exit: 1})\n }\n }\n}\n"],"names":["Flags","SanityCommand","listSchemas","schemasListDebug","parseWorkspaceSchemaId","NO_DATASET_ID","NO_PROJECT_ID","description","trim","ListSchemaCommand","examples","command","flags","boolean","allowNo","default","id","string","helpValue","json","directory","run","parse","workDir","getProjectRoot","cliConfig","getCliConfig","projectId","getProjectId","dataset","api","error","exit","errors","schemaId","length","map","join","result","extractManifest","manifestDir","output"],"mappings":"AAAA,SAAQA,KAAK,QAAO,cAAa;AACjC,SAAQC,aAAa,QAAO,mBAAkB;AAE9C,SAAQC,WAAW,QAAO,sCAAqC;AAC/D,SAAQC,gBAAgB,QAAO,sCAAqC;AACpE,SAAQC,sBAAsB,QAAO,sDAAqD;AAC1F,SAAQC,aAAa,EAAEC,aAAa,QAAO,8BAA6B;AAExE,MAAMC,cAAc,CAAC;;;;;;;AAOrB,CAAC,CAACC,IAAI;AAEN,OAAO,MAAMC,0BAA0BR;IACrC,OAAgBM,cAAcA,YAAW;IAEzC,OAAgBG,WAAW;QACzB;YACEC,SAAS;YACTJ,aAAa;QACf;QACA;YACEI,SAAS;YACTJ,aAAa;QACf;QACA;YACEI,SAAS;YACTJ,aAAa;QACf;QACA;YACEI,SAAS;YACTJ,aAAa;QACf;QACA;YACEI,SAAS;YACTJ,aACE;QACJ;KACD,CAAA;IAED,OAAgBK,QAAQ;QACtB,oBAAoBZ,MAAMa,OAAO,CAAC;YAChCC,SAAS;YACTC,SAAS;YACTR,aAAa;QACf;QACAS,IAAIhB,MAAMiB,MAAM,CAAC;YACfV,aAAa;YACbW,WAAW;QACb;QACAC,MAAMnB,MAAMa,OAAO,CAAC;YAClBN,aAAa;QACf;QACA,gBAAgBP,MAAMoB,SAAS,CAAC;YAC9BL,SAAS;YACTR,aAAa;YACbW,WAAW;QACb;IACF,EAAC;IAED,MAAaG,MAAqB;QAChC,MAAM,EAACT,KAAK,EAAC,GAAG,MAAM,IAAI,CAACU,KAAK,CAACb;QAEjC,IAAI;YACF,MAAMc,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGJ,SAAS;YACvD,MAAMK,YAAY,MAAM,IAAI,CAACC,YAAY;YACzC,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY;YACzC,MAAMC,UAAUJ,UAAUK,GAAG,EAAED;YAE/B,IAAI,CAACF,WAAW;gBACd,IAAI,CAACI,KAAK,CAACzB,eAAe;oBAAC0B,MAAM;gBAAC;YACpC;YAEA,IAAI,CAACH,SAAS;gBACZ,IAAI,CAACE,KAAK,CAAC1B,eAAe;oBAAC2B,MAAM;gBAAC;YACpC;YAEA,MAAMC,SAAmB,EAAE;YAC3B,MAAMjB,KAAKZ,uBAAuB6B,QAAQrB,MAAMI,EAAE,GAAGkB;YACrD,IAAID,OAAOE,MAAM,GAAG,GAAG;gBACrB,IAAI,CAACJ,KAAK,CAAC,CAAC,oBAAoB,EAAEE,OAAOG,GAAG,CAAC,CAACL,QAAU,CAAC,IAAI,EAAEA,OAAO,EAAEM,IAAI,CAAC,OAAO,EAAE;oBACpFL,MAAM;gBACR;YACF;YAEA,MAAMM,SAAS,MAAMpC,YAAY;gBAC/BqC,iBAAiB3B,KAAK,CAAC,mBAAmB;gBAC1CI;gBACAG,MAAM,CAAC,CAACP,MAAMO,IAAI;gBAClBqB,aAAa5B,KAAK,CAAC,eAAe;gBAClC6B,QAAQ,IAAI,CAACA,MAAM;gBACnBlB;YACF;YAEA,IAAIe,WAAW,WAAW;gBACxB,IAAI,CAACP,KAAK,CAAC,0BAA0B;oBAACC,MAAM;gBAAC;YAC/C;QACF,EAAE,OAAOD,OAAO;YACd5B,iBAAiB,0BAA0B4B;YAC3C,IAAI,CAACA,KAAK,CAAC,CAAC,yBAAyB,EAAEA,OAAO,EAAE;gBAACC,MAAM;YAAC;QAC1D;IACF;AACF"}
|
|
@@ -4,12 +4,14 @@ import { mockApi, testCommand } from '@sanity/cli-test';
|
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
|
|
5
5
|
import { fetchTelemetryConsent } from '../../../actions/telemetry/fetchTelemetryConsent.js';
|
|
6
6
|
import { Disable } from '../disable.js';
|
|
7
|
-
vi.mock('
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
vi.mock('@sanity/cli-core', async ()=>{
|
|
8
|
+
const actual = await vi.importActual('@sanity/cli-core');
|
|
9
|
+
return {
|
|
10
|
+
...actual,
|
|
11
|
+
getCliToken: vi.fn(),
|
|
11
12
|
isCi: vi.fn(()=>false)
|
|
12
|
-
}
|
|
13
|
+
};
|
|
14
|
+
});
|
|
13
15
|
vi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', ()=>({
|
|
14
16
|
fetchTelemetryConsent: vi.fn()
|
|
15
17
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/telemetry/__tests__/disable.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken, isCi} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {fetchTelemetryConsent} from '../../../actions/telemetry/fetchTelemetryConsent.js'\nimport {Disable} from '../disable.js'\n\nvi.mock('
|
|
1
|
+
{"version":3,"sources":["../../../../src/commands/telemetry/__tests__/disable.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken, isCi} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {fetchTelemetryConsent} from '../../../actions/telemetry/fetchTelemetryConsent.js'\nimport {Disable} from '../disable.js'\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core')>('@sanity/cli-core')\n return {\n ...actual,\n getCliToken: vi.fn(),\n isCi: vi.fn(() => false),\n }\n})\n\nvi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', () => ({\n fetchTelemetryConsent: vi.fn(),\n}))\n\nconst mockGetCliToken = vi.mocked(getCliToken)\nconst mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent)\nconst mockIsCi = vi.mocked(isCi)\n\ndescribe('#disable', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\n vi.unstubAllEnvs()\n })\n\n test('help text is correct', async () => {\n const {stdout} = await runCommand(['telemetry', 'disable', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Disable telemetry for your logged in user\n\n USAGE\n $ sanity telemetry disable\n\n DESCRIPTION\n Disable telemetry for your logged in user\n\n EXAMPLES\n Disable telemetry for your logged in user\n\n $ sanity telemetry telemetry disable\n\n \"\n `)\n })\n\n test('disables telemetry when user is authenticated and status is different', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as granted\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n // Mock disable API call\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/denied',\n }).reply(200)\n\n // Mock updated status fetch\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain(\n \"You've opted out of telemetry data collection.\\nNo data will be collected from your Sanity account.\",\n )\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows already disabled message when telemetry is already denied', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as already denied\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain(\n \"You've already opted out of telemetry data collection.\\nNo data is collected from your Sanity account.\",\n )\n expect(stdout).not.toContain('Learn more here:')\n })\n\n test('shows already disabled message with DO_NOT_TRACK when local override is active', async () => {\n // Set DO_NOT_TRACK environment variable\n vi.stubEnv('DO_NOT_TRACK', '1')\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain(\n \"You've already opted out of telemetry data collection.\\nNo data is collected from your machine.\\n\\nUsing DO_NOT_TRACK environment variable.\",\n )\n })\n\n test('shows cannot set message in CI environment', async () => {\n mockIsCi.mockReturnValue(true)\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain('Cannot set telemetry consent in CI environment')\n mockIsCi.mockRestore()\n })\n\n test('shows login required message when user is not authenticated', async () => {\n // User is not authenticated\n mockGetCliToken.mockResolvedValue(undefined)\n\n const {stdout} = await testCommand(Disable, [])\n\n expect(stdout).toContain('You need to log in first to set telemetry preferences.')\n })\n\n test('shows error message when API call fails with 403', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as granted\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n // Mock disable API call to fail with 403\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/denied',\n }).reply(403, {message: 'Permission denied'})\n\n const result = await testCommand(Disable, [])\n\n expect(result.error).toMatchObject({\n message: 'Failed to disable telemetry: Permission denied',\n })\n })\n\n test('shows error message when API call fails with other error', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as granted\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n // Mock disable API call to fail with 500\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/denied',\n }).reply(500, {message: 'Internal server error'})\n\n const result = await testCommand(Disable, [])\n\n expect(result.error).toMatchObject({\n message: 'Failed to disable telemetry: Internal server error',\n })\n })\n})\n"],"names":["runCommand","getCliToken","isCi","mockApi","testCommand","afterEach","beforeEach","describe","expect","test","vi","fetchTelemetryConsent","Disable","mock","actual","importActual","fn","mockGetCliToken","mocked","mockFetchTelemetryConsent","mockIsCi","clearAllMocks","unstubAllEnvs","stdout","toMatchInlineSnapshot","mockResolvedValue","mockResolvedValueOnce","status","apiVersion","method","uri","reply","toContain","not","stubEnv","mockReturnValue","mockRestore","undefined","message","result","error","toMatchObject"],"mappings":"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"}
|
|
@@ -4,12 +4,14 @@ import { mockApi, testCommand } from '@sanity/cli-test';
|
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
|
|
5
5
|
import { fetchTelemetryConsent } from '../../../actions/telemetry/fetchTelemetryConsent.js';
|
|
6
6
|
import { Enable } from '../enable.js';
|
|
7
|
-
vi.mock('
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
vi.mock('@sanity/cli-core', async ()=>{
|
|
8
|
+
const actual = await vi.importActual('@sanity/cli-core');
|
|
9
|
+
return {
|
|
10
|
+
...actual,
|
|
11
|
+
getCliToken: vi.fn(),
|
|
11
12
|
isCi: ()=>false
|
|
12
|
-
}
|
|
13
|
+
};
|
|
14
|
+
});
|
|
13
15
|
vi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', ()=>({
|
|
14
16
|
fetchTelemetryConsent: vi.fn()
|
|
15
17
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/telemetry/__tests__/enable.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {fetchTelemetryConsent} from '../../../actions/telemetry/fetchTelemetryConsent.js'\nimport {Enable} from '../enable.js'\n\nvi.mock('
|
|
1
|
+
{"version":3,"sources":["../../../../src/commands/telemetry/__tests__/enable.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken} from '@sanity/cli-core'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {fetchTelemetryConsent} from '../../../actions/telemetry/fetchTelemetryConsent.js'\nimport {Enable} from '../enable.js'\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core')>('@sanity/cli-core')\n return {\n ...actual,\n getCliToken: vi.fn(),\n isCi: () => false,\n }\n})\n\nvi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', () => ({\n fetchTelemetryConsent: vi.fn(),\n}))\n\nconst mockGetCliToken = vi.mocked(getCliToken)\nconst mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent)\n\ndescribe('#enable', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\n vi.unstubAllEnvs()\n })\n\n test('help text is correct', async () => {\n const {stdout} = await runCommand(['telemetry', 'enable', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Enable telemetry for your logged in user\n\n USAGE\n $ sanity telemetry enable\n\n DESCRIPTION\n Enable telemetry for your logged in user\n\n EXAMPLES\n Enable telemetry for your logged in user\n\n $ sanity telemetry telemetry enable\n\n \"\n `)\n })\n\n test('enables telemetry when user is authenticated and status is different', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n // Mock enable API call\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/granted',\n }).reply(200)\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n const {stdout} = await testCommand(Enable, [])\n\n expect(stdout).toContain(\n \"You've now enabled telemetry data collection to help us improve Sanity.\",\n )\n expect(stdout).toContain('Learn more about the data being collected here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows already enabled message when telemetry is already granted', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'granted'})\n\n const {stdout} = await testCommand(Enable, [])\n\n expect(stdout).toContain(\n \"You've already enabled telemetry data collection to help us improve Sanity.\",\n )\n expect(stdout).not.toContain('Learn more about the data being collected here:')\n })\n\n test('shows login required message when user is not authenticated', async () => {\n // User is not authenticated\n mockGetCliToken.mockResolvedValue(undefined)\n\n const {stdout} = await testCommand(Enable, [])\n\n expect(stdout).toContain('You need to log in first to set telemetry preferences.')\n })\n\n test('shows error when DO_NOT_TRACK is set and trying to enable', async () => {\n // Set DO_NOT_TRACK environment variable\n vi.stubEnv('DO_NOT_TRACK', '1')\n\n const {stdout} = await testCommand(Enable, [])\n\n expect(stdout).toContain(\n 'Cannot enable telemetry while DO_NOT_TRACK environment variable is set. Unset DO_NOT_TRACK to enable telemetry.',\n )\n })\n\n test('shows error message when API call fails with 403', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock current status as denied\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n // Mock enable API call to fail with 403\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/granted',\n }).reply(403, {message: 'Permission denied'})\n\n const result = await testCommand(Enable, [])\n\n expect(result.error).toMatchObject({\n message: 'Failed to enable telemetry: Permission denied',\n })\n })\n\n test('shows error message when API call fails with other error', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValueOnce({status: 'denied'})\n\n // Mock enable API call to fail with 500\n mockApi({\n apiVersion: 'v2023-12-18',\n method: 'put',\n uri: '/users/me/consents/telemetry/status/granted',\n }).reply(500, {message: 'Internal server error'})\n\n const result = await testCommand(Enable, [])\n\n expect(result.error).toMatchObject({\n message: 'Failed to enable telemetry: Internal server error',\n })\n })\n})\n"],"names":["runCommand","getCliToken","mockApi","testCommand","afterEach","beforeEach","describe","expect","test","vi","fetchTelemetryConsent","Enable","mock","actual","importActual","fn","isCi","mockGetCliToken","mocked","mockFetchTelemetryConsent","clearAllMocks","unstubAllEnvs","stdout","toMatchInlineSnapshot","mockResolvedValue","mockResolvedValueOnce","status","apiVersion","method","uri","reply","toContain","not","undefined","stubEnv","message","result","error","toMatchObject"],"mappings":"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"}
|
|
@@ -4,12 +4,14 @@ import { testCommand } from '@sanity/cli-test';
|
|
|
4
4
|
import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest';
|
|
5
5
|
import { fetchTelemetryConsent } from '../../../actions/telemetry/fetchTelemetryConsent.js';
|
|
6
6
|
import { Status } from '../status.js';
|
|
7
|
-
vi.mock('
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
vi.mock('@sanity/cli-core', async ()=>{
|
|
8
|
+
const actual = await vi.importActual('@sanity/cli-core');
|
|
9
|
+
return {
|
|
10
|
+
...actual,
|
|
11
|
+
getCliToken: vi.fn(),
|
|
11
12
|
isCi: vi.fn(()=>false)
|
|
12
|
-
}
|
|
13
|
+
};
|
|
14
|
+
});
|
|
13
15
|
vi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', ()=>({
|
|
14
16
|
fetchTelemetryConsent: vi.fn()
|
|
15
17
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/telemetry/__tests__/status.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken, isCi} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {fetchTelemetryConsent} from '../../../actions/telemetry/fetchTelemetryConsent.js'\nimport {type ValidApiConsentStatus} from '../../../actions/telemetry/isValidApiConsentStatus.js'\nimport {Status} from '../status.js'\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/util/isCi.js', () => ({\n isCi: vi.fn(() => false),\n}))\n\nvi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', () => ({\n fetchTelemetryConsent: vi.fn(),\n}))\n\nconst mockGetCliToken = vi.mocked(getCliToken)\nconst mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent)\nconst mockIsCi = vi.mocked(isCi)\n\ndescribe('telemetry status', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\n vi.unstubAllEnvs()\n })\n\n test('help text is correct', async () => {\n const {stdout} = await runCommand(['telemetry', 'status', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Check telemetry consent status for your logged in user\n\n USAGE\n $ sanity telemetry status\n\n DESCRIPTION\n Check telemetry consent status for your logged in user\n\n EXAMPLES\n Check telemetry consent status for your logged in user\n\n $ sanity telemetry telemetry status\n\n \"\n `)\n })\n\n test('command handles no flags correctly', async () => {\n const {error} = await testCommand(Status, ['--invalid'])\n\n expect(error?.message).toContain('Nonexistent flag: --invalid')\n })\n\n test('shows disabled status with DO_NOT_TRACK environment variable', async () => {\n // Set DO_NOT_TRACK environment variable\n vi.stubEnv('DO_NOT_TRACK', '1')\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Disabled')\n expect(stdout).toContain(\"You've opted out of telemetry data collection.\")\n expect(stdout).toContain('No data will be collected from your machine.')\n expect(stdout).toContain('Using DO_NOT_TRACK environment variable.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows status when DO_NOT_TRACK is not set', async () => {\n // Explicitly ensure DO_NOT_TRACK is not set\n vi.stubEnv('DO_NOT_TRACK', undefined)\n\n const {stdout} = await testCommand(Status, [])\n\n // Should show telemetry status or appropriate message\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows cannot set message in CI environment', async () => {\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockIsCi.mockReturnValueOnce(true)\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Disabled')\n })\n\n // Additional tests for better coverage (using working patterns)\n test('ensures unauthenticated case works when no token available', async () => {\n // Mock no authentication token\n mockGetCliToken.mockResolvedValue(undefined)\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('You need to log in first to see telemetry status.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n // Integration tests with API mocking for different status responses\n test('shows granted status when API returns granted', async () => {\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'granted'})\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Enabled')\n expect(stdout).toContain(\n 'Telemetry data on general usage and errors is collected to help us improve Sanity.',\n )\n expect(stdout).toContain('Learn more about the data being collected here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows unset status when API returns unset', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'unset'})\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Not set')\n expect(stdout).toContain(\"You've not set your preference for telemetry collection.\")\n expect(stdout).toContain(\"Run 'npx sanity telemetry enable/disable' to opt in or out.\")\n expect(stdout).toContain('You can also use the DO_NOT_TRACK environment variable to opt out.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows denied status when API returns denied (without local override)', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'denied'})\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Disabled')\n expect(stdout).toContain(\"You've opted out of telemetry data collection.\")\n expect(stdout).toContain('No data will be collected from your Sanity account.')\n expect(stdout).not.toContain('Using DO_NOT_TRACK environment variable.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows fetch error when API call fails', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock the telemetry status API to return an error\n mockFetchTelemetryConsent.mockRejectedValue(new Error('API error'))\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Could not fetch telemetry consent status.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('handles invalid API response gracefully', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'invalid-status' as ValidApiConsentStatus})\n\n const {stdout} = await testCommand(Status, [])\n\n // Invalid API response should be handled as a fetch error\n expect(stdout).toContain('Could not fetch telemetry consent status.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n})\n"],"names":["runCommand","getCliToken","isCi","testCommand","afterEach","beforeEach","describe","expect","test","vi","fetchTelemetryConsent","Status","mock","fn","mockGetCliToken","mocked","mockFetchTelemetryConsent","mockIsCi","clearAllMocks","unstubAllEnvs","stdout","toMatchInlineSnapshot","error","message","toContain","stubEnv","undefined","mockResolvedValue","mockReturnValueOnce","status","not","mockRejectedValue","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/commands/telemetry/__tests__/status.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliToken, isCi} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {fetchTelemetryConsent} from '../../../actions/telemetry/fetchTelemetryConsent.js'\nimport {type ValidApiConsentStatus} from '../../../actions/telemetry/isValidApiConsentStatus.js'\nimport {Status} from '../status.js'\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core')>('@sanity/cli-core')\n return {\n ...actual,\n getCliToken: vi.fn(),\n isCi: vi.fn(() => false),\n }\n})\n\nvi.mock('../../../actions/telemetry/fetchTelemetryConsent.js', () => ({\n fetchTelemetryConsent: vi.fn(),\n}))\n\nconst mockGetCliToken = vi.mocked(getCliToken)\nconst mockFetchTelemetryConsent = vi.mocked(fetchTelemetryConsent)\nconst mockIsCi = vi.mocked(isCi)\n\ndescribe('telemetry status', () => {\n beforeEach(() => {\n vi.clearAllMocks()\n })\n\n afterEach(() => {\n vi.unstubAllEnvs()\n })\n\n test('help text is correct', async () => {\n const {stdout} = await runCommand(['telemetry', 'status', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Check telemetry consent status for your logged in user\n\n USAGE\n $ sanity telemetry status\n\n DESCRIPTION\n Check telemetry consent status for your logged in user\n\n EXAMPLES\n Check telemetry consent status for your logged in user\n\n $ sanity telemetry telemetry status\n\n \"\n `)\n })\n\n test('command handles no flags correctly', async () => {\n const {error} = await testCommand(Status, ['--invalid'])\n\n expect(error?.message).toContain('Nonexistent flag: --invalid')\n })\n\n test('shows disabled status with DO_NOT_TRACK environment variable', async () => {\n // Set DO_NOT_TRACK environment variable\n vi.stubEnv('DO_NOT_TRACK', '1')\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Disabled')\n expect(stdout).toContain(\"You've opted out of telemetry data collection.\")\n expect(stdout).toContain('No data will be collected from your machine.')\n expect(stdout).toContain('Using DO_NOT_TRACK environment variable.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows status when DO_NOT_TRACK is not set', async () => {\n // Explicitly ensure DO_NOT_TRACK is not set\n vi.stubEnv('DO_NOT_TRACK', undefined)\n\n const {stdout} = await testCommand(Status, [])\n\n // Should show telemetry status or appropriate message\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows cannot set message in CI environment', async () => {\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockIsCi.mockReturnValueOnce(true)\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Disabled')\n })\n\n // Additional tests for better coverage (using working patterns)\n test('ensures unauthenticated case works when no token available', async () => {\n // Mock no authentication token\n mockGetCliToken.mockResolvedValue(undefined)\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('You need to log in first to see telemetry status.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n // Integration tests with API mocking for different status responses\n test('shows granted status when API returns granted', async () => {\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'granted'})\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Enabled')\n expect(stdout).toContain(\n 'Telemetry data on general usage and errors is collected to help us improve Sanity.',\n )\n expect(stdout).toContain('Learn more about the data being collected here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows unset status when API returns unset', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'unset'})\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Not set')\n expect(stdout).toContain(\"You've not set your preference for telemetry collection.\")\n expect(stdout).toContain(\"Run 'npx sanity telemetry enable/disable' to opt in or out.\")\n expect(stdout).toContain('You can also use the DO_NOT_TRACK environment variable to opt out.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows denied status when API returns denied (without local override)', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'denied'})\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Status: Disabled')\n expect(stdout).toContain(\"You've opted out of telemetry data collection.\")\n expect(stdout).toContain('No data will be collected from your Sanity account.')\n expect(stdout).not.toContain('Using DO_NOT_TRACK environment variable.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('shows fetch error when API call fails', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n // Mock the telemetry status API to return an error\n mockFetchTelemetryConsent.mockRejectedValue(new Error('API error'))\n\n const {stdout} = await testCommand(Status, [])\n\n expect(stdout).toContain('Could not fetch telemetry consent status.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n\n test('handles invalid API response gracefully', async () => {\n // Ensure user is authenticated\n mockGetCliToken.mockResolvedValue('test-token')\n\n mockFetchTelemetryConsent.mockResolvedValue({status: 'invalid-status' as ValidApiConsentStatus})\n\n const {stdout} = await testCommand(Status, [])\n\n // Invalid API response should be handled as a fetch error\n expect(stdout).toContain('Could not fetch telemetry consent status.')\n expect(stdout).toContain('Learn more here:')\n expect(stdout).toContain('https://www.sanity.io/telemetry')\n })\n})\n"],"names":["runCommand","getCliToken","isCi","testCommand","afterEach","beforeEach","describe","expect","test","vi","fetchTelemetryConsent","Status","mock","actual","importActual","fn","mockGetCliToken","mocked","mockFetchTelemetryConsent","mockIsCi","clearAllMocks","unstubAllEnvs","stdout","toMatchInlineSnapshot","error","message","toContain","stubEnv","undefined","mockResolvedValue","mockReturnValueOnce","status","not","mockRejectedValue","Error"],"mappings":"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"}
|