@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 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/actions/schema/__tests__/deleteSchemaAction.test.ts"],"sourcesContent":["import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest'\n\nimport {deleteSchemaAction} from '../deleteSchemaAction'\nimport {type SchemaStoreContext} from '../schemaStoreTypes'\n\n// Mock dependencies\nconst mockOutput = {\n error: vi.fn(),\n log: vi.fn(),\n warn: vi.fn(),\n}\n\nconst mockApiClient = vi.fn()\nconst mockJsonReader = vi.fn()\nconst mockManifestExtractor = vi.fn()\n\nconst mockManifest = {\n createdAt: '2024-01-01T00:00:00.000Z',\n studioVersion: '3.0.0',\n version: 3,\n workspaces: [\n {\n basePath: '/',\n dataset: 'production',\n icon: null,\n name: 'default',\n projectId: 'test-project',\n schema: 'default.create-schema.json',\n tools: 'default.create-tools.json',\n },\n {\n basePath: '/staging',\n dataset: 'staging',\n icon: null,\n name: 'staging',\n projectId: 'test-project',\n schema: 'staging.create-schema.json',\n tools: 'staging.create-tools.json',\n },\n ],\n}\n\ndescribe('deleteSchemaAction', () => {\n let context: SchemaStoreContext\n let mockClientWithConfig: {\n config: ReturnType<typeof vi.fn>\n delete: ReturnType<typeof vi.fn>\n withConfig: ReturnType<typeof vi.fn>\n }\n\n beforeEach(() => {\n // Reset all mocks\n vi.clearAllMocks()\n\n // Setup client with config mock - needs withConfig for chaining\n mockClientWithConfig = {\n config: vi.fn().mockReturnValue({dataset: 'production', projectId: 'test-project'}),\n delete: vi.fn().mockResolvedValue({results: [{id: 'test-id'}]}),\n withConfig: vi.fn(),\n }\n // Make withConfig return itself for chaining\n mockClientWithConfig.withConfig.mockReturnValue(mockClientWithConfig)\n\n // Setup API client to return a client that has withConfig\n mockApiClient.mockResolvedValue({\n config: vi.fn().mockReturnValue({dataset: 'production', projectId: 'test-project'}),\n withConfig: vi.fn().mockReturnValue(mockClientWithConfig),\n })\n\n mockManifestExtractor.mockResolvedValue(undefined)\n\n mockJsonReader.mockImplementation(async (filePath: string) => {\n if (filePath.includes('create-manifest.json')) {\n return {\n lastModified: '2024-01-01T00:00:00.000Z',\n parsedJson: mockManifest,\n path: filePath,\n }\n }\n return undefined\n })\n\n // Setup default context\n context = {\n apiClient: mockApiClient as never,\n jsonReader: mockJsonReader as never,\n manifestExtractor: mockManifestExtractor as never,\n output: mockOutput as never,\n workDir: '/test/path',\n }\n })\n\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('successfully deletes a single schema', async () => {\n mockClientWithConfig.delete.mockResolvedValue({results: [{id: '_.schemas.default'}]})\n\n const result = await deleteSchemaAction(\n {\n 'extract-manifest': false,\n ids: '_.schemas.default',\n },\n context,\n )\n\n expect(result).toBe('success')\n expect(mockOutput.log).toHaveBeenCalledWith('Successfully deleted 1/1 schemas')\n expect(mockClientWithConfig.delete).toHaveBeenCalledWith('_.schemas.default')\n expect(mockClientWithConfig.delete).toHaveBeenCalledTimes(2) // Called once per dataset\n })\n\n test('successfully deletes multiple schemas', async () => {\n mockClientWithConfig.delete\n .mockResolvedValueOnce({results: [{id: '_.schemas.default'}]})\n .mockResolvedValueOnce({results: [{id: '_.schemas.staging'}]})\n .mockResolvedValueOnce({results: [{id: '_.schemas.default'}]})\n .mockResolvedValueOnce({results: [{id: '_.schemas.staging'}]})\n\n const result = await deleteSchemaAction(\n {\n 'extract-manifest': false,\n ids: '_.schemas.default,_.schemas.staging',\n },\n context,\n )\n\n expect(result).toBe('success')\n expect(mockOutput.log).toHaveBeenCalledWith('Successfully deleted 2/2 schemas')\n expect(mockClientWithConfig.delete).toHaveBeenCalledTimes(4) // 2 schemas × 2 datasets\n })\n\n test('filters schemas by dataset when dataset flag is provided', async () => {\n mockClientWithConfig.delete.mockResolvedValue({results: [{id: '_.schemas.default'}]})\n\n const result = await deleteSchemaAction(\n {\n dataset: 'production',\n 'extract-manifest': false,\n ids: '_.schemas.default',\n },\n context,\n )\n\n expect(result).toBe('success')\n expect(mockClientWithConfig.delete).toHaveBeenCalledTimes(1) // Only production dataset\n })\n\n test('returns failure when schema is not found', async () => {\n mockClientWithConfig.delete.mockResolvedValue({results: []}) // Empty results = not found\n\n const result = await deleteSchemaAction(\n {\n 'extract-manifest': false,\n ids: '_.schemas.nonexistent',\n },\n context,\n )\n\n expect(result).toBe('failure')\n expect(mockOutput.error).toHaveBeenCalled()\n expect(mockOutput.error.mock.calls[0][0]).toContain('Deleted 0/1 schemas')\n expect(mockOutput.error.mock.calls[0][0]).toContain('not found')\n })\n\n test('returns failure when some schemas are not found', async () => {\n mockClientWithConfig.delete\n .mockResolvedValueOnce({results: [{id: '_.schemas.default'}]})\n .mockResolvedValueOnce({results: []}) // Not found\n .mockResolvedValueOnce({results: [{id: '_.schemas.default'}]})\n .mockResolvedValueOnce({results: []}) // Not found\n\n const result = await deleteSchemaAction(\n {\n 'extract-manifest': false,\n ids: '_.schemas.default,_.schemas.nonexistent',\n },\n context,\n )\n\n expect(result).toBe('failure')\n expect(mockOutput.error).toHaveBeenCalled()\n expect(mockOutput.error.mock.calls[0][0]).toContain('Deleted 1/2 schemas')\n })\n\n test('handles delete errors gracefully', async () => {\n mockClientWithConfig.delete.mockRejectedValue(new Error('Delete failed'))\n\n const result = await deleteSchemaAction(\n {\n 'extract-manifest': false,\n ids: '_.schemas.default',\n },\n context,\n )\n\n expect(result).toBe('failure')\n expect(mockOutput.error).toHaveBeenCalledWith(\n expect.stringContaining('Failed to delete schema'),\n )\n })\n\n test('extracts manifest when extract-manifest is true', async () => {\n mockClientWithConfig.delete.mockResolvedValue({results: [{id: '_.schemas.default'}]})\n\n await deleteSchemaAction(\n {\n 'extract-manifest': true,\n ids: '_.schemas.default',\n },\n context,\n )\n\n expect(mockManifestExtractor).toHaveBeenCalled()\n })\n\n test('skips manifest extraction when extract-manifest is false', async () => {\n mockClientWithConfig.delete.mockResolvedValue({results: [{id: '_.schemas.default'}]})\n\n await deleteSchemaAction(\n {\n 'extract-manifest': false,\n ids: '_.schemas.default',\n },\n context,\n )\n\n expect(mockManifestExtractor).not.toHaveBeenCalled()\n })\n\n test('logs verbose output when verbose flag is enabled', async () => {\n mockClientWithConfig.delete.mockRejectedValue(new Error('Delete failed'))\n\n await deleteSchemaAction(\n {\n 'extract-manifest': false,\n ids: '_.schemas.default',\n verbose: true,\n },\n context,\n )\n\n // Verbose mode should log the full error object\n expect(mockOutput.error).toHaveBeenCalledWith(expect.any(Error))\n })\n\n test('throws error when manifest extraction fails with schemaRequired', async () => {\n mockManifestExtractor.mockRejectedValue(new Error('Manifest extraction failed'))\n\n await expect(\n deleteSchemaAction(\n {\n 'extract-manifest': true,\n ids: '_.schemas.default',\n },\n context,\n ),\n ).rejects.toThrow('Manifest extraction failed')\n })\n\n test('filters workspaces by projectId mismatch', async () => {\n const mismatchManifest = {\n ...mockManifest,\n workspaces: [\n {...mockManifest.workspaces[0], projectId: 'test-project'},\n {...mockManifest.workspaces[1], projectId: 'different-project'},\n ],\n }\n\n mockJsonReader.mockImplementation(async (filePath: string) => {\n if (filePath.includes('create-manifest.json')) {\n return {\n lastModified: '2024-01-01T00:00:00.000Z',\n parsedJson: mismatchManifest,\n path: filePath,\n }\n }\n return undefined\n })\n\n mockClientWithConfig.delete.mockResolvedValue({results: [{id: '_.schemas.default'}]})\n\n await deleteSchemaAction(\n {\n 'extract-manifest': false,\n ids: '_.schemas.default',\n },\n context,\n )\n\n // Should warn about project ID mismatch\n expect(mockOutput.warn).toHaveBeenCalled()\n // Should only delete from matching project\n expect(mockClientWithConfig.delete).toHaveBeenCalledTimes(1)\n })\n})\n"],"names":["afterEach","beforeEach","describe","expect","test","vi","deleteSchemaAction","mockOutput","error","fn","log","warn","mockApiClient","mockJsonReader","mockManifestExtractor","mockManifest","createdAt","studioVersion","version","workspaces","basePath","dataset","icon","name","projectId","schema","tools","context","mockClientWithConfig","clearAllMocks","config","mockReturnValue","delete","mockResolvedValue","results","id","withConfig","undefined","mockImplementation","filePath","includes","lastModified","parsedJson","path","apiClient","jsonReader","manifestExtractor","output","workDir","result","ids","toBe","toHaveBeenCalledWith","toHaveBeenCalledTimes","mockResolvedValueOnce","toHaveBeenCalled","mock","calls","toContain","mockRejectedValue","Error","stringContaining","not","verbose","any","rejects","toThrow","mismatchManifest"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const SCHEMA_STORE_FEATURE_ENABLED: boolean;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/schema/schemaStoreConstants.ts"],"sourcesContent":["const FEATURE_ENABLED_ENV_NAME = 'SANITY_CLI_SCHEMA_STORE_ENABLED'\n\nexport const SCHEMA_STORE_FEATURE_ENABLED = process.env[FEATURE_ENABLED_ENV_NAME] === 'true'\n"],"names":["FEATURE_ENABLED_ENV_NAME","SCHEMA_STORE_FEATURE_ENABLED","process","env"],"mappings":"AAAA,MAAMA,2BAA2B;AAEjC,OAAO,MAAMC,+BAA+BC,QAAQC,GAAG,CAACH,yBAAyB,KAAK,OAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function pluralize(word: string, count: number): string;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/actions/schema/utils/schemaActionHelpers.ts"],"sourcesContent":["export function pluralize(word: string, count: number) {\n return `${count} ${word}${count === 1 ? '' : 's'}`\n}\n"],"names":["pluralize","word","count"],"mappings":"AAAA,OAAO,SAASA,UAAUC,IAAY,EAAEC,KAAa;IACnD,OAAO,GAAGA,MAAM,CAAC,EAAED,OAAOC,UAAU,IAAI,KAAK,KAAK;AACpD"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export async function createSchemaApiClient(apiClient) {
|
|
2
|
-
const client = (await apiClient()).withConfig({
|
|
3
|
-
apiVersion: 'v2025-03-01',
|
|
4
|
-
useCdn: false
|
|
5
|
-
});
|
|
6
|
-
const projectId = client.config().projectId;
|
|
7
|
-
const dataset = client.config().dataset;
|
|
8
|
-
if (!projectId) throw new Error('Project ID is not defined');
|
|
9
|
-
if (!dataset) throw new Error('Dataset is not defined');
|
|
10
|
-
return {
|
|
11
|
-
client,
|
|
12
|
-
dataset,
|
|
13
|
-
projectId
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
//# sourceMappingURL=schemaApiClient.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/actions/schema/utils/schemaApiClient.ts"],"sourcesContent":["import {type SanityClient} from '@sanity/client'\n\nexport async function createSchemaApiClient(apiClient: () => Promise<SanityClient>) {\n const client = (await apiClient()).withConfig({apiVersion: 'v2025-03-01', useCdn: false})\n\n const projectId = client.config().projectId\n const dataset = client.config().dataset\n if (!projectId) throw new Error('Project ID is not defined')\n if (!dataset) throw new Error('Dataset is not defined')\n\n return {\n client,\n dataset,\n projectId,\n }\n}\n"],"names":["createSchemaApiClient","apiClient","client","withConfig","apiVersion","useCdn","projectId","config","dataset","Error"],"mappings":"AAEA,OAAO,eAAeA,sBAAsBC,SAAsC;IAChF,MAAMC,SAAS,AAAC,CAAA,MAAMD,WAAU,EAAGE,UAAU,CAAC;QAACC,YAAY;QAAeC,QAAQ;IAAK;IAEvF,MAAMC,YAAYJ,OAAOK,MAAM,GAAGD,SAAS;IAC3C,MAAME,UAAUN,OAAOK,MAAM,GAAGC,OAAO;IACvC,IAAI,CAACF,WAAW,MAAM,IAAIG,MAAM;IAChC,IAAI,CAACD,SAAS,MAAM,IAAIC,MAAM;IAE9B,OAAO;QACLP;QACAM;QACAF;IACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/users/apiVersion.ts"],"sourcesContent":["/**\n * The API version to use for the users list command\n *\n * @internal\n */\nexport const USERS_API_VERSION = 'v2025-08-30'\n"],"names":["USERS_API_VERSION"],"mappings":"AAAA;;;;CAIC,GACD,OAAO,MAAMA,oBAAoB,cAAa"}
|
|
@@ -1,411 +0,0 @@
|
|
|
1
|
-
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { testCommand } from '@sanity/cli-test';
|
|
3
|
-
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
4
|
-
import { InitCommand } from '../init';
|
|
5
|
-
const mocks = vi.hoisted(()=>({
|
|
6
|
-
confirm: vi.fn(),
|
|
7
|
-
detectFrameworkRecord: vi.fn(),
|
|
8
|
-
getById: vi.fn().mockResolvedValue({
|
|
9
|
-
email: 'test@example.com',
|
|
10
|
-
id: 'user-123',
|
|
11
|
-
name: 'Test User',
|
|
12
|
-
provider: 'saml-123'
|
|
13
|
-
}),
|
|
14
|
-
login: vi.fn(),
|
|
15
|
-
request: vi.fn()
|
|
16
|
-
}));
|
|
17
|
-
vi.mock('@vercel/fs-detectors', ()=>({
|
|
18
|
-
detectFrameworkRecord: mocks.detectFrameworkRecord,
|
|
19
|
-
LocalFileSystemDetector: vi.fn()
|
|
20
|
-
}));
|
|
21
|
-
vi.mock('../../../../cli-core/src/services/apiClient.js', ()=>({
|
|
22
|
-
getGlobalCliClient: vi.fn().mockResolvedValue({
|
|
23
|
-
request: mocks.request,
|
|
24
|
-
users: {
|
|
25
|
-
getById: mocks.getById
|
|
26
|
-
}
|
|
27
|
-
})
|
|
28
|
-
}));
|
|
29
|
-
vi.mock('../../../../cli-core/src/services/getCliToken.js', ()=>({
|
|
30
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
31
|
-
}));
|
|
32
|
-
vi.mock('@sanity/cli-core/ux', ()=>({
|
|
33
|
-
confirm: mocks.confirm
|
|
34
|
-
}));
|
|
35
|
-
vi.mock('../../actions/auth/login/index.js', ()=>({
|
|
36
|
-
login: mocks.login
|
|
37
|
-
}));
|
|
38
|
-
vi.mock('../../../../cli-core/src/util/isInteractive.js', ()=>({
|
|
39
|
-
isInteractive: vi.fn().mockReturnValue(true)
|
|
40
|
-
}));
|
|
41
|
-
const httpError = Object.assign(new Error('Not Found'), {
|
|
42
|
-
message: 'Coupon not found',
|
|
43
|
-
response: {
|
|
44
|
-
body: {},
|
|
45
|
-
headers: {},
|
|
46
|
-
method: '',
|
|
47
|
-
statusCode: 404,
|
|
48
|
-
url: ''
|
|
49
|
-
},
|
|
50
|
-
statusCode: 404
|
|
51
|
-
});
|
|
52
|
-
describe('#init', ()=>{
|
|
53
|
-
afterEach(()=>{
|
|
54
|
-
vi.clearAllMocks();
|
|
55
|
-
});
|
|
56
|
-
describe('oclif command setup', ()=>{
|
|
57
|
-
test('--help works', async ()=>{
|
|
58
|
-
const { stdout } = await runCommand('init --help');
|
|
59
|
-
expect(stdout).toMatchInlineSnapshot(`
|
|
60
|
-
"Initialize a new Sanity Studio, project and/or app
|
|
61
|
-
|
|
62
|
-
USAGE
|
|
63
|
-
$ sanity init [--json] [--auto-updates | --bare] [--coupon
|
|
64
|
-
<code> | --project-plan <name>] [--create-project <name>] [--dataset <name>
|
|
65
|
-
| --dataset-default] [--env <filename> | ] [--git <message> | ] [--mcp]
|
|
66
|
-
[--nextjs-add-config-files] [--nextjs-append-env] [--nextjs-embed-studio]
|
|
67
|
-
[--organization <id>] [--output-path <path> | ] [--overwrite-files]
|
|
68
|
-
[--package-manager <manager> | ] [--project <id>] [--provider <provider>]
|
|
69
|
-
[--template <template> | ] [--typescript | ] [--visibility <mode>] [-y]
|
|
70
|
-
|
|
71
|
-
FLAGS
|
|
72
|
-
-y, --yes Unattended mode, answers "yes" to any
|
|
73
|
-
"yes/no" prompt and otherwise uses defaults
|
|
74
|
-
--[no-]auto-updates Enable auto updates of studio versions
|
|
75
|
-
--bare Skip the Studio initialization and only print
|
|
76
|
-
the selected project ID and dataset name to
|
|
77
|
-
stdout
|
|
78
|
-
--coupon=<code> Optionally select a coupon for a new project
|
|
79
|
-
(cannot be used with --project-plan)
|
|
80
|
-
--create-project=<name> Create a new project with the given name
|
|
81
|
-
--dataset=<name> Dataset name for the studio
|
|
82
|
-
--dataset-default Set up a project with a public dataset named
|
|
83
|
-
"production"
|
|
84
|
-
--env=<filename> Write environment variables to file
|
|
85
|
-
--[no-]git=<message> Specify a commit message for initial commit,
|
|
86
|
-
or disable git init
|
|
87
|
-
--[no-]mcp Enable AI editor integration (MCP) setup
|
|
88
|
-
--organization=<id> Organization ID to use for the project
|
|
89
|
-
--output-path=<path> Path to write studio project to
|
|
90
|
-
--overwrite-files Overwrite existing files
|
|
91
|
-
--package-manager=<manager> Specify which package manager to use
|
|
92
|
-
[allowed: npm, yarn, pnpm]
|
|
93
|
-
--project=<id> Project ID to use for the studio
|
|
94
|
-
--project-plan=<name> Optionally select a plan for a new project
|
|
95
|
-
--provider=<provider> Login provider to use
|
|
96
|
-
--template=<template> [default: clean] Project template to use
|
|
97
|
-
[default: "clean"]
|
|
98
|
-
--[no-]typescript Enable TypeScript support
|
|
99
|
-
--visibility=<mode> Visibility mode for dataset
|
|
100
|
-
|
|
101
|
-
GLOBAL FLAGS
|
|
102
|
-
--json Format output as json.
|
|
103
|
-
|
|
104
|
-
NEXT.JS FLAGS
|
|
105
|
-
--[no-]nextjs-add-config-files Add config files to Next.js project
|
|
106
|
-
--[no-]nextjs-append-env Append project ID and dataset to .env file
|
|
107
|
-
--[no-]nextjs-embed-studio Embed the Studio in Next.js application
|
|
108
|
-
|
|
109
|
-
DESCRIPTION
|
|
110
|
-
Initialize a new Sanity Studio, project and/or app
|
|
111
|
-
|
|
112
|
-
EXAMPLES
|
|
113
|
-
$ sanity init
|
|
114
|
-
|
|
115
|
-
Initialize a new project with a public dataset named "production"
|
|
116
|
-
|
|
117
|
-
$ sanity init --dataset-default
|
|
118
|
-
|
|
119
|
-
Initialize a project with the given project ID and dataset to the given path
|
|
120
|
-
|
|
121
|
-
$ sanity init -y --project abc123 --dataset production --output-path \\
|
|
122
|
-
~/myproj
|
|
123
|
-
|
|
124
|
-
Initialize a project with the given project ID and dataset using the moviedb
|
|
125
|
-
template to the given path
|
|
126
|
-
|
|
127
|
-
$ sanity init -y --project abc123 --dataset staging --template moviedb \\
|
|
128
|
-
--output-path .
|
|
129
|
-
|
|
130
|
-
Create a brand new project with name "Movies Unlimited"
|
|
131
|
-
|
|
132
|
-
$ sanity init -y --create-project "Movies Unlimited" --dataset moviedb \\
|
|
133
|
-
--visibility private --template moviedb --output-path \\
|
|
134
|
-
/Users/espenh/movies-unlimited
|
|
135
|
-
|
|
136
|
-
"
|
|
137
|
-
`);
|
|
138
|
-
});
|
|
139
|
-
test.each([
|
|
140
|
-
{
|
|
141
|
-
flag1: 'auto-updates',
|
|
142
|
-
flag2: 'bare'
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
flag1: 'coupon=123',
|
|
146
|
-
flag2: 'project-plan=123'
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
flag1: 'dataset="123',
|
|
150
|
-
flag2: 'dataset-default'
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
flag1: 'env=.env',
|
|
154
|
-
flag2: 'bare'
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
flag1: 'git=test',
|
|
158
|
-
flag2: 'bare'
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
flag1: 'no-git',
|
|
162
|
-
flag2: 'git=test'
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
flag1: 'output-path=/test-path',
|
|
166
|
-
flag2: 'bare'
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
flag1: 'package-manager=pnpm',
|
|
170
|
-
flag2: 'bare'
|
|
171
|
-
},
|
|
172
|
-
{
|
|
173
|
-
flag1: 'template=test',
|
|
174
|
-
flag2: 'bare'
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
flag1: 'typescript',
|
|
178
|
-
flag2: 'bare'
|
|
179
|
-
}
|
|
180
|
-
])('throws error when `$flag1` and `$flag2` flags are both passed', async ({ flag1, flag2 })=>{
|
|
181
|
-
const { error } = await testCommand(InitCommand, [
|
|
182
|
-
`--${flag1}`,
|
|
183
|
-
`--${flag2}`
|
|
184
|
-
]);
|
|
185
|
-
const [name1] = flag1.split('=');
|
|
186
|
-
const [name2, value2 = 'true'] = flag2.split('=');
|
|
187
|
-
expect(error?.message).toContain(`--${name2}=${value2} cannot also be provided when using --${name1}`);
|
|
188
|
-
});
|
|
189
|
-
test('throws error when `env` flag is passed with invalid value', async ()=>{
|
|
190
|
-
const { error } = await testCommand(InitCommand, [
|
|
191
|
-
'--env=invalid.txt'
|
|
192
|
-
]);
|
|
193
|
-
expect(error?.message).toContain('Env filename (`--env`) must start with `.env`');
|
|
194
|
-
});
|
|
195
|
-
test('throws error when `visibility` flag is passed with invalid option', async ()=>{
|
|
196
|
-
const { error } = await testCommand(InitCommand, [
|
|
197
|
-
'--visibility=opaque'
|
|
198
|
-
]);
|
|
199
|
-
expect(error?.message).toContain('Expected --visibility=opaque to be one of: public, private');
|
|
200
|
-
});
|
|
201
|
-
test('throws error when `package-manager` flag is passed with invalid option', async ()=>{
|
|
202
|
-
const { error } = await testCommand(InitCommand, [
|
|
203
|
-
'--package-manager=pnm'
|
|
204
|
-
]);
|
|
205
|
-
expect(error?.message).toContain('Expected --package-manager=pnm to be one of: npm, yarn, pnpm');
|
|
206
|
-
});
|
|
207
|
-
test('throws error when type argument is passed', async ()=>{
|
|
208
|
-
const { error } = await testCommand(InitCommand, [
|
|
209
|
-
'bad-argument'
|
|
210
|
-
]);
|
|
211
|
-
expect(error?.message).toContain('Unknown init type "bad-argument"');
|
|
212
|
-
});
|
|
213
|
-
test('throws deprecation error when type argument is passed with `plugin`', async ()=>{
|
|
214
|
-
const { error } = await testCommand(InitCommand, [
|
|
215
|
-
'plugin'
|
|
216
|
-
]);
|
|
217
|
-
expect(error?.message).toContain('Initializing plugins through the CLI is no longer supported');
|
|
218
|
-
});
|
|
219
|
-
test('throws deprecation error when type argument is passed with `plugin`', async ()=>{
|
|
220
|
-
const { error } = await testCommand(InitCommand, [
|
|
221
|
-
'plugin'
|
|
222
|
-
]);
|
|
223
|
-
expect(error?.message).toContain('Initializing plugins through the CLI is no longer supported');
|
|
224
|
-
});
|
|
225
|
-
test('throws error when `reconfigure` flag is passed', async ()=>{
|
|
226
|
-
const { error } = await testCommand(InitCommand, [
|
|
227
|
-
'--reconfigure'
|
|
228
|
-
]);
|
|
229
|
-
expect(error?.message).toContain('--reconfigure is deprecated - manual configuration is now required');
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
describe('framework detection', ()=>{
|
|
233
|
-
test('throws error when framework and remote template are used together', async ()=>{
|
|
234
|
-
mocks.detectFrameworkRecord.mockResolvedValue({
|
|
235
|
-
name: 'Next.js',
|
|
236
|
-
slug: 'nextjs'
|
|
237
|
-
});
|
|
238
|
-
const { error } = await testCommand(InitCommand, [
|
|
239
|
-
'--template=https://github.com/sanity-io/sanity'
|
|
240
|
-
]);
|
|
241
|
-
expect(error?.message).toContain('A remote template cannot be used with a detected framework. Detected: Next.js');
|
|
242
|
-
});
|
|
243
|
-
});
|
|
244
|
-
describe('retrieving plan', ()=>{
|
|
245
|
-
test('returns undefined when no plan or coupon is provided', async ()=>{
|
|
246
|
-
const { error } = await testCommand(InitCommand);
|
|
247
|
-
expect(error).toBeUndefined();
|
|
248
|
-
});
|
|
249
|
-
describe('coupon', ()=>{
|
|
250
|
-
test('validates coupon when --coupon flag is provided', async ()=>{
|
|
251
|
-
mocks.request.mockResolvedValueOnce([
|
|
252
|
-
{
|
|
253
|
-
id: 'test-plan-id'
|
|
254
|
-
}
|
|
255
|
-
]);
|
|
256
|
-
const { error, stdout } = await testCommand(InitCommand, [
|
|
257
|
-
'--coupon=TESTCOUPON123',
|
|
258
|
-
'--bare'
|
|
259
|
-
]);
|
|
260
|
-
expect(error).toBeUndefined();
|
|
261
|
-
expect(mocks.request).toHaveBeenCalledWith({
|
|
262
|
-
uri: 'plans/coupon/TESTCOUPON123'
|
|
263
|
-
});
|
|
264
|
-
expect(stdout).toContain('Coupon "TESTCOUPON123" validated!');
|
|
265
|
-
});
|
|
266
|
-
test('throws error if coupon not found with provided code', async ()=>{
|
|
267
|
-
mocks.request.mockResolvedValueOnce([]);
|
|
268
|
-
const { error } = await testCommand(InitCommand, [
|
|
269
|
-
'--coupon=TESTCOUPON123',
|
|
270
|
-
'--bare'
|
|
271
|
-
]);
|
|
272
|
-
expect(mocks.request).toHaveBeenCalledWith({
|
|
273
|
-
uri: 'plans/coupon/TESTCOUPON123'
|
|
274
|
-
});
|
|
275
|
-
expect(error?.message).toContain('Unable to validate coupon, please try again later:');
|
|
276
|
-
expect(error?.message).toContain('No plans found for coupon code "TESTCOUPON123"');
|
|
277
|
-
});
|
|
278
|
-
test('throws error if coupon does not have attached plan id', async ()=>{
|
|
279
|
-
mocks.request.mockResolvedValueOnce([
|
|
280
|
-
{
|
|
281
|
-
id: undefined
|
|
282
|
-
}
|
|
283
|
-
]);
|
|
284
|
-
const { error } = await testCommand(InitCommand, [
|
|
285
|
-
'--coupon=TESTCOUPON123',
|
|
286
|
-
'--bare'
|
|
287
|
-
]);
|
|
288
|
-
expect(mocks.request).toHaveBeenCalledWith({
|
|
289
|
-
uri: 'plans/coupon/TESTCOUPON123'
|
|
290
|
-
});
|
|
291
|
-
expect(error?.message).toContain('Unable to validate coupon, please try again later:');
|
|
292
|
-
expect(error?.message).toContain('Unable to find a plan from coupon code');
|
|
293
|
-
});
|
|
294
|
-
test('uses default plan when coupon does not exist and cli in unattended mode', async ()=>{
|
|
295
|
-
mocks.request.mockRejectedValueOnce(httpError);
|
|
296
|
-
const { error, stderr, stdout } = await testCommand(InitCommand, [
|
|
297
|
-
'--coupon=INVALID123',
|
|
298
|
-
'--yes'
|
|
299
|
-
]);
|
|
300
|
-
expect(error).toBe(undefined);
|
|
301
|
-
expect(stderr).toContain('Warning: Coupon "INVALID123" is not available - using default plan');
|
|
302
|
-
expect(stdout).toContain('Using default plan.');
|
|
303
|
-
});
|
|
304
|
-
test('uses default plan when user says confirms yes', async ()=>{
|
|
305
|
-
mocks.request.mockRejectedValueOnce(httpError);
|
|
306
|
-
mocks.confirm.mockResolvedValue(true);
|
|
307
|
-
const { error, stdout } = await testCommand(InitCommand, [
|
|
308
|
-
'--coupon=INVALID123'
|
|
309
|
-
]);
|
|
310
|
-
expect(error).toBeUndefined();
|
|
311
|
-
expect(mocks.confirm).toHaveBeenCalledWith({
|
|
312
|
-
default: true,
|
|
313
|
-
message: 'Coupon "INVALID123" is not available, use default plan instead?'
|
|
314
|
-
});
|
|
315
|
-
expect(stdout).toContain('Using default plan.');
|
|
316
|
-
});
|
|
317
|
-
test('throws error when user confirms no to use default plans', async ()=>{
|
|
318
|
-
mocks.request.mockRejectedValueOnce(httpError);
|
|
319
|
-
mocks.confirm.mockResolvedValue(false);
|
|
320
|
-
const { error } = await testCommand(InitCommand, [
|
|
321
|
-
'--coupon=INVALID123'
|
|
322
|
-
]);
|
|
323
|
-
expect(error?.message).toContain('Coupon "INVALID123" does not exist');
|
|
324
|
-
});
|
|
325
|
-
});
|
|
326
|
-
describe('plan', ()=>{
|
|
327
|
-
test('returns when client request for plan is successful', async ()=>{
|
|
328
|
-
mocks.request.mockResolvedValueOnce([
|
|
329
|
-
{
|
|
330
|
-
id: 'test-plan-id'
|
|
331
|
-
}
|
|
332
|
-
]);
|
|
333
|
-
const { error } = await testCommand(InitCommand, [
|
|
334
|
-
'--project-plan=growth'
|
|
335
|
-
]);
|
|
336
|
-
expect(error).toBeUndefined();
|
|
337
|
-
expect(mocks.request).toHaveBeenCalledWith({
|
|
338
|
-
uri: 'plans/growth'
|
|
339
|
-
});
|
|
340
|
-
});
|
|
341
|
-
test('throw error when no plan id is returned by request', async ()=>{
|
|
342
|
-
mocks.request.mockResolvedValueOnce([
|
|
343
|
-
{
|
|
344
|
-
id: undefined
|
|
345
|
-
}
|
|
346
|
-
]);
|
|
347
|
-
const { error } = await testCommand(InitCommand, [
|
|
348
|
-
'--project-plan=growth'
|
|
349
|
-
]);
|
|
350
|
-
expect(error?.message).toContain('Unable to validate plan, please try again later:');
|
|
351
|
-
expect(error?.message).toContain('Unable to find a plan with id growth');
|
|
352
|
-
});
|
|
353
|
-
test('uses default plan when plan id does not exist and cli in unattended mode', async ()=>{
|
|
354
|
-
mocks.request.mockRejectedValueOnce(httpError);
|
|
355
|
-
const { error, stderr, stdout } = await testCommand(InitCommand, [
|
|
356
|
-
'--project-plan=growth',
|
|
357
|
-
'--yes'
|
|
358
|
-
]);
|
|
359
|
-
expect(error).toBe(undefined);
|
|
360
|
-
expect(stderr).toContain('Warning: Project plan "growth" does not exist - using default plan');
|
|
361
|
-
expect(stdout).toContain('Using default plan.');
|
|
362
|
-
});
|
|
363
|
-
test('uses default plan when user says confirms yes', async ()=>{
|
|
364
|
-
process.stdin.isTTY = true;
|
|
365
|
-
mocks.request.mockRejectedValueOnce(httpError);
|
|
366
|
-
mocks.confirm.mockResolvedValue(true);
|
|
367
|
-
const { error, stdout } = await testCommand(InitCommand, [
|
|
368
|
-
'--project-plan=growth'
|
|
369
|
-
]);
|
|
370
|
-
expect(error).toBeUndefined();
|
|
371
|
-
expect(mocks.confirm).toHaveBeenCalledWith({
|
|
372
|
-
default: true,
|
|
373
|
-
message: 'Project plan "growth" does not exist, use default plan instead?'
|
|
374
|
-
});
|
|
375
|
-
expect(stdout).toContain('Using default plan.');
|
|
376
|
-
});
|
|
377
|
-
test('throws error when user says confirms no', async ()=>{
|
|
378
|
-
process.stdin.isTTY = true;
|
|
379
|
-
mocks.request.mockRejectedValueOnce(httpError);
|
|
380
|
-
mocks.confirm.mockResolvedValue(false);
|
|
381
|
-
const { error } = await testCommand(InitCommand, [
|
|
382
|
-
'--project-plan=growth'
|
|
383
|
-
]);
|
|
384
|
-
expect(error?.message).toContain('Plan id "growth" does not exist');
|
|
385
|
-
});
|
|
386
|
-
});
|
|
387
|
-
});
|
|
388
|
-
describe('authenticating', ()=>{
|
|
389
|
-
test('user is authenticated with valid token', async ()=>{
|
|
390
|
-
const { error, stdout } = await testCommand(InitCommand, []);
|
|
391
|
-
expect(error).toBeUndefined();
|
|
392
|
-
expect(stdout).toContain('You are logged in as test@example.com using SAML');
|
|
393
|
-
});
|
|
394
|
-
test('throws error user is authenticated with invlaid token in unattended mode', async ()=>{
|
|
395
|
-
mocks.getById.mockRejectedValueOnce('Invalid token');
|
|
396
|
-
const { error } = await testCommand(InitCommand, [
|
|
397
|
-
'--yes'
|
|
398
|
-
]);
|
|
399
|
-
expect(error?.message).toContain('Must be logged in to run this command in unattended mode, run `sanity login`');
|
|
400
|
-
});
|
|
401
|
-
test('calls login when token invalid and not in unattended mode', async ()=>{
|
|
402
|
-
process.stdin.isTTY = true;
|
|
403
|
-
mocks.getById.mockRejectedValueOnce('Invalid token');
|
|
404
|
-
const { error } = await testCommand(InitCommand, []);
|
|
405
|
-
expect(error).toBe(undefined);
|
|
406
|
-
expect(mocks.login).toHaveBeenCalled();
|
|
407
|
-
});
|
|
408
|
-
});
|
|
409
|
-
});
|
|
410
|
-
|
|
411
|
-
//# sourceMappingURL=init.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/__tests__/init.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {testCommand} from '@sanity/cli-test'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {InitCommand} from '../init'\n\nconst mocks = vi.hoisted(() => ({\n confirm: vi.fn(),\n detectFrameworkRecord: vi.fn(),\n getById: vi.fn().mockResolvedValue({\n email: 'test@example.com',\n id: 'user-123',\n name: 'Test User',\n provider: 'saml-123',\n }),\n login: vi.fn(),\n request: vi.fn(),\n}))\n\nvi.mock('@vercel/fs-detectors', () => ({\n detectFrameworkRecord: mocks.detectFrameworkRecord,\n LocalFileSystemDetector: vi.fn(),\n}))\n\nvi.mock('../../../../cli-core/src/services/apiClient.js', () => ({\n getGlobalCliClient: vi.fn().mockResolvedValue({\n request: mocks.request,\n users: {\n getById: mocks.getById,\n },\n }),\n}))\n\nvi.mock('../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('@sanity/cli-core/ux', () => ({\n confirm: mocks.confirm,\n}))\n\nvi.mock('../../actions/auth/login/index.js', () => ({\n login: mocks.login,\n}))\n\nvi.mock('../../../../cli-core/src/util/isInteractive.js', () => ({\n isInteractive: vi.fn().mockReturnValue(true),\n}))\n\nconst httpError = Object.assign(new Error('Not Found'), {\n message: 'Coupon not found',\n response: {\n body: {},\n headers: {},\n method: '',\n statusCode: 404,\n url: '',\n },\n statusCode: 404,\n})\n\ndescribe('#init', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n describe('oclif command setup', () => {\n test('--help works', async () => {\n const {stdout} = await runCommand('init --help')\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Initialize a new Sanity Studio, project and/or app\n\n USAGE\n $ sanity init [--json] [--auto-updates | --bare] [--coupon\n <code> | --project-plan <name>] [--create-project <name>] [--dataset <name>\n | --dataset-default] [--env <filename> | ] [--git <message> | ] [--mcp]\n [--nextjs-add-config-files] [--nextjs-append-env] [--nextjs-embed-studio]\n [--organization <id>] [--output-path <path> | ] [--overwrite-files]\n [--package-manager <manager> | ] [--project <id>] [--provider <provider>]\n [--template <template> | ] [--typescript | ] [--visibility <mode>] [-y]\n\n FLAGS\n -y, --yes Unattended mode, answers \"yes\" to any\n \"yes/no\" prompt and otherwise uses defaults\n --[no-]auto-updates Enable auto updates of studio versions\n --bare Skip the Studio initialization and only print\n the selected project ID and dataset name to\n stdout\n --coupon=<code> Optionally select a coupon for a new project\n (cannot be used with --project-plan)\n --create-project=<name> Create a new project with the given name\n --dataset=<name> Dataset name for the studio\n --dataset-default Set up a project with a public dataset named\n \"production\"\n --env=<filename> Write environment variables to file\n --[no-]git=<message> Specify a commit message for initial commit,\n or disable git init\n --[no-]mcp Enable AI editor integration (MCP) setup\n --organization=<id> Organization ID to use for the project\n --output-path=<path> Path to write studio project to\n --overwrite-files Overwrite existing files\n --package-manager=<manager> Specify which package manager to use\n [allowed: npm, yarn, pnpm]\n --project=<id> Project ID to use for the studio\n --project-plan=<name> Optionally select a plan for a new project\n --provider=<provider> Login provider to use\n --template=<template> [default: clean] Project template to use\n [default: \"clean\"]\n --[no-]typescript Enable TypeScript support\n --visibility=<mode> Visibility mode for dataset\n\n GLOBAL FLAGS\n --json Format output as json.\n\n NEXT.JS FLAGS\n --[no-]nextjs-add-config-files Add config files to Next.js project\n --[no-]nextjs-append-env Append project ID and dataset to .env file\n --[no-]nextjs-embed-studio Embed the Studio in Next.js application\n\n DESCRIPTION\n Initialize a new Sanity Studio, project and/or app\n\n EXAMPLES\n $ sanity init\n\n Initialize a new project with a public dataset named \"production\"\n\n $ sanity init --dataset-default\n\n Initialize a project with the given project ID and dataset to the given path\n\n $ sanity init -y --project abc123 --dataset production --output-path \\\\\n ~/myproj\n\n Initialize a project with the given project ID and dataset using the moviedb\n template to the given path\n\n $ sanity init -y --project abc123 --dataset staging --template moviedb \\\\\n --output-path .\n\n Create a brand new project with name \"Movies Unlimited\"\n\n $ sanity init -y --create-project \"Movies Unlimited\" --dataset moviedb \\\\\n --visibility private --template moviedb --output-path \\\\\n /Users/espenh/movies-unlimited\n\n \"\n `)\n })\n\n test.each([\n {flag1: 'auto-updates', flag2: 'bare'},\n {flag1: 'coupon=123', flag2: 'project-plan=123'},\n {flag1: 'dataset=\"123', flag2: 'dataset-default'},\n {flag1: 'env=.env', flag2: 'bare'},\n {flag1: 'git=test', flag2: 'bare'},\n {flag1: 'no-git', flag2: 'git=test'},\n {flag1: 'output-path=/test-path', flag2: 'bare'},\n {flag1: 'package-manager=pnpm', flag2: 'bare'},\n {flag1: 'template=test', flag2: 'bare'},\n {flag1: 'typescript', flag2: 'bare'},\n ])('throws error when `$flag1` and `$flag2` flags are both passed', async ({flag1, flag2}) => {\n const {error} = await testCommand(InitCommand, [`--${flag1}`, `--${flag2}`])\n\n const [name1] = flag1.split('=')\n const [name2, value2 = 'true'] = flag2.split('=')\n\n expect(error?.message).toContain(\n `--${name2}=${value2} cannot also be provided when using --${name1}`,\n )\n })\n\n test('throws error when `env` flag is passed with invalid value', async () => {\n const {error} = await testCommand(InitCommand, ['--env=invalid.txt'])\n\n expect(error?.message).toContain('Env filename (`--env`) must start with `.env`')\n })\n\n test('throws error when `visibility` flag is passed with invalid option', async () => {\n const {error} = await testCommand(InitCommand, ['--visibility=opaque'])\n\n expect(error?.message).toContain('Expected --visibility=opaque to be one of: public, private')\n })\n\n test('throws error when `package-manager` flag is passed with invalid option', async () => {\n const {error} = await testCommand(InitCommand, ['--package-manager=pnm'])\n\n expect(error?.message).toContain(\n 'Expected --package-manager=pnm to be one of: npm, yarn, pnpm',\n )\n })\n\n test('throws error when type argument is passed', async () => {\n const {error} = await testCommand(InitCommand, ['bad-argument'])\n\n expect(error?.message).toContain('Unknown init type \"bad-argument\"')\n })\n\n test('throws deprecation error when type argument is passed with `plugin`', async () => {\n const {error} = await testCommand(InitCommand, ['plugin'])\n\n expect(error?.message).toContain(\n 'Initializing plugins through the CLI is no longer supported',\n )\n })\n\n test('throws deprecation error when type argument is passed with `plugin`', async () => {\n const {error} = await testCommand(InitCommand, ['plugin'])\n\n expect(error?.message).toContain(\n 'Initializing plugins through the CLI is no longer supported',\n )\n })\n\n test('throws error when `reconfigure` flag is passed', async () => {\n const {error} = await testCommand(InitCommand, ['--reconfigure'])\n\n expect(error?.message).toContain(\n '--reconfigure is deprecated - manual configuration is now required',\n )\n })\n })\n\n describe('framework detection', () => {\n test('throws error when framework and remote template are used together', async () => {\n mocks.detectFrameworkRecord.mockResolvedValue({\n name: 'Next.js',\n slug: 'nextjs',\n })\n\n const {error} = await testCommand(InitCommand, [\n '--template=https://github.com/sanity-io/sanity',\n ])\n\n expect(error?.message).toContain(\n 'A remote template cannot be used with a detected framework. Detected: Next.js',\n )\n })\n })\n\n describe('retrieving plan', () => {\n test('returns undefined when no plan or coupon is provided', async () => {\n const {error} = await testCommand(InitCommand)\n\n expect(error).toBeUndefined()\n })\n\n describe('coupon', () => {\n test('validates coupon when --coupon flag is provided', async () => {\n mocks.request.mockResolvedValueOnce([{id: 'test-plan-id'}])\n\n const {error, stdout} = await testCommand(InitCommand, ['--coupon=TESTCOUPON123', '--bare'])\n\n expect(error).toBeUndefined()\n expect(mocks.request).toHaveBeenCalledWith({uri: 'plans/coupon/TESTCOUPON123'})\n expect(stdout).toContain('Coupon \"TESTCOUPON123\" validated!')\n })\n\n test('throws error if coupon not found with provided code', async () => {\n mocks.request.mockResolvedValueOnce([])\n\n const {error} = await testCommand(InitCommand, ['--coupon=TESTCOUPON123', '--bare'])\n\n expect(mocks.request).toHaveBeenCalledWith({uri: 'plans/coupon/TESTCOUPON123'})\n expect(error?.message).toContain('Unable to validate coupon, please try again later:')\n expect(error?.message).toContain('No plans found for coupon code \"TESTCOUPON123\"')\n })\n\n test('throws error if coupon does not have attached plan id', async () => {\n mocks.request.mockResolvedValueOnce([{id: undefined}])\n\n const {error} = await testCommand(InitCommand, ['--coupon=TESTCOUPON123', '--bare'])\n\n expect(mocks.request).toHaveBeenCalledWith({uri: 'plans/coupon/TESTCOUPON123'})\n expect(error?.message).toContain('Unable to validate coupon, please try again later:')\n expect(error?.message).toContain('Unable to find a plan from coupon code')\n })\n\n test('uses default plan when coupon does not exist and cli in unattended mode', async () => {\n mocks.request.mockRejectedValueOnce(httpError)\n\n const {error, stderr, stdout} = await testCommand(InitCommand, [\n '--coupon=INVALID123',\n '--yes',\n ])\n\n expect(error).toBe(undefined)\n expect(stderr).toContain(\n 'Warning: Coupon \"INVALID123\" is not available - using default plan',\n )\n expect(stdout).toContain('Using default plan.')\n })\n\n test('uses default plan when user says confirms yes', async () => {\n mocks.request.mockRejectedValueOnce(httpError)\n mocks.confirm.mockResolvedValue(true)\n\n const {error, stdout} = await testCommand(InitCommand, ['--coupon=INVALID123'])\n\n expect(error).toBeUndefined()\n expect(mocks.confirm).toHaveBeenCalledWith({\n default: true,\n message: 'Coupon \"INVALID123\" is not available, use default plan instead?',\n })\n expect(stdout).toContain('Using default plan.')\n })\n\n test('throws error when user confirms no to use default plans', async () => {\n mocks.request.mockRejectedValueOnce(httpError)\n mocks.confirm.mockResolvedValue(false)\n\n const {error} = await testCommand(InitCommand, ['--coupon=INVALID123'])\n\n expect(error?.message).toContain('Coupon \"INVALID123\" does not exist')\n })\n })\n\n describe('plan', () => {\n test('returns when client request for plan is successful', async () => {\n mocks.request.mockResolvedValueOnce([{id: 'test-plan-id'}])\n\n const {error} = await testCommand(InitCommand, ['--project-plan=growth'])\n\n expect(error).toBeUndefined()\n expect(mocks.request).toHaveBeenCalledWith({uri: 'plans/growth'})\n })\n\n test('throw error when no plan id is returned by request', async () => {\n mocks.request.mockResolvedValueOnce([{id: undefined}])\n\n const {error} = await testCommand(InitCommand, ['--project-plan=growth'])\n expect(error?.message).toContain('Unable to validate plan, please try again later:')\n expect(error?.message).toContain('Unable to find a plan with id growth')\n })\n\n test('uses default plan when plan id does not exist and cli in unattended mode', async () => {\n mocks.request.mockRejectedValueOnce(httpError)\n\n const {error, stderr, stdout} = await testCommand(InitCommand, [\n '--project-plan=growth',\n '--yes',\n ])\n\n expect(error).toBe(undefined)\n expect(stderr).toContain(\n 'Warning: Project plan \"growth\" does not exist - using default plan',\n )\n expect(stdout).toContain('Using default plan.')\n })\n\n test('uses default plan when user says confirms yes', async () => {\n process.stdin.isTTY = true\n mocks.request.mockRejectedValueOnce(httpError)\n mocks.confirm.mockResolvedValue(true)\n\n const {error, stdout} = await testCommand(InitCommand, ['--project-plan=growth'])\n\n expect(error).toBeUndefined()\n expect(mocks.confirm).toHaveBeenCalledWith({\n default: true,\n message: 'Project plan \"growth\" does not exist, use default plan instead?',\n })\n expect(stdout).toContain('Using default plan.')\n })\n\n test('throws error when user says confirms no', async () => {\n process.stdin.isTTY = true\n mocks.request.mockRejectedValueOnce(httpError)\n mocks.confirm.mockResolvedValue(false)\n\n const {error} = await testCommand(InitCommand, ['--project-plan=growth'])\n\n expect(error?.message).toContain('Plan id \"growth\" does not exist')\n })\n })\n })\n\n describe('authenticating', () => {\n test('user is authenticated with valid token', async () => {\n const {error, stdout} = await testCommand(InitCommand, [])\n\n expect(error).toBeUndefined()\n expect(stdout).toContain('You are logged in as test@example.com using SAML')\n })\n\n test('throws error user is authenticated with invlaid token in unattended mode', async () => {\n mocks.getById.mockRejectedValueOnce('Invalid token')\n\n const {error} = await testCommand(InitCommand, ['--yes'])\n\n expect(error?.message).toContain(\n 'Must be logged in to run this command in unattended mode, run `sanity login`',\n )\n })\n\n test('calls login when token invalid and not in unattended mode', async () => {\n process.stdin.isTTY = true\n mocks.getById.mockRejectedValueOnce('Invalid token')\n\n const {error} = await testCommand(InitCommand, [])\n\n expect(error).toBe(undefined)\n expect(mocks.login).toHaveBeenCalled()\n })\n })\n})\n"],"names":["runCommand","testCommand","afterEach","describe","expect","test","vi","InitCommand","mocks","hoisted","confirm","fn","detectFrameworkRecord","getById","mockResolvedValue","email","id","name","provider","login","request","mock","LocalFileSystemDetector","getGlobalCliClient","users","getCliToken","isInteractive","mockReturnValue","httpError","Object","assign","Error","message","response","body","headers","method","statusCode","url","clearAllMocks","stdout","toMatchInlineSnapshot","each","flag1","flag2","error","name1","split","name2","value2","toContain","slug","toBeUndefined","mockResolvedValueOnce","toHaveBeenCalledWith","uri","undefined","mockRejectedValueOnce","stderr","toBe","default","process","stdin","isTTY","toHaveBeenCalled"],"mappings":"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"}
|