@sanity/cli 6.0.0-alpha.3 → 6.0.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/auth/login/{index.js → login.js} +1 -1
- package/dist/actions/auth/login/{index.js.map → login.js.map} +1 -1
- package/dist/actions/dev/startStudioDevServer.js +3 -8
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/dev/types.d.ts +1 -3
- package/dist/actions/dev/types.js.map +1 -1
- package/dist/actions/documents/validate.d.ts +0 -2
- package/dist/actions/documents/validate.js +21 -1
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/actions/exec/execScript.js +1 -1
- package/dist/actions/exec/execScript.js.map +1 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
- package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
- package/dist/actions/manifest/extractManifest.js +1 -4
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/organizations/getOrganizationChoices.d.ts +6 -0
- package/dist/actions/organizations/getOrganizationChoices.js +23 -0
- package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +2 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
- package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
- package/dist/actions/organizations/hasProjectAttachGrant.d.ts +1 -0
- package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
- package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
- package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
- package/dist/actions/schema/deleteSchemaAction.js +12 -17
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
- package/dist/actions/schema/deploySchemas.d.ts +15 -0
- package/dist/actions/schema/deploySchemas.js +98 -0
- package/dist/actions/schema/deploySchemas.js.map +1 -0
- package/dist/actions/schema/listSchemas.d.ts +12 -0
- package/dist/actions/schema/listSchemas.js +119 -0
- package/dist/actions/schema/listSchemas.js.map +1 -0
- package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
- package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
- package/dist/actions/schema/utils/debug.d.ts +2 -0
- package/dist/actions/schema/utils/debug.js +5 -0
- package/dist/actions/schema/utils/debug.js.map +1 -0
- package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
- package/dist/actions/schema/utils/manifestExtractor.js +12 -17
- package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
- package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
- package/dist/actions/schema/utils/manifestReader.js +6 -12
- package/dist/actions/schema/utils/manifestReader.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
- package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
- package/dist/actions/schema/utils/schemaStoreValidation.js +40 -127
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
- package/dist/actions/users/getMembersForProject.d.ts +1 -3
- package/dist/actions/users/getMembersForProject.js +6 -17
- package/dist/actions/users/getMembersForProject.js.map +1 -1
- package/dist/actions/users/types.d.ts +0 -11
- package/dist/actions/users/types.js.map +1 -1
- package/dist/commands/__tests__/debug.test.js +113 -220
- package/dist/commands/__tests__/debug.test.js.map +1 -1
- package/dist/commands/__tests__/deploy.test.js +325 -293
- package/dist/commands/__tests__/deploy.test.js.map +1 -1
- package/dist/commands/__tests__/dev.test.js +62 -19
- package/dist/commands/__tests__/dev.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.authentication.test.js +73 -0
- package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -0
- package/dist/commands/__tests__/init/init.create-new-project.test.js +195 -0
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -0
- package/dist/commands/__tests__/init/init.plan.test.js +279 -0
- package/dist/commands/__tests__/init/init.plan.test.js.map +1 -0
- package/dist/commands/__tests__/init/init.setup.test.js +335 -0
- package/dist/commands/__tests__/init/init.setup.test.js.map +1 -0
- package/dist/commands/__tests__/install.test.js +46 -22
- package/dist/commands/__tests__/install.test.js.map +1 -1
- package/dist/commands/__tests__/logout.test.js +8 -5
- package/dist/commands/__tests__/logout.test.js.map +1 -1
- package/dist/commands/__tests__/manage.test.js +29 -24
- package/dist/commands/__tests__/manage.test.js.map +1 -1
- package/dist/commands/__tests__/migration.test.js +119 -0
- package/dist/commands/__tests__/migration.test.js.map +1 -0
- package/dist/commands/__tests__/versions.test.js +22 -14
- package/dist/commands/__tests__/versions.test.js.map +1 -1
- package/dist/commands/backup/__tests__/disable.test.js +72 -75
- package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
- package/dist/commands/backup/__tests__/download.test.js +169 -80
- package/dist/commands/backup/__tests__/download.test.js.map +1 -1
- package/dist/commands/backup/__tests__/enable.test.js +109 -140
- package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
- package/dist/commands/backup/__tests__/list.test.js +84 -75
- package/dist/commands/backup/__tests__/list.test.js.map +1 -1
- package/dist/commands/backup/disable.js +5 -11
- package/dist/commands/backup/disable.js.map +1 -1
- package/dist/commands/backup/enable.js +5 -11
- package/dist/commands/backup/enable.js.map +1 -1
- package/dist/commands/backup/list.js +7 -8
- package/dist/commands/backup/list.js.map +1 -1
- package/dist/commands/cors/__tests__/add.test.js +68 -38
- package/dist/commands/cors/__tests__/add.test.js.map +1 -1
- package/dist/commands/cors/__tests__/delete.test.js +52 -37
- package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
- package/dist/commands/cors/__tests__/list.test.js +80 -57
- package/dist/commands/cors/__tests__/list.test.js.map +1 -1
- package/dist/commands/cors/add.js +5 -13
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +7 -15
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/cors/list.js +2 -10
- package/dist/commands/cors/list.js.map +1 -1
- package/dist/commands/dataset/__tests__/copy.test.js +197 -89
- package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/create.test.js +147 -117
- package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/delete.test.js +75 -68
- package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/export.test.js +123 -83
- package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/import.test.js +2 -2
- package/dist/commands/dataset/__tests__/import.test.js.map +1 -1
- package/dist/commands/dataset/__tests__/list.test.js +107 -65
- package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
- package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
- package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
- package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
- package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
- package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
- package/dist/commands/dataset/export.js +4 -4
- package/dist/commands/dataset/export.js.map +1 -1
- package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
- package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
- package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
- package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
- package/dist/commands/dev.js +0 -1
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/docs/__tests__/search.test.js +8 -7
- package/dist/commands/docs/__tests__/search.test.js.map +1 -1
- package/dist/commands/documents/__tests__/create.test.js +328 -265
- package/dist/commands/documents/__tests__/create.test.js.map +1 -1
- package/dist/commands/documents/__tests__/delete.test.js +119 -87
- package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
- package/dist/commands/documents/__tests__/get.test.js +68 -95
- package/dist/commands/documents/__tests__/get.test.js.map +1 -1
- package/dist/commands/documents/__tests__/query.test.js +87 -192
- package/dist/commands/documents/__tests__/query.test.js.map +1 -1
- package/dist/commands/documents/__tests__/validate.test.js +52 -29
- package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
- package/dist/commands/documents/create.d.ts +1 -0
- package/dist/commands/documents/create.js +10 -9
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/documents/delete.js +2 -3
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/documents/get.js +2 -3
- package/dist/commands/documents/get.js.map +1 -1
- package/dist/commands/documents/query.js +2 -3
- package/dist/commands/documents/query.js.map +1 -1
- package/dist/commands/documents/validate.js +0 -20
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/__tests__/list.test.js +57 -45
- package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
- package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
- package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
- package/dist/commands/graphql/list.js +2 -2
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/graphql/undeploy.js +4 -9
- package/dist/commands/graphql/undeploy.js.map +1 -1
- package/dist/commands/hook/__tests__/attempt.test.js +48 -33
- package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
- package/dist/commands/hook/__tests__/create.test.js +49 -51
- package/dist/commands/hook/__tests__/create.test.js.map +1 -1
- package/dist/commands/hook/__tests__/delete.test.js +43 -30
- package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
- package/dist/commands/hook/__tests__/list.test.js +38 -31
- package/dist/commands/hook/__tests__/list.test.js.map +1 -1
- package/dist/commands/hook/__tests__/logs.test.js +68 -40
- package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
- package/dist/commands/hook/create.js +2 -6
- package/dist/commands/hook/create.js.map +1 -1
- package/dist/commands/hook/delete.js +5 -17
- package/dist/commands/hook/delete.js.map +1 -1
- package/dist/commands/hook/list.js +2 -8
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.js +151 -18
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/manifest/__tests__/extract.test.js +22 -13
- package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
- package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
- package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
- package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
- package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
- package/dist/commands/media/__tests__/export.test.js +365 -66
- package/dist/commands/media/__tests__/export.test.js.map +1 -1
- package/dist/commands/media/__tests__/import.test.js +171 -105
- package/dist/commands/media/__tests__/import.test.js.map +1 -1
- package/dist/commands/media/export.js +2 -2
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +2 -2
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/projects/__tests__/list.test.js +5 -4
- package/dist/commands/projects/__tests__/list.test.js.map +1 -1
- package/dist/commands/projects/list.js +2 -6
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/__tests__/delete.test.js +396 -151
- package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
- package/dist/commands/schema/__tests__/deploy.test.js +348 -0
- package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
- package/dist/commands/schema/__tests__/extract.test.js +19 -11
- package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
- package/dist/commands/schema/__tests__/list.test.js +399 -0
- package/dist/commands/schema/__tests__/list.test.js.map +1 -0
- package/dist/commands/schema/__tests__/validate.test.js +27 -10
- package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
- package/dist/commands/schema/delete.d.ts +1 -1
- package/dist/commands/schema/delete.js +20 -23
- package/dist/commands/schema/delete.js.map +1 -1
- package/dist/commands/schema/deploy.d.ts +16 -0
- package/dist/commands/schema/deploy.js +98 -0
- package/dist/commands/schema/deploy.js.map +1 -0
- package/dist/commands/schema/list.d.ts +15 -0
- package/dist/commands/schema/list.js +104 -0
- package/dist/commands/schema/list.js.map +1 -0
- package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
- package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
- package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
- package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
- package/dist/commands/telemetry/__tests__/status.test.js +7 -5
- package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/add.test.js +55 -40
- package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/delete.test.js +72 -42
- package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
- package/dist/commands/tokens/__tests__/list.test.js +87 -60
- package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
- package/dist/commands/tokens/add.js +3 -5
- package/dist/commands/tokens/add.js.map +1 -1
- package/dist/commands/users/__tests__/invite.test.js +100 -79
- package/dist/commands/users/__tests__/invite.test.js.map +1 -1
- package/dist/commands/users/__tests__/list.test.js +186 -180
- package/dist/commands/users/__tests__/list.test.js.map +1 -1
- package/dist/commands/users/invite.js +6 -17
- package/dist/commands/users/invite.js.map +1 -1
- package/dist/commands/users/list.js +4 -7
- package/dist/commands/users/list.js.map +1 -1
- package/dist/config/createCliConfig.d.ts +4 -4
- package/dist/services/backup.d.ts +8 -0
- package/dist/services/backup.js +19 -0
- package/dist/services/backup.js.map +1 -1
- package/dist/services/cors.d.ts +23 -0
- package/dist/services/cors.js +38 -0
- package/dist/services/cors.js.map +1 -0
- package/dist/services/graphql.d.ts +7 -0
- package/dist/services/graphql.js +11 -0
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/hooks.d.ts +2 -0
- package/dist/services/hooks.js +19 -0
- package/dist/services/hooks.js.map +1 -1
- package/dist/services/organizations.d.ts +40 -0
- package/dist/services/organizations.js +41 -0
- package/dist/services/organizations.js.map +1 -0
- package/dist/services/projects.d.ts +31 -0
- package/dist/services/projects.js +71 -1
- package/dist/services/projects.js.map +1 -1
- package/dist/services/schemas.d.ts +4 -0
- package/dist/services/schemas.js +40 -0
- package/dist/services/schemas.js.map +1 -0
- package/dist/services/user.d.ts +10 -0
- package/dist/services/user.js +24 -0
- package/dist/services/user.js.map +1 -0
- package/dist/util/__tests__/getCliVersion.test.js +2 -2
- package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
- package/dist/util/errorMessages.d.ts +1 -0
- package/dist/util/errorMessages.js +1 -0
- package/dist/util/errorMessages.js.map +1 -1
- package/dist/util/getCliVersion.js +1 -1
- package/dist/util/getCliVersion.js.map +1 -1
- package/dist/util/readPackageJson.d.ts +1 -15
- package/dist/util/readPackageJson.js +1 -1
- package/dist/util/readPackageJson.js.map +1 -1
- package/dist/util/uniqBy.d.ts +1 -0
- package/dist/util/uniqBy.js +14 -0
- package/dist/util/uniqBy.js.map +1 -0
- package/oclif.config.js +6 -1
- package/oclif.manifest.json +152 -158
- package/package.json +30 -31
- package/dist/actions/cors/constants.d.ts +0 -1
- package/dist/actions/cors/constants.js +0 -3
- package/dist/actions/cors/constants.js.map +0 -1
- package/dist/actions/cors/types.d.ts +0 -9
- package/dist/actions/cors/types.js +0 -3
- package/dist/actions/cors/types.js.map +0 -1
- package/dist/actions/migration/getMigrationRootDirectory.d.ts +0 -2
- package/dist/actions/migration/getMigrationRootDirectory.js +0 -14
- package/dist/actions/migration/getMigrationRootDirectory.js.map +0 -1
- package/dist/actions/migration/resolveMigrations.d.ts +0 -19
- package/dist/actions/migration/resolveMigrations.js +0 -43
- package/dist/actions/migration/resolveMigrations.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js +0 -65
- package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/minimalSimple.test.js +0 -145
- package/dist/actions/migration/templates/__tests__/minimalSimple.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/renameField.test.js +0 -63
- package/dist/actions/migration/templates/__tests__/renameField.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/renameType.test.js +0 -61
- package/dist/actions/migration/templates/__tests__/renameType.test.js.map +0 -1
- package/dist/actions/migration/templates/__tests__/stringToPTE.test.js +0 -87
- package/dist/actions/migration/templates/__tests__/stringToPTE.test.js.map +0 -1
- package/dist/actions/migration/templates/index.d.ts +0 -5
- package/dist/actions/migration/templates/index.js +0 -7
- package/dist/actions/migration/templates/index.js.map +0 -1
- package/dist/actions/migration/templates/minimalAdvanced.d.ts +0 -4
- package/dist/actions/migration/templates/minimalAdvanced.js +0 -21
- package/dist/actions/migration/templates/minimalAdvanced.js.map +0 -1
- package/dist/actions/migration/templates/minimalSimple.d.ts +0 -4
- package/dist/actions/migration/templates/minimalSimple.js +0 -61
- package/dist/actions/migration/templates/minimalSimple.js.map +0 -1
- package/dist/actions/migration/templates/renameField.d.ts +0 -4
- package/dist/actions/migration/templates/renameField.js +0 -20
- package/dist/actions/migration/templates/renameField.js.map +0 -1
- package/dist/actions/migration/templates/renameType.d.ts +0 -4
- package/dist/actions/migration/templates/renameType.js +0 -19
- package/dist/actions/migration/templates/renameType.js.map +0 -1
- package/dist/actions/migration/templates/stringToPTE.d.ts +0 -4
- package/dist/actions/migration/templates/stringToPTE.js +0 -32
- package/dist/actions/migration/templates/stringToPTE.js.map +0 -1
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
- package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
- package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
- package/dist/actions/schema/schemaStoreConstants.js +0 -4
- package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
- package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
- package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
- package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
- package/dist/actions/schema/utils/schemaApiClient.js +0 -17
- package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
- package/dist/actions/users/apiVersion.d.ts +0 -6
- package/dist/actions/users/apiVersion.js +0 -7
- package/dist/actions/users/apiVersion.js.map +0 -1
- package/dist/commands/__tests__/init.test.js +0 -411
- package/dist/commands/__tests__/init.test.js.map +0 -1
- package/dist/commands/migration/__tests__/create.test.js +0 -296
- package/dist/commands/migration/__tests__/create.test.js.map +0 -1
- package/dist/commands/migration/__tests__/list.test.js +0 -166
- package/dist/commands/migration/__tests__/list.test.js.map +0 -1
- package/dist/commands/migration/__tests__/run.test.js +0 -481
- package/dist/commands/migration/__tests__/run.test.js.map +0 -1
- package/dist/commands/migration/create.d.ts +0 -17
- package/dist/commands/migration/create.js +0 -143
- package/dist/commands/migration/create.js.map +0 -1
- package/dist/commands/migration/list.d.ts +0 -9
- package/dist/commands/migration/list.js +0 -61
- package/dist/commands/migration/list.js.map +0 -1
- package/dist/commands/migration/run.d.ts +0 -26
- package/dist/commands/migration/run.js +0 -271
- package/dist/commands/migration/run.js.map +0 -1
- package/dist/util/migration/constants.d.ts +0 -3
- package/dist/util/migration/constants.js +0 -10
- package/dist/util/migration/constants.js.map +0 -1
- package/dist/util/migration/ensureApiVersionFormat.d.ts +0 -9
- package/dist/util/migration/ensureApiVersionFormat.js +0 -16
- package/dist/util/migration/ensureApiVersionFormat.js.map +0 -1
- package/dist/util/migration/prettyMutationFormatter.d.ts +0 -8
- package/dist/util/migration/prettyMutationFormatter.js +0 -141
- package/dist/util/migration/prettyMutationFormatter.js.map +0 -1
- package/dist/utils/migration/resolveMigrationScript.d.ts +0 -44
- package/dist/utils/migration/resolveMigrationScript.js +0 -74
- package/dist/utils/migration/resolveMigrationScript.js.map +0 -1
- /package/dist/actions/auth/login/{index.d.ts → login.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/documents/__tests__/create.test.ts"],"sourcesContent":["import {randomUUID} from 'node:crypto'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {watch as chokidarWatch} from 'chokidar'\nimport {execa, execaSync} from 'execa'\nimport json5 from 'json5'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {CreateDocumentCommand} from '../create.js'\n\nvi.mock('node:fs/promises')\nvi.mock('node:os')\nvi.mock('chokidar', () => ({\n watch: vi.fn(),\n}))\nvi.mock('execa')\nvi.mock('json5')\n\nvi.mock('node:crypto', async () => {\n return {\n randomUUID: vi.fn(),\n }\n})\n\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn(),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock('../../../../../cli-core/src/services/apiClient.js', () => ({\n getProjectCliClient: vi.fn(),\n}))\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\nconst mockFs = vi.mocked(fs)\nconst mockOs = vi.mocked(os)\nconst mockChokidarWatch = vi.mocked(chokidarWatch)\nconst mockExeca = vi.mocked(execa)\nconst mockExecaSync = vi.mocked(execaSync)\nconst mockJson5 = vi.mocked(json5)\nconst mockRandomUUID = vi.mocked(randomUUID)\n\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\n// Helper to set environment variable for tests\nfunction withEditorEnv(testFn: () => Promise<void>) {\n return async () => {\n vi.stubEnv('EDITOR', 'vim')\n try {\n await testFn()\n } finally {\n vi.unstubAllEnvs()\n }\n }\n}\n\n// Base configuration used across tests\nconst baseConfig = {\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n}\n\n// Helper functions moved to outer scope to fix linting\nconst setupBaseMocks = (additionalConfig = {}) => {\n mockGetCliConfig.mockResolvedValue({...baseConfig, ...additionalConfig})\n}\n\nconst setupMocks = () => {\n setupBaseMocks()\n const mockClient = {\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n return mockClient\n}\n\nconst setupEditorMocks = () => {\n setupBaseMocks()\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.unlink.mockResolvedValue(undefined)\n mockExecaSync.mockReturnValue(undefined as never)\n}\n\nconst setupWatchMocks = () => {\n setupBaseMocks()\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.unlink.mockResolvedValue(undefined)\n}\n\ndescribe('#documents:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create one or more documents\n\n USAGE\n $ sanity documents create [FILE] [-d <value>] [--id <value>] [--json5]\n [--missing] [--replace] [--watch]\n\n ARGUMENTS\n [FILE] JSON file to create document(s) from\n\n FLAGS\n -d, --dataset=<value> Dataset to create document(s) in (overrides config)\n --id=<value> Specify a document ID to use. Will fetch remote\n document ID and populate editor.\n --json5 Use JSON5 file type to allow a \"simplified\" version of\n JSON\n --missing On duplicate document IDs, don't modify the target\n document(s)\n --replace On duplicate document IDs, replace existing document\n with specified document(s)\n --watch Write the documents whenever the target file or buffer\n changes\n\n DESCRIPTION\n Create one or more documents\n\n EXAMPLES\n Create the document specified in \"myDocument.json\"\n\n $ sanity documents create myDocument.json\n\n Open configured $EDITOR and create the specified document(s)\n\n $ sanity documents create\n\n Fetch document with the ID \"myDocId\" and open configured $EDITOR with the\n current document content (if any). Replace document with the edited version\n when the editor closes\n\n $ sanity documents create --id myDocId --replace\n\n Open configured $EDITOR and replace the document with the given content on\n each save. Use JSON5 file extension and parser for simplified syntax.\n\n $ sanity documents create --id myDocId --watch --replace --json5\n\n \"\n `)\n })\n\n test('creates document from JSON file and displays success message', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = {\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json'])\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockFs.readFile).toHaveBeenCalledWith(\n path.resolve(process.cwd(), 'test-doc.json'),\n 'utf8',\n )\n expect(mockClient.transaction).toHaveBeenCalledWith([{create: mockDoc}])\n })\n\n test('creates document with replace flag', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = {\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--replace'])\n\n expect(stdout).toContain('Upserted:')\n expect(stdout).toContain('test-doc')\n expect(mockClient.transaction).toHaveBeenCalledWith([{createOrReplace: mockDoc}])\n })\n\n test('creates document with missing flag', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = {\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n }\n\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--missing'])\n\n expect(stdout).toContain('Skipped (already exists):')\n expect(stdout).toContain('test-doc')\n expect(mockClient.transaction).toHaveBeenCalledWith([{createIfNotExists: mockDoc}])\n })\n\n test(\n 'opens editor when no file specified and creates document from editor content',\n withEditorEnv(async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockFs.unlink.mockResolvedValue(undefined)\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n mockExecaSync.mockReturnValue(undefined as never)\n\n const {stdout} = await testCommand(CreateDocumentCommand, [])\n\n expect(stdout).toContain('Created:')\n expect(mockFs.mkdir).toHaveBeenCalledWith('/tmp/sanity-cli', {\n mode: 0o700,\n recursive: true,\n })\n expect(mockExecaSync).toHaveBeenCalled()\n }),\n )\n\n test('uses custom dataset from --dataset flag instead of config', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n setupMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, [\n 'test-doc.json',\n '--dataset',\n 'staging',\n ])\n\n expect(stdout).toContain('Created:')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('throws error when both --replace and --missing flags are used', async () => {\n setupBaseMocks()\n\n const {error} = await testCommand(CreateDocumentCommand, [\n 'test-doc.json',\n '--replace',\n '--missing',\n ])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Cannot use both --replace and --missing')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when --id and file path are both provided', async () => {\n setupBaseMocks()\n\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--id', 'myDocId'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Cannot use --id when specifying a file path')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no project ID is configured', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: undefined,\n projectId: testProjectId,\n },\n })\n\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('displays error message when file cannot be read', async () => {\n setupBaseMocks()\n mockGetProjectCliClient.mockResolvedValue({} as never)\n mockFs.readFile.mockRejectedValue(new Error('File not found'))\n\n const {error} = await testCommand(CreateDocumentCommand, ['nonexistent.json'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to create documents')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('validates document has required _type property', async () => {\n const invalidDoc = {title: 'Test Post'} // Missing _type\n\n setupBaseMocks()\n mockGetProjectCliClient.mockResolvedValue({} as never)\n mockFs.readFile.mockResolvedValue(JSON.stringify(invalidDoc))\n mockJson5.parse.mockReturnValue(invalidDoc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to create documents')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test(\n 'uses JSON5 when --json5 flag is provided',\n withEditorEnv(async () => {\n mockGetCliConfig.mockResolvedValue({\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n })\n\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockFs.unlink.mockResolvedValue(undefined)\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n mockExecaSync.mockReturnValue(undefined as never)\n\n await testCommand(CreateDocumentCommand, ['--json5'])\n\n expect(mockJson5.stringify).toHaveBeenCalled()\n expect(mockFs.writeFile).toHaveBeenCalledWith(\n expect.stringContaining('.json5'),\n expect.any(String),\n {\n encoding: 'utf8',\n mode: 0o600,\n },\n )\n }),\n )\n\n describe('validation', () => {\n test.each([\n ['non-object document', 'not an object', 'Document must be an object'],\n [\n 'document without _type',\n {title: 'Test'},\n 'Document must have a `_type` property of type string',\n ],\n ['document with empty _type', {_type: '', title: 'Test'}, 'Document _type cannot be empty'],\n [\n 'document with invalid _type format (starts with number)',\n {_type: '1invalid', title: 'Test'},\n 'Document _type must start with a letter',\n ],\n [\n 'document with invalid _type format (special chars)',\n {_type: 'invalid@type', title: 'Test'},\n 'Document _type must start with a letter and contain only alphanumeric characters',\n ],\n [\n 'document with empty _id',\n {_id: ' ', _type: 'test', title: 'Test'},\n 'Document _id cannot be empty',\n ],\n [\n 'document with invalid _id format',\n {_id: 'invalid@id', _type: 'test', title: 'Test'},\n 'Document _id can only contain alphanumeric characters',\n ],\n [\n 'document with _id too long',\n {_id: 'a'.repeat(201), _type: 'test', title: 'Test'},\n 'Document _id cannot be longer than 200 characters',\n ],\n ])('validates %s', async (description, doc, expectedErrorSubstring) => {\n setupMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(doc))\n mockJson5.parse.mockReturnValue(doc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(expectedErrorSubstring)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test.each([\n [\n 'multiple documents with invalid first document',\n [{title: 'Invalid'}, {_type: 'valid', title: 'Valid'}],\n 'Document at index 0 must have a `_type` property of type string',\n ],\n [\n 'multiple documents with invalid second document',\n [{_type: 'valid', title: 'Valid'}, {title: 'Invalid'}],\n 'Document at index 1 must have a `_type` property of type string',\n ],\n ])('validates %s', async (description, docs, expectedErrorSubstring) => {\n setupMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(docs))\n mockJson5.parse.mockReturnValue(docs)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-docs.json'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(expectedErrorSubstring)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('allows documents with reserved fields but logs debug warning', async () => {\n const docWithReservedFields = {\n _createdAt: '2024-01-01T00:00:00Z',\n _id: 'test-doc',\n _rev: 'some-revision',\n _type: 'post',\n _updatedAt: '2024-01-02T00:00:00Z',\n title: 'Test Post',\n }\n\n setupMocks()\n const mockClient = {\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n mockFs.readFile.mockResolvedValue(JSON.stringify(docWithReservedFields))\n mockJson5.parse.mockReturnValue(docWithReservedFields)\n\n // Should not throw error, but should proceed with document creation\n const {stdout} = await testCommand(CreateDocumentCommand, ['doc.json'])\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockClient.transaction).toHaveBeenCalledWith([{create: docWithReservedFields}])\n })\n\n test('validates empty document array throws error', async () => {\n const emptyArray: unknown[] = []\n\n setupMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(emptyArray))\n mockJson5.parse.mockReturnValue(emptyArray)\n\n const {error} = await testCommand(CreateDocumentCommand, ['empty-docs.json'])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No documents provided')\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('batch operations', () => {\n test.each([\n ['create', 'create', 'Created:'],\n ['createOrReplace', 'replace', 'Upserted:'],\n ['createIfNotExists', 'missing', 'Skipped (already exists):'],\n ])('handles multiple documents with %s operation', async (operation, flag, expectedMessage) => {\n const mockDocs = [\n {_id: 'doc1', _type: 'post', title: 'Post 1'},\n {_id: 'doc2', _type: 'post', title: 'Post 2'},\n ]\n\n const mockTransaction = {\n commit: vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: operation === 'createIfNotExists' ? 'update' : 'create'},\n {id: 'doc2', operation: operation === 'createIfNotExists' ? 'update' : 'create'},\n ],\n }),\n }\n\n setupMocks()\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDocs))\n mockJson5.parse.mockReturnValue(mockDocs)\n\n const args = ['docs.json']\n if (flag !== 'create') args.push(`--${flag}`)\n\n const {stdout} = await testCommand(CreateDocumentCommand, args)\n\n expect(stdout).toContain(expectedMessage)\n expect(stdout).toContain('doc1')\n expect(stdout).toContain('doc2')\n\n const expectedMutations = mockDocs.map((doc) => ({[operation]: doc}))\n expect(mockClient.transaction).toHaveBeenCalledWith(expectedMutations)\n })\n\n test('handles mixed results for createIfNotExists', async () => {\n const mockDocs = [\n {_id: 'doc1', _type: 'post', title: 'Post 1'},\n {_id: 'doc2', _type: 'post', title: 'Post 2'},\n {_id: 'doc3', _type: 'post', title: 'Post 3'},\n ]\n\n const mockTransaction = {\n commit: vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'create'}, // Created\n {id: 'doc2', operation: 'update'}, // Skipped (already exists)\n {id: 'doc3', operation: 'create'}, // Created\n ],\n }),\n }\n\n setupMocks()\n const mockClient = {\n transaction: vi.fn().mockReturnValue(mockTransaction),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDocs))\n mockJson5.parse.mockReturnValue(mockDocs)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['docs.json', '--missing'])\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('doc1')\n expect(stdout).toContain('doc3')\n expect(stdout).toContain('Skipped (already exists):')\n expect(stdout).toContain('doc2')\n })\n })\n\n describe('editor workflow', () => {\n test(\n 'fetches existing document with --id flag',\n withEditorEnv(async () => {\n const existingDoc = {\n _id: 'existing-doc',\n _type: 'post',\n title: 'Existing Post',\n }\n\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(existingDoc),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'existing-doc', operation: 'update'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify({...existingDoc, title: 'Updated Post'}))\n mockJson5.parse.mockReturnValue({...existingDoc, title: 'Updated Post'})\n mockJson5.stringify.mockReturnValue(JSON.stringify(existingDoc, null, 2))\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['--id', 'existing-doc'])\n\n expect(mockClient.getDocument).toHaveBeenCalledWith('existing-doc')\n expect(mockFs.writeFile).toHaveBeenCalledWith(\n expect.stringContaining('existing-doc.json'),\n JSON.stringify(existingDoc, null, 2),\n expect.objectContaining({mode: 0o600}),\n )\n expect(stdout).toContain('Created:')\n }),\n )\n\n test(\n 'handles no changes made in editor',\n withEditorEnv(async () => {\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn(),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n setupEditorMocks()\n\n // Set up a predictable UUID so the test can verify no changes were made\n const testUuid = '123e4567-e89b-12d3-a456-426614174000'\n mockRandomUUID.mockReturnValue(testUuid)\n\n const defaultDoc = {\n _id: testUuid,\n _type: 'specify-me',\n }\n\n // First mock the writeFile call for initial template\n const writeFileContent = JSON.stringify(defaultDoc, null, 2)\n mockJson5.stringify.mockReturnValue(writeFileContent)\n\n // Set up the file read to return the exact same content structure\n mockFs.readFile.mockResolvedValue(writeFileContent)\n // Return the exact same object structure that was written\n mockJson5.parse.mockReturnValue(defaultDoc)\n\n await testCommand(CreateDocumentCommand, [])\n\n // The key test - transaction should not have been called since no changes were made\n expect(mockClient.transaction).not.toHaveBeenCalled()\n }),\n )\n\n test(\n 'handles write error with already exists hint',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockRejectedValue(new Error('Document already exists')),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n\n const {error} = await testCommand(CreateDocumentCommand, [])\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to write documents: Document already exists')\n expect(error?.message).toContain('Perhaps you want to use `--replace` or `--missing`?')\n expect(error?.oclif?.exit).toBe(1)\n }),\n )\n\n test(\n 'handles file cleanup errors silently',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n setupEditorMocks()\n // Mock unlink to throw an error (should be caught silently)\n mockFs.unlink.mockRejectedValue(new Error('Permission denied'))\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n\n const {stdout} = await testCommand(CreateDocumentCommand, [])\n\n // Should still succeed despite file cleanup error\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockFs.unlink).toHaveBeenCalled()\n }),\n )\n })\n\n describe('watch mode', () => {\n test(\n 'enables watch mode and logs appropriate messages',\n withEditorEnv(async () => {\n const mockWatcher = {\n on: vi.fn().mockReturnThis(),\n }\n mockChokidarWatch.mockReturnValue(mockWatcher as never)\n\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n setupWatchMocks()\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n mockExeca.mockResolvedValue({} as never)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['--watch'])\n\n expect(stdout).toContain('Watch mode:')\n expect(stdout).toContain('Will write documents on each save.')\n expect(stdout).toContain('Press Ctrl + C to cancel watch mode.')\n expect(mockWatcher.on).toHaveBeenCalledWith('change', expect.any(Function))\n expect(mockExeca).toHaveBeenCalledWith('vim', expect.any(Array), {stdio: 'inherit'})\n expect(mockChokidarWatch).toHaveBeenCalledWith(expect.stringContaining('.json'))\n }),\n )\n\n test(\n 'handles file change events in watch mode',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Updated Post',\n }\n\n let changeHandler: () => Promise<void>\n const mockWatcher = {\n on: vi.fn().mockImplementation((event: string, handler: () => Promise<void>) => {\n if (event === 'change') {\n changeHandler = handler\n }\n return mockWatcher\n }),\n }\n mockChokidarWatch.mockReturnValue(mockWatcher as never)\n\n const mockClient = {\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n }),\n }\n mockGetProjectCliClient.mockResolvedValue(mockClient as never)\n\n setupWatchMocks()\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n mockExeca.mockResolvedValue({} as never)\n\n // Mock file read to return different content for file change\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n await testCommand(CreateDocumentCommand, ['--watch'])\n\n // Simulate file change\n expect(changeHandler!).toBeDefined()\n await changeHandler!()\n\n expect(mockClient.transaction).toHaveBeenCalledWith([{create: mockDoc}])\n }),\n )\n })\n})\n"],"names":["randomUUID","fs","os","path","runCommand","getCliConfig","getProjectCliClient","testCommand","watch","chokidarWatch","execa","execaSync","json5","afterEach","describe","expect","test","vi","NO_PROJECT_ID","CreateDocumentCommand","mock","fn","findProjectRoot","mockResolvedValue","directory","root","type","getCliToken","mockGetCliConfig","mocked","mockGetProjectCliClient","mockFs","mockOs","mockChokidarWatch","mockExeca","mockExecaSync","mockJson5","mockRandomUUID","testProjectId","testDataset","withEditorEnv","testFn","stubEnv","unstubAllEnvs","baseConfig","api","dataset","projectId","setupBaseMocks","additionalConfig","setupMocks","mockClient","transaction","mockReturnValue","commit","results","id","operation","setupEditorMocks","tmpdir","mkdir","undefined","writeFile","unlink","setupWatchMocks","clearAllMocks","stdout","toMatchInlineSnapshot","mockDoc","_id","_type","title","mockTransaction","readFile","JSON","stringify","parse","toContain","toHaveBeenCalledWith","resolve","process","cwd","create","createOrReplace","createIfNotExists","getDocument","mode","recursive","toHaveBeenCalled","objectContaining","error","toBeInstanceOf","Error","message","oclif","exit","toBe","toEqual","mockRejectedValue","invalidDoc","stringContaining","any","String","encoding","each","repeat","description","doc","expectedErrorSubstring","docs","docWithReservedFields","_createdAt","_rev","_updatedAt","emptyArray","flag","expectedMessage","mockDocs","args","push","expectedMutations","map","existingDoc","testUuid","defaultDoc","writeFileContent","not","mockWatcher","on","mockReturnThis","Function","Array","stdio","changeHandler","mockImplementation","event","handler","toBeDefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/commands/documents/__tests__/create.test.ts"],"sourcesContent":["import {randomUUID} from 'node:crypto'\nimport fs from 'node:fs/promises'\nimport os from 'node:os'\nimport path from 'node:path'\n\nimport {runCommand} from '@oclif/test'\nimport {getProjectCliClient} from '@sanity/cli-core'\nimport {testCommand} from '@sanity/cli-test'\nimport {watch as chokidarWatch} from 'chokidar'\nimport {execa, execaSync} from 'execa'\nimport json5 from 'json5'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {CreateDocumentCommand} from '../create.js'\n\nvi.mock('node:fs/promises')\nvi.mock('node:os')\nvi.mock('chokidar', () => ({\n watch: vi.fn(),\n}))\nvi.mock('execa')\nvi.mock('json5')\n\nvi.mock('node:crypto', async () => {\n return {\n randomUUID: vi.fn(),\n }\n})\n\nvi.mock('@sanity/cli-core', async () => {\n const actual = await vi.importActual('@sanity/cli-core')\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockFs = vi.mocked(fs)\nconst mockOs = vi.mocked(os)\nconst mockChokidarWatch = vi.mocked(chokidarWatch)\nconst mockExeca = vi.mocked(execa)\nconst mockExecaSync = vi.mocked(execaSync)\nconst mockJson5 = vi.mocked(json5)\nconst mockRandomUUID = vi.mocked(randomUUID)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nconst testProjectId = 'test-project'\nconst testDataset = 'production'\n\n// Helper to set environment variable for tests\nfunction withEditorEnv(testFn: () => Promise<void>) {\n return async () => {\n vi.stubEnv('EDITOR', 'vim')\n try {\n await testFn()\n } finally {\n vi.unstubAllEnvs()\n }\n }\n}\n\n// Base configuration used across tests\nconst baseConfig = {\n api: {\n dataset: testDataset,\n projectId: testProjectId,\n },\n}\n\nconst defaultMocks = {\n cliConfig: baseConfig,\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\n// Helper functions\nconst setupEditorMocks = () => {\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.unlink.mockResolvedValue(undefined)\n mockExecaSync.mockReturnValue(undefined as never)\n}\n\nconst setupWatchMocks = () => {\n mockOs.tmpdir.mockReturnValue('/tmp')\n mockFs.mkdir.mockResolvedValue(undefined)\n mockFs.writeFile.mockResolvedValue(undefined)\n mockFs.unlink.mockResolvedValue(undefined)\n}\n\ndescribe('#documents:create', () => {\n afterEach(() => {\n vi.clearAllMocks()\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['documents create', '--help'])\n\n expect(stdout).toMatchInlineSnapshot(`\n \"Create one or more documents\n\n USAGE\n $ sanity documents create [FILE] [-d <value>] [--id <value>] [--json5]\n [--missing] [--replace] [--watch]\n\n ARGUMENTS\n [FILE] JSON file to create document(s) from\n\n FLAGS\n -d, --dataset=<value> Dataset to create document(s) in (overrides config)\n --id=<value> Specify a document ID to use. Will fetch remote\n document ID and populate editor.\n --json5 Use JSON5 file type to allow a \"simplified\" version of\n JSON\n --missing On duplicate document IDs, don't modify the target\n document(s)\n --replace On duplicate document IDs, replace existing document\n with specified document(s)\n --watch Write the documents whenever the target file or buffer\n changes\n\n DESCRIPTION\n Create one or more documents\n\n EXAMPLES\n Create the document specified in \"myDocument.json\"\n\n $ sanity documents create myDocument.json\n\n Open configured $EDITOR and create the specified document(s)\n\n $ sanity documents create\n\n Fetch document with the ID \"myDocId\" and open configured $EDITOR with the\n current document content (if any). Replace document with the edited version\n when the editor closes\n\n $ sanity documents create --id myDocId --replace\n\n Open configured $EDITOR and replace the document with the given content on\n each save. Use JSON5 file extension and parser for simplified syntax.\n\n $ sanity documents create --id myDocId --watch --replace --json5\n\n \"\n `)\n })\n\n test('creates document from JSON file and displays success message', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockFs.readFile).toHaveBeenCalledWith(\n path.resolve(process.cwd(), 'test-doc.json'),\n 'utf8',\n )\n expect(mockTransaction).toHaveBeenCalledWith([{create: mockDoc}])\n })\n\n test('creates document with replace flag', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--replace'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Upserted:')\n expect(stdout).toContain('test-doc')\n expect(mockTransaction).toHaveBeenCalledWith([{createOrReplace: mockDoc}])\n })\n\n test('creates document with missing flag', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'update'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--missing'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Skipped (already exists):')\n expect(stdout).toContain('test-doc')\n expect(mockTransaction).toHaveBeenCalledWith([{createIfNotExists: mockDoc}])\n })\n\n test(\n 'opens editor when no file specified and creates document from editor content',\n withEditorEnv(async () => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n\n const {stdout} = await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(mockFs.mkdir).toHaveBeenCalledWith('/tmp/sanity-cli', {\n mode: 0o700,\n recursive: true,\n })\n expect(mockExecaSync).toHaveBeenCalled()\n }),\n )\n\n test('uses custom dataset from --dataset flag instead of config', async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n const {stdout} = await testCommand(\n CreateDocumentCommand,\n ['test-doc.json', '--dataset', 'staging'],\n {\n mocks: {\n ...defaultMocks,\n },\n },\n )\n\n expect(stdout).toContain('Created:')\n expect(mockGetProjectCliClient).toHaveBeenCalledWith(\n expect.objectContaining({\n dataset: 'staging',\n }),\n )\n })\n\n test('throws error when both --replace and --missing flags are used', async () => {\n const {error} = await testCommand(\n CreateDocumentCommand,\n ['test-doc.json', '--replace', '--missing'],\n {mocks: defaultMocks},\n )\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Cannot use both --replace and --missing')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when --id and file path are both provided', async () => {\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json', '--id', 'myDocId'], {\n mocks: defaultMocks,\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Cannot use --id when specifying a file path')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no project ID is configured', async () => {\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {\n api: {\n dataset: 'production',\n projectId: undefined,\n },\n },\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('throws error when no dataset is configured and none provided', async () => {\n const {error} = await testCommand(CreateDocumentCommand, ['test-doc.json'], {\n mocks: {\n ...defaultMocks,\n cliConfig: {\n api: {\n dataset: undefined,\n projectId: testProjectId,\n },\n },\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No dataset specified')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('displays error message when file cannot be read', async () => {\n mockFs.readFile.mockRejectedValue(new Error('File not found'))\n\n const {error} = await testCommand(CreateDocumentCommand, ['nonexistent.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to create documents')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('validates document has required _type property', async () => {\n const invalidDoc = {title: 'Test Post'} // Missing _type\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(invalidDoc))\n mockJson5.parse.mockReturnValue(invalidDoc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to create documents')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test(\n 'uses JSON5 when --json5 flag is provided',\n withEditorEnv(async () => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'generated-id', operation: 'create'}],\n }),\n })\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue('{\"_id\": \"generated-id\", \"_type\": \"updated-type\"}')\n mockJson5.stringify.mockReturnValue('{\"_id\": \"generated-id\", \"_type\": \"specify-me\"}')\n mockJson5.parse.mockReturnValue({_id: 'generated-id', _type: 'updated-type'})\n\n await testCommand(CreateDocumentCommand, ['--json5'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(mockJson5.stringify).toHaveBeenCalled()\n expect(mockFs.writeFile).toHaveBeenCalledWith(\n expect.stringContaining('.json5'),\n expect.any(String),\n {\n encoding: 'utf8',\n mode: 0o600,\n },\n )\n }),\n )\n\n describe('validation', () => {\n test.each([\n ['non-object document', 'not an object', 'Document must be an object'],\n [\n 'document without _type',\n {title: 'Test'},\n 'Document must have a `_type` property of type string',\n ],\n ['document with empty _type', {_type: '', title: 'Test'}, 'Document _type cannot be empty'],\n [\n 'document with invalid _type format (starts with number)',\n {_type: '1invalid', title: 'Test'},\n 'Document _type must start with a letter',\n ],\n [\n 'document with invalid _type format (special chars)',\n {_type: 'invalid@type', title: 'Test'},\n 'Document _type must start with a letter and contain only alphanumeric characters',\n ],\n [\n 'document with empty _id',\n {_id: ' ', _type: 'test', title: 'Test'},\n 'Document _id cannot be empty',\n ],\n [\n 'document with invalid _id format',\n {_id: 'invalid@id', _type: 'test', title: 'Test'},\n 'Document _id can only contain alphanumeric characters',\n ],\n [\n 'document with _id too long',\n {_id: 'a'.repeat(201), _type: 'test', title: 'Test'},\n 'Document _id cannot be longer than 200 characters',\n ],\n ])('validates %s', async (description, doc, expectedErrorSubstring) => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(doc))\n mockJson5.parse.mockReturnValue(doc)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(expectedErrorSubstring)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test.each([\n [\n 'multiple documents with invalid first document',\n [{title: 'Invalid'}, {_type: 'valid', title: 'Valid'}],\n 'Document at index 0 must have a `_type` property of type string',\n ],\n [\n 'multiple documents with invalid second document',\n [{_type: 'valid', title: 'Valid'}, {title: 'Invalid'}],\n 'Document at index 1 must have a `_type` property of type string',\n ],\n ])('validates %s', async (description, docs, expectedErrorSubstring) => {\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(docs))\n mockJson5.parse.mockReturnValue(docs)\n\n const {error} = await testCommand(CreateDocumentCommand, ['invalid-docs.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain(expectedErrorSubstring)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('allows documents with reserved fields but logs debug warning', async () => {\n const docWithReservedFields = {\n _createdAt: '2024-01-01T00:00:00Z',\n _id: 'test-doc',\n _rev: 'some-revision',\n _type: 'post',\n _updatedAt: '2024-01-02T00:00:00Z',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(docWithReservedFields))\n mockJson5.parse.mockReturnValue(docWithReservedFields)\n\n // Should not throw error, but should proceed with document creation\n const {stdout} = await testCommand(CreateDocumentCommand, ['doc.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockTransaction).toHaveBeenCalledWith([{create: docWithReservedFields}])\n })\n\n test('validates empty document array throws error', async () => {\n const emptyArray: unknown[] = []\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(emptyArray))\n mockJson5.parse.mockReturnValue(emptyArray)\n\n const {error} = await testCommand(CreateDocumentCommand, ['empty-docs.json'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('No documents provided')\n expect(error?.oclif?.exit).toBe(1)\n })\n })\n\n describe('batch operations', () => {\n test.each([\n ['create', 'create', 'Created:'],\n ['createOrReplace', 'replace', 'Upserted:'],\n ['createIfNotExists', 'missing', 'Skipped (already exists):'],\n ])('handles multiple documents with %s operation', async (operation, flag, expectedMessage) => {\n const mockDocs = [\n {_id: 'doc1', _type: 'post', title: 'Post 1'},\n {_id: 'doc2', _type: 'post', title: 'Post 2'},\n ]\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: operation === 'createIfNotExists' ? 'update' : 'create'},\n {id: 'doc2', operation: operation === 'createIfNotExists' ? 'update' : 'create'},\n ],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDocs))\n mockJson5.parse.mockReturnValue(mockDocs)\n\n const args = ['docs.json']\n if (flag !== 'create') args.push(`--${flag}`)\n\n const {stdout} = await testCommand(CreateDocumentCommand, args, {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain(expectedMessage)\n expect(stdout).toContain('doc1')\n expect(stdout).toContain('doc2')\n\n const expectedMutations = mockDocs.map((doc) => ({[operation]: doc}))\n expect(mockTransaction).toHaveBeenCalledWith(expectedMutations)\n })\n\n test('handles mixed results for createIfNotExists', async () => {\n const mockDocs = [\n {_id: 'doc1', _type: 'post', title: 'Post 1'},\n {_id: 'doc2', _type: 'post', title: 'Post 2'},\n {_id: 'doc3', _type: 'post', title: 'Post 3'},\n ]\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [\n {id: 'doc1', operation: 'create'}, // Created\n {id: 'doc2', operation: 'update'}, // Skipped (already exists)\n {id: 'doc3', operation: 'create'}, // Created\n ],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n transaction: mockTransaction,\n } as never)\n\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDocs))\n mockJson5.parse.mockReturnValue(mockDocs)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['docs.json', '--missing'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('doc1')\n expect(stdout).toContain('doc3')\n expect(stdout).toContain('Skipped (already exists):')\n expect(stdout).toContain('doc2')\n })\n })\n\n describe('editor workflow', () => {\n test(\n 'fetches existing document with --id flag',\n withEditorEnv(async () => {\n const existingDoc = {\n _id: 'existing-doc',\n _type: 'post',\n title: 'Existing Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'existing-doc', operation: 'update'}],\n }),\n } as never)\n\n const mockGetDocument = vi.fn().mockResolvedValue(existingDoc)\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: mockGetDocument,\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify({...existingDoc, title: 'Updated Post'}))\n mockJson5.parse.mockReturnValue({...existingDoc, title: 'Updated Post'})\n mockJson5.stringify.mockReturnValue(JSON.stringify(existingDoc, null, 2))\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['--id', 'existing-doc'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(mockGetDocument).toHaveBeenCalledWith('existing-doc')\n expect(mockFs.writeFile).toHaveBeenCalledWith(\n expect.stringContaining('existing-doc.json'),\n JSON.stringify(existingDoc, null, 2),\n expect.objectContaining({mode: 0o600}),\n )\n expect(stdout).toContain('Created:')\n }),\n )\n\n test(\n 'handles no changes made in editor',\n withEditorEnv(async () => {\n const mockTransaction = vi.fn()\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n\n // Set up a predictable UUID so the test can verify no changes were made\n const testUuid = '123e4567-e89b-12d3-a456-426614174000'\n mockRandomUUID.mockReturnValue(testUuid)\n\n const defaultDoc = {\n _id: testUuid,\n _type: 'specify-me',\n }\n\n // First mock the writeFile call for initial template\n const writeFileContent = JSON.stringify(defaultDoc, null, 2)\n mockJson5.stringify.mockReturnValue(writeFileContent)\n\n // Set up the file read to return the exact same content structure\n mockFs.readFile.mockResolvedValue(writeFileContent)\n // Return the exact same object structure that was written\n mockJson5.parse.mockReturnValue(defaultDoc)\n\n await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n // The key test - transaction should not have been called since no changes were made\n expect(mockTransaction).not.toHaveBeenCalled()\n }),\n )\n\n test(\n 'handles write error with already exists hint',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockRejectedValue(new Error('Document already exists')),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n\n const {error} = await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('Failed to write documents: Document already exists')\n expect(error?.message).toContain('Perhaps you want to use `--replace` or `--missing`?')\n expect(error?.oclif?.exit).toBe(1)\n }),\n )\n\n test(\n 'handles file cleanup errors silently',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Test Post',\n }\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupEditorMocks()\n // Mock unlink to throw an error (should be caught silently)\n mockFs.unlink.mockRejectedValue(new Error('Permission denied'))\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n\n const {stdout} = await testCommand(CreateDocumentCommand, [], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n // Should still succeed despite file cleanup error\n expect(stdout).toContain('Created:')\n expect(stdout).toContain('test-doc')\n expect(mockFs.unlink).toHaveBeenCalled()\n }),\n )\n })\n\n describe('watch mode', () => {\n test(\n 'enables watch mode and logs appropriate messages',\n withEditorEnv(async () => {\n const mockWatcher = {\n on: vi.fn().mockReturnThis(),\n }\n mockChokidarWatch.mockReturnValue(mockWatcher as never)\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupWatchMocks()\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n mockExeca.mockResolvedValue({} as never)\n\n const {stdout} = await testCommand(CreateDocumentCommand, ['--watch'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n expect(stdout).toContain('Watch mode:')\n expect(stdout).toContain('Will write documents on each save.')\n expect(stdout).toContain('Press Ctrl + C to cancel watch mode.')\n expect(mockWatcher.on).toHaveBeenCalledWith('change', expect.any(Function))\n expect(mockExeca).toHaveBeenCalledWith('vim', expect.any(Array), {stdio: 'inherit'})\n expect(mockChokidarWatch).toHaveBeenCalledWith(expect.stringContaining('.json'))\n }),\n )\n\n test(\n 'handles file change events in watch mode',\n withEditorEnv(async () => {\n const mockDoc = {\n _id: 'test-doc',\n _type: 'post',\n title: 'Updated Post',\n }\n\n let changeHandler: () => Promise<void>\n const mockWatcher = {\n on: vi.fn().mockImplementation((event: string, handler: () => Promise<void>) => {\n if (event === 'change') {\n changeHandler = handler\n }\n return mockWatcher\n }),\n }\n mockChokidarWatch.mockReturnValue(mockWatcher as never)\n\n const mockTransaction = vi.fn().mockReturnValue({\n commit: vi.fn().mockResolvedValue({\n results: [{id: 'test-doc', operation: 'create'}],\n }),\n })\n\n mockGetProjectCliClient.mockResolvedValue({\n getDocument: vi.fn().mockResolvedValue(null),\n transaction: mockTransaction,\n } as never)\n\n setupWatchMocks()\n mockJson5.stringify.mockReturnValue(\n JSON.stringify({_id: 'test-doc', _type: 'specify-me'}, null, 2),\n )\n mockExeca.mockResolvedValue({} as never)\n\n // Mock file read to return different content for file change\n mockFs.readFile.mockResolvedValue(JSON.stringify(mockDoc))\n mockJson5.parse.mockReturnValue(mockDoc)\n\n await testCommand(CreateDocumentCommand, ['--watch'], {\n mocks: {\n ...defaultMocks,\n },\n })\n\n // Simulate file change\n expect(changeHandler!).toBeDefined()\n await changeHandler!()\n\n expect(mockTransaction).toHaveBeenCalledWith([{create: mockDoc}])\n }),\n )\n })\n})\n"],"names":["randomUUID","fs","os","path","runCommand","getProjectCliClient","testCommand","watch","chokidarWatch","execa","execaSync","json5","afterEach","describe","expect","test","vi","NO_PROJECT_ID","CreateDocumentCommand","mock","fn","actual","importActual","mockFs","mocked","mockOs","mockChokidarWatch","mockExeca","mockExecaSync","mockJson5","mockRandomUUID","mockGetProjectCliClient","testProjectId","testDataset","withEditorEnv","testFn","stubEnv","unstubAllEnvs","baseConfig","api","dataset","projectId","defaultMocks","cliConfig","projectRoot","directory","type","token","setupEditorMocks","tmpdir","mockReturnValue","mkdir","mockResolvedValue","undefined","writeFile","unlink","setupWatchMocks","clearAllMocks","stdout","toMatchInlineSnapshot","mockDoc","_id","_type","title","mockTransaction","commit","results","id","operation","transaction","readFile","JSON","stringify","parse","mocks","toContain","toHaveBeenCalledWith","resolve","process","cwd","create","createOrReplace","createIfNotExists","getDocument","mode","recursive","toHaveBeenCalled","objectContaining","error","toBeInstanceOf","Error","message","oclif","exit","toBe","toEqual","mockRejectedValue","invalidDoc","stringContaining","any","String","encoding","each","repeat","description","doc","expectedErrorSubstring","docs","docWithReservedFields","_createdAt","_rev","_updatedAt","emptyArray","flag","expectedMessage","mockDocs","args","push","expectedMutations","map","existingDoc","mockGetDocument","testUuid","defaultDoc","writeFileContent","not","mockWatcher","on","mockReturnThis","Function","Array","stdio","changeHandler","mockImplementation","event","handler","toBeDefined"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,OAAOC,QAAQ,mBAAkB;AACjC,OAAOC,QAAQ,UAAS;AACxB,OAAOC,UAAU,YAAW;AAE5B,SAAQC,UAAU,QAAO,cAAa;AACtC,SAAQC,mBAAmB,QAAO,mBAAkB;AACpD,SAAQC,WAAW,QAAO,mBAAkB;AAC5C,SAAQC,SAASC,aAAa,QAAO,WAAU;AAC/C,SAAQC,KAAK,EAAEC,SAAS,QAAO,QAAO;AACtC,OAAOC,WAAW,QAAO;AACzB,SAAQC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAE5D,SAAQC,aAAa,QAAO,iCAAgC;AAC5D,SAAQC,qBAAqB,QAAO,eAAc;AAElDF,GAAGG,IAAI,CAAC;AACRH,GAAGG,IAAI,CAAC;AACRH,GAAGG,IAAI,CAAC,YAAY,IAAO,CAAA;QACzBZ,OAAOS,GAAGI,EAAE;IACd,CAAA;AACAJ,GAAGG,IAAI,CAAC;AACRH,GAAGG,IAAI,CAAC;AAERH,GAAGG,IAAI,CAAC,eAAe;IACrB,OAAO;QACLnB,YAAYgB,GAAGI,EAAE;IACnB;AACF;AAEAJ,GAAGG,IAAI,CAAC,oBAAoB;IAC1B,MAAME,SAAS,MAAML,GAAGM,YAAY,CAAC;IACrC,OAAO;QACL,GAAGD,MAAM;QACThB,qBAAqBW,GAAGI,EAAE;IAC5B;AACF;AAEA,MAAMG,SAASP,GAAGQ,MAAM,CAACvB;AACzB,MAAMwB,SAAST,GAAGQ,MAAM,CAACtB;AACzB,MAAMwB,oBAAoBV,GAAGQ,MAAM,CAAChB;AACpC,MAAMmB,YAAYX,GAAGQ,MAAM,CAACf;AAC5B,MAAMmB,gBAAgBZ,GAAGQ,MAAM,CAACd;AAChC,MAAMmB,YAAYb,GAAGQ,MAAM,CAACb;AAC5B,MAAMmB,iBAAiBd,GAAGQ,MAAM,CAACxB;AACjC,MAAM+B,0BAA0Bf,GAAGQ,MAAM,CAACnB;AAE1C,MAAM2B,gBAAgB;AACtB,MAAMC,cAAc;AAEpB,+CAA+C;AAC/C,SAASC,cAAcC,MAA2B;IAChD,OAAO;QACLnB,GAAGoB,OAAO,CAAC,UAAU;QACrB,IAAI;YACF,MAAMD;QACR,SAAU;YACRnB,GAAGqB,aAAa;QAClB;IACF;AACF;AAEA,uCAAuC;AACvC,MAAMC,aAAa;IACjBC,KAAK;QACHC,SAASP;QACTQ,WAAWT;IACb;AACF;AAEA,MAAMU,eAAe;IACnBC,WAAWL;IACXM,aAAa;QACXC,WAAW;QACX1C,MAAM;QACN2C,MAAM;IACR;IACAC,OAAO;AACT;AAEA,mBAAmB;AACnB,MAAMC,mBAAmB;IACvBvB,OAAOwB,MAAM,CAACC,eAAe,CAAC;IAC9B3B,OAAO4B,KAAK,CAACC,iBAAiB,CAACC;IAC/B9B,OAAO+B,SAAS,CAACF,iBAAiB,CAACC;IACnC9B,OAAOgC,MAAM,CAACH,iBAAiB,CAACC;IAChCzB,cAAcsB,eAAe,CAACG;AAChC;AAEA,MAAMG,kBAAkB;IACtB/B,OAAOwB,MAAM,CAACC,eAAe,CAAC;IAC9B3B,OAAO4B,KAAK,CAACC,iBAAiB,CAACC;IAC/B9B,OAAO+B,SAAS,CAACF,iBAAiB,CAACC;IACnC9B,OAAOgC,MAAM,CAACH,iBAAiB,CAACC;AAClC;AAEAxC,SAAS,qBAAqB;IAC5BD,UAAU;QACRI,GAAGyC,aAAa;IAClB;IAEA1C,KAAK,gBAAgB;QACnB,MAAM,EAAC2C,MAAM,EAAC,GAAG,MAAMtD,WAAW;YAAC;YAAoB;SAAS;QAEhEU,OAAO4C,QAAQC,qBAAqB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+CtC,CAAC;IACH;IAEA5C,KAAK,gEAAgE;QACnE,MAAM6C,UAAU;YACdC,KAAK;YACLC,OAAO;YACPC,OAAO;QACT;QAEA,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;YAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBAChCc,SAAS;oBAAC;wBAACC,IAAI;wBAAYC,WAAW;oBAAQ;iBAAE;YAClD;QACF;QAEArC,wBAAwBqB,iBAAiB,CAAC;YACxCiB,aAAaL;QACf;QAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACZ;QACjD/B,UAAU4C,KAAK,CAACvB,eAAe,CAACU;QAEhC,MAAM,EAACF,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuB;YAAC;SAAgB,EAAE;YAC3EwD,OAAO;gBACL,GAAGhC,YAAY;YACjB;QACF;QAEA5B,OAAO4C,QAAQiB,SAAS,CAAC;QACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;QACzB7D,OAAOS,OAAO+C,QAAQ,EAAEM,oBAAoB,CAC1CzE,KAAK0E,OAAO,CAACC,QAAQC,GAAG,IAAI,kBAC5B;QAEFjE,OAAOkD,iBAAiBY,oBAAoB,CAAC;YAAC;gBAACI,QAAQpB;YAAO;SAAE;IAClE;IAEA7C,KAAK,sCAAsC;QACzC,MAAM6C,UAAU;YACdC,KAAK;YACLC,OAAO;YACPC,OAAO;QACT;QAEA,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;YAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBAChCc,SAAS;oBAAC;wBAACC,IAAI;wBAAYC,WAAW;oBAAQ;iBAAE;YAClD;QACF;QAEArC,wBAAwBqB,iBAAiB,CAAC;YACxCiB,aAAaL;QACf;QAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACZ;QACjD/B,UAAU4C,KAAK,CAACvB,eAAe,CAACU;QAEhC,MAAM,EAACF,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuB;YAAC;YAAiB;SAAY,EAAE;YACxFwD,OAAO;gBACL,GAAGhC,YAAY;YACjB;QACF;QAEA5B,OAAO4C,QAAQiB,SAAS,CAAC;QACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;QACzB7D,OAAOkD,iBAAiBY,oBAAoB,CAAC;YAAC;gBAACK,iBAAiBrB;YAAO;SAAE;IAC3E;IAEA7C,KAAK,sCAAsC;QACzC,MAAM6C,UAAU;YACdC,KAAK;YACLC,OAAO;YACPC,OAAO;QACT;QAEA,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;YAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBAChCc,SAAS;oBAAC;wBAACC,IAAI;wBAAYC,WAAW;oBAAQ;iBAAE;YAClD;QACF;QAEArC,wBAAwBqB,iBAAiB,CAAC;YACxCiB,aAAaL;QACf;QAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACZ;QACjD/B,UAAU4C,KAAK,CAACvB,eAAe,CAACU;QAEhC,MAAM,EAACF,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuB;YAAC;YAAiB;SAAY,EAAE;YACxFwD,OAAO;gBACL,GAAGhC,YAAY;YACjB;QACF;QAEA5B,OAAO4C,QAAQiB,SAAS,CAAC;QACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;QACzB7D,OAAOkD,iBAAiBY,oBAAoB,CAAC;YAAC;gBAACM,mBAAmBtB;YAAO;SAAE;IAC7E;IAEA7C,KACE,gFACAmB,cAAc;QACZ,MAAM8B,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;YAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBAChCc,SAAS;oBAAC;wBAACC,IAAI;wBAAgBC,WAAW;oBAAQ;iBAAE;YACtD;QACF;QAEArC,wBAAwBqB,iBAAiB,CAAC;YACxC+B,aAAanE,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;YACvCiB,aAAaL;QACf;QAEAhB;QACAzB,OAAO+C,QAAQ,CAAClB,iBAAiB,CAAC;QAClCvB,UAAU2C,SAAS,CAACtB,eAAe,CAAC;QACpCrB,UAAU4C,KAAK,CAACvB,eAAe,CAAC;YAACW,KAAK;YAAgBC,OAAO;QAAc;QAE3E,MAAM,EAACJ,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuB,EAAE,EAAE;YAC5DwD,OAAO;gBACL,GAAGhC,YAAY;YACjB;QACF;QAEA5B,OAAO4C,QAAQiB,SAAS,CAAC;QACzB7D,OAAOS,OAAO4B,KAAK,EAAEyB,oBAAoB,CAAC,mBAAmB;YAC3DQ,MAAM;YACNC,WAAW;QACb;QACAvE,OAAOc,eAAe0D,gBAAgB;IACxC;IAGFvE,KAAK,6DAA6D;QAChE,MAAM6C,UAAU;YACdC,KAAK;YACLC,OAAO;YACPC,OAAO;QACT;QAEA,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;YAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBAChCc,SAAS;oBAAC;wBAACC,IAAI;wBAAYC,WAAW;oBAAQ;iBAAE;YAClD;QACF;QAEArC,wBAAwBqB,iBAAiB,CAAC;YACxCiB,aAAaL;QACf;QAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACZ;QACjD/B,UAAU4C,KAAK,CAACvB,eAAe,CAACU;QAEhC,MAAM,EAACF,MAAM,EAAC,GAAG,MAAMpD,YACrBY,uBACA;YAAC;YAAiB;YAAa;SAAU,EACzC;YACEwD,OAAO;gBACL,GAAGhC,YAAY;YACjB;QACF;QAGF5B,OAAO4C,QAAQiB,SAAS,CAAC;QACzB7D,OAAOiB,yBAAyB6C,oBAAoB,CAClD9D,OAAOyE,gBAAgB,CAAC;YACtB/C,SAAS;QACX;IAEJ;IAEAzB,KAAK,iEAAiE;QACpE,MAAM,EAACyE,KAAK,EAAC,GAAG,MAAMlF,YACpBY,uBACA;YAAC;YAAiB;YAAa;SAAY,EAC3C;YAACwD,OAAOhC;QAAY;QAGtB5B,OAAO0E,OAAOC,cAAc,CAACC;QAC7B5E,OAAO0E,OAAOG,SAAShB,SAAS,CAAC;QACjC7D,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA/E,KAAK,0DAA0D;QAC7D,MAAM,EAACyE,KAAK,EAAC,GAAG,MAAMlF,YAAYY,uBAAuB;YAAC;YAAiB;YAAQ;SAAU,EAAE;YAC7FwD,OAAOhC;QACT;QAEA5B,OAAO0E,OAAOC,cAAc,CAACC;QAC7B5E,OAAO0E,OAAOG,SAAShB,SAAS,CAAC;QACjC7D,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA/E,KAAK,iDAAiD;QACpD,MAAM,EAACyE,KAAK,EAAC,GAAG,MAAMlF,YAAYY,uBAAuB;YAAC;SAAgB,EAAE;YAC1EwD,OAAO;gBACL,GAAGhC,YAAY;gBACfC,WAAW;oBACTJ,KAAK;wBACHC,SAAS;wBACTC,WAAWY;oBACb;gBACF;YACF;QACF;QAEAvC,OAAO0E,OAAOC,cAAc,CAACC;QAC7B5E,OAAO0E,OAAOG,SAASI,OAAO,CAAC9E;QAC/BH,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA/E,KAAK,gEAAgE;QACnE,MAAM,EAACyE,KAAK,EAAC,GAAG,MAAMlF,YAAYY,uBAAuB;YAAC;SAAgB,EAAE;YAC1EwD,OAAO;gBACL,GAAGhC,YAAY;gBACfC,WAAW;oBACTJ,KAAK;wBACHC,SAASa;wBACTZ,WAAWT;oBACb;gBACF;YACF;QACF;QAEAlB,OAAO0E,OAAOC,cAAc,CAACC;QAC7B5E,OAAO0E,OAAOG,SAAShB,SAAS,CAAC;QACjC7D,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA/E,KAAK,mDAAmD;QACtDQ,OAAO+C,QAAQ,CAAC0B,iBAAiB,CAAC,IAAIN,MAAM;QAE5C,MAAM,EAACF,KAAK,EAAC,GAAG,MAAMlF,YAAYY,uBAAuB;YAAC;SAAmB,EAAE;YAC7EwD,OAAO;gBACL,GAAGhC,YAAY;YACjB;QACF;QAEA5B,OAAO0E,OAAOC,cAAc,CAACC;QAC7B5E,OAAO0E,OAAOG,SAAShB,SAAS,CAAC;QACjC7D,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA/E,KAAK,kDAAkD;QACrD,MAAMkF,aAAa;YAAClC,OAAO;QAAW,EAAE,gBAAgB;;QAExDxC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACyB;QACjDpE,UAAU4C,KAAK,CAACvB,eAAe,CAAC+C;QAEhC,MAAM,EAACT,KAAK,EAAC,GAAG,MAAMlF,YAAYY,uBAAuB;YAAC;SAAmB,EAAE;YAC7EwD,OAAO;gBACL,GAAGhC,YAAY;YACjB;QACF;QAEA5B,OAAO0E,OAAOC,cAAc,CAACC;QAC7B5E,OAAO0E,OAAOG,SAAShB,SAAS,CAAC;QACjC7D,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;IAClC;IAEA/E,KACE,4CACAmB,cAAc;QACZ,MAAM8B,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;YAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBAChCc,SAAS;oBAAC;wBAACC,IAAI;wBAAgBC,WAAW;oBAAQ;iBAAE;YACtD;QACF;QACArC,wBAAwBqB,iBAAiB,CAAC;YACxC+B,aAAanE,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;YACvCiB,aAAaL;QACf;QAEAhB;QACAzB,OAAO+C,QAAQ,CAAClB,iBAAiB,CAAC;QAClCvB,UAAU2C,SAAS,CAACtB,eAAe,CAAC;QACpCrB,UAAU4C,KAAK,CAACvB,eAAe,CAAC;YAACW,KAAK;YAAgBC,OAAO;QAAc;QAE3E,MAAMxD,YAAYY,uBAAuB;YAAC;SAAU,EAAE;YACpDwD,OAAO;gBACL,GAAGhC,YAAY;YACjB;QACF;QAEA5B,OAAOe,UAAU2C,SAAS,EAAEc,gBAAgB;QAC5CxE,OAAOS,OAAO+B,SAAS,EAAEsB,oBAAoB,CAC3C9D,OAAOoF,gBAAgB,CAAC,WACxBpF,OAAOqF,GAAG,CAACC,SACX;YACEC,UAAU;YACVjB,MAAM;QACR;IAEJ;IAGFvE,SAAS,cAAc;QACrBE,KAAKuF,IAAI,CAAC;YACR;gBAAC;gBAAuB;gBAAiB;aAA6B;YACtE;gBACE;gBACA;oBAACvC,OAAO;gBAAM;gBACd;aACD;YACD;gBAAC;gBAA6B;oBAACD,OAAO;oBAAIC,OAAO;gBAAM;gBAAG;aAAiC;YAC3F;gBACE;gBACA;oBAACD,OAAO;oBAAYC,OAAO;gBAAM;gBACjC;aACD;YACD;gBACE;gBACA;oBAACD,OAAO;oBAAgBC,OAAO;gBAAM;gBACrC;aACD;YACD;gBACE;gBACA;oBAACF,KAAK;oBAAOC,OAAO;oBAAQC,OAAO;gBAAM;gBACzC;aACD;YACD;gBACE;gBACA;oBAACF,KAAK;oBAAcC,OAAO;oBAAQC,OAAO;gBAAM;gBAChD;aACD;YACD;gBACE;gBACA;oBAACF,KAAK,IAAI0C,MAAM,CAAC;oBAAMzC,OAAO;oBAAQC,OAAO;gBAAM;gBACnD;aACD;SACF,EAAE,gBAAgB,OAAOyC,aAAaC,KAAKC;YAC1C,MAAM1C,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBAAC;4BAACC,IAAI;4BAAYC,WAAW;wBAAQ;qBAAE;gBAClD;YACF;YACArC,wBAAwBqB,iBAAiB,CAAC;gBACxCiB,aAAaL;YACf;YAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACiC;YACjD5E,UAAU4C,KAAK,CAACvB,eAAe,CAACuD;YAEhC,MAAM,EAACjB,KAAK,EAAC,GAAG,MAAMlF,YAAYY,uBAAuB;gBAAC;aAAmB,EAAE;gBAC7EwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA5B,OAAO0E,OAAOC,cAAc,CAACC;YAC7B5E,OAAO0E,OAAOG,SAAShB,SAAS,CAAC+B;YACjC5F,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;QAClC;QAEA/E,KAAKuF,IAAI,CAAC;YACR;gBACE;gBACA;oBAAC;wBAACvC,OAAO;oBAAS;oBAAG;wBAACD,OAAO;wBAASC,OAAO;oBAAO;iBAAE;gBACtD;aACD;YACD;gBACE;gBACA;oBAAC;wBAACD,OAAO;wBAASC,OAAO;oBAAO;oBAAG;wBAACA,OAAO;oBAAS;iBAAE;gBACtD;aACD;SACF,EAAE,gBAAgB,OAAOyC,aAAaG,MAAMD;YAC3C,MAAM1C,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBAAC;4BAACC,IAAI;4BAAYC,WAAW;wBAAQ;qBAAE;gBAClD;YACF;YACArC,wBAAwBqB,iBAAiB,CAAC;gBACxCiB,aAAaL;YACf;YAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACmC;YACjD9E,UAAU4C,KAAK,CAACvB,eAAe,CAACyD;YAEhC,MAAM,EAACnB,KAAK,EAAC,GAAG,MAAMlF,YAAYY,uBAAuB;gBAAC;aAAoB,EAAE;gBAC9EwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA5B,OAAO0E,OAAOC,cAAc,CAACC;YAC7B5E,OAAO0E,OAAOG,SAAShB,SAAS,CAAC+B;YACjC5F,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;QAClC;QAEA/E,KAAK,gEAAgE;YACnE,MAAM6F,wBAAwB;gBAC5BC,YAAY;gBACZhD,KAAK;gBACLiD,MAAM;gBACNhD,OAAO;gBACPiD,YAAY;gBACZhD,OAAO;YACT;YAEA,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBAAC;4BAACC,IAAI;4BAAYC,WAAW;wBAAQ;qBAAE;gBAClD;YACF;YAEArC,wBAAwBqB,iBAAiB,CAAC;gBACxCiB,aAAaL;YACf;YAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACoC;YACjD/E,UAAU4C,KAAK,CAACvB,eAAe,CAAC0D;YAEhC,oEAAoE;YACpE,MAAM,EAAClD,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuB;gBAAC;aAAW,EAAE;gBACtEwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA5B,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAOkD,iBAAiBY,oBAAoB,CAAC;gBAAC;oBAACI,QAAQ4B;gBAAqB;aAAE;QAChF;QAEA7F,KAAK,+CAA+C;YAClD,MAAMiG,aAAwB,EAAE;YAEhC,MAAMhD,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBAAC;4BAACC,IAAI;4BAAYC,WAAW;wBAAQ;qBAAE;gBAClD;YACF;YAEArC,wBAAwBqB,iBAAiB,CAAC;gBACxCiB,aAAaL;YACf;YAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACwC;YACjDnF,UAAU4C,KAAK,CAACvB,eAAe,CAAC8D;YAEhC,MAAM,EAACxB,KAAK,EAAC,GAAG,MAAMlF,YAAYY,uBAAuB;gBAAC;aAAkB,EAAE;gBAC5EwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA5B,OAAO0E,OAAOC,cAAc,CAACC;YAC7B5E,OAAO0E,OAAOG,SAAShB,SAAS,CAAC;YACjC7D,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;QAClC;IACF;IAEAjF,SAAS,oBAAoB;QAC3BE,KAAKuF,IAAI,CAAC;YACR;gBAAC;gBAAU;gBAAU;aAAW;YAChC;gBAAC;gBAAmB;gBAAW;aAAY;YAC3C;gBAAC;gBAAqB;gBAAW;aAA4B;SAC9D,EAAE,gDAAgD,OAAOlC,WAAW6C,MAAMC;YACzE,MAAMC,WAAW;gBACf;oBAACtD,KAAK;oBAAQC,OAAO;oBAAQC,OAAO;gBAAQ;gBAC5C;oBAACF,KAAK;oBAAQC,OAAO;oBAAQC,OAAO;gBAAQ;aAC7C;YAED,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBACP;4BAACC,IAAI;4BAAQC,WAAWA,cAAc,sBAAsB,WAAW;wBAAQ;wBAC/E;4BAACD,IAAI;4BAAQC,WAAWA,cAAc,sBAAsB,WAAW;wBAAQ;qBAChF;gBACH;YACF;YAEArC,wBAAwBqB,iBAAiB,CAAC;gBACxCiB,aAAaL;YACf;YAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAAC2C;YACjDtF,UAAU4C,KAAK,CAACvB,eAAe,CAACiE;YAEhC,MAAMC,OAAO;gBAAC;aAAY;YAC1B,IAAIH,SAAS,UAAUG,KAAKC,IAAI,CAAC,CAAC,EAAE,EAAEJ,MAAM;YAE5C,MAAM,EAACvD,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuBkG,MAAM;gBAC9D1C,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA5B,OAAO4C,QAAQiB,SAAS,CAACuC;YACzBpG,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;YAEzB,MAAM2C,oBAAoBH,SAASI,GAAG,CAAC,CAACd,MAAS,CAAA;oBAAC,CAACrC,UAAU,EAAEqC;gBAAG,CAAA;YAClE3F,OAAOkD,iBAAiBY,oBAAoB,CAAC0C;QAC/C;QAEAvG,KAAK,+CAA+C;YAClD,MAAMoG,WAAW;gBACf;oBAACtD,KAAK;oBAAQC,OAAO;oBAAQC,OAAO;gBAAQ;gBAC5C;oBAACF,KAAK;oBAAQC,OAAO;oBAAQC,OAAO;gBAAQ;gBAC5C;oBAACF,KAAK;oBAAQC,OAAO;oBAAQC,OAAO;gBAAQ;aAC7C;YAED,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBACP;4BAACC,IAAI;4BAAQC,WAAW;wBAAQ;wBAChC;4BAACD,IAAI;4BAAQC,WAAW;wBAAQ;wBAChC;4BAACD,IAAI;4BAAQC,WAAW;wBAAQ;qBACjC;gBACH;YACF;YAEArC,wBAAwBqB,iBAAiB,CAAC;gBACxCiB,aAAaL;YACf;YAEAzC,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAAC2C;YACjDtF,UAAU4C,KAAK,CAACvB,eAAe,CAACiE;YAEhC,MAAM,EAACzD,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuB;gBAAC;gBAAa;aAAY,EAAE;gBACpFwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA5B,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;QAC3B;IACF;IAEA9D,SAAS,mBAAmB;QAC1BE,KACE,4CACAmB,cAAc;YACZ,MAAMsF,cAAc;gBAClB3D,KAAK;gBACLC,OAAO;gBACPC,OAAO;YACT;YAEA,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBAAC;4BAACC,IAAI;4BAAgBC,WAAW;wBAAQ;qBAAE;gBACtD;YACF;YAEA,MAAMqD,kBAAkBzG,GAAGI,EAAE,GAAGgC,iBAAiB,CAACoE;YAElDzF,wBAAwBqB,iBAAiB,CAAC;gBACxC+B,aAAasC;gBACbpD,aAAaL;YACf;YAEAhB;YACAzB,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAAC;gBAAC,GAAGgD,WAAW;gBAAEzD,OAAO;YAAc;YACvFlC,UAAU4C,KAAK,CAACvB,eAAe,CAAC;gBAAC,GAAGsE,WAAW;gBAAEzD,OAAO;YAAc;YACtElC,UAAU2C,SAAS,CAACtB,eAAe,CAACqB,KAAKC,SAAS,CAACgD,aAAa,MAAM;YAEtE,MAAM,EAAC9D,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuB;gBAAC;gBAAQ;aAAe,EAAE;gBAClFwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA5B,OAAO2G,iBAAiB7C,oBAAoB,CAAC;YAC7C9D,OAAOS,OAAO+B,SAAS,EAAEsB,oBAAoB,CAC3C9D,OAAOoF,gBAAgB,CAAC,sBACxB3B,KAAKC,SAAS,CAACgD,aAAa,MAAM,IAClC1G,OAAOyE,gBAAgB,CAAC;gBAACH,MAAM;YAAK;YAEtCtE,OAAO4C,QAAQiB,SAAS,CAAC;QAC3B;QAGF5D,KACE,qCACAmB,cAAc;YACZ,MAAM8B,kBAAkBhD,GAAGI,EAAE;YAE7BW,wBAAwBqB,iBAAiB,CAAC;gBACxC+B,aAAanE,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBACvCiB,aAAaL;YACf;YAEAhB;YAEA,wEAAwE;YACxE,MAAM0E,WAAW;YACjB5F,eAAeoB,eAAe,CAACwE;YAE/B,MAAMC,aAAa;gBACjB9D,KAAK6D;gBACL5D,OAAO;YACT;YAEA,qDAAqD;YACrD,MAAM8D,mBAAmBrD,KAAKC,SAAS,CAACmD,YAAY,MAAM;YAC1D9F,UAAU2C,SAAS,CAACtB,eAAe,CAAC0E;YAEpC,kEAAkE;YAClErG,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACwE;YAClC,0DAA0D;YAC1D/F,UAAU4C,KAAK,CAACvB,eAAe,CAACyE;YAEhC,MAAMrH,YAAYY,uBAAuB,EAAE,EAAE;gBAC3CwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA,oFAAoF;YACpF5B,OAAOkD,iBAAiB6D,GAAG,CAACvC,gBAAgB;QAC9C;QAGFvE,KACE,gDACAmB,cAAc;YACZ,MAAM0B,UAAU;gBACdC,KAAK;gBACLC,OAAO;gBACPC,OAAO;YACT;YAEA,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAG4E,iBAAiB,CAAC,IAAIN,MAAM;YAC9C;YAEA3D,wBAAwBqB,iBAAiB,CAAC;gBACxC+B,aAAanE,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBACvCiB,aAAaL;YACf;YAEAhB;YACAzB,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACZ;YACjD/B,UAAU4C,KAAK,CAACvB,eAAe,CAACU;YAChC/B,UAAU2C,SAAS,CAACtB,eAAe,CACjCqB,KAAKC,SAAS,CAAC;gBAACX,KAAK;gBAAYC,OAAO;YAAY,GAAG,MAAM;YAG/D,MAAM,EAAC0B,KAAK,EAAC,GAAG,MAAMlF,YAAYY,uBAAuB,EAAE,EAAE;gBAC3DwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA5B,OAAO0E,OAAOC,cAAc,CAACC;YAC7B5E,OAAO0E,OAAOG,SAAShB,SAAS,CAAC;YACjC7D,OAAO0E,OAAOG,SAAShB,SAAS,CAAC;YACjC7D,OAAO0E,OAAOI,OAAOC,MAAMC,IAAI,CAAC;QAClC;QAGF/E,KACE,wCACAmB,cAAc;YACZ,MAAM0B,UAAU;gBACdC,KAAK;gBACLC,OAAO;gBACPC,OAAO;YACT;YAEA,MAAMC,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBAAC;4BAACC,IAAI;4BAAYC,WAAW;wBAAQ;qBAAE;gBAClD;YACF;YAEArC,wBAAwBqB,iBAAiB,CAAC;gBACxC+B,aAAanE,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBACvCiB,aAAaL;YACf;YAEAhB;YACA,4DAA4D;YAC5DzB,OAAOgC,MAAM,CAACyC,iBAAiB,CAAC,IAAIN,MAAM;YAC1CnE,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACZ;YACjD/B,UAAU4C,KAAK,CAACvB,eAAe,CAACU;YAChC/B,UAAU2C,SAAS,CAACtB,eAAe,CACjCqB,KAAKC,SAAS,CAAC;gBAACX,KAAK;gBAAYC,OAAO;YAAY,GAAG,MAAM;YAG/D,MAAM,EAACJ,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuB,EAAE,EAAE;gBAC5DwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA,kDAAkD;YAClD5B,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAOS,OAAOgC,MAAM,EAAE+B,gBAAgB;QACxC;IAEJ;IAEAzE,SAAS,cAAc;QACrBE,KACE,oDACAmB,cAAc;YACZ,MAAM4F,cAAc;gBAClBC,IAAI/G,GAAGI,EAAE,GAAG4G,cAAc;YAC5B;YACAtG,kBAAkBwB,eAAe,CAAC4E;YAElC,MAAM9D,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBAAC;4BAACC,IAAI;4BAAYC,WAAW;wBAAQ;qBAAE;gBAClD;YACF;YAEArC,wBAAwBqB,iBAAiB,CAAC;gBACxC+B,aAAanE,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBACvCiB,aAAaL;YACf;YAEAR;YACA3B,UAAU2C,SAAS,CAACtB,eAAe,CACjCqB,KAAKC,SAAS,CAAC;gBAACX,KAAK;gBAAYC,OAAO;YAAY,GAAG,MAAM;YAE/DnC,UAAUyB,iBAAiB,CAAC,CAAC;YAE7B,MAAM,EAACM,MAAM,EAAC,GAAG,MAAMpD,YAAYY,uBAAuB;gBAAC;aAAU,EAAE;gBACrEwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA5B,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAO4C,QAAQiB,SAAS,CAAC;YACzB7D,OAAOgH,YAAYC,EAAE,EAAEnD,oBAAoB,CAAC,UAAU9D,OAAOqF,GAAG,CAAC8B;YACjEnH,OAAOa,WAAWiD,oBAAoB,CAAC,OAAO9D,OAAOqF,GAAG,CAAC+B,QAAQ;gBAACC,OAAO;YAAS;YAClFrH,OAAOY,mBAAmBkD,oBAAoB,CAAC9D,OAAOoF,gBAAgB,CAAC;QACzE;QAGFnF,KACE,4CACAmB,cAAc;YACZ,MAAM0B,UAAU;gBACdC,KAAK;gBACLC,OAAO;gBACPC,OAAO;YACT;YAEA,IAAIqE;YACJ,MAAMN,cAAc;gBAClBC,IAAI/G,GAAGI,EAAE,GAAGiH,kBAAkB,CAAC,CAACC,OAAeC;oBAC7C,IAAID,UAAU,UAAU;wBACtBF,gBAAgBG;oBAClB;oBACA,OAAOT;gBACT;YACF;YACApG,kBAAkBwB,eAAe,CAAC4E;YAElC,MAAM9D,kBAAkBhD,GAAGI,EAAE,GAAG8B,eAAe,CAAC;gBAC9Ce,QAAQjD,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;oBAChCc,SAAS;wBAAC;4BAACC,IAAI;4BAAYC,WAAW;wBAAQ;qBAAE;gBAClD;YACF;YAEArC,wBAAwBqB,iBAAiB,CAAC;gBACxC+B,aAAanE,GAAGI,EAAE,GAAGgC,iBAAiB,CAAC;gBACvCiB,aAAaL;YACf;YAEAR;YACA3B,UAAU2C,SAAS,CAACtB,eAAe,CACjCqB,KAAKC,SAAS,CAAC;gBAACX,KAAK;gBAAYC,OAAO;YAAY,GAAG,MAAM;YAE/DnC,UAAUyB,iBAAiB,CAAC,CAAC;YAE7B,6DAA6D;YAC7D7B,OAAO+C,QAAQ,CAAClB,iBAAiB,CAACmB,KAAKC,SAAS,CAACZ;YACjD/B,UAAU4C,KAAK,CAACvB,eAAe,CAACU;YAEhC,MAAMtD,YAAYY,uBAAuB;gBAAC;aAAU,EAAE;gBACpDwD,OAAO;oBACL,GAAGhC,YAAY;gBACjB;YACF;YAEA,uBAAuB;YACvB5B,OAAOsH,eAAgBI,WAAW;YAClC,MAAMJ;YAENtH,OAAOkD,iBAAiBY,oBAAoB,CAAC;gBAAC;oBAACI,QAAQpB;gBAAO;aAAE;QAClE;IAEJ;AACF"}
|
|
@@ -1,58 +1,38 @@
|
|
|
1
1
|
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
|
|
3
2
|
import { testCommand } from '@sanity/cli-test';
|
|
4
|
-
import { afterEach,
|
|
3
|
+
import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
5
4
|
import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
|
|
6
5
|
import { DeleteDocumentCommand } from '../delete.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
const testProjectId = 'test-project';
|
|
7
|
+
const testDataset = 'production';
|
|
8
|
+
const defaultMocks = {
|
|
9
|
+
cliConfig: {
|
|
10
|
+
api: {
|
|
11
|
+
dataset: testDataset,
|
|
12
|
+
projectId: testProjectId
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
projectRoot: {
|
|
16
|
+
directory: '/test/path',
|
|
17
|
+
path: '/test/path/sanity.config.ts',
|
|
18
|
+
type: 'studio'
|
|
19
|
+
},
|
|
20
|
+
token: 'test-token'
|
|
21
|
+
};
|
|
22
|
+
const mockTransaction = vi.hoisted(()=>vi.fn());
|
|
23
|
+
const mockGetProjectCliClient = vi.hoisted(()=>vi.fn().mockResolvedValue({
|
|
24
|
+
transaction: mockTransaction
|
|
14
25
|
}));
|
|
15
|
-
vi.mock('
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
vi.mock('../../../../../cli-core/src/services/apiClient.js', ()=>({
|
|
24
|
-
getProjectCliClient: vi.fn()
|
|
25
|
-
}));
|
|
26
|
-
vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
|
|
27
|
-
getCliToken: vi.fn().mockResolvedValue('test-token')
|
|
28
|
-
}));
|
|
29
|
-
// Mock the project API client
|
|
30
|
-
const mockTransaction = vi.fn();
|
|
31
|
-
const mockCommit = vi.fn();
|
|
32
|
-
const mockDelete = vi.fn();
|
|
33
|
-
// Get the mocked functions
|
|
34
|
-
const mockedGetCliConfig = vi.mocked(getCliConfig);
|
|
35
|
-
const mockedGetProjectCliClient = vi.mocked(getProjectCliClient);
|
|
36
|
-
describe('documents delete', ()=>{
|
|
37
|
-
beforeEach(()=>{
|
|
38
|
-
// Setup transaction chain
|
|
39
|
-
mockDelete.mockReturnValue({
|
|
40
|
-
commit: mockCommit,
|
|
41
|
-
delete: mockDelete
|
|
42
|
-
});
|
|
43
|
-
mockTransaction.mockReturnValue({
|
|
44
|
-
commit: mockCommit,
|
|
45
|
-
delete: mockDelete
|
|
46
|
-
});
|
|
47
|
-
mockedGetProjectCliClient.mockResolvedValue({
|
|
48
|
-
transaction: mockTransaction
|
|
49
|
-
});
|
|
50
|
-
});
|
|
26
|
+
vi.mock('@sanity/cli-core', async ()=>{
|
|
27
|
+
const actual = await vi.importActual('@sanity/cli-core');
|
|
28
|
+
return {
|
|
29
|
+
...actual,
|
|
30
|
+
getProjectCliClient: mockGetProjectCliClient
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
describe('#documents:delete', ()=>{
|
|
51
34
|
afterEach(()=>{
|
|
52
35
|
vi.clearAllMocks();
|
|
53
|
-
mockTransaction.mockReset();
|
|
54
|
-
mockCommit.mockReset();
|
|
55
|
-
mockDelete.mockReset();
|
|
56
36
|
});
|
|
57
37
|
test('--help works', async ()=>{
|
|
58
38
|
const { stdout } = await runCommand([
|
|
@@ -96,7 +76,8 @@ describe('documents delete', ()=>{
|
|
|
96
76
|
`);
|
|
97
77
|
});
|
|
98
78
|
test('deletes a single document successfully', async ()=>{
|
|
99
|
-
|
|
79
|
+
const mockDelete = vi.fn();
|
|
80
|
+
const mockCommit = vi.fn().mockResolvedValue({
|
|
100
81
|
results: [
|
|
101
82
|
{
|
|
102
83
|
id: 'test-doc',
|
|
@@ -104,15 +85,22 @@ describe('documents delete', ()=>{
|
|
|
104
85
|
}
|
|
105
86
|
]
|
|
106
87
|
});
|
|
88
|
+
mockTransaction.mockReturnValue({
|
|
89
|
+
commit: mockCommit,
|
|
90
|
+
delete: mockDelete
|
|
91
|
+
});
|
|
107
92
|
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
108
93
|
'test-doc'
|
|
109
|
-
]
|
|
94
|
+
], {
|
|
95
|
+
mocks: defaultMocks
|
|
96
|
+
});
|
|
110
97
|
expect(stdout).toContain('Deleted 1 document');
|
|
111
98
|
expect(mockDelete).toHaveBeenCalledWith('test-doc');
|
|
112
99
|
expect(mockCommit).toHaveBeenCalled();
|
|
113
100
|
});
|
|
114
101
|
test('deletes multiple documents successfully', async ()=>{
|
|
115
|
-
|
|
102
|
+
const mockDelete = vi.fn();
|
|
103
|
+
const mockCommit = vi.fn().mockResolvedValue({
|
|
116
104
|
results: [
|
|
117
105
|
{
|
|
118
106
|
id: 'doc1',
|
|
@@ -128,11 +116,17 @@ describe('documents delete', ()=>{
|
|
|
128
116
|
}
|
|
129
117
|
]
|
|
130
118
|
});
|
|
119
|
+
mockTransaction.mockReturnValue({
|
|
120
|
+
commit: mockCommit,
|
|
121
|
+
delete: mockDelete
|
|
122
|
+
});
|
|
131
123
|
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
132
124
|
'doc1',
|
|
133
125
|
'doc2',
|
|
134
126
|
'doc3'
|
|
135
|
-
]
|
|
127
|
+
], {
|
|
128
|
+
mocks: defaultMocks
|
|
129
|
+
});
|
|
136
130
|
expect(stdout).toContain('Deleted 3 documents');
|
|
137
131
|
expect(mockDelete).toHaveBeenCalledWith('doc1');
|
|
138
132
|
expect(mockDelete).toHaveBeenCalledWith('doc2');
|
|
@@ -140,7 +134,8 @@ describe('documents delete', ()=>{
|
|
|
140
134
|
expect(mockCommit).toHaveBeenCalled();
|
|
141
135
|
});
|
|
142
136
|
test('handles documents not found', async ()=>{
|
|
143
|
-
|
|
137
|
+
const mockDelete = vi.fn();
|
|
138
|
+
const mockCommit = vi.fn().mockResolvedValue({
|
|
144
139
|
results: [
|
|
145
140
|
{
|
|
146
141
|
id: 'doc1',
|
|
@@ -148,10 +143,16 @@ describe('documents delete', ()=>{
|
|
|
148
143
|
}
|
|
149
144
|
]
|
|
150
145
|
});
|
|
146
|
+
mockTransaction.mockReturnValue({
|
|
147
|
+
commit: mockCommit,
|
|
148
|
+
delete: mockDelete
|
|
149
|
+
});
|
|
151
150
|
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
152
151
|
'doc1',
|
|
153
152
|
'nonexistent-doc'
|
|
154
|
-
]
|
|
153
|
+
], {
|
|
154
|
+
mocks: defaultMocks
|
|
155
|
+
});
|
|
155
156
|
expect(error).toBeInstanceOf(Error);
|
|
156
157
|
expect(error?.message).toContain('Document not found: nonexistent-doc');
|
|
157
158
|
expect(mockDelete).toHaveBeenCalledWith('doc1');
|
|
@@ -159,7 +160,8 @@ describe('documents delete', ()=>{
|
|
|
159
160
|
expect(mockCommit).toHaveBeenCalled();
|
|
160
161
|
});
|
|
161
162
|
test('uses custom dataset when --dataset flag is provided', async ()=>{
|
|
162
|
-
|
|
163
|
+
const mockDelete = vi.fn();
|
|
164
|
+
const mockCommit = vi.fn().mockResolvedValue({
|
|
163
165
|
results: [
|
|
164
166
|
{
|
|
165
167
|
id: 'test-doc',
|
|
@@ -167,70 +169,87 @@ describe('documents delete', ()=>{
|
|
|
167
169
|
}
|
|
168
170
|
]
|
|
169
171
|
});
|
|
172
|
+
mockTransaction.mockReturnValue({
|
|
173
|
+
commit: mockCommit,
|
|
174
|
+
delete: mockDelete
|
|
175
|
+
});
|
|
170
176
|
await testCommand(DeleteDocumentCommand, [
|
|
171
177
|
'test-doc',
|
|
172
178
|
'--dataset',
|
|
173
179
|
'staging'
|
|
174
|
-
]
|
|
180
|
+
], {
|
|
181
|
+
mocks: defaultMocks
|
|
182
|
+
});
|
|
175
183
|
expect(mockDelete).toHaveBeenCalledWith('test-doc');
|
|
176
|
-
// Verify that the
|
|
177
|
-
expect(
|
|
184
|
+
// Verify that the projectApiClient was called with the staging dataset
|
|
185
|
+
expect(mockGetProjectCliClient).toHaveBeenCalledWith(expect.objectContaining({
|
|
178
186
|
dataset: 'staging',
|
|
179
|
-
projectId:
|
|
187
|
+
projectId: testProjectId
|
|
180
188
|
}));
|
|
181
189
|
});
|
|
182
190
|
test('throws error when no project ID is configured', async ()=>{
|
|
183
|
-
mockedGetCliConfig.mockResolvedValue({
|
|
184
|
-
api: {
|
|
185
|
-
dataset: 'production',
|
|
186
|
-
projectId: undefined
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
191
|
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
190
192
|
'test-doc'
|
|
191
|
-
]
|
|
193
|
+
], {
|
|
194
|
+
mocks: {
|
|
195
|
+
...defaultMocks,
|
|
196
|
+
cliConfig: {
|
|
197
|
+
api: {
|
|
198
|
+
dataset: testDataset,
|
|
199
|
+
projectId: undefined
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
});
|
|
192
204
|
expect(error).toBeInstanceOf(Error);
|
|
193
205
|
expect(error?.message).toEqual(NO_PROJECT_ID);
|
|
194
206
|
expect(error?.oclif?.exit).toBe(1);
|
|
195
|
-
// Restore the original mock for other tests
|
|
196
|
-
mockedGetCliConfig.mockResolvedValue({
|
|
197
|
-
api: {
|
|
198
|
-
dataset: 'production',
|
|
199
|
-
projectId: 'test-project'
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
207
|
});
|
|
203
208
|
test('throws error when no dataset is configured and none provided', async ()=>{
|
|
204
|
-
mockedGetCliConfig.mockResolvedValueOnce({
|
|
205
|
-
api: {
|
|
206
|
-
dataset: undefined,
|
|
207
|
-
projectId: 'test-project'
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
209
|
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
211
210
|
'test-doc'
|
|
212
|
-
]
|
|
211
|
+
], {
|
|
212
|
+
mocks: {
|
|
213
|
+
...defaultMocks,
|
|
214
|
+
cliConfig: {
|
|
215
|
+
api: {
|
|
216
|
+
dataset: undefined,
|
|
217
|
+
projectId: testProjectId
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
});
|
|
213
222
|
expect(error).toBeInstanceOf(Error);
|
|
214
223
|
expect(error?.message).toContain('No dataset specified');
|
|
215
224
|
expect(error?.oclif?.exit).toBe(1);
|
|
216
225
|
});
|
|
217
226
|
test('handles transaction errors gracefully', async ()=>{
|
|
218
|
-
|
|
227
|
+
const mockDelete = vi.fn();
|
|
228
|
+
const mockCommit = vi.fn().mockRejectedValue(new Error('Transaction failed'));
|
|
229
|
+
mockTransaction.mockReturnValue({
|
|
230
|
+
commit: mockCommit,
|
|
231
|
+
delete: mockDelete
|
|
232
|
+
});
|
|
219
233
|
const { error } = await testCommand(DeleteDocumentCommand, [
|
|
220
234
|
'test-doc'
|
|
221
|
-
]
|
|
235
|
+
], {
|
|
236
|
+
mocks: defaultMocks
|
|
237
|
+
});
|
|
222
238
|
expect(error).toBeInstanceOf(Error);
|
|
223
239
|
expect(error?.message).toContain('Failed to delete 1 document: Transaction failed');
|
|
224
240
|
expect(error?.oclif?.exit).toBe(1);
|
|
225
241
|
expect(mockDelete).toHaveBeenCalledWith('test-doc');
|
|
226
242
|
});
|
|
227
243
|
test('requires document ID argument', async ()=>{
|
|
228
|
-
const { error } = await testCommand(DeleteDocumentCommand, []
|
|
244
|
+
const { error } = await testCommand(DeleteDocumentCommand, [], {
|
|
245
|
+
mocks: defaultMocks
|
|
246
|
+
});
|
|
229
247
|
expect(error).toBeInstanceOf(Error);
|
|
230
248
|
expect(error?.message).toContain('Missing 1 required arg');
|
|
231
249
|
});
|
|
232
250
|
test('shows singular message when deleting one document', async ()=>{
|
|
233
|
-
|
|
251
|
+
const mockDelete = vi.fn();
|
|
252
|
+
const mockCommit = vi.fn().mockResolvedValue({
|
|
234
253
|
results: [
|
|
235
254
|
{
|
|
236
255
|
id: 'test-doc',
|
|
@@ -238,14 +257,21 @@ describe('documents delete', ()=>{
|
|
|
238
257
|
}
|
|
239
258
|
]
|
|
240
259
|
});
|
|
260
|
+
mockTransaction.mockReturnValue({
|
|
261
|
+
commit: mockCommit,
|
|
262
|
+
delete: mockDelete
|
|
263
|
+
});
|
|
241
264
|
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
242
265
|
'test-doc'
|
|
243
|
-
]
|
|
266
|
+
], {
|
|
267
|
+
mocks: defaultMocks
|
|
268
|
+
});
|
|
244
269
|
expect(stdout).toContain('Deleted 1 document');
|
|
245
270
|
expect(stdout).not.toContain('documents');
|
|
246
271
|
});
|
|
247
272
|
test('shows plural message when deleting multiple documents', async ()=>{
|
|
248
|
-
|
|
273
|
+
const mockDelete = vi.fn();
|
|
274
|
+
const mockCommit = vi.fn().mockResolvedValue({
|
|
249
275
|
results: [
|
|
250
276
|
{
|
|
251
277
|
id: 'doc1',
|
|
@@ -257,10 +283,16 @@ describe('documents delete', ()=>{
|
|
|
257
283
|
}
|
|
258
284
|
]
|
|
259
285
|
});
|
|
286
|
+
mockTransaction.mockReturnValue({
|
|
287
|
+
commit: mockCommit,
|
|
288
|
+
delete: mockDelete
|
|
289
|
+
});
|
|
260
290
|
const { stdout } = await testCommand(DeleteDocumentCommand, [
|
|
261
291
|
'doc1',
|
|
262
292
|
'doc2'
|
|
263
|
-
]
|
|
293
|
+
], {
|
|
294
|
+
mocks: defaultMocks
|
|
295
|
+
});
|
|
264
296
|
expect(stdout).toContain('Deleted 2 documents');
|
|
265
297
|
});
|
|
266
298
|
});
|