@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,10 +1,10 @@
|
|
|
1
1
|
import { chalk } from '@sanity/cli-core/ux';
|
|
2
|
+
import { deleteSchema } from '../../services/schemas.js';
|
|
2
3
|
import { isDefined } from '../manifest/schemaTypeHelpers.js';
|
|
3
4
|
import { ensureManifestExtractSatisfied } from './utils/manifestExtractor.js';
|
|
4
5
|
import { createManifestReader } from './utils/manifestReader.js';
|
|
5
|
-
import { createSchemaApiClient } from './utils/schemaApiClient.js';
|
|
6
6
|
import { getDatasetsOutString, getStringList } from './utils/schemaStoreOutStrings.js';
|
|
7
|
-
import { filterLogReadProjectIdMismatch
|
|
7
|
+
import { filterLogReadProjectIdMismatch } from './utils/schemaStoreValidation.js';
|
|
8
8
|
// Native implementation instead of lodash/uniq
|
|
9
9
|
function uniq(array) {
|
|
10
10
|
return [
|
|
@@ -28,36 +28,31 @@ class DeleteIdError extends Error {
|
|
|
28
28
|
* All schema store actions require a manifest to exist, so we regenerate it by default.
|
|
29
29
|
* Manifest generation can be optionally disabled with --no-manifest-extract.
|
|
30
30
|
* In this case the command uses and existing file or throws when missing.
|
|
31
|
-
*/ export async function deleteSchemaAction(
|
|
32
|
-
const { dataset, extractManifest, ids, manifestDir, verbose } =
|
|
33
|
-
const { apiClient, jsonReader, manifestExtractor, output } = context;
|
|
34
|
-
// prettier-ignore
|
|
31
|
+
*/ export async function deleteSchemaAction(options) {
|
|
32
|
+
const { dataset, extractManifest, ids, manifestDir, output, projectId, verbose, workDir } = options;
|
|
35
33
|
if (!await ensureManifestExtractSatisfied({
|
|
36
34
|
extractManifest,
|
|
37
35
|
manifestDir,
|
|
38
|
-
manifestExtractor,
|
|
39
36
|
output,
|
|
40
|
-
schemaRequired: true
|
|
37
|
+
schemaRequired: true,
|
|
38
|
+
workDir
|
|
41
39
|
})) {
|
|
42
40
|
return 'failure';
|
|
43
41
|
}
|
|
44
|
-
const { client, projectId } = await createSchemaApiClient(apiClient);
|
|
45
42
|
const manifest = await createManifestReader({
|
|
46
|
-
jsonReader,
|
|
47
43
|
manifestDir,
|
|
48
|
-
output
|
|
44
|
+
output,
|
|
45
|
+
workDir
|
|
49
46
|
}).getManifest();
|
|
50
47
|
const workspaces = manifest.workspaces.filter((workspace)=>!dataset || workspace.dataset === dataset).filter((workspace)=>filterLogReadProjectIdMismatch(workspace, projectId, output));
|
|
51
48
|
const datasets = uniq(workspaces.map((w)=>w.dataset));
|
|
52
49
|
const results = await Promise.allSettled(datasets.flatMap((targetDataset)=>{
|
|
53
50
|
return ids.map(async ({ schemaId })=>{
|
|
54
51
|
try {
|
|
55
|
-
const deletedSchema = await
|
|
56
|
-
dataset: targetDataset
|
|
57
|
-
}).delete(schemaId);
|
|
52
|
+
const deletedSchema = await deleteSchema(targetDataset, projectId, schemaId);
|
|
58
53
|
return {
|
|
59
54
|
dataset: targetDataset,
|
|
60
|
-
deleted: deletedSchema.
|
|
55
|
+
deleted: deletedSchema.deleted,
|
|
61
56
|
schemaId
|
|
62
57
|
};
|
|
63
58
|
} catch (err) {
|
|
@@ -72,11 +67,11 @@ class DeleteIdError extends Error {
|
|
|
72
67
|
const deleteFailureIds = uniq(results.filter((r)=>r.status === 'rejected').map((result)=>{
|
|
73
68
|
const error = result.reason;
|
|
74
69
|
if (error instanceof DeleteIdError) {
|
|
75
|
-
output.
|
|
70
|
+
output.warn(chalk.red([
|
|
76
71
|
`Failed to delete schema "${error.id}" in dataset "${error.dataset}":`,
|
|
77
72
|
error.message
|
|
78
73
|
].join('\n')));
|
|
79
|
-
if (verbose) output.
|
|
74
|
+
if (verbose) output.warn(error);
|
|
80
75
|
return error.id;
|
|
81
76
|
}
|
|
82
77
|
//hubris inc: given the try-catch wrapping the full promise "this should never happen"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/schema/deleteSchemaAction.ts"],"sourcesContent":["import {chalk} from '@sanity/cli-core/ux'\n\nimport {isDefined} from '../manifest/schemaTypeHelpers.js'\nimport {type SchemaStoreActionResult
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/schema/deleteSchemaAction.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {deleteSchema} from '../../services/schemas.js'\nimport {isDefined} from '../manifest/schemaTypeHelpers.js'\nimport {type SchemaStoreActionResult} from './schemaStoreTypes.js'\nimport {ensureManifestExtractSatisfied} from './utils/manifestExtractor.js'\nimport {createManifestReader} from './utils/manifestReader.js'\nimport {getDatasetsOutString, getStringList} from './utils/schemaStoreOutStrings.js'\nimport {\n filterLogReadProjectIdMismatch,\n type WorkspaceSchemaId,\n} from './utils/schemaStoreValidation.js'\n\n// Native implementation instead of lodash/uniq\nfunction uniq<T>(array: T[]): T[] {\n return [...new Set(array)]\n}\n\ninterface DeleteSchemasOptions {\n extractManifest: boolean\n ids: WorkspaceSchemaId[]\n manifestDir: string\n output: Output\n projectId: string\n verbose: boolean\n workDir: string\n\n dataset?: string\n}\n\ninterface DeleteResult {\n dataset: string\n deleted: boolean\n schemaId: string\n}\n\nclass DeleteIdError extends Error {\n public dataset: string\n public id: string\n constructor(id: string, dataset: string, options?: ErrorOptions) {\n super((options?.cause as {message?: string})?.message, options)\n this.name = 'DeleteIdError'\n this.id = id\n this.dataset = dataset\n }\n}\n\n/**\n * Deletes all stored schemas matching --ids in workspace datasets.\n *\n * Workspaces are determined by on-disk manifest file – not directly from sanity.config.\n * All schema store actions require a manifest to exist, so we regenerate it by default.\n * Manifest generation can be optionally disabled with --no-manifest-extract.\n * In this case the command uses and existing file or throws when missing.\n */\nexport async function deleteSchemaAction(\n options: DeleteSchemasOptions,\n): Promise<SchemaStoreActionResult> {\n const {dataset, extractManifest, ids, manifestDir, output, projectId, verbose, workDir} = options\n\n if (\n !(await ensureManifestExtractSatisfied({\n extractManifest,\n manifestDir,\n output,\n schemaRequired: true,\n workDir,\n }))\n ) {\n return 'failure'\n }\n\n const manifest = await createManifestReader({\n manifestDir,\n output,\n workDir,\n }).getManifest()\n\n const workspaces = manifest.workspaces\n .filter((workspace) => !dataset || workspace.dataset === dataset)\n .filter((workspace) => filterLogReadProjectIdMismatch(workspace, projectId, output))\n\n const datasets = uniq(workspaces.map((w) => w.dataset))\n\n const results = await Promise.allSettled(\n datasets.flatMap((targetDataset: string) => {\n return ids.map(async ({schemaId}): Promise<DeleteResult> => {\n try {\n const deletedSchema = await deleteSchema(targetDataset, projectId, schemaId)\n return {dataset: targetDataset, deleted: deletedSchema.deleted, schemaId}\n } catch (err) {\n throw new DeleteIdError(schemaId, targetDataset, {cause: err})\n }\n })\n }),\n )\n\n const deletedIds = results\n .filter((r): r is PromiseFulfilledResult<DeleteResult> => r.status === 'fulfilled')\n .filter((r) => r.value.deleted)\n .map((r) => r.value)\n\n const notFound = uniq(\n results\n .filter((r): r is PromiseFulfilledResult<DeleteResult> => r.status === 'fulfilled')\n .filter((r) => !r.value.deleted)\n .filter((r) => !deletedIds.map(({schemaId}) => schemaId).includes(r.value.schemaId))\n .map((r) => r.value.schemaId),\n )\n\n const deleteFailureIds = uniq(\n results\n .filter((r) => r.status === 'rejected')\n .map((result) => {\n const error = result.reason\n if (error instanceof DeleteIdError) {\n output.warn(\n chalk.red(\n [\n `Failed to delete schema \"${error.id}\" in dataset \"${error.dataset}\":`,\n error.message,\n ].join('\\n'),\n ),\n )\n if (verbose) output.warn(error)\n return error.id\n }\n //hubris inc: given the try-catch wrapping the full promise \"this should never happen\"\n throw error\n }),\n )\n\n // Compare unique schema IDs deleted vs requested (not total deletions across datasets)\n const uniqueDeletedSchemaIds = uniq(deletedIds.map(({schemaId}) => schemaId))\n const success = uniqueDeletedSchemaIds.length === ids.length\n if (success) {\n output.log(`Successfully deleted ${uniqueDeletedSchemaIds.length}/${ids.length} schemas`)\n } else {\n output.error(\n [\n `Deleted ${uniqueDeletedSchemaIds.length}/${ids.length} schemas.`,\n deletedIds.length > 0\n ? `Successfully deleted ids:\\n${deletedIds\n .map(\n ({dataset: targetDataset, schemaId}) =>\n `- \"${schemaId}\" (in ${getDatasetsOutString([targetDataset])})`,\n )\n .join('\\n')}`\n : undefined,\n notFound.length > 0\n ? `Ids not found in ${getDatasetsOutString(datasets)}:\\n${getStringList(notFound)}`\n : undefined,\n ...(deleteFailureIds.length > 0\n ? [`Failed to delete ids:\\n${getStringList(deleteFailureIds)}`, 'Check logs for errors.']\n : []),\n ]\n .filter((item) => isDefined(item))\n .join('\\n'),\n )\n }\n\n return success ? 'success' : 'failure'\n}\n"],"names":["chalk","deleteSchema","isDefined","ensureManifestExtractSatisfied","createManifestReader","getDatasetsOutString","getStringList","filterLogReadProjectIdMismatch","uniq","array","Set","DeleteIdError","Error","dataset","id","options","cause","message","name","deleteSchemaAction","extractManifest","ids","manifestDir","output","projectId","verbose","workDir","schemaRequired","manifest","getManifest","workspaces","filter","workspace","datasets","map","w","results","Promise","allSettled","flatMap","targetDataset","schemaId","deletedSchema","deleted","err","deletedIds","r","status","value","notFound","includes","deleteFailureIds","result","error","reason","warn","red","join","uniqueDeletedSchemaIds","success","length","log","undefined","item"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Output } from '@sanity/cli-core';
|
|
2
|
+
import { type SchemaStoreActionResult } from './schemaStoreTypes.js';
|
|
3
|
+
interface DeploySchemasOptions {
|
|
4
|
+
extractManifest: boolean;
|
|
5
|
+
manifestDir: string;
|
|
6
|
+
output: Output;
|
|
7
|
+
verbose: boolean;
|
|
8
|
+
workDir: string;
|
|
9
|
+
manifestSafe?: boolean;
|
|
10
|
+
schemaRequired?: boolean;
|
|
11
|
+
tag?: string;
|
|
12
|
+
workspaceName?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function deploySchemas(options: DeploySchemasOptions): Promise<SchemaStoreActionResult>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { chalk } from '@sanity/cli-core/ux';
|
|
2
|
+
import { updateSchemas } from '../../services/schemas.js';
|
|
3
|
+
import { CURRENT_WORKSPACE_SCHEMA_VERSION } from '../manifest/types.js';
|
|
4
|
+
import { schemasDeployDebug } from './utils/debug.js';
|
|
5
|
+
import { ensureManifestExtractSatisfied } from './utils/manifestExtractor.js';
|
|
6
|
+
import { createManifestReader } from './utils/manifestReader.js';
|
|
7
|
+
import { FlagValidationError, SCHEMA_PERMISSION_HELP_TEXT } from './utils/schemaStoreValidation.js';
|
|
8
|
+
import { getWorkspaceSchemaId } from './utils/workspaceSchemaId.js';
|
|
9
|
+
export async function deploySchemas(options) {
|
|
10
|
+
const { extractManifest, manifestDir, manifestSafe, output, schemaRequired, tag, verbose, workDir, workspaceName } = options;
|
|
11
|
+
if (!await ensureManifestExtractSatisfied({
|
|
12
|
+
extractManifest,
|
|
13
|
+
manifestDir,
|
|
14
|
+
manifestSafe,
|
|
15
|
+
output,
|
|
16
|
+
schemaRequired,
|
|
17
|
+
workDir
|
|
18
|
+
})) {
|
|
19
|
+
return 'failure';
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const manifestReader = await createManifestReader({
|
|
23
|
+
manifestDir,
|
|
24
|
+
output,
|
|
25
|
+
workDir
|
|
26
|
+
});
|
|
27
|
+
const manifest = await manifestReader.getManifest();
|
|
28
|
+
const workspaces = manifest.workspaces.filter((workspace)=>!workspaceName || workspace.name === workspaceName);
|
|
29
|
+
if (workspaces.length === 0) {
|
|
30
|
+
const error = workspaceName ? new FlagValidationError(`Found no workspaces named "${workspaceName}"`) : new Error('Workspace array in manifest is empty.');
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
const updateSchema = getUpdateSchema({
|
|
34
|
+
manifestReader,
|
|
35
|
+
output,
|
|
36
|
+
tag,
|
|
37
|
+
verbose
|
|
38
|
+
});
|
|
39
|
+
/* Known caveat: we _don't_ rollback failed operations or partial success */ const results = await Promise.allSettled(workspaces.map(async (workspace)=>{
|
|
40
|
+
await updateSchema(workspace);
|
|
41
|
+
}));
|
|
42
|
+
const fulfilledUpdates = results.filter((result)=>result.status === 'fulfilled');
|
|
43
|
+
const rejectedUpdates = results.filter((result)=>result.status === 'rejected');
|
|
44
|
+
if (rejectedUpdates.length > 0) {
|
|
45
|
+
throw new Error(`Failed to deploy ${rejectedUpdates.length}/${workspaces.length} schemas. Successfully deployed ${fulfilledUpdates.length}/${workspaces.length} schemas.`);
|
|
46
|
+
}
|
|
47
|
+
output.log(`Deployed ${fulfilledUpdates.length}/${workspaces.length} schemas`);
|
|
48
|
+
return 'success';
|
|
49
|
+
} catch (err) {
|
|
50
|
+
if (schemaRequired || err instanceof FlagValidationError) {
|
|
51
|
+
output.error(err.message);
|
|
52
|
+
} else {
|
|
53
|
+
output.error(`↳ Error when storing schemas:\n ${err.message}`);
|
|
54
|
+
}
|
|
55
|
+
schemasDeployDebug('Error updating schemas', err.message);
|
|
56
|
+
return 'failure';
|
|
57
|
+
} finally{
|
|
58
|
+
output.log(`${chalk.gray('↳ List deployed schemas with:')} ${chalk.cyan('sanity schema list')}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function getUpdateSchema(args) {
|
|
62
|
+
const { manifestReader, output, tag, verbose } = args;
|
|
63
|
+
return async (workspace)=>{
|
|
64
|
+
const { dataset, projectId } = workspace;
|
|
65
|
+
const { idWarning, safeBaseId: id } = getWorkspaceSchemaId({
|
|
66
|
+
tag,
|
|
67
|
+
workspaceName: workspace.name
|
|
68
|
+
});
|
|
69
|
+
if (idWarning) output.warn(idWarning);
|
|
70
|
+
try {
|
|
71
|
+
const schema = await manifestReader.getWorkspaceSchema(workspace.name);
|
|
72
|
+
await updateSchemas(dataset, projectId, [
|
|
73
|
+
{
|
|
74
|
+
// the API will stringify the schema – we send as JSON
|
|
75
|
+
schema,
|
|
76
|
+
tag,
|
|
77
|
+
version: CURRENT_WORKSPACE_SCHEMA_VERSION,
|
|
78
|
+
workspace: {
|
|
79
|
+
name: workspace.name,
|
|
80
|
+
title: workspace.title
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
]);
|
|
84
|
+
if (verbose) {
|
|
85
|
+
output.log(chalk.gray(`↳ schemaId: ${id}, projectId: ${projectId}, dataset: ${dataset}`));
|
|
86
|
+
}
|
|
87
|
+
} catch (err) {
|
|
88
|
+
if ('statusCode' in err && err?.statusCode === 401) {
|
|
89
|
+
output.warn(`↳ No permissions to write schema for workspace "${workspace.name}" in dataset "${workspace.dataset}". ${SCHEMA_PERMISSION_HELP_TEXT}:\n ${chalk.red(`${err.message}`)}`);
|
|
90
|
+
} else {
|
|
91
|
+
output.error(`↳ Error deploying schema for workspace "${workspace.name}":\n ${chalk.red(`${err.message}`)}`);
|
|
92
|
+
}
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=deploySchemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/schema/deploySchemas.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {type DeploySchemaCommand} from '../../commands/schema/deploy'\nimport {updateSchemas} from '../../services/schemas.js'\nimport {\n CURRENT_WORKSPACE_SCHEMA_VERSION,\n type ManifestWorkspaceFile,\n type StoredWorkspaceSchema,\n} from '../manifest/types.js'\nimport {type SchemaStoreActionResult} from './schemaStoreTypes.js'\nimport {schemasDeployDebug} from './utils/debug.js'\nimport {ensureManifestExtractSatisfied} from './utils/manifestExtractor.js'\nimport {type CreateManifestReader, createManifestReader} from './utils/manifestReader.js'\nimport {FlagValidationError, SCHEMA_PERMISSION_HELP_TEXT} from './utils/schemaStoreValidation.js'\nimport {getWorkspaceSchemaId} from './utils/workspaceSchemaId.js'\n\ninterface DeploySchemasOptions {\n extractManifest: boolean\n manifestDir: string\n output: Output\n verbose: boolean\n workDir: string\n\n manifestSafe?: boolean\n schemaRequired?: boolean\n tag?: string\n workspaceName?: string\n}\n\nexport async function deploySchemas(\n options: DeploySchemasOptions,\n): Promise<SchemaStoreActionResult> {\n const {\n extractManifest,\n manifestDir,\n manifestSafe,\n output,\n schemaRequired,\n tag,\n verbose,\n workDir,\n workspaceName,\n } = options\n\n if (\n !(await ensureManifestExtractSatisfied({\n extractManifest,\n manifestDir,\n manifestSafe,\n output,\n schemaRequired,\n workDir,\n }))\n ) {\n return 'failure'\n }\n\n try {\n const manifestReader = await createManifestReader({\n manifestDir,\n output,\n workDir,\n })\n const manifest = await manifestReader.getManifest()\n const workspaces = manifest.workspaces.filter(\n (workspace) => !workspaceName || workspace.name === workspaceName,\n )\n\n if (workspaces.length === 0) {\n const error = workspaceName\n ? new FlagValidationError(`Found no workspaces named \"${workspaceName}\"`)\n : new Error('Workspace array in manifest is empty.')\n throw error\n }\n\n const updateSchema = getUpdateSchema({\n manifestReader,\n output,\n tag,\n verbose,\n })\n\n /* Known caveat: we _don't_ rollback failed operations or partial success */\n const results = await Promise.allSettled(\n workspaces.map(async (workspace: ManifestWorkspaceFile): Promise<void> => {\n await updateSchema(workspace)\n }),\n )\n\n const fulfilledUpdates = results.filter((result) => result.status === 'fulfilled')\n const rejectedUpdates = results.filter((result) => result.status === 'rejected')\n\n if (rejectedUpdates.length > 0) {\n throw new Error(\n `Failed to deploy ${rejectedUpdates.length}/${workspaces.length} schemas. Successfully deployed ${fulfilledUpdates.length}/${workspaces.length} schemas.`,\n )\n }\n\n output.log(`Deployed ${fulfilledUpdates.length}/${workspaces.length} schemas`)\n return 'success'\n } catch (err) {\n if (schemaRequired || err instanceof FlagValidationError) {\n output.error(err.message)\n } else {\n output.error(`↳ Error when storing schemas:\\n ${err.message}`)\n }\n schemasDeployDebug('Error updating schemas', err.message)\n return 'failure'\n } finally {\n output.log(`${chalk.gray('↳ List deployed schemas with:')} ${chalk.cyan('sanity schema list')}`)\n }\n}\n\nfunction getUpdateSchema(args: {\n manifestReader: CreateManifestReader\n output: DeploySchemaCommand['flags']['output']\n tag?: string\n verbose: boolean\n}): (workspace: ManifestWorkspaceFile) => Promise<void> {\n const {manifestReader, output, tag, verbose} = args\n\n return async (workspace) => {\n const {dataset, projectId} = workspace\n\n const {idWarning, safeBaseId: id} = getWorkspaceSchemaId({\n tag,\n workspaceName: workspace.name,\n })\n\n if (idWarning) output.warn(idWarning)\n\n try {\n const schema = await manifestReader.getWorkspaceSchema(workspace.name)\n\n await updateSchemas<Omit<StoredWorkspaceSchema, '_id' | '_type'>[]>(dataset, projectId, [\n {\n // the API will stringify the schema – we send as JSON\n schema,\n tag,\n version: CURRENT_WORKSPACE_SCHEMA_VERSION,\n workspace: {\n name: workspace.name,\n title: workspace.title,\n },\n },\n ])\n\n if (verbose) {\n output.log(chalk.gray(`↳ schemaId: ${id}, projectId: ${projectId}, dataset: ${dataset}`))\n }\n } catch (err) {\n if ('statusCode' in err && err?.statusCode === 401) {\n output.warn(\n `↳ No permissions to write schema for workspace \"${workspace.name}\" in dataset \"${workspace.dataset}\". ${\n SCHEMA_PERMISSION_HELP_TEXT\n }:\\n ${chalk.red(`${err.message}`)}`,\n )\n } else {\n output.error(\n `↳ Error deploying schema for workspace \"${workspace.name}\":\\n ${chalk.red(`${err.message}`)}`,\n )\n }\n\n throw err\n }\n }\n}\n"],"names":["chalk","updateSchemas","CURRENT_WORKSPACE_SCHEMA_VERSION","schemasDeployDebug","ensureManifestExtractSatisfied","createManifestReader","FlagValidationError","SCHEMA_PERMISSION_HELP_TEXT","getWorkspaceSchemaId","deploySchemas","options","extractManifest","manifestDir","manifestSafe","output","schemaRequired","tag","verbose","workDir","workspaceName","manifestReader","manifest","getManifest","workspaces","filter","workspace","name","length","error","Error","updateSchema","getUpdateSchema","results","Promise","allSettled","map","fulfilledUpdates","result","status","rejectedUpdates","log","err","message","gray","cyan","args","dataset","projectId","idWarning","safeBaseId","id","warn","schema","getWorkspaceSchema","version","title","statusCode","red"],"mappings":"AACA,SAAQA,KAAK,QAAO,sBAAqB;AAGzC,SAAQC,aAAa,QAAO,4BAA2B;AACvD,SACEC,gCAAgC,QAG3B,uBAAsB;AAE7B,SAAQC,kBAAkB,QAAO,mBAAkB;AACnD,SAAQC,8BAA8B,QAAO,+BAA8B;AAC3E,SAAmCC,oBAAoB,QAAO,4BAA2B;AACzF,SAAQC,mBAAmB,EAAEC,2BAA2B,QAAO,mCAAkC;AACjG,SAAQC,oBAAoB,QAAO,+BAA8B;AAejE,OAAO,eAAeC,cACpBC,OAA6B;IAE7B,MAAM,EACJC,eAAe,EACfC,WAAW,EACXC,YAAY,EACZC,MAAM,EACNC,cAAc,EACdC,GAAG,EACHC,OAAO,EACPC,OAAO,EACPC,aAAa,EACd,GAAGT;IAEJ,IACE,CAAE,MAAMN,+BAA+B;QACrCO;QACAC;QACAC;QACAC;QACAC;QACAG;IACF,IACA;QACA,OAAO;IACT;IAEA,IAAI;QACF,MAAME,iBAAiB,MAAMf,qBAAqB;YAChDO;YACAE;YACAI;QACF;QACA,MAAMG,WAAW,MAAMD,eAAeE,WAAW;QACjD,MAAMC,aAAaF,SAASE,UAAU,CAACC,MAAM,CAC3C,CAACC,YAAc,CAACN,iBAAiBM,UAAUC,IAAI,KAAKP;QAGtD,IAAII,WAAWI,MAAM,KAAK,GAAG;YAC3B,MAAMC,QAAQT,gBACV,IAAIb,oBAAoB,CAAC,2BAA2B,EAAEa,cAAc,CAAC,CAAC,IACtE,IAAIU,MAAM;YACd,MAAMD;QACR;QAEA,MAAME,eAAeC,gBAAgB;YACnCX;YACAN;YACAE;YACAC;QACF;QAEA,0EAA0E,GAC1E,MAAMe,UAAU,MAAMC,QAAQC,UAAU,CACtCX,WAAWY,GAAG,CAAC,OAAOV;YACpB,MAAMK,aAAaL;QACrB;QAGF,MAAMW,mBAAmBJ,QAAQR,MAAM,CAAC,CAACa,SAAWA,OAAOC,MAAM,KAAK;QACtE,MAAMC,kBAAkBP,QAAQR,MAAM,CAAC,CAACa,SAAWA,OAAOC,MAAM,KAAK;QAErE,IAAIC,gBAAgBZ,MAAM,GAAG,GAAG;YAC9B,MAAM,IAAIE,MACR,CAAC,iBAAiB,EAAEU,gBAAgBZ,MAAM,CAAC,CAAC,EAAEJ,WAAWI,MAAM,CAAC,gCAAgC,EAAES,iBAAiBT,MAAM,CAAC,CAAC,EAAEJ,WAAWI,MAAM,CAAC,SAAS,CAAC;QAE7J;QAEAb,OAAO0B,GAAG,CAAC,CAAC,SAAS,EAAEJ,iBAAiBT,MAAM,CAAC,CAAC,EAAEJ,WAAWI,MAAM,CAAC,QAAQ,CAAC;QAC7E,OAAO;IACT,EAAE,OAAOc,KAAK;QACZ,IAAI1B,kBAAkB0B,eAAenC,qBAAqB;YACxDQ,OAAOc,KAAK,CAACa,IAAIC,OAAO;QAC1B,OAAO;YACL5B,OAAOc,KAAK,CAAC,CAAC,iCAAiC,EAAEa,IAAIC,OAAO,EAAE;QAChE;QACAvC,mBAAmB,0BAA0BsC,IAAIC,OAAO;QACxD,OAAO;IACT,SAAU;QACR5B,OAAO0B,GAAG,CAAC,GAAGxC,MAAM2C,IAAI,CAAC,iCAAiC,CAAC,EAAE3C,MAAM4C,IAAI,CAAC,uBAAuB;IACjG;AACF;AAEA,SAASb,gBAAgBc,IAKxB;IACC,MAAM,EAACzB,cAAc,EAAEN,MAAM,EAAEE,GAAG,EAAEC,OAAO,EAAC,GAAG4B;IAE/C,OAAO,OAAOpB;QACZ,MAAM,EAACqB,OAAO,EAAEC,SAAS,EAAC,GAAGtB;QAE7B,MAAM,EAACuB,SAAS,EAAEC,YAAYC,EAAE,EAAC,GAAG1C,qBAAqB;YACvDQ;YACAG,eAAeM,UAAUC,IAAI;QAC/B;QAEA,IAAIsB,WAAWlC,OAAOqC,IAAI,CAACH;QAE3B,IAAI;YACF,MAAMI,SAAS,MAAMhC,eAAeiC,kBAAkB,CAAC5B,UAAUC,IAAI;YAErE,MAAMzB,cAA8D6C,SAASC,WAAW;gBACtF;oBACE,sDAAsD;oBACtDK;oBACApC;oBACAsC,SAASpD;oBACTuB,WAAW;wBACTC,MAAMD,UAAUC,IAAI;wBACpB6B,OAAO9B,UAAU8B,KAAK;oBACxB;gBACF;aACD;YAED,IAAItC,SAAS;gBACXH,OAAO0B,GAAG,CAACxC,MAAM2C,IAAI,CAAC,CAAC,YAAY,EAAEO,GAAG,aAAa,EAAEH,UAAU,WAAW,EAAED,SAAS;YACzF;QACF,EAAE,OAAOL,KAAK;YACZ,IAAI,gBAAgBA,OAAOA,KAAKe,eAAe,KAAK;gBAClD1C,OAAOqC,IAAI,CACT,CAAC,gDAAgD,EAAE1B,UAAUC,IAAI,CAAC,cAAc,EAAED,UAAUqB,OAAO,CAAC,GAAG,EACrGvC,4BACD,KAAK,EAAEP,MAAMyD,GAAG,CAAC,GAAGhB,IAAIC,OAAO,EAAE,GAAG;YAEzC,OAAO;gBACL5B,OAAOc,KAAK,CACV,CAAC,wCAAwC,EAAEH,UAAUC,IAAI,CAAC,MAAM,EAAE1B,MAAMyD,GAAG,CAAC,GAAGhB,IAAIC,OAAO,EAAE,GAAG;YAEnG;YAEA,MAAMD;QACR;IACF;AACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Output } from '@sanity/cli-core';
|
|
2
|
+
import { type SchemaStoreActionResult } from './schemaStoreTypes.js';
|
|
3
|
+
interface ListSchemasOptions {
|
|
4
|
+
extractManifest: boolean;
|
|
5
|
+
json: boolean;
|
|
6
|
+
manifestDir: string;
|
|
7
|
+
output: Output;
|
|
8
|
+
workDir: string;
|
|
9
|
+
id?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function listSchemas(options: ListSchemasOptions): Promise<SchemaStoreActionResult>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { chalk } from '@sanity/cli-core/ux';
|
|
2
|
+
import { getSchemas } from '../../services/schemas.js';
|
|
3
|
+
import { isDefined } from '../manifest/schemaTypeHelpers.js';
|
|
4
|
+
import { schemasListDebug } from './utils/debug.js';
|
|
5
|
+
import { ensureManifestExtractSatisfied } from './utils/manifestExtractor.js';
|
|
6
|
+
import { createManifestReader } from './utils/manifestReader.js';
|
|
7
|
+
import { getDatasetsOutString } from './utils/schemaStoreOutStrings.js';
|
|
8
|
+
import { SCHEMA_PERMISSION_HELP_TEXT } from './utils/schemaStoreValidation.js';
|
|
9
|
+
import { uniqByProjectIdDataset } from './utils/uniqByProjectIdDataset.js';
|
|
10
|
+
class DatasetError extends Error {
|
|
11
|
+
dataset;
|
|
12
|
+
projectId;
|
|
13
|
+
constructor(args){
|
|
14
|
+
super(args.options?.cause?.message, args.options);
|
|
15
|
+
this.projectId = args.projectId;
|
|
16
|
+
this.dataset = args.dataset;
|
|
17
|
+
this.name = 'DatasetError';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function listSchemas(options) {
|
|
21
|
+
const { extractManifest, id, json, manifestDir, output, workDir } = options;
|
|
22
|
+
if (!await ensureManifestExtractSatisfied({
|
|
23
|
+
extractManifest,
|
|
24
|
+
manifestDir,
|
|
25
|
+
output,
|
|
26
|
+
schemaRequired: true,
|
|
27
|
+
workDir
|
|
28
|
+
})) {
|
|
29
|
+
return 'failure';
|
|
30
|
+
}
|
|
31
|
+
const manifest = await createManifestReader({
|
|
32
|
+
manifestDir,
|
|
33
|
+
output,
|
|
34
|
+
workDir
|
|
35
|
+
}).getManifest();
|
|
36
|
+
const projectDatasets = uniqByProjectIdDataset(manifest.workspaces);
|
|
37
|
+
const schemas = await getDatasetSchemas(projectDatasets, id);
|
|
38
|
+
const parsedSchemas = parseSchemas(schemas, output);
|
|
39
|
+
if (parsedSchemas.length === 0) {
|
|
40
|
+
const datasetString = getDatasetsOutString(projectDatasets.map((dataset)=>dataset.dataset));
|
|
41
|
+
output.error(id ? `Schema for id "${id}" not found in ${datasetString}` : `No schemas found in ${datasetString}`);
|
|
42
|
+
schemasListDebug('Error finding schema');
|
|
43
|
+
return 'failure';
|
|
44
|
+
}
|
|
45
|
+
if (json) {
|
|
46
|
+
output.log(`${JSON.stringify(id ? parsedSchemas[0] : parsedSchemas, null, 2)}`);
|
|
47
|
+
} else {
|
|
48
|
+
printSchemas({
|
|
49
|
+
manifest,
|
|
50
|
+
output,
|
|
51
|
+
schemas: parsedSchemas
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return 'success';
|
|
55
|
+
}
|
|
56
|
+
async function getDatasetSchemas(projectDatasets, id) {
|
|
57
|
+
return await Promise.allSettled(projectDatasets.map(async ({ dataset, projectId })=>{
|
|
58
|
+
try {
|
|
59
|
+
return await getSchemas(dataset, projectId, id);
|
|
60
|
+
} catch (error) {
|
|
61
|
+
throw new DatasetError({
|
|
62
|
+
dataset,
|
|
63
|
+
options: {
|
|
64
|
+
cause: error
|
|
65
|
+
},
|
|
66
|
+
projectId
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
function parseSchemas(schemas, output) {
|
|
72
|
+
return schemas.map((schema)=>{
|
|
73
|
+
if (schema.status === 'fulfilled') return schema.value;
|
|
74
|
+
const error = schema.reason;
|
|
75
|
+
if (error instanceof DatasetError) {
|
|
76
|
+
if ('cause' in error && error.cause && typeof error.cause === 'object' && 'statusCode' in error.cause && error.cause.statusCode === 401) {
|
|
77
|
+
output.warn(`↳ No permissions to read schema from "${error.dataset}". ${SCHEMA_PERMISSION_HELP_TEXT}:\n ${chalk.red(`${error.message}`)}`);
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
const message = chalk.red(`↳ Failed to fetch schema from "${error.dataset}":\n ${error.message}`);
|
|
81
|
+
output.error(message);
|
|
82
|
+
} else {
|
|
83
|
+
//hubris inc: given the try-catch wrapping all the full promise "this should never happen"
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
}).filter((schema)=>isDefined(schema)).flat();
|
|
87
|
+
}
|
|
88
|
+
function printSchemas({ manifest, output, schemas }) {
|
|
89
|
+
const rows = schemas.toSorted((a, b)=>-(a._createdAt || '').localeCompare(b._createdAt || '')).map(({ _createdAt: createdAt, _id: id, workspace })=>{
|
|
90
|
+
const workspaceData = manifest.workspaces.find((w)=>w.name === workspace.name);
|
|
91
|
+
if (!workspaceData) return;
|
|
92
|
+
return [
|
|
93
|
+
id,
|
|
94
|
+
workspace.name,
|
|
95
|
+
workspaceData.dataset,
|
|
96
|
+
workspaceData.projectId,
|
|
97
|
+
createdAt
|
|
98
|
+
].map(String);
|
|
99
|
+
}).filter((schema)=>isDefined(schema));
|
|
100
|
+
const headings = [
|
|
101
|
+
'Id',
|
|
102
|
+
'Workspace',
|
|
103
|
+
'Dataset',
|
|
104
|
+
'ProjectId',
|
|
105
|
+
'CreatedAt'
|
|
106
|
+
];
|
|
107
|
+
const maxWidths = headings.map((heading, i)=>{
|
|
108
|
+
const widths = [
|
|
109
|
+
...rows.map((row)=>row[i].length),
|
|
110
|
+
heading.length
|
|
111
|
+
];
|
|
112
|
+
return Math.max(...widths);
|
|
113
|
+
});
|
|
114
|
+
const rowToString = (row)=>row.map((col, i)=>`${col}`.padEnd(maxWidths[i])).join(' ');
|
|
115
|
+
output.log(chalk.cyan(rowToString(headings)));
|
|
116
|
+
for (const row of rows)output.log(rowToString(row));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
//# sourceMappingURL=listSchemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/schema/listSchemas.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {type ListSchemaCommand} from '../../commands/schema/list.js'\nimport {getSchemas} from '../../services/schemas.js'\nimport {isDefined} from '../manifest/schemaTypeHelpers.js'\nimport {\n type CreateManifest,\n type ManifestWorkspaceFile,\n type StoredWorkspaceSchema,\n} from '../manifest/types.js'\nimport {type SchemaStoreActionResult} from './schemaStoreTypes.js'\nimport {schemasListDebug} from './utils/debug.js'\nimport {ensureManifestExtractSatisfied} from './utils/manifestExtractor.js'\nimport {createManifestReader} from './utils/manifestReader.js'\nimport {getDatasetsOutString} from './utils/schemaStoreOutStrings.js'\nimport {SCHEMA_PERMISSION_HELP_TEXT} from './utils/schemaStoreValidation.js'\nimport {uniqByProjectIdDataset} from './utils/uniqByProjectIdDataset.js'\n\ninterface ListSchemasOptions {\n extractManifest: boolean\n json: boolean\n manifestDir: string\n output: Output\n workDir: string\n\n id?: string\n}\n\nclass DatasetError extends Error {\n public dataset: string\n public projectId: string\n constructor(args: {dataset: string; options?: ErrorOptions; projectId: string}) {\n super((args.options?.cause as {message?: string})?.message, args.options)\n this.projectId = args.projectId\n this.dataset = args.dataset\n this.name = 'DatasetError'\n }\n}\n\nexport async function listSchemas(options: ListSchemasOptions): Promise<SchemaStoreActionResult> {\n const {extractManifest, id, json, manifestDir, output, workDir} = options\n\n if (\n !(await ensureManifestExtractSatisfied({\n extractManifest,\n manifestDir,\n output,\n schemaRequired: true,\n workDir,\n }))\n ) {\n return 'failure'\n }\n\n const manifest = await createManifestReader({\n manifestDir,\n output,\n workDir,\n }).getManifest()\n const projectDatasets = uniqByProjectIdDataset(manifest.workspaces)\n const schemas = (await getDatasetSchemas(projectDatasets, id)) as unknown as (\n | PromiseFulfilledResult<StoredWorkspaceSchema>\n | PromiseRejectedResult\n )[]\n const parsedSchemas = parseSchemas(schemas, output) as unknown as StoredWorkspaceSchema[]\n\n if (parsedSchemas.length === 0) {\n const datasetString = getDatasetsOutString(projectDatasets.map((dataset) => dataset.dataset))\n\n output.error(\n id\n ? `Schema for id \"${id}\" not found in ${datasetString}`\n : `No schemas found in ${datasetString}`,\n )\n\n schemasListDebug('Error finding schema')\n return 'failure'\n }\n\n if (json) {\n output.log(`${JSON.stringify(id ? parsedSchemas[0] : parsedSchemas, null, 2)}`)\n } else {\n printSchemas({manifest, output, schemas: parsedSchemas})\n }\n\n return 'success'\n}\n\nasync function getDatasetSchemas(\n projectDatasets: ManifestWorkspaceFile[],\n id?: ListSchemaCommand['flags']['id'],\n) {\n return await Promise.allSettled(\n projectDatasets.map(async ({dataset, projectId}) => {\n try {\n return await getSchemas(dataset, projectId, id)\n } catch (error) {\n throw new DatasetError({dataset, options: {cause: error}, projectId})\n }\n }),\n )\n}\n\nfunction parseSchemas(\n schemas: (PromiseFulfilledResult<StoredWorkspaceSchema> | PromiseRejectedResult)[],\n output: Output,\n) {\n return schemas\n .map((schema) => {\n if (schema.status === 'fulfilled') return schema.value\n\n const error = schema.reason\n\n if (error instanceof DatasetError) {\n if (\n 'cause' in error &&\n error.cause &&\n typeof error.cause === 'object' &&\n 'statusCode' in error.cause &&\n error.cause.statusCode === 401\n ) {\n output.warn(\n `↳ No permissions to read schema from \"${error.dataset}\". ${\n SCHEMA_PERMISSION_HELP_TEXT\n }:\\n ${chalk.red(`${error.message}`)}`,\n )\n return []\n }\n\n const message = chalk.red(\n `↳ Failed to fetch schema from \"${error.dataset}\":\\n ${error.message}`,\n )\n output.error(message)\n } else {\n //hubris inc: given the try-catch wrapping all the full promise \"this should never happen\"\n throw error\n }\n })\n .filter((schema) => isDefined(schema))\n .flat()\n}\n\nfunction printSchemas({\n manifest,\n output,\n schemas,\n}: {\n manifest: CreateManifest\n output: Output\n schemas: StoredWorkspaceSchema[]\n}) {\n const rows = schemas\n .toSorted((a, b) => -(a._createdAt || '').localeCompare(b._createdAt || ''))\n .map(({_createdAt: createdAt, _id: id, workspace}) => {\n const workspaceData = manifest.workspaces.find((w) => w.name === workspace.name)\n\n if (!workspaceData) return\n\n return [id, workspace.name, workspaceData.dataset, workspaceData.projectId, createdAt].map(\n String,\n )\n })\n .filter((schema) => isDefined(schema))\n\n const headings = ['Id', 'Workspace', 'Dataset', 'ProjectId', 'CreatedAt']\n\n const maxWidths = headings.map((heading, i) => {\n const widths = [...rows.map((row) => row[i].length), heading.length]\n return Math.max(...widths)\n })\n\n const rowToString = (row: string[]) =>\n row.map((col, i) => `${col}`.padEnd(maxWidths[i])).join(' ')\n\n output.log(chalk.cyan(rowToString(headings)))\n for (const row of rows) output.log(rowToString(row))\n}\n"],"names":["chalk","getSchemas","isDefined","schemasListDebug","ensureManifestExtractSatisfied","createManifestReader","getDatasetsOutString","SCHEMA_PERMISSION_HELP_TEXT","uniqByProjectIdDataset","DatasetError","Error","dataset","projectId","args","options","cause","message","name","listSchemas","extractManifest","id","json","manifestDir","output","workDir","schemaRequired","manifest","getManifest","projectDatasets","workspaces","schemas","getDatasetSchemas","parsedSchemas","parseSchemas","length","datasetString","map","error","log","JSON","stringify","printSchemas","Promise","allSettled","schema","status","value","reason","statusCode","warn","red","filter","flat","rows","toSorted","a","b","_createdAt","localeCompare","createdAt","_id","workspace","workspaceData","find","w","String","headings","maxWidths","heading","i","widths","row","Math","max","rowToString","col","padEnd","join","cyan"],"mappings":"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"}
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
import { type Output } from '@sanity/cli-core';
|
|
2
|
-
import { type SanityClient } from '@sanity/client';
|
|
3
|
-
import { type ManifestExtractor } from './utils/manifestExtractor';
|
|
4
|
-
import { type ManifestJsonReader } from './utils/manifestReader';
|
|
5
|
-
export interface SchemaStoreContext {
|
|
6
|
-
apiClient: () => Promise<SanityClient>;
|
|
7
|
-
manifestExtractor: ManifestExtractor;
|
|
8
|
-
output: Output;
|
|
9
|
-
workDir: string;
|
|
10
|
-
jsonReader?: ManifestJsonReader;
|
|
11
|
-
}
|
|
12
1
|
/**
|
|
13
2
|
* There is more context locally to decide how and when to log, depending on flags;
|
|
14
3
|
* we therefore let actions log as soon as possible, possibly stopping stack unwinding.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/actions/schema/schemaStoreTypes.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/actions/schema/schemaStoreTypes.ts"],"sourcesContent":["/**\n * There is more context locally to decide how and when to log, depending on flags;\n * we therefore let actions log as soon as possible, possibly stopping stack unwinding.\n * This gives us more control over the color and detail of the error message, as well as ensuring\n * we dont double-log errors up the chain.\n *\n * Depending on flags, store actions can fail without throwing; to allow control flow to continue,\n * even in the face of failure (--schema-required ture/false for store)\n *\n * It is up to action to make this distinction based on flags.\n *\n * However, we _do_ want to ensure correct exit code on commands (0 vs 1), so\n * CLI command chains are stopped if a store command fails.\n *\n * Invalid flags will always throw.\n *\n */\nexport type SchemaStoreActionResult = 'failure' | 'success'\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;CAgBC,GACD,WAA2D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/schema/utils/debug.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core'\n\nexport const schemasDeployDebug = subdebug('schemas:deploy')\nexport const schemasListDebug = subdebug('schemas:list')\n"],"names":["subdebug","schemasDeployDebug","schemasListDebug"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,mBAAkB;AAEzC,OAAO,MAAMC,qBAAqBD,SAAS,kBAAiB;AAC5D,OAAO,MAAME,mBAAmBF,SAAS,gBAAe"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { type Output } from '@sanity/cli-core';
|
|
2
|
-
export type ManifestExtractor = (manifestDir: string) => Promise<void>;
|
|
3
2
|
export declare function ensureManifestExtractSatisfied(args: {
|
|
4
3
|
extractManifest: boolean;
|
|
5
4
|
manifestDir: string;
|
|
6
|
-
|
|
5
|
+
manifestSafe?: boolean;
|
|
7
6
|
output: Output;
|
|
8
|
-
schemaRequired
|
|
9
|
-
}): Promise<boolean>;
|
|
10
|
-
export declare function createManifestExtractor(context: {
|
|
11
|
-
output: Output;
|
|
12
|
-
safe?: boolean;
|
|
7
|
+
schemaRequired?: boolean;
|
|
13
8
|
workDir: string;
|
|
14
|
-
}):
|
|
9
|
+
}): Promise<boolean>;
|
|
@@ -2,13 +2,23 @@ import { chalk } from '@sanity/cli-core/ux';
|
|
|
2
2
|
import { extractManifestSafe } from '../../manifest/extractManifest.js';
|
|
3
3
|
import { FlagValidationError } from './schemaStoreValidation.js';
|
|
4
4
|
export async function ensureManifestExtractSatisfied(args) {
|
|
5
|
-
const { extractManifest, manifestDir,
|
|
5
|
+
const { extractManifest, manifestDir, manifestSafe, output, schemaRequired, workDir } = args;
|
|
6
6
|
if (!extractManifest) {
|
|
7
7
|
return true;
|
|
8
8
|
}
|
|
9
9
|
try {
|
|
10
10
|
// a successful manifest extract will write a new manifest file, which manifestReader will then read from disk
|
|
11
|
-
await
|
|
11
|
+
const error = await extractManifestSafe({
|
|
12
|
+
flags: {
|
|
13
|
+
json: false,
|
|
14
|
+
path: manifestDir
|
|
15
|
+
},
|
|
16
|
+
output,
|
|
17
|
+
workDir
|
|
18
|
+
});
|
|
19
|
+
if (!manifestSafe && error) {
|
|
20
|
+
throw error;
|
|
21
|
+
}
|
|
12
22
|
return true;
|
|
13
23
|
} catch (err) {
|
|
14
24
|
if (schemaRequired || err instanceof FlagValidationError) {
|
|
@@ -19,20 +29,5 @@ export async function ensureManifestExtractSatisfied(args) {
|
|
|
19
29
|
}
|
|
20
30
|
}
|
|
21
31
|
}
|
|
22
|
-
export function createManifestExtractor(context) {
|
|
23
|
-
return async (manifestDir)=>{
|
|
24
|
-
const error = await extractManifestSafe({
|
|
25
|
-
flags: {
|
|
26
|
-
json: false,
|
|
27
|
-
path: manifestDir
|
|
28
|
-
},
|
|
29
|
-
output: context.output,
|
|
30
|
-
workDir: context.workDir
|
|
31
|
-
});
|
|
32
|
-
if (!context.safe && error) {
|
|
33
|
-
throw error;
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
32
|
|
|
38
33
|
//# sourceMappingURL=manifestExtractor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/actions/schema/utils/manifestExtractor.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {extractManifestSafe} from '../../manifest/extractManifest.js'\nimport {FlagValidationError} from './schemaStoreValidation.js'\n\nexport
|
|
1
|
+
{"version":3,"sources":["../../../../src/actions/schema/utils/manifestExtractor.ts"],"sourcesContent":["import {type Output} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\n\nimport {extractManifestSafe} from '../../manifest/extractManifest.js'\nimport {FlagValidationError} from './schemaStoreValidation.js'\n\nexport async function ensureManifestExtractSatisfied(args: {\n extractManifest: boolean\n manifestDir: string\n manifestSafe?: boolean\n output: Output\n schemaRequired?: boolean\n workDir: string\n}) {\n const {extractManifest, manifestDir, manifestSafe, output, schemaRequired, workDir} = args\n if (!extractManifest) {\n return true\n }\n try {\n // a successful manifest extract will write a new manifest file, which manifestReader will then read from disk\n const error = await extractManifestSafe({\n flags: {json: false, path: manifestDir},\n output,\n workDir,\n })\n\n if (!manifestSafe && error) {\n throw error\n }\n\n return true\n } catch (err) {\n if (schemaRequired || err instanceof FlagValidationError) {\n throw err\n } else {\n output.log(chalk.gray(`↳ Failed to extract manifest:\\n ${err.message}`))\n return false\n }\n }\n}\n"],"names":["chalk","extractManifestSafe","FlagValidationError","ensureManifestExtractSatisfied","args","extractManifest","manifestDir","manifestSafe","output","schemaRequired","workDir","error","flags","json","path","err","log","gray","message"],"mappings":"AACA,SAAQA,KAAK,QAAO,sBAAqB;AAEzC,SAAQC,mBAAmB,QAAO,oCAAmC;AACrE,SAAQC,mBAAmB,QAAO,6BAA4B;AAE9D,OAAO,eAAeC,+BAA+BC,IAOpD;IACC,MAAM,EAACC,eAAe,EAAEC,WAAW,EAAEC,YAAY,EAAEC,MAAM,EAAEC,cAAc,EAAEC,OAAO,EAAC,GAAGN;IACtF,IAAI,CAACC,iBAAiB;QACpB,OAAO;IACT;IACA,IAAI;QACF,8GAA8G;QAC9G,MAAMM,QAAQ,MAAMV,oBAAoB;YACtCW,OAAO;gBAACC,MAAM;gBAAOC,MAAMR;YAAW;YACtCE;YACAE;QACF;QAEA,IAAI,CAACH,gBAAgBI,OAAO;YAC1B,MAAMA;QACR;QAEA,OAAO;IACT,EAAE,OAAOI,KAAK;QACZ,IAAIN,kBAAkBM,eAAeb,qBAAqB;YACxD,MAAMa;QACR,OAAO;YACLP,OAAOQ,GAAG,CAAChB,MAAMiB,IAAI,CAAC,CAAC,iCAAiC,EAAEF,IAAIG,OAAO,EAAE;YACvE,OAAO;QACT;IACF;AACF"}
|
|
@@ -1,24 +1,17 @@
|
|
|
1
1
|
import { type Output } from '@sanity/cli-core';
|
|
2
2
|
import { type CreateManifest, type ManifestSchemaType } from '../../manifest/types.js';
|
|
3
|
-
|
|
4
|
-
export type CreateManifestReaderFactory = (args: {
|
|
5
|
-
jsonReader?: <T>(filePath: string) => Promise<JsonFileParseSuccess<T> | undefined>;
|
|
3
|
+
type CreateManifestReaderFactory = (args: {
|
|
6
4
|
manifestDir: string;
|
|
7
5
|
output: Output;
|
|
6
|
+
workDir: string;
|
|
8
7
|
}) => CreateManifestReader;
|
|
9
8
|
export interface CreateManifestReader {
|
|
10
9
|
getManifest: () => Promise<CreateManifest>;
|
|
11
10
|
getWorkspaceSchema: (workspaceName: string) => Promise<ManifestSchemaType[]>;
|
|
12
11
|
}
|
|
13
|
-
interface JsonFileParseSuccess<T> {
|
|
14
|
-
lastModified: string;
|
|
15
|
-
parsedJson: T;
|
|
16
|
-
path: string;
|
|
17
|
-
}
|
|
18
12
|
/**
|
|
19
13
|
* The manifest reader will try to read manifest and workspace schema files _once_ and cache a successful result.
|
|
20
14
|
* If you need to re-read the manifest from disk, create a new instance.
|
|
21
15
|
*/
|
|
22
16
|
export declare const createManifestReader: CreateManifestReaderFactory;
|
|
23
|
-
export declare function resolveManifestDirectory(workDir: string, customPath?: string): string;
|
|
24
17
|
export {};
|
|
@@ -5,17 +5,18 @@ import { MANIFEST_FILENAME } from '../../manifest/extractManifest.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* The manifest reader will try to read manifest and workspace schema files _once_ and cache a successful result.
|
|
7
7
|
* If you need to re-read the manifest from disk, create a new instance.
|
|
8
|
-
*/ export const createManifestReader = ({
|
|
8
|
+
*/ export const createManifestReader = ({ manifestDir, output, workDir })=>{
|
|
9
9
|
let parsedManifest;
|
|
10
10
|
const parsedWorkspaces = {};
|
|
11
11
|
const getManifest = async ()=>{
|
|
12
12
|
if (parsedManifest) {
|
|
13
13
|
return parsedManifest?.parsedJson;
|
|
14
14
|
}
|
|
15
|
-
const
|
|
16
|
-
const
|
|
15
|
+
const staticPath = resolve(join(workDir, manifestDir));
|
|
16
|
+
const manifestFile = path.join(staticPath, MANIFEST_FILENAME);
|
|
17
|
+
const result = await parseJsonFile(manifestFile);
|
|
17
18
|
if (!result) {
|
|
18
|
-
throw new Error(`Manifest does not exist at ${manifestFile}. To create the manifest file, omit --no
|
|
19
|
+
throw new Error(`Manifest does not exist at ${manifestFile}. To create the manifest file, omit --no-extract-manifest or run "sanity manifest extract" first.`);
|
|
19
20
|
}
|
|
20
21
|
output.log(chalk.gray(`↳ Read manifest from ${manifestFile} (last modified: ${result.lastModified})`));
|
|
21
22
|
parsedManifest = result;
|
|
@@ -34,7 +35,7 @@ import { MANIFEST_FILENAME } from '../../manifest/extractManifest.js';
|
|
|
34
35
|
throw new Error(`No workspace named "${workspaceName}" found in manifest.`);
|
|
35
36
|
}
|
|
36
37
|
const workspaceSchemaFile = path.join(manifestDir, workspaceManifest.schema);
|
|
37
|
-
const result = await
|
|
38
|
+
const result = await parseJsonFile(workspaceSchemaFile);
|
|
38
39
|
if (!result) {
|
|
39
40
|
throw new Error(`Workspace schema file at "${workspaceSchemaFile}" does not exist.`);
|
|
40
41
|
}
|
|
@@ -46,13 +47,6 @@ import { MANIFEST_FILENAME } from '../../manifest/extractManifest.js';
|
|
|
46
47
|
getWorkspaceSchema
|
|
47
48
|
};
|
|
48
49
|
};
|
|
49
|
-
export function resolveManifestDirectory(workDir, customPath) {
|
|
50
|
-
const defaultOutputDir = resolve(join(workDir, 'dist'));
|
|
51
|
-
const outputDir = resolve(defaultOutputDir);
|
|
52
|
-
const defaultStaticPath = join(outputDir, 'static');
|
|
53
|
-
const staticPath = customPath ?? defaultStaticPath;
|
|
54
|
-
return path.resolve(process.cwd(), staticPath);
|
|
55
|
-
}
|
|
56
50
|
async function parseJsonFile(filePath) {
|
|
57
51
|
let stats;
|
|
58
52
|
try {
|