@sanity/cli 6.0.0-alpha.4 → 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/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/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 +38 -125
- 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 +40 -27
- package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.create-new-project.test.js +84 -85
- package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.plan.test.js +103 -44
- package/dist/commands/__tests__/init/init.plan.test.js.map +1 -1
- package/dist/commands/__tests__/init/init.setup.test.js +85 -29
- package/dist/commands/__tests__/init/init.setup.test.js.map +1 -1
- 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__/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 +166 -77
- 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__/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 +84 -189
- 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/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 +1 -1
- package/dist/services/organizations.js +1 -1
- package/dist/services/organizations.js.map +1 -1
- package/dist/services/projects.d.ts +11 -0
- package/dist/services/projects.js +41 -0
- 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 +8 -0
- package/dist/services/user.js +15 -2
- package/dist/services/user.js.map +1 -1
- 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.manifest.json +172 -27
- package/package.json +27 -28
- 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/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
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { runCommand } from '@oclif/test';
|
|
2
|
-
import { getCliConfig, getProjectCliClient } from '@sanity/cli-core';
|
|
3
2
|
import { select } from '@sanity/cli-core/ux';
|
|
4
3
|
import { mockApi, testCommand } from '@sanity/cli-test';
|
|
5
4
|
import nock from 'nock';
|
|
@@ -7,54 +6,40 @@ import { afterEach, describe, expect, test, vi } from 'vitest';
|
|
|
7
6
|
import { BACKUP_API_VERSION } from '../../../actions/backup/constants.js';
|
|
8
7
|
import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
|
|
9
8
|
import { ListBackupCommand } from '../list.js';
|
|
10
|
-
vi.
|
|
11
|
-
|
|
9
|
+
const mockListDatasets = vi.hoisted(()=>vi.fn());
|
|
10
|
+
vi.mock('@sanity/cli-core', async (importOriginal)=>{
|
|
11
|
+
const actual = await importOriginal();
|
|
12
12
|
return {
|
|
13
13
|
...actual,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
|
|
18
|
-
findProjectRoot: vi.fn().mockResolvedValue({
|
|
19
|
-
directory: '/test/path',
|
|
20
|
-
root: '/test/path',
|
|
21
|
-
type: 'studio'
|
|
22
|
-
})
|
|
23
|
-
}));
|
|
24
|
-
vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
|
|
25
|
-
getCliConfig: vi.fn().mockResolvedValue({
|
|
26
|
-
api: {
|
|
27
|
-
projectId: 'test-project'
|
|
14
|
+
getProjectCliClient: vi.fn().mockResolvedValue({
|
|
15
|
+
datasets: {
|
|
16
|
+
list: mockListDatasets
|
|
28
17
|
}
|
|
29
18
|
})
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
vi.mock(import('../../../../../cli-core/src/services/apiClient.js'), async (importOriginal)=>{
|
|
35
|
-
const actual = await importOriginal();
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
vi.mock('@sanity/cli-core/ux', async ()=>{
|
|
22
|
+
const actual = await vi.importActual('@sanity/cli-core/ux');
|
|
36
23
|
return {
|
|
37
24
|
...actual,
|
|
38
|
-
|
|
25
|
+
select: vi.fn()
|
|
39
26
|
};
|
|
40
27
|
});
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
name: 'production'
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
name: 'staging'
|
|
50
|
-
}
|
|
51
|
-
])=>{
|
|
52
|
-
mockGetProjectCliClient.mockResolvedValue({
|
|
53
|
-
datasets: {
|
|
54
|
-
list: vi.fn().mockResolvedValue(datasets)
|
|
28
|
+
const testProjectId = 'test-project';
|
|
29
|
+
const defaultMocks = {
|
|
30
|
+
cliConfig: {
|
|
31
|
+
api: {
|
|
32
|
+
projectId: testProjectId
|
|
55
33
|
}
|
|
56
|
-
}
|
|
34
|
+
},
|
|
35
|
+
projectRoot: {
|
|
36
|
+
directory: '/test/path',
|
|
37
|
+
path: '/test/path/sanity.config.ts',
|
|
38
|
+
type: 'studio'
|
|
39
|
+
},
|
|
40
|
+
token: 'test-token'
|
|
57
41
|
};
|
|
42
|
+
const mockSelect = vi.mocked(select);
|
|
58
43
|
const backupsResponse = {
|
|
59
44
|
backups: [
|
|
60
45
|
{
|
|
@@ -84,21 +69,27 @@ describe('#backup:list', ()=>{
|
|
|
84
69
|
expect(stdout).toContain('EXAMPLES');
|
|
85
70
|
});
|
|
86
71
|
test('should fail when no project ID is configured', async ()=>{
|
|
87
|
-
|
|
88
|
-
|
|
72
|
+
const { error } = await testCommand(ListBackupCommand, [], {
|
|
73
|
+
mocks: {
|
|
74
|
+
...defaultMocks,
|
|
75
|
+
cliConfig: {
|
|
76
|
+
api: {}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
89
79
|
});
|
|
90
|
-
const { error } = await testCommand(ListBackupCommand, []);
|
|
91
80
|
expect(error?.message).toContain(NO_PROJECT_ID);
|
|
92
81
|
expect(error?.oclif?.exit).toBe(1);
|
|
93
82
|
});
|
|
94
83
|
test('should fail when no datasets exist', async ()=>{
|
|
95
|
-
|
|
96
|
-
const { error } = await testCommand(ListBackupCommand, []
|
|
84
|
+
mockListDatasets.mockResolvedValue([]);
|
|
85
|
+
const { error } = await testCommand(ListBackupCommand, [], {
|
|
86
|
+
mocks: defaultMocks
|
|
87
|
+
});
|
|
97
88
|
expect(error?.message).toBe('No datasets found in this project.');
|
|
98
89
|
expect(error?.oclif?.exit).toBe(1);
|
|
99
90
|
});
|
|
100
91
|
test('should list backups for a specified dataset', async ()=>{
|
|
101
|
-
|
|
92
|
+
mockListDatasets.mockResolvedValue([
|
|
102
93
|
{
|
|
103
94
|
name: 'production'
|
|
104
95
|
}
|
|
@@ -109,11 +100,13 @@ describe('#backup:list', ()=>{
|
|
|
109
100
|
query: {
|
|
110
101
|
limit: '30'
|
|
111
102
|
},
|
|
112
|
-
uri:
|
|
103
|
+
uri: `/projects/${testProjectId}/datasets/production/backups`
|
|
113
104
|
}).reply(200, backupsResponse);
|
|
114
105
|
const { stdout } = await testCommand(ListBackupCommand, [
|
|
115
106
|
'production'
|
|
116
|
-
]
|
|
107
|
+
], {
|
|
108
|
+
mocks: defaultMocks
|
|
109
|
+
});
|
|
117
110
|
expect(stdout).toContain('RESOURCE');
|
|
118
111
|
expect(stdout).toContain('CREATED AT');
|
|
119
112
|
expect(stdout).toContain('BACKUP ID');
|
|
@@ -122,7 +115,7 @@ describe('#backup:list', ()=>{
|
|
|
122
115
|
expect(stdout).toContain('backup-2');
|
|
123
116
|
});
|
|
124
117
|
test('should list backups with custom limit', async ()=>{
|
|
125
|
-
|
|
118
|
+
mockListDatasets.mockResolvedValue([
|
|
126
119
|
{
|
|
127
120
|
name: 'production'
|
|
128
121
|
}
|
|
@@ -133,18 +126,20 @@ describe('#backup:list', ()=>{
|
|
|
133
126
|
query: {
|
|
134
127
|
limit: '50'
|
|
135
128
|
},
|
|
136
|
-
uri:
|
|
129
|
+
uri: `/projects/${testProjectId}/datasets/production/backups`
|
|
137
130
|
}).reply(200, backupsResponse);
|
|
138
131
|
const { stdout } = await testCommand(ListBackupCommand, [
|
|
139
132
|
'production',
|
|
140
133
|
'--limit',
|
|
141
134
|
'50'
|
|
142
|
-
]
|
|
135
|
+
], {
|
|
136
|
+
mocks: defaultMocks
|
|
137
|
+
});
|
|
143
138
|
expect(stdout).toContain('backup-1');
|
|
144
139
|
expect(stdout).toContain('backup-2');
|
|
145
140
|
});
|
|
146
141
|
test('should list backups with date filters', async ()=>{
|
|
147
|
-
|
|
142
|
+
mockListDatasets.mockResolvedValue([
|
|
148
143
|
{
|
|
149
144
|
name: 'production'
|
|
150
145
|
}
|
|
@@ -157,7 +152,7 @@ describe('#backup:list', ()=>{
|
|
|
157
152
|
before: '2024-01-31',
|
|
158
153
|
limit: '30'
|
|
159
154
|
},
|
|
160
|
-
uri:
|
|
155
|
+
uri: `/projects/${testProjectId}/datasets/production/backups`
|
|
161
156
|
}).reply(200, backupsResponse);
|
|
162
157
|
const { stdout } = await testCommand(ListBackupCommand, [
|
|
163
158
|
'production',
|
|
@@ -165,12 +160,14 @@ describe('#backup:list', ()=>{
|
|
|
165
160
|
'2024-01-01',
|
|
166
161
|
'--before',
|
|
167
162
|
'2024-01-31'
|
|
168
|
-
]
|
|
163
|
+
], {
|
|
164
|
+
mocks: defaultMocks
|
|
165
|
+
});
|
|
169
166
|
expect(stdout).toContain('backup-1');
|
|
170
167
|
expect(stdout).toContain('backup-2');
|
|
171
168
|
});
|
|
172
169
|
test('should show message when no backups found', async ()=>{
|
|
173
|
-
|
|
170
|
+
mockListDatasets.mockResolvedValue([
|
|
174
171
|
{
|
|
175
172
|
name: 'production'
|
|
176
173
|
}
|
|
@@ -181,17 +178,19 @@ describe('#backup:list', ()=>{
|
|
|
181
178
|
query: {
|
|
182
179
|
limit: '30'
|
|
183
180
|
},
|
|
184
|
-
uri:
|
|
181
|
+
uri: `/projects/${testProjectId}/datasets/production/backups`
|
|
185
182
|
}).reply(200, {
|
|
186
183
|
backups: []
|
|
187
184
|
});
|
|
188
185
|
const { stdout } = await testCommand(ListBackupCommand, [
|
|
189
186
|
'production'
|
|
190
|
-
]
|
|
187
|
+
], {
|
|
188
|
+
mocks: defaultMocks
|
|
189
|
+
});
|
|
191
190
|
expect(stdout).toContain('No backups found.');
|
|
192
191
|
});
|
|
193
192
|
test('should prompt for dataset selection when no dataset is specified', async ()=>{
|
|
194
|
-
|
|
193
|
+
mockListDatasets.mockResolvedValue([
|
|
195
194
|
{
|
|
196
195
|
name: 'production'
|
|
197
196
|
},
|
|
@@ -206,9 +205,11 @@ describe('#backup:list', ()=>{
|
|
|
206
205
|
query: {
|
|
207
206
|
limit: '30'
|
|
208
207
|
},
|
|
209
|
-
uri:
|
|
208
|
+
uri: `/projects/${testProjectId}/datasets/staging/backups`
|
|
210
209
|
}).reply(200, backupsResponse);
|
|
211
|
-
const { stdout } = await testCommand(ListBackupCommand, []
|
|
210
|
+
const { stdout } = await testCommand(ListBackupCommand, [], {
|
|
211
|
+
mocks: defaultMocks
|
|
212
|
+
});
|
|
212
213
|
expect(mockSelect).toHaveBeenCalledWith({
|
|
213
214
|
choices: [
|
|
214
215
|
{
|
|
@@ -225,7 +226,7 @@ describe('#backup:list', ()=>{
|
|
|
225
226
|
expect(stdout).toContain('backup-1');
|
|
226
227
|
});
|
|
227
228
|
test('should fail with invalid date format', async ()=>{
|
|
228
|
-
|
|
229
|
+
mockListDatasets.mockResolvedValue([
|
|
229
230
|
{
|
|
230
231
|
name: 'production'
|
|
231
232
|
}
|
|
@@ -234,12 +235,14 @@ describe('#backup:list', ()=>{
|
|
|
234
235
|
'production',
|
|
235
236
|
'--after',
|
|
236
237
|
'invalid-date'
|
|
237
|
-
]
|
|
238
|
+
], {
|
|
239
|
+
mocks: defaultMocks
|
|
240
|
+
});
|
|
238
241
|
expect(error?.message).toContain("Invalid date format for '--after' flag");
|
|
239
242
|
expect(error?.oclif?.exit).toBe(1);
|
|
240
243
|
});
|
|
241
244
|
test('should fail when after date is after before date', async ()=>{
|
|
242
|
-
|
|
245
|
+
mockListDatasets.mockResolvedValue([
|
|
243
246
|
{
|
|
244
247
|
name: 'production'
|
|
245
248
|
}
|
|
@@ -250,12 +253,14 @@ describe('#backup:list', ()=>{
|
|
|
250
253
|
'2024-01-31',
|
|
251
254
|
'--before',
|
|
252
255
|
'2024-01-01'
|
|
253
|
-
]
|
|
256
|
+
], {
|
|
257
|
+
mocks: defaultMocks
|
|
258
|
+
});
|
|
254
259
|
expect(error?.message).toBe('Parsing date flags: --after date must be before --before');
|
|
255
260
|
expect(error?.oclif?.exit).toBe(1);
|
|
256
261
|
});
|
|
257
262
|
test('should fail with invalid limit', async ()=>{
|
|
258
|
-
|
|
263
|
+
mockListDatasets.mockResolvedValue([
|
|
259
264
|
{
|
|
260
265
|
name: 'production'
|
|
261
266
|
}
|
|
@@ -264,12 +269,14 @@ describe('#backup:list', ()=>{
|
|
|
264
269
|
'production',
|
|
265
270
|
'--limit',
|
|
266
271
|
'0'
|
|
267
|
-
]
|
|
272
|
+
], {
|
|
273
|
+
mocks: defaultMocks
|
|
274
|
+
});
|
|
268
275
|
expect(error?.message).toContain('must be an integer between 1 and');
|
|
269
276
|
expect(error?.oclif?.exit).toBe(1);
|
|
270
277
|
});
|
|
271
278
|
test('should fail when dataset does not exist', async ()=>{
|
|
272
|
-
|
|
279
|
+
mockListDatasets.mockResolvedValue([
|
|
273
280
|
{
|
|
274
281
|
name: 'production'
|
|
275
282
|
},
|
|
@@ -279,13 +286,15 @@ describe('#backup:list', ()=>{
|
|
|
279
286
|
]);
|
|
280
287
|
const { error } = await testCommand(ListBackupCommand, [
|
|
281
288
|
'nonexistent'
|
|
282
|
-
]
|
|
289
|
+
], {
|
|
290
|
+
mocks: defaultMocks
|
|
291
|
+
});
|
|
283
292
|
expect(error?.message).toContain('Dataset');
|
|
284
293
|
expect(error?.message).toContain('not found');
|
|
285
294
|
expect(error?.oclif?.exit).toBe(1);
|
|
286
295
|
});
|
|
287
296
|
test('should handle API errors', async ()=>{
|
|
288
|
-
|
|
297
|
+
mockListDatasets.mockResolvedValue([
|
|
289
298
|
{
|
|
290
299
|
name: 'production'
|
|
291
300
|
}
|
|
@@ -296,23 +305,23 @@ describe('#backup:list', ()=>{
|
|
|
296
305
|
query: {
|
|
297
306
|
limit: '30'
|
|
298
307
|
},
|
|
299
|
-
uri:
|
|
308
|
+
uri: `/projects/${testProjectId}/datasets/production/backups`
|
|
300
309
|
}).reply(500, {
|
|
301
310
|
message: 'Internal Server Error'
|
|
302
311
|
});
|
|
303
312
|
const { error } = await testCommand(ListBackupCommand, [
|
|
304
313
|
'production'
|
|
305
|
-
]
|
|
314
|
+
], {
|
|
315
|
+
mocks: defaultMocks
|
|
316
|
+
});
|
|
306
317
|
expect(error?.message).toContain('List dataset backup failed');
|
|
307
318
|
expect(error?.oclif?.exit).toBe(1);
|
|
308
319
|
});
|
|
309
320
|
test('should handle failed dataset listing', async ()=>{
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
}
|
|
321
|
+
mockListDatasets.mockRejectedValue(new Error('Server Error'));
|
|
322
|
+
const { error } = await testCommand(ListBackupCommand, [], {
|
|
323
|
+
mocks: defaultMocks
|
|
314
324
|
});
|
|
315
|
-
const { error } = await testCommand(ListBackupCommand, []);
|
|
316
325
|
expect(error?.message).toContain('Failed to list datasets');
|
|
317
326
|
expect(error?.oclif?.exit).toBe(1);
|
|
318
327
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/commands/backup/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {getCliConfig, getProjectCliClient} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {BACKUP_API_VERSION} from '../../../actions/backup/constants.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {ListBackupCommand} from '../list.js'\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n select: 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().mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\nvi.mock(import('../../../../../cli-core/src/services/apiClient.js'), async (importOriginal) => {\n const actual = await importOriginal()\n return {\n ...actual,\n getProjectCliClient: vi.fn(),\n }\n})\n\nconst mockGetCliConfig = vi.mocked(getCliConfig)\nconst mockSelect = vi.mocked(select)\nconst mockGetProjectCliClient = vi.mocked(getProjectCliClient)\n\nconst setupMocksWithDatasets = (datasets = [{name: 'production'}, {name: 'staging'}]) => {\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockResolvedValue(datasets),\n },\n } as never)\n}\n\nconst backupsResponse = {\n backups: [\n {\n createdAt: '2024-01-15T10:30:00Z',\n id: 'backup-1',\n },\n {\n createdAt: '2024-01-14T09:20:00Z',\n id: 'backup-2',\n },\n ],\n}\n\ndescribe('#backup:list', () => {\n afterEach(() => {\n const pending = nock.pendingMocks()\n nock.cleanAll()\n vi.clearAllMocks()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['backup:list', '--help'])\n expect(stdout).toContain('List available backups for a dataset')\n expect(stdout).toContain('USAGE')\n expect(stdout).toContain('EXAMPLES')\n })\n\n test('should fail when no project ID is configured', async () => {\n mockGetCliConfig.mockResolvedValueOnce({api: {}})\n\n const {error} = await testCommand(ListBackupCommand, [])\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail when no datasets exist', async () => {\n setupMocksWithDatasets([])\n\n const {error} = await testCommand(ListBackupCommand, [])\n expect(error?.message).toBe('No datasets found in this project.')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should list backups for a specified dataset', async () => {\n setupMocksWithDatasets([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '30'},\n uri: '/projects/test-project/datasets/production/backups',\n }).reply(200, backupsResponse)\n\n const {stdout} = await testCommand(ListBackupCommand, ['production'])\n\n expect(stdout).toContain('RESOURCE')\n expect(stdout).toContain('CREATED AT')\n expect(stdout).toContain('BACKUP ID')\n expect(stdout).toContain('Dataset')\n expect(stdout).toContain('backup-1')\n expect(stdout).toContain('backup-2')\n })\n\n test('should list backups with custom limit', async () => {\n setupMocksWithDatasets([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '50'},\n uri: '/projects/test-project/datasets/production/backups',\n }).reply(200, backupsResponse)\n\n const {stdout} = await testCommand(ListBackupCommand, ['production', '--limit', '50'])\n\n expect(stdout).toContain('backup-1')\n expect(stdout).toContain('backup-2')\n })\n\n test('should list backups with date filters', async () => {\n setupMocksWithDatasets([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {after: '2024-01-01', before: '2024-01-31', limit: '30'},\n uri: '/projects/test-project/datasets/production/backups',\n }).reply(200, backupsResponse)\n\n const {stdout} = await testCommand(ListBackupCommand, [\n 'production',\n '--after',\n '2024-01-01',\n '--before',\n '2024-01-31',\n ])\n\n expect(stdout).toContain('backup-1')\n expect(stdout).toContain('backup-2')\n })\n\n test('should show message when no backups found', async () => {\n setupMocksWithDatasets([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '30'},\n uri: '/projects/test-project/datasets/production/backups',\n }).reply(200, {backups: []})\n\n const {stdout} = await testCommand(ListBackupCommand, ['production'])\n\n expect(stdout).toContain('No backups found.')\n })\n\n test('should prompt for dataset selection when no dataset is specified', async () => {\n setupMocksWithDatasets([{name: 'production'}, {name: 'staging'}])\n mockSelect.mockResolvedValueOnce('staging')\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '30'},\n uri: '/projects/test-project/datasets/staging/backups',\n }).reply(200, backupsResponse)\n\n const {stdout} = await testCommand(ListBackupCommand, [])\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'production', value: 'production'},\n {name: 'staging', value: 'staging'},\n ],\n message: 'Select the dataset name:',\n })\n expect(stdout).toContain('backup-1')\n })\n\n test('should fail with invalid date format', async () => {\n setupMocksWithDatasets([{name: 'production'}])\n\n const {error} = await testCommand(ListBackupCommand, ['production', '--after', 'invalid-date'])\n expect(error?.message).toContain(\"Invalid date format for '--after' flag\")\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail when after date is after before date', async () => {\n setupMocksWithDatasets([{name: 'production'}])\n\n const {error} = await testCommand(ListBackupCommand, [\n 'production',\n '--after',\n '2024-01-31',\n '--before',\n '2024-01-01',\n ])\n expect(error?.message).toBe('Parsing date flags: --after date must be before --before')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail with invalid limit', async () => {\n setupMocksWithDatasets([{name: 'production'}])\n\n const {error} = await testCommand(ListBackupCommand, ['production', '--limit', '0'])\n expect(error?.message).toContain('must be an integer between 1 and')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail when dataset does not exist', async () => {\n setupMocksWithDatasets([{name: 'production'}, {name: 'staging'}])\n\n const {error} = await testCommand(ListBackupCommand, ['nonexistent'])\n expect(error?.message).toContain('Dataset')\n expect(error?.message).toContain('not found')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle API errors', async () => {\n setupMocksWithDatasets([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '30'},\n uri: '/projects/test-project/datasets/production/backups',\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(ListBackupCommand, ['production'])\n expect(error?.message).toContain('List dataset backup failed')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle failed dataset listing', async () => {\n mockGetProjectCliClient.mockResolvedValue({\n datasets: {\n list: vi.fn().mockRejectedValue(new Error('Server Error')),\n },\n } as never)\n\n const {error} = await testCommand(ListBackupCommand, [])\n expect(error?.message).toContain('Failed to list datasets')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","getCliConfig","getProjectCliClient","select","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","BACKUP_API_VERSION","NO_PROJECT_ID","ListBackupCommand","mock","actual","importActual","fn","findProjectRoot","mockResolvedValue","directory","root","type","api","projectId","getCliToken","importOriginal","mockGetCliConfig","mocked","mockSelect","mockGetProjectCliClient","setupMocksWithDatasets","datasets","name","list","backupsResponse","backups","createdAt","id","pending","pendingMocks","cleanAll","clearAllMocks","toEqual","stdout","toContain","mockResolvedValueOnce","error","message","oclif","exit","toBe","apiVersion","method","query","limit","uri","reply","after","before","toHaveBeenCalledWith","choices","value","mockRejectedValue","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/commands/backup/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {select} from '@sanity/cli-core/ux'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {BACKUP_API_VERSION} from '../../../actions/backup/constants.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {ListBackupCommand} from '../list.js'\n\nconst mockListDatasets = vi.hoisted(() => vi.fn())\n\nvi.mock('@sanity/cli-core', async (importOriginal) => {\n const actual = await importOriginal<typeof import('@sanity/cli-core')>()\n return {\n ...actual,\n getProjectCliClient: vi.fn().mockResolvedValue({\n datasets: {\n list: mockListDatasets,\n } as never,\n }),\n }\n})\n\nvi.mock('@sanity/cli-core/ux', async () => {\n const actual = await vi.importActual<typeof import('@sanity/cli-core/ux')>('@sanity/cli-core/ux')\n return {\n ...actual,\n select: vi.fn(),\n }\n})\n\nconst testProjectId = 'test-project'\n\nconst defaultMocks = {\n cliConfig: {api: {projectId: testProjectId}},\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\nconst mockSelect = vi.mocked(select)\n\nconst backupsResponse = {\n backups: [\n {\n createdAt: '2024-01-15T10:30:00Z',\n id: 'backup-1',\n },\n {\n createdAt: '2024-01-14T09:20:00Z',\n id: 'backup-2',\n },\n ],\n}\n\ndescribe('#backup:list', () => {\n afterEach(() => {\n const pending = nock.pendingMocks()\n nock.cleanAll()\n vi.clearAllMocks()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['backup:list', '--help'])\n expect(stdout).toContain('List available backups for a dataset')\n expect(stdout).toContain('USAGE')\n expect(stdout).toContain('EXAMPLES')\n })\n\n test('should fail when no project ID is configured', async () => {\n const {error} = await testCommand(ListBackupCommand, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {}},\n },\n })\n expect(error?.message).toContain(NO_PROJECT_ID)\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail when no datasets exist', async () => {\n mockListDatasets.mockResolvedValue([])\n\n const {error} = await testCommand(ListBackupCommand, [], {\n mocks: defaultMocks,\n })\n expect(error?.message).toBe('No datasets found in this project.')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should list backups for a specified dataset', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '30'},\n uri: `/projects/${testProjectId}/datasets/production/backups`,\n }).reply(200, backupsResponse)\n\n const {stdout} = await testCommand(ListBackupCommand, ['production'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('RESOURCE')\n expect(stdout).toContain('CREATED AT')\n expect(stdout).toContain('BACKUP ID')\n expect(stdout).toContain('Dataset')\n expect(stdout).toContain('backup-1')\n expect(stdout).toContain('backup-2')\n })\n\n test('should list backups with custom limit', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '50'},\n uri: `/projects/${testProjectId}/datasets/production/backups`,\n }).reply(200, backupsResponse)\n\n const {stdout} = await testCommand(ListBackupCommand, ['production', '--limit', '50'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('backup-1')\n expect(stdout).toContain('backup-2')\n })\n\n test('should list backups with date filters', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {after: '2024-01-01', before: '2024-01-31', limit: '30'},\n uri: `/projects/${testProjectId}/datasets/production/backups`,\n }).reply(200, backupsResponse)\n\n const {stdout} = await testCommand(\n ListBackupCommand,\n ['production', '--after', '2024-01-01', '--before', '2024-01-31'],\n {\n mocks: defaultMocks,\n },\n )\n\n expect(stdout).toContain('backup-1')\n expect(stdout).toContain('backup-2')\n })\n\n test('should show message when no backups found', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '30'},\n uri: `/projects/${testProjectId}/datasets/production/backups`,\n }).reply(200, {backups: []})\n\n const {stdout} = await testCommand(ListBackupCommand, ['production'], {\n mocks: defaultMocks,\n })\n\n expect(stdout).toContain('No backups found.')\n })\n\n test('should prompt for dataset selection when no dataset is specified', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}, {name: 'staging'}])\n mockSelect.mockResolvedValueOnce('staging')\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '30'},\n uri: `/projects/${testProjectId}/datasets/staging/backups`,\n }).reply(200, backupsResponse)\n\n const {stdout} = await testCommand(ListBackupCommand, [], {\n mocks: defaultMocks,\n })\n\n expect(mockSelect).toHaveBeenCalledWith({\n choices: [\n {name: 'production', value: 'production'},\n {name: 'staging', value: 'staging'},\n ],\n message: 'Select the dataset name:',\n })\n expect(stdout).toContain('backup-1')\n })\n\n test('should fail with invalid date format', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n const {error} = await testCommand(\n ListBackupCommand,\n ['production', '--after', 'invalid-date'],\n {\n mocks: defaultMocks,\n },\n )\n expect(error?.message).toContain(\"Invalid date format for '--after' flag\")\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail when after date is after before date', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n const {error} = await testCommand(\n ListBackupCommand,\n ['production', '--after', '2024-01-31', '--before', '2024-01-01'],\n {\n mocks: defaultMocks,\n },\n )\n expect(error?.message).toBe('Parsing date flags: --after date must be before --before')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail with invalid limit', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n const {error} = await testCommand(ListBackupCommand, ['production', '--limit', '0'], {\n mocks: defaultMocks,\n })\n expect(error?.message).toContain('must be an integer between 1 and')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should fail when dataset does not exist', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}, {name: 'staging'}])\n\n const {error} = await testCommand(ListBackupCommand, ['nonexistent'], {\n mocks: defaultMocks,\n })\n expect(error?.message).toContain('Dataset')\n expect(error?.message).toContain('not found')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle API errors', async () => {\n mockListDatasets.mockResolvedValue([{name: 'production'}])\n\n mockApi({\n apiVersion: BACKUP_API_VERSION,\n method: 'get',\n query: {limit: '30'},\n uri: `/projects/${testProjectId}/datasets/production/backups`,\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(ListBackupCommand, ['production'], {\n mocks: defaultMocks,\n })\n expect(error?.message).toContain('List dataset backup failed')\n expect(error?.oclif?.exit).toBe(1)\n })\n\n test('should handle failed dataset listing', async () => {\n mockListDatasets.mockRejectedValue(new Error('Server Error'))\n\n const {error} = await testCommand(ListBackupCommand, [], {\n mocks: defaultMocks,\n })\n expect(error?.message).toContain('Failed to list datasets')\n expect(error?.oclif?.exit).toBe(1)\n })\n})\n"],"names":["runCommand","select","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","BACKUP_API_VERSION","NO_PROJECT_ID","ListBackupCommand","mockListDatasets","hoisted","fn","mock","importOriginal","actual","getProjectCliClient","mockResolvedValue","datasets","list","importActual","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","mockSelect","mocked","backupsResponse","backups","createdAt","id","pending","pendingMocks","cleanAll","clearAllMocks","toEqual","stdout","toContain","error","mocks","message","oclif","exit","toBe","name","apiVersion","method","query","limit","uri","reply","after","before","mockResolvedValueOnce","toHaveBeenCalledWith","choices","value","mockRejectedValue","Error"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { Args } from '@oclif/core';
|
|
|
2
2
|
import { SanityCommand, subdebug } from '@sanity/cli-core';
|
|
3
3
|
import { chalk, select } from '@sanity/cli-core/ux';
|
|
4
4
|
import { assertDatasetExists } from '../../actions/backup/assertDatasetExist.js';
|
|
5
|
-
import {
|
|
5
|
+
import { setBackup } from '../../services/backup.js';
|
|
6
6
|
import { listDatasets } from '../../services/datasets.js';
|
|
7
7
|
import { NO_PROJECT_ID } from '../../util/errorMessages.js';
|
|
8
8
|
const disableBackupDebug = subdebug('backup:disable');
|
|
@@ -33,10 +33,6 @@ export class DisableBackupCommand extends SanityCommand {
|
|
|
33
33
|
exit: 1
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
-
const client = await this.getGlobalApiClient({
|
|
37
|
-
apiVersion: BACKUP_API_VERSION,
|
|
38
|
-
requireUser: true
|
|
39
|
-
});
|
|
40
36
|
let datasets;
|
|
41
37
|
try {
|
|
42
38
|
datasets = await listDatasets(projectId);
|
|
@@ -58,12 +54,10 @@ export class DisableBackupCommand extends SanityCommand {
|
|
|
58
54
|
dataset = await this.promptForDataset(datasets);
|
|
59
55
|
}
|
|
60
56
|
try {
|
|
61
|
-
await
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
method: 'PUT',
|
|
66
|
-
uri: `/projects/${projectId}/datasets/${dataset}/settings/backups`
|
|
57
|
+
await setBackup({
|
|
58
|
+
dataset,
|
|
59
|
+
projectId,
|
|
60
|
+
status: false
|
|
67
61
|
});
|
|
68
62
|
this.log(`${chalk.green(`Disabled daily backups for dataset ${dataset}.\n`)}`);
|
|
69
63
|
this.log(`${chalk.yellow('Note: Existing backups will be retained according to your retention policy.\n')}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/backup/disable.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk, select} from '@sanity/cli-core/ux'\nimport {type DatasetsResponse} from '@sanity/client'\n\nimport {assertDatasetExists} from '../../actions/backup/assertDatasetExist.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/backup/disable.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk, select} from '@sanity/cli-core/ux'\nimport {type DatasetsResponse} from '@sanity/client'\n\nimport {assertDatasetExists} from '../../actions/backup/assertDatasetExist.js'\nimport {setBackup} from '../../services/backup.js'\nimport {listDatasets} from '../../services/datasets.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst disableBackupDebug = subdebug('backup:disable')\n\nexport class DisableBackupCommand extends SanityCommand<typeof DisableBackupCommand> {\n static override args = {\n dataset: Args.string({\n description: 'Dataset name to disable backup for',\n required: false,\n }),\n }\n\n static override description = 'Disable backup for a dataset.'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively disable backup for a dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> production',\n description: 'Disable backup for the production dataset',\n },\n ]\n\n public async run(): Promise<void> {\n const {args} = await this.parse(DisableBackupCommand)\n let {dataset} = args\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n let datasets: DatasetsResponse\n\n try {\n datasets = await listDatasets(projectId)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n disableBackupDebug(`Failed to list datasets: ${message}`, error)\n this.error(`Failed to list datasets: ${message}`, {exit: 1})\n }\n\n if (datasets.length === 0) {\n this.error('No datasets found in this project.', {exit: 1})\n }\n\n if (dataset) {\n assertDatasetExists(datasets, dataset)\n } else {\n dataset = await this.promptForDataset(datasets)\n }\n\n try {\n await setBackup({dataset, projectId, status: false})\n\n this.log(`${chalk.green(`Disabled daily backups for dataset ${dataset}.\\n`)}`)\n this.log(\n `${chalk.yellow('Note: Existing backups will be retained according to your retention policy.\\n')}`,\n )\n\n disableBackupDebug(`Successfully disabled backup for dataset ${dataset}`)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n disableBackupDebug(`Failed to disable backup for dataset`, error)\n this.error(`Disabling dataset backup failed: ${message}`, {exit: 1})\n }\n }\n\n private async promptForDataset(datasets: DatasetsResponse): Promise<string> {\n try {\n const choices = datasets.map((dataset) => ({\n name: dataset.name,\n value: dataset.name,\n }))\n\n return select({\n choices,\n message: 'Select the dataset name:',\n })\n } catch (error) {\n const err = error as Error\n disableBackupDebug(`Error fetching datasets`, err)\n this.error(`Failed to fetch datasets:\\n${err.message}`, {exit: 1})\n }\n }\n}\n"],"names":["Args","SanityCommand","subdebug","chalk","select","assertDatasetExists","setBackup","listDatasets","NO_PROJECT_ID","disableBackupDebug","DisableBackupCommand","args","dataset","string","description","required","examples","command","run","parse","projectId","getProjectId","error","exit","datasets","message","Error","String","length","promptForDataset","status","log","green","yellow","choices","map","name","value","err"],"mappings":"AAAA,SAAQA,IAAI,QAAO,cAAa;AAChC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AACxD,SAAQC,KAAK,EAAEC,MAAM,QAAO,sBAAqB;AAGjD,SAAQC,mBAAmB,QAAO,6CAA4C;AAC9E,SAAQC,SAAS,QAAO,2BAA0B;AAClD,SAAQC,YAAY,QAAO,6BAA4B;AACvD,SAAQC,aAAa,QAAO,8BAA6B;AAEzD,MAAMC,qBAAqBP,SAAS;AAEpC,OAAO,MAAMQ,6BAA6BT;IACxC,OAAgBU,OAAO;QACrBC,SAASZ,KAAKa,MAAM,CAAC;YACnBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,gCAA+B;IAE7D,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,MAAaI,MAAqB;QAChC,MAAM,EAACP,IAAI,EAAC,GAAG,MAAM,IAAI,CAACQ,KAAK,CAACT;QAChC,IAAI,EAACE,OAAO,EAAC,GAAGD;QAEhB,MAAMS,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAACd,eAAe;gBAACe,MAAM;YAAC;QACpC;QAEA,IAAIC;QAEJ,IAAI;YACFA,WAAW,MAAMjB,aAAaa;QAChC,EAAE,OAAOE,OAAO;YACd,MAAMG,UAAUH,iBAAiBI,QAAQJ,MAAMG,OAAO,GAAGE,OAAOL;YAChEb,mBAAmB,CAAC,yBAAyB,EAAEgB,SAAS,EAAEH;YAC1D,IAAI,CAACA,KAAK,CAAC,CAAC,yBAAyB,EAAEG,SAAS,EAAE;gBAACF,MAAM;YAAC;QAC5D;QAEA,IAAIC,SAASI,MAAM,KAAK,GAAG;YACzB,IAAI,CAACN,KAAK,CAAC,sCAAsC;gBAACC,MAAM;YAAC;QAC3D;QAEA,IAAIX,SAAS;YACXP,oBAAoBmB,UAAUZ;QAChC,OAAO;YACLA,UAAU,MAAM,IAAI,CAACiB,gBAAgB,CAACL;QACxC;QAEA,IAAI;YACF,MAAMlB,UAAU;gBAACM;gBAASQ;gBAAWU,QAAQ;YAAK;YAElD,IAAI,CAACC,GAAG,CAAC,GAAG5B,MAAM6B,KAAK,CAAC,CAAC,mCAAmC,EAAEpB,QAAQ,GAAG,CAAC,GAAG;YAC7E,IAAI,CAACmB,GAAG,CACN,GAAG5B,MAAM8B,MAAM,CAAC,kFAAkF;YAGpGxB,mBAAmB,CAAC,yCAAyC,EAAEG,SAAS;QAC1E,EAAE,OAAOU,OAAO;YACd,MAAMG,UAAUH,iBAAiBI,QAAQJ,MAAMG,OAAO,GAAGE,OAAOL;YAChEb,mBAAmB,CAAC,oCAAoC,CAAC,EAAEa;YAC3D,IAAI,CAACA,KAAK,CAAC,CAAC,iCAAiC,EAAEG,SAAS,EAAE;gBAACF,MAAM;YAAC;QACpE;IACF;IAEA,MAAcM,iBAAiBL,QAA0B,EAAmB;QAC1E,IAAI;YACF,MAAMU,UAAUV,SAASW,GAAG,CAAC,CAACvB,UAAa,CAAA;oBACzCwB,MAAMxB,QAAQwB,IAAI;oBAClBC,OAAOzB,QAAQwB,IAAI;gBACrB,CAAA;YAEA,OAAOhC,OAAO;gBACZ8B;gBACAT,SAAS;YACX;QACF,EAAE,OAAOH,OAAO;YACd,MAAMgB,MAAMhB;YACZb,mBAAmB,CAAC,uBAAuB,CAAC,EAAE6B;YAC9C,IAAI,CAAChB,KAAK,CAAC,CAAC,2BAA2B,EAAEgB,IAAIb,OAAO,EAAE,EAAE;gBAACF,MAAM;YAAC;QAClE;IACF;AACF"}
|
|
@@ -2,9 +2,9 @@ import { Args } from '@oclif/core';
|
|
|
2
2
|
import { SanityCommand, subdebug } from '@sanity/cli-core';
|
|
3
3
|
import { chalk } from '@sanity/cli-core/ux';
|
|
4
4
|
import { assertDatasetExists } from '../../actions/backup/assertDatasetExist.js';
|
|
5
|
-
import { BACKUP_API_VERSION } from '../../actions/backup/constants.js';
|
|
6
5
|
import { NEW_DATASET_VALUE, promptForDataset } from '../../prompts/promptForDataset.js';
|
|
7
6
|
import { promptForDatasetName } from '../../prompts/promptForDatasetName.js';
|
|
7
|
+
import { setBackup } from '../../services/backup.js';
|
|
8
8
|
import { createDataset, listDatasets } from '../../services/datasets.js';
|
|
9
9
|
import { NO_PROJECT_ID } from '../../util/errorMessages.js';
|
|
10
10
|
const enableBackupDebug = subdebug('backup:enable');
|
|
@@ -35,10 +35,6 @@ export class EnableBackupCommand extends SanityCommand {
|
|
|
35
35
|
exit: 1
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
-
const client = await this.getGlobalApiClient({
|
|
39
|
-
apiVersion: BACKUP_API_VERSION,
|
|
40
|
-
requireUser: true
|
|
41
|
-
});
|
|
42
38
|
let datasets;
|
|
43
39
|
try {
|
|
44
40
|
datasets = await listDatasets(projectId);
|
|
@@ -82,12 +78,10 @@ export class EnableBackupCommand extends SanityCommand {
|
|
|
82
78
|
}
|
|
83
79
|
}
|
|
84
80
|
try {
|
|
85
|
-
await
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
method: 'PUT',
|
|
90
|
-
uri: `/projects/${projectId}/datasets/${dataset}/settings/backups`
|
|
81
|
+
await setBackup({
|
|
82
|
+
dataset,
|
|
83
|
+
projectId,
|
|
84
|
+
status: true
|
|
91
85
|
});
|
|
92
86
|
this.log(`${chalk.green(`Enabled backups for dataset ${dataset}.\nPlease note that it may take up to 24 hours before the first backup is created.\n`)}`);
|
|
93
87
|
this.log(`${chalk.bold(`Retention policies may apply depending on your plan and agreement.\n`)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/backup/enable.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {type DatasetsResponse} from '@sanity/client'\n\nimport {assertDatasetExists} from '../../actions/backup/assertDatasetExist.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/backup/enable.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk} from '@sanity/cli-core/ux'\nimport {type DatasetsResponse} from '@sanity/client'\n\nimport {assertDatasetExists} from '../../actions/backup/assertDatasetExist.js'\nimport {NEW_DATASET_VALUE, promptForDataset} from '../../prompts/promptForDataset.js'\nimport {promptForDatasetName} from '../../prompts/promptForDatasetName.js'\nimport {setBackup} from '../../services/backup.js'\nimport {createDataset, listDatasets} from '../../services/datasets.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst enableBackupDebug = subdebug('backup:enable')\n\nexport class EnableBackupCommand extends SanityCommand<typeof EnableBackupCommand> {\n static override args = {\n dataset: Args.string({\n description: 'Dataset name to enable backup for',\n required: false,\n }),\n }\n\n static override description = 'Enable backup for a dataset.'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively enable backup for a dataset',\n },\n {\n command: '<%= config.bin %> <%= command.id %> production',\n description: 'Enable backup for the production dataset',\n },\n ]\n\n public async run(): Promise<void> {\n const {args} = await this.parse(EnableBackupCommand)\n let {dataset} = args\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n let datasets: DatasetsResponse\n\n try {\n datasets = await listDatasets(projectId)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n enableBackupDebug(`Failed to list datasets: ${message}`, error)\n this.error(`Failed to list datasets: ${message}`, {exit: 1})\n }\n\n const hasProduction = datasets.some((dataset) => dataset.name === 'production')\n\n if (datasets.length === 0) {\n this.error('No datasets found in this project.', {exit: 1})\n }\n\n if (dataset) {\n assertDatasetExists(datasets, dataset)\n } else {\n dataset = await promptForDataset({allowCreation: true, datasets})\n\n if (dataset === NEW_DATASET_VALUE) {\n const newDatasetName = await promptForDatasetName({\n default: hasProduction ? undefined : 'production',\n })\n\n try {\n await createDataset({\n datasetName: newDatasetName,\n projectId,\n })\n dataset = newDatasetName\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n enableBackupDebug(`Failed to create dataset ${newDatasetName}: ${message}`, error)\n this.error(`Failed to create dataset ${newDatasetName}: ${message}`, {exit: 1})\n }\n }\n }\n\n try {\n await setBackup({dataset, projectId, status: true})\n\n this.log(\n `${chalk.green(\n `Enabled backups for dataset ${dataset}.\\nPlease note that it may take up to 24 hours before the first backup is created.\\n`,\n )}`,\n )\n\n this.log(\n `${chalk.bold(`Retention policies may apply depending on your plan and agreement.\\n`)}`,\n )\n\n enableBackupDebug(`Successfully enabled backup for dataset ${dataset}`)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n enableBackupDebug(`Failed to enable backup for dataset`, error)\n this.error(`Enabling dataset backup failed: ${message}`, {exit: 1})\n }\n }\n}\n"],"names":["Args","SanityCommand","subdebug","chalk","assertDatasetExists","NEW_DATASET_VALUE","promptForDataset","promptForDatasetName","setBackup","createDataset","listDatasets","NO_PROJECT_ID","enableBackupDebug","EnableBackupCommand","args","dataset","string","description","required","examples","command","run","parse","projectId","getProjectId","error","exit","datasets","message","Error","String","hasProduction","some","name","length","allowCreation","newDatasetName","default","undefined","datasetName","status","log","green","bold"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { select } from '@sanity/cli-core/ux';
|
|
|
4
4
|
import { Table } from 'console-table-printer';
|
|
5
5
|
import { isAfter, isValid, lightFormat, parse } from 'date-fns';
|
|
6
6
|
import { assertDatasetExists } from '../../actions/backup/assertDatasetExist.js';
|
|
7
|
-
import {
|
|
7
|
+
import { listBackups } from '../../services/backup.js';
|
|
8
8
|
import { listDatasets } from '../../services/datasets.js';
|
|
9
9
|
import { NO_PROJECT_ID } from '../../util/errorMessages.js';
|
|
10
10
|
const listBackupDebug = subdebug('backup:list');
|
|
@@ -57,10 +57,6 @@ export class ListBackupCommand extends SanityCommand {
|
|
|
57
57
|
exit: 1
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
|
-
const client = await this.getGlobalApiClient({
|
|
61
|
-
apiVersion: BACKUP_API_VERSION,
|
|
62
|
-
requireUser: true
|
|
63
|
-
});
|
|
64
60
|
let datasets;
|
|
65
61
|
try {
|
|
66
62
|
datasets = await listDatasets(projectId);
|
|
@@ -113,9 +109,12 @@ export class ListBackupCommand extends SanityCommand {
|
|
|
113
109
|
query.before = flags.before;
|
|
114
110
|
}
|
|
115
111
|
try {
|
|
116
|
-
const response = await
|
|
117
|
-
|
|
118
|
-
|
|
112
|
+
const response = await listBackups({
|
|
113
|
+
after: flags.after,
|
|
114
|
+
before: flags.before,
|
|
115
|
+
datasetName: dataset,
|
|
116
|
+
limit: flags.limit,
|
|
117
|
+
projectId
|
|
119
118
|
});
|
|
120
119
|
if (response.backups.length === 0) {
|
|
121
120
|
this.log('No backups found.');
|