@sanity/cli 6.0.0-alpha.17 → 6.0.0-alpha.18
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/README.md +833 -912
- package/dist/SanityHelp.js +74 -21
- package/dist/SanityHelp.js.map +1 -1
- package/dist/actions/build/buildApp.js +42 -15
- package/dist/actions/build/buildApp.js.map +1 -1
- package/dist/actions/build/buildStudio.js +21 -9
- package/dist/actions/build/buildStudio.js.map +1 -1
- package/dist/actions/build/buildVendorDependencies.js +3 -16
- package/dist/actions/build/buildVendorDependencies.js.map +1 -1
- package/dist/actions/build/checkStudioDependencyVersions.js +7 -7
- package/dist/actions/build/checkStudioDependencyVersions.js.map +1 -1
- package/dist/actions/build/createExternalFromImportMap.js +1 -1
- package/dist/actions/build/createExternalFromImportMap.js.map +1 -1
- package/dist/actions/build/determineBasePath.js +5 -2
- package/dist/actions/build/determineBasePath.js.map +1 -1
- package/dist/actions/build/handlePrereleaseVersions.js +44 -0
- package/dist/actions/build/handlePrereleaseVersions.js.map +1 -0
- package/dist/actions/build/types.js.map +1 -1
- package/dist/actions/dataset/create.js +7 -1
- package/dist/actions/dataset/create.js.map +1 -1
- package/dist/actions/dataset/resolveDataset.js +26 -0
- package/dist/actions/dataset/resolveDataset.js.map +1 -0
- package/dist/actions/deploy/deployApp.js +1 -8
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/deploy/deployStudio.js +1 -0
- package/dist/actions/deploy/deployStudio.js.map +1 -1
- package/dist/actions/dev/getDevServerConfig.js +5 -2
- package/dist/actions/dev/getDevServerConfig.js.map +1 -1
- package/dist/actions/dev/startStudioDevServer.js +8 -3
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/documents/types.js.map +1 -1
- package/dist/actions/documents/validate.js +11 -2
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/actions/documents/validateDocuments.worker.js +2 -2
- package/dist/actions/documents/validateDocuments.worker.js.map +1 -1
- package/dist/actions/documents/validation/reporters/jsonReporter.js +1 -1
- package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js +1 -1
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -1
- package/dist/actions/graphql/SchemaError.js +1 -1
- package/dist/actions/graphql/SchemaError.js.map +1 -1
- package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js +540 -0
- package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js.map +1 -0
- package/dist/actions/graphql/__tests__/fixtures/test-studio.js +1143 -0
- package/dist/actions/graphql/__tests__/fixtures/test-studio.js.map +1 -0
- package/dist/actions/graphql/__tests__/fixtures/union-refs.js +591 -0
- package/dist/actions/graphql/__tests__/fixtures/union-refs.js.map +1 -0
- package/dist/actions/graphql/__tests__/helpers.js +23 -0
- package/dist/actions/graphql/__tests__/helpers.js.map +1 -0
- package/dist/actions/graphql/extractFromSanitySchema.js +2 -1
- package/dist/actions/graphql/extractFromSanitySchema.js.map +1 -1
- package/dist/actions/graphql/gen1/generateTypeFilters.js +1 -1
- package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -1
- package/dist/actions/graphql/gen1/generateTypeQueries.js +2 -1
- package/dist/actions/graphql/gen1/generateTypeQueries.js.map +1 -1
- package/dist/actions/graphql/gen2/generateTypeQueries.js +1 -1
- package/dist/actions/graphql/gen2/generateTypeQueries.js.map +1 -1
- package/dist/actions/graphql/gen3/generateTypeQueries.js +1 -1
- package/dist/actions/graphql/gen3/generateTypeQueries.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js +2 -10
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.worker.js +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -1
- package/dist/actions/graphql/types.js.map +1 -1
- package/dist/actions/init/bootstrapLocalTemplate.js +1 -1
- package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -1
- package/dist/actions/manifest/extractAppManifest.js.map +1 -1
- package/dist/actions/manifest/extractManifest.js +1 -22
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/manifest/types.js.map +1 -1
- package/dist/actions/schema/deploySchemas.js +57 -80
- package/dist/actions/schema/deploySchemas.js.map +1 -1
- package/dist/actions/schema/extractSanityWorkspace.worker.js +24 -0
- package/dist/actions/schema/extractSanityWorkspace.worker.js.map +1 -0
- package/dist/actions/schema/extractSchemaWatcher.js +1 -1
- package/dist/actions/schema/extractSchemaWatcher.js.map +1 -1
- package/dist/actions/schema/types.js +4 -0
- package/dist/actions/schema/types.js.map +1 -1
- package/dist/actions/schema/utils/schemaStoreValidation.js +1 -7
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -1
- package/dist/actions/schema/watchExtractSchema.js +2 -1
- package/dist/actions/schema/watchExtractSchema.js.map +1 -1
- package/dist/actions/versions/getFormatters.js +1 -1
- package/dist/actions/versions/getFormatters.js.map +1 -1
- package/dist/commands/backup/list.js +4 -1
- package/dist/commands/backup/list.js.map +1 -1
- package/dist/commands/dataset/copy.js +3 -1
- package/dist/commands/dataset/copy.js.map +1 -1
- package/dist/commands/dataset/create.js +12 -0
- package/dist/commands/dataset/create.js.map +1 -1
- package/dist/commands/dataset/embeddings/disable.js +62 -0
- package/dist/commands/dataset/embeddings/disable.js.map +1 -0
- package/dist/commands/dataset/embeddings/enable.js +128 -0
- package/dist/commands/dataset/embeddings/enable.js.map +1 -0
- package/dist/commands/dataset/embeddings/status.js +61 -0
- package/dist/commands/dataset/embeddings/status.js.map +1 -0
- package/dist/commands/debug.js +2 -1
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/documents/create.js +2 -1
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/graphql/deploy.js +1 -1
- package/dist/commands/graphql/deploy.js.map +1 -1
- package/dist/commands/hook/logs.js +1 -1
- package/dist/commands/hook/logs.js.map +1 -1
- package/dist/commands/init.js +13 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/manage.js +0 -1
- package/dist/commands/manage.js.map +1 -1
- package/dist/commands/media/create-aspect.js +1 -1
- package/dist/commands/media/create-aspect.js.map +1 -1
- package/dist/commands/projects/list.js +2 -1
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/deploy.js +11 -27
- package/dist/commands/schema/deploy.js.map +1 -1
- package/dist/commands/users/list.js +1 -1
- package/dist/commands/users/list.js.map +1 -1
- package/dist/commands/versions.js +1 -1
- package/dist/commands/versions.js.map +1 -1
- package/dist/exports/index.d.ts +62 -2
- package/dist/exports/index.js.map +1 -1
- package/dist/prompts/selectMediaLibrary.js +1 -1
- package/dist/prompts/selectMediaLibrary.js.map +1 -1
- package/dist/services/datasets.js +7 -5
- package/dist/services/datasets.js.map +1 -1
- package/dist/services/embeddings.js +25 -0
- package/dist/services/embeddings.js.map +1 -0
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/schemas.js +1 -1
- package/dist/services/schemas.js.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/util/compareDependencyVersions.js +28 -7
- package/dist/util/compareDependencyVersions.js.map +1 -1
- package/dist/util/errorMessages.js +0 -1
- package/dist/util/errorMessages.js.map +1 -1
- package/dist/util/packageManager/getPeerDependencies.js +44 -0
- package/dist/util/packageManager/getPeerDependencies.js.map +1 -0
- package/oclif.manifest.json +283 -149
- package/package.json +12 -13
- package/dist/actions/schema/schemaStoreTypes.js +0 -19
- package/dist/actions/schema/schemaStoreTypes.js.map +0 -1
- package/dist/actions/schema/utils/manifestExtractor.js +0 -29
- package/dist/actions/schema/utils/manifestExtractor.js.map +0 -1
- package/dist/actions/schema/utils/manifestReader.js +0 -71
- package/dist/actions/schema/utils/manifestReader.js.map +0 -1
- package/dist/util/workerChannels.js +0 -172
- package/dist/util/workerChannels.js.map +0 -1
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { styleText } from 'node:util';
|
|
1
2
|
import { Flags } from '@oclif/core';
|
|
2
3
|
import { parseStringFlag, SanityCommand } from '@sanity/cli-core';
|
|
3
4
|
import { deploySchemas } from '../../actions/schema/deploySchemas.js';
|
|
5
|
+
import { formatSchemaValidation } from '../../actions/schema/formatSchemaValidation.js';
|
|
4
6
|
import { schemasDeployDebug } from '../../actions/schema/utils/debug.js';
|
|
7
|
+
import { SchemaExtractionError } from '../../actions/schema/utils/SchemaExtractionError.js';
|
|
5
8
|
import { parseTag } from '../../actions/schema/utils/schemaStoreValidation.js';
|
|
6
|
-
import { NO_DATASET_ID, NO_PROJECT_ID } from '../../util/errorMessages.js';
|
|
7
9
|
const description = `
|
|
8
10
|
Deploy schema documents into workspace datasets.
|
|
9
11
|
|
|
@@ -22,10 +24,6 @@ export class DeploySchemaCommand extends SanityCommand {
|
|
|
22
24
|
{
|
|
23
25
|
command: '<%= config.bin %> <%= command.id %> --workspace default',
|
|
24
26
|
description: 'Deploy the schema for only the workspace "default"'
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
command: '<%= config.bin %> <%= command.id %> --no-extract-manifest',
|
|
28
|
-
description: 'Runs using a pre-existing manifest file. Config changes in sanity.config will not be picked up in this case.'
|
|
29
27
|
}
|
|
30
28
|
];
|
|
31
29
|
static flags = {
|
|
@@ -59,36 +57,22 @@ export class DeploySchemaCommand extends SanityCommand {
|
|
|
59
57
|
const { tag, workspace } = flags;
|
|
60
58
|
try {
|
|
61
59
|
const workDir = (await this.getProjectRoot()).directory;
|
|
62
|
-
|
|
63
|
-
const projectId = await this.getProjectId();
|
|
64
|
-
const dataset = cliConfig.api?.dataset;
|
|
65
|
-
if (!projectId) {
|
|
66
|
-
this.error(NO_PROJECT_ID, {
|
|
67
|
-
exit: 1
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
if (!dataset) {
|
|
71
|
-
this.error(NO_DATASET_ID, {
|
|
72
|
-
exit: 1
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
const result = await deploySchemas({
|
|
76
|
-
extractManifest: flags['extract-manifest'],
|
|
77
|
-
manifestDir: flags['manifest-dir'],
|
|
60
|
+
await deploySchemas({
|
|
78
61
|
output: this.output,
|
|
79
62
|
tag,
|
|
80
63
|
verbose: flags['verbose'],
|
|
81
64
|
workDir,
|
|
82
65
|
workspaceName: workspace
|
|
83
66
|
});
|
|
84
|
-
|
|
85
|
-
this.error('Failed to deploy schemas', {
|
|
86
|
-
exit: 1
|
|
87
|
-
});
|
|
88
|
-
}
|
|
67
|
+
this.log(`${styleText('gray', '↳ List deployed schemas with:')} ${styleText('cyan', 'sanity schema list')}`);
|
|
89
68
|
} catch (error) {
|
|
69
|
+
if (error instanceof SchemaExtractionError && error.validation && error.validation.length > 0) {
|
|
70
|
+
this.output.log(formatSchemaValidation(error.validation));
|
|
71
|
+
this.exit(1);
|
|
72
|
+
}
|
|
90
73
|
schemasDeployDebug('Failed to deploy schemas', error);
|
|
91
|
-
|
|
74
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
75
|
+
this.error(`Failed to deploy schemas:\n${errorMessage}`, {
|
|
92
76
|
exit: 1
|
|
93
77
|
});
|
|
94
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/schema/deploy.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\nimport {parseStringFlag, SanityCommand} from '@sanity/cli-core'\n\nimport {deploySchemas} from '../../actions/schema/deploySchemas.js'\nimport {schemasDeployDebug} from '../../actions/schema/utils/debug.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/schema/deploy.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Flags} from '@oclif/core'\nimport {parseStringFlag, SanityCommand} from '@sanity/cli-core'\n\nimport {deploySchemas} from '../../actions/schema/deploySchemas.js'\nimport {formatSchemaValidation} from '../../actions/schema/formatSchemaValidation.js'\nimport {schemasDeployDebug} from '../../actions/schema/utils/debug.js'\nimport {SchemaExtractionError} from '../../actions/schema/utils/SchemaExtractionError.js'\nimport {parseTag} from '../../actions/schema/utils/schemaStoreValidation.js'\n\nconst description = `\nDeploy schema documents into workspace datasets.\n\n**Note**: This command is experimental and subject to change.\n\nThis operation (re-)generates a manifest file describing the sanity config workspace by default.\nTo re-use an existing manifest file, use --no-extract-manifest.\n`.trim()\n\nexport class DeploySchemaCommand extends SanityCommand<typeof DeploySchemaCommand> {\n static override description = description\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Deploy all workspace schemas',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --workspace default',\n description: 'Deploy the schema for only the workspace \"default\"',\n },\n ]\n\n static override flags = {\n 'extract-manifest': Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Disables manifest generation - the command will fail if no manifest exists',\n }),\n 'manifest-dir': Flags.directory({\n default: './dist/static',\n description: 'Directory containing manifest file',\n helpValue: '<directory>',\n }),\n tag: Flags.string({\n description: 'Add a tag suffix to the schema id',\n helpValue: '<tag>',\n parse: parseTag,\n }),\n verbose: Flags.boolean({\n default: false,\n description: 'Print detailed information during deployment',\n }),\n workspace: Flags.string({\n description: 'The name of the workspace to deploy a schema for',\n helpValue: '<name>',\n parse: async (input) => parseStringFlag('workspace', input),\n }),\n }\n\n public async run(): Promise<void> {\n const {flags} = await this.parse(DeploySchemaCommand)\n const {tag, workspace} = flags\n\n try {\n const workDir = (await this.getProjectRoot()).directory\n\n await deploySchemas({\n output: this.output,\n tag,\n verbose: flags['verbose'],\n workDir,\n workspaceName: workspace,\n })\n\n this.log(\n `${styleText('gray', '↳ List deployed schemas with:')} ${styleText('cyan', 'sanity schema list')}`,\n )\n } catch (error) {\n if (\n error instanceof SchemaExtractionError &&\n error.validation &&\n error.validation.length > 0\n ) {\n this.output.log(formatSchemaValidation(error.validation))\n this.exit(1)\n }\n\n schemasDeployDebug('Failed to deploy schemas', error)\n const errorMessage = error instanceof Error ? error.message : String(error)\n this.error(`Failed to deploy schemas:\\n${errorMessage}`, {exit: 1})\n }\n }\n}\n"],"names":["styleText","Flags","parseStringFlag","SanityCommand","deploySchemas","formatSchemaValidation","schemasDeployDebug","SchemaExtractionError","parseTag","description","trim","DeploySchemaCommand","examples","command","flags","boolean","allowNo","default","directory","helpValue","tag","string","parse","verbose","workspace","input","run","workDir","getProjectRoot","output","workspaceName","log","error","validation","length","exit","errorMessage","Error","message","String"],"mappings":"AAAA,SAAQA,SAAS,QAAO,YAAW;AAEnC,SAAQC,KAAK,QAAO,cAAa;AACjC,SAAQC,eAAe,EAAEC,aAAa,QAAO,mBAAkB;AAE/D,SAAQC,aAAa,QAAO,wCAAuC;AACnE,SAAQC,sBAAsB,QAAO,iDAAgD;AACrF,SAAQC,kBAAkB,QAAO,sCAAqC;AACtE,SAAQC,qBAAqB,QAAO,sDAAqD;AACzF,SAAQC,QAAQ,QAAO,sDAAqD;AAE5E,MAAMC,cAAc,CAAC;;;;;;;AAOrB,CAAC,CAACC,IAAI;AAEN,OAAO,MAAMC,4BAA4BR;IACvC,OAAgBM,cAAcA,YAAW;IAEzC,OAAgBG,WAAW;QACzB;YACEC,SAAS;YACTJ,aAAa;QACf;QACA;YACEI,SAAS;YACTJ,aAAa;QACf;KACD,CAAA;IAED,OAAgBK,QAAQ;QACtB,oBAAoBb,MAAMc,OAAO,CAAC;YAChCC,SAAS;YACTC,SAAS;YACTR,aAAa;QACf;QACA,gBAAgBR,MAAMiB,SAAS,CAAC;YAC9BD,SAAS;YACTR,aAAa;YACbU,WAAW;QACb;QACAC,KAAKnB,MAAMoB,MAAM,CAAC;YAChBZ,aAAa;YACbU,WAAW;YACXG,OAAOd;QACT;QACAe,SAAStB,MAAMc,OAAO,CAAC;YACrBE,SAAS;YACTR,aAAa;QACf;QACAe,WAAWvB,MAAMoB,MAAM,CAAC;YACtBZ,aAAa;YACbU,WAAW;YACXG,OAAO,OAAOG,QAAUvB,gBAAgB,aAAauB;QACvD;IACF,EAAC;IAED,MAAaC,MAAqB;QAChC,MAAM,EAACZ,KAAK,EAAC,GAAG,MAAM,IAAI,CAACQ,KAAK,CAACX;QACjC,MAAM,EAACS,GAAG,EAAEI,SAAS,EAAC,GAAGV;QAEzB,IAAI;YACF,MAAMa,UAAU,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGV,SAAS;YAEvD,MAAMd,cAAc;gBAClByB,QAAQ,IAAI,CAACA,MAAM;gBACnBT;gBACAG,SAAST,KAAK,CAAC,UAAU;gBACzBa;gBACAG,eAAeN;YACjB;YAEA,IAAI,CAACO,GAAG,CACN,GAAG/B,UAAU,QAAQ,iCAAiC,CAAC,EAAEA,UAAU,QAAQ,uBAAuB;QAEtG,EAAE,OAAOgC,OAAO;YACd,IACEA,iBAAiBzB,yBACjByB,MAAMC,UAAU,IAChBD,MAAMC,UAAU,CAACC,MAAM,GAAG,GAC1B;gBACA,IAAI,CAACL,MAAM,CAACE,GAAG,CAAC1B,uBAAuB2B,MAAMC,UAAU;gBACvD,IAAI,CAACE,IAAI,CAAC;YACZ;YAEA7B,mBAAmB,4BAA4B0B;YAC/C,MAAMI,eAAeJ,iBAAiBK,QAAQL,MAAMM,OAAO,GAAGC,OAAOP;YACrE,IAAI,CAACA,KAAK,CAAC,CAAC,2BAA2B,EAAEI,cAAc,EAAE;gBAACD,MAAM;YAAC;QACnE;IACF;AACF"}
|
|
@@ -2,7 +2,7 @@ import { styleText } from 'node:util';
|
|
|
2
2
|
import { Flags } from '@oclif/core';
|
|
3
3
|
import { SanityCommand } from '@sanity/cli-core';
|
|
4
4
|
import { Table } from 'console-table-printer';
|
|
5
|
-
import
|
|
5
|
+
import sortBy from 'lodash-es/sortBy.js';
|
|
6
6
|
import { getMembersForProject } from '../../actions/users/getMembersForProject.js';
|
|
7
7
|
import { NO_PROJECT_ID } from '../../util/errorMessages.js';
|
|
8
8
|
const sortFields = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/users/list.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport {Table} from 'console-table-printer'\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/users/list.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {Flags} from '@oclif/core'\nimport {SanityCommand} from '@sanity/cli-core'\nimport {Table} from 'console-table-printer'\nimport sortBy from 'lodash-es/sortBy.js'\n\nimport {getMembersForProject} from '../../actions/users/getMembersForProject.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst sortFields = ['id', 'name', 'role', 'date']\n\nfunction dimText(value: string, isDim: boolean): string {\n return isDim ? styleText('dim', value) : value\n}\n\nexport class List extends SanityCommand<typeof List> {\n static override description = 'List all users of the project'\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'List all users of the project',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --no-invitations --no-robots',\n description: 'List all users of the project, but exclude pending invitations and robots',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --sort role',\n description: 'List all users, sorted by role',\n },\n ]\n static override flags = {\n invitations: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Includes or excludes pending invitations',\n }),\n order: Flags.string({\n default: 'asc',\n description: 'Sort output ascending/descending',\n options: ['asc', 'desc'],\n }),\n robots: Flags.boolean({\n allowNo: true,\n default: true,\n description: 'Includes or excludes robots (token users)',\n }),\n sort: Flags.string({\n default: 'date',\n description: 'Sort users by specified column',\n options: ['id', 'name', 'role', 'date'],\n }),\n }\n\n public async run(): Promise<void> {\n const {invitations, order, robots, sort} = this.flags\n\n const projectId = await this.getProjectId()\n\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n const members = await getMembersForProject({\n includeInvitations: invitations,\n includeRobots: robots,\n projectId,\n })\n\n const ordered = sortBy(\n members.map(({date, id, name, roles}) => [\n id,\n name,\n roles\n ?.map((role) => role.title)\n .join(', ')\n .trim() || '-',\n date,\n ]),\n [sortFields.indexOf(sort)],\n )\n\n const rows = order === 'asc' ? ordered : ordered.toReversed()\n\n const table = new Table({\n columns: [\n {alignment: 'left', maxLen: 30, name: 'id', title: 'ID'},\n {alignment: 'left', maxLen: 40, name: 'name', title: 'Name'},\n {alignment: 'left', maxLen: 30, name: 'roles', title: 'Roles'},\n {alignment: 'left', maxLen: 12, name: 'date', title: 'Date'},\n ],\n rowSeparator: true,\n })\n\n for (const [id, name, roles, date] of rows) {\n const isPending = id === '<pending>'\n table.addRow({\n date: dimText(date, isPending),\n id: dimText(id, isPending),\n name: dimText(name, isPending),\n roles: dimText(roles, isPending),\n })\n }\n\n table.printTable()\n }\n}\n"],"names":["styleText","Flags","SanityCommand","Table","sortBy","getMembersForProject","NO_PROJECT_ID","sortFields","dimText","value","isDim","List","description","examples","command","flags","invitations","boolean","allowNo","default","order","string","options","robots","sort","run","projectId","getProjectId","error","exit","members","includeInvitations","includeRobots","ordered","map","date","id","name","roles","role","title","join","trim","indexOf","rows","toReversed","table","columns","alignment","maxLen","rowSeparator","isPending","addRow","printTable"],"mappings":"AAAA,SAAQA,SAAS,QAAO,YAAW;AAEnC,SAAQC,KAAK,QAAO,cAAa;AACjC,SAAQC,aAAa,QAAO,mBAAkB;AAC9C,SAAQC,KAAK,QAAO,wBAAuB;AAC3C,OAAOC,YAAY,sBAAqB;AAExC,SAAQC,oBAAoB,QAAO,8CAA6C;AAChF,SAAQC,aAAa,QAAO,8BAA6B;AAEzD,MAAMC,aAAa;IAAC;IAAM;IAAQ;IAAQ;CAAO;AAEjD,SAASC,QAAQC,KAAa,EAAEC,KAAc;IAC5C,OAAOA,QAAQV,UAAU,OAAOS,SAASA;AAC3C;AAEA,OAAO,MAAME,aAAaT;IACxB,OAAgBU,cAAc,gCAA+B;IAC7D,OAAgBC,WAAW;QACzB;YACEC,SAAS;YACTF,aAAa;QACf;QACA;YACEE,SAAS;YACTF,aAAa;QACf;QACA;YACEE,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IACD,OAAgBG,QAAQ;QACtBC,aAAaf,MAAMgB,OAAO,CAAC;YACzBC,SAAS;YACTC,SAAS;YACTP,aAAa;QACf;QACAQ,OAAOnB,MAAMoB,MAAM,CAAC;YAClBF,SAAS;YACTP,aAAa;YACbU,SAAS;gBAAC;gBAAO;aAAO;QAC1B;QACAC,QAAQtB,MAAMgB,OAAO,CAAC;YACpBC,SAAS;YACTC,SAAS;YACTP,aAAa;QACf;QACAY,MAAMvB,MAAMoB,MAAM,CAAC;YACjBF,SAAS;YACTP,aAAa;YACbU,SAAS;gBAAC;gBAAM;gBAAQ;gBAAQ;aAAO;QACzC;IACF,EAAC;IAED,MAAaG,MAAqB;QAChC,MAAM,EAACT,WAAW,EAAEI,KAAK,EAAEG,MAAM,EAAEC,IAAI,EAAC,GAAG,IAAI,CAACT,KAAK;QAErD,MAAMW,YAAY,MAAM,IAAI,CAACC,YAAY;QAEzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAACtB,eAAe;gBAACuB,MAAM;YAAC;QACpC;QAEA,MAAMC,UAAU,MAAMzB,qBAAqB;YACzC0B,oBAAoBf;YACpBgB,eAAeT;YACfG;QACF;QAEA,MAAMO,UAAU7B,OACd0B,QAAQI,GAAG,CAAC,CAAC,EAACC,IAAI,EAAEC,EAAE,EAAEC,IAAI,EAAEC,KAAK,EAAC,GAAK;gBACvCF;gBACAC;gBACAC,OACIJ,IAAI,CAACK,OAASA,KAAKC,KAAK,EACzBC,KAAK,MACLC,UAAU;gBACbP;aACD,GACD;YAAC5B,WAAWoC,OAAO,CAACnB;SAAM;QAG5B,MAAMoB,OAAOxB,UAAU,QAAQa,UAAUA,QAAQY,UAAU;QAE3D,MAAMC,QAAQ,IAAI3C,MAAM;YACtB4C,SAAS;gBACP;oBAACC,WAAW;oBAAQC,QAAQ;oBAAIZ,MAAM;oBAAMG,OAAO;gBAAI;gBACvD;oBAACQ,WAAW;oBAAQC,QAAQ;oBAAIZ,MAAM;oBAAQG,OAAO;gBAAM;gBAC3D;oBAACQ,WAAW;oBAAQC,QAAQ;oBAAIZ,MAAM;oBAASG,OAAO;gBAAO;gBAC7D;oBAACQ,WAAW;oBAAQC,QAAQ;oBAAIZ,MAAM;oBAAQG,OAAO;gBAAM;aAC5D;YACDU,cAAc;QAChB;QAEA,KAAK,MAAM,CAACd,IAAIC,MAAMC,OAAOH,KAAK,IAAIS,KAAM;YAC1C,MAAMO,YAAYf,OAAO;YACzBU,MAAMM,MAAM,CAAC;gBACXjB,MAAM3B,QAAQ2B,MAAMgB;gBACpBf,IAAI5B,QAAQ4B,IAAIe;gBAChBd,MAAM7B,QAAQ6B,MAAMc;gBACpBb,OAAO9B,QAAQ8B,OAAOa;YACxB;QACF;QAEAL,MAAMO,UAAU;IAClB;AACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { styleText } from 'node:util';
|
|
2
2
|
import { SanityCommand } from '@sanity/cli-core';
|
|
3
|
-
import
|
|
3
|
+
import padStart from 'lodash-es/padStart.js';
|
|
4
4
|
import { findSanityModulesVersions } from '../actions/versions/findSanityModulesVersions.js';
|
|
5
5
|
import { getDisplayName, getFormatters } from '../actions/versions/getFormatters.js';
|
|
6
6
|
import { versionsDebug } from '../actions/versions/versionsDebug.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/commands/versions.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {SanityCommand} from '@sanity/cli-core'\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/commands/versions.ts"],"sourcesContent":["import {styleText} from 'node:util'\n\nimport {SanityCommand} from '@sanity/cli-core'\nimport padStart from 'lodash-es/padStart.js'\n\nimport {findSanityModulesVersions} from '../actions/versions/findSanityModulesVersions.js'\nimport {getDisplayName, getFormatters} from '../actions/versions/getFormatters.js'\nimport {versionsDebug} from '../actions/versions/versionsDebug.js'\n\nexport class Versions extends SanityCommand<typeof Versions> {\n static override description = 'Shows installed versions of Sanity Studio and components'\n static override examples = ['<%= config.bin %> <%= command.id %>']\n\n public async run(): Promise<void> {\n const root = (await this.getProjectRoot()).directory\n\n const versions = await findSanityModulesVersions({cwd: root})\n\n versionsDebug('resolved versions:', versions)\n\n const {formatName, versionLength} = getFormatters(versions)\n for (const mod of versions) {\n const version = padStart(mod.installed || '<missing>', versionLength)\n const latest =\n mod.installed === mod.latest\n ? styleText('green', '(up to date)')\n : `(latest: ${styleText('yellow', mod.latest)})`\n\n this.log(`${formatName(getDisplayName(mod))} ${version} ${latest}`)\n }\n }\n}\n"],"names":["styleText","SanityCommand","padStart","findSanityModulesVersions","getDisplayName","getFormatters","versionsDebug","Versions","description","examples","run","root","getProjectRoot","directory","versions","cwd","formatName","versionLength","mod","version","installed","latest","log"],"mappings":"AAAA,SAAQA,SAAS,QAAO,YAAW;AAEnC,SAAQC,aAAa,QAAO,mBAAkB;AAC9C,OAAOC,cAAc,wBAAuB;AAE5C,SAAQC,yBAAyB,QAAO,mDAAkD;AAC1F,SAAQC,cAAc,EAAEC,aAAa,QAAO,uCAAsC;AAClF,SAAQC,aAAa,QAAO,uCAAsC;AAElE,OAAO,MAAMC,iBAAiBN;IAC5B,OAAgBO,cAAc,2DAA0D;IACxF,OAAgBC,WAAW;QAAC;KAAsC,CAAA;IAElE,MAAaC,MAAqB;QAChC,MAAMC,OAAO,AAAC,CAAA,MAAM,IAAI,CAACC,cAAc,EAAC,EAAGC,SAAS;QAEpD,MAAMC,WAAW,MAAMX,0BAA0B;YAACY,KAAKJ;QAAI;QAE3DL,cAAc,sBAAsBQ;QAEpC,MAAM,EAACE,UAAU,EAAEC,aAAa,EAAC,GAAGZ,cAAcS;QAClD,KAAK,MAAMI,OAAOJ,SAAU;YAC1B,MAAMK,UAAUjB,SAASgB,IAAIE,SAAS,IAAI,aAAaH;YACvD,MAAMI,SACJH,IAAIE,SAAS,KAAKF,IAAIG,MAAM,GACxBrB,UAAU,SAAS,kBACnB,CAAC,SAAS,EAAEA,UAAU,UAAUkB,IAAIG,MAAM,EAAE,CAAC,CAAC;YAEpD,IAAI,CAACC,GAAG,CAAC,GAAGN,WAAWZ,eAAec,MAAM,CAAC,EAAEC,QAAQ,CAAC,EAAEE,QAAQ;QACpE;IACF;AACF"}
|
package/dist/exports/index.d.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import {CliConfig} from '@sanity/cli-core'
|
|
2
2
|
import {ClientConfig} from '@sanity/client'
|
|
3
3
|
import {loadEnv} from 'vite'
|
|
4
|
-
import {PackageJson} from '@sanity/cli-core'
|
|
5
4
|
import {SanityClient} from '@sanity/client'
|
|
5
|
+
import {UserViteConfig} from '@sanity/cli-core'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
export declare interface CliApiConfig {
|
|
11
|
+
dataset?: string
|
|
12
|
+
projectId?: string
|
|
13
|
+
}
|
|
6
14
|
|
|
7
15
|
declare type CliClientGetter = ((options?: CliClientOptions) => SanityClient) & {
|
|
8
16
|
/**
|
|
@@ -44,8 +52,60 @@ export declare function defineCliConfig(config: CliConfig): CliConfig
|
|
|
44
52
|
*/
|
|
45
53
|
export declare const getCliClient: CliClientGetter
|
|
46
54
|
|
|
55
|
+
/**
|
|
56
|
+
* @public
|
|
57
|
+
*/
|
|
58
|
+
export declare interface GraphQLAPIConfig {
|
|
59
|
+
/**
|
|
60
|
+
* Suffix to use for generated filter types.
|
|
61
|
+
*
|
|
62
|
+
* Optional, Defaults to `Filter`.
|
|
63
|
+
*
|
|
64
|
+
*/
|
|
65
|
+
filterSuffix?: string
|
|
66
|
+
/**
|
|
67
|
+
* Generation of API to deploy
|
|
68
|
+
*
|
|
69
|
+
* Optional, defaults to `gen3` (which is the only option, currently)
|
|
70
|
+
*/
|
|
71
|
+
generation?: 'gen1' | 'gen2' | 'gen3'
|
|
72
|
+
/**
|
|
73
|
+
* ID of GraphQL API. Only (currently) required when using the `--api` flag
|
|
74
|
+
* for `sanity graphql deploy`, in order to only deploy a specific API.
|
|
75
|
+
*/
|
|
76
|
+
id?: string
|
|
77
|
+
/**
|
|
78
|
+
* Whether or not to enable the GraphQL v2021-10-21 query semantics
|
|
79
|
+
*/
|
|
80
|
+
nonNullDocumentFields?: boolean
|
|
81
|
+
/**
|
|
82
|
+
* Whether or not to enable the GraphQL Playground for this API
|
|
83
|
+
*
|
|
84
|
+
* Optional, defaults to `true` in development mode, `false` otherwise
|
|
85
|
+
*/
|
|
86
|
+
playground?: boolean
|
|
87
|
+
/**
|
|
88
|
+
* Name of source containing the schema to deploy, within the configured workspace
|
|
89
|
+
*
|
|
90
|
+
* Optional, defaults to `default` (eg the one used if no `name` is defined)
|
|
91
|
+
*/
|
|
92
|
+
source?: string
|
|
93
|
+
/**
|
|
94
|
+
* API tag for this API - allows deploying multiple different APIs to a single dataset
|
|
95
|
+
*
|
|
96
|
+
* Optional, defaults to `default`
|
|
97
|
+
*/
|
|
98
|
+
tag?: string
|
|
99
|
+
/**
|
|
100
|
+
* Name of workspace containing the schema to deploy
|
|
101
|
+
*
|
|
102
|
+
* Optional, defaults to `default` (eg the one used if no `name` is defined)
|
|
103
|
+
*/
|
|
104
|
+
workspace?: string
|
|
105
|
+
}
|
|
106
|
+
|
|
47
107
|
export {loadEnv}
|
|
48
108
|
|
|
49
|
-
export {
|
|
109
|
+
export {UserViteConfig}
|
|
50
110
|
|
|
51
111
|
export {}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/exports/index.ts"],"sourcesContent":["export {createCliConfig} from '../config/createCliConfig.js'\nexport {defineCliConfig} from '../config/defineCliConfig.js'\nexport type {
|
|
1
|
+
{"version":3,"sources":["../../src/exports/index.ts"],"sourcesContent":["export type {GraphQLAPIConfig} from '../actions/graphql/types.js'\nexport {createCliConfig} from '../config/createCliConfig.js'\nexport {defineCliConfig} from '../config/defineCliConfig.js'\nexport type {CliApiConfig} from '../types.js'\nexport {type CliClientOptions, getCliClient} from '../util/cliClient.js'\nexport {loadEnv} from '../util/loadEnv.js'\nexport type {CliConfig, UserViteConfig} from '@sanity/cli-core'\n"],"names":["createCliConfig","defineCliConfig","getCliClient","loadEnv"],"mappings":"AACA,SAAQA,eAAe,QAAO,+BAA8B;AAC5D,SAAQC,eAAe,QAAO,+BAA8B;AAE5D,SAA+BC,YAAY,QAAO,uBAAsB;AACxE,SAAQC,OAAO,QAAO,qBAAoB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { subdebug } from '@sanity/cli-core';
|
|
2
2
|
import { select, Separator, spinner } from '@sanity/cli-core/ux';
|
|
3
|
-
import
|
|
3
|
+
import groupBy from 'lodash-es/groupBy.js';
|
|
4
4
|
import { getMediaLibraries } from '../services/mediaLibraries.js';
|
|
5
5
|
const debug = subdebug('media:determine-target-library');
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/prompts/selectMediaLibrary.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core'\nimport {select, Separator, spinner} from '@sanity/cli-core/ux'\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/prompts/selectMediaLibrary.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core'\nimport {select, Separator, spinner} from '@sanity/cli-core/ux'\nimport groupBy from 'lodash-es/groupBy.js'\n\nimport {getMediaLibraries} from '../services/mediaLibraries.js'\n\nconst debug = subdebug('media:determine-target-library')\n\n/**\n * Fetch a list of available media libraries and present them to the user in a list prompt. The items\n * in the list prompt are grouped by organization id.\n */\nexport async function selectMediaLibrary(projectId: string): Promise<string> {\n debug('Fetching available media libraries')\n const spin = spinner('Fetching available media libraries').start()\n\n try {\n const activeLibraries = await getMediaLibraries(projectId)\n\n const byOrg = groupBy(activeLibraries, 'organizationId')\n\n spin.succeed()\n\n // Create flat choices array with separators\n const choices: Array<Separator | {name: string; value: string}> = []\n for (const [orgId, libs] of Object.entries(byOrg)) {\n choices.push(\n new Separator(`Organization: ${orgId}`),\n ...libs.map((lib) => ({name: lib.id, value: lib.id})),\n )\n }\n\n return select({\n choices,\n message: 'Select media library',\n })\n } catch (error) {\n spin.fail('Failed to fetch media libraries')\n throw error\n }\n}\n"],"names":["subdebug","select","Separator","spinner","groupBy","getMediaLibraries","debug","selectMediaLibrary","projectId","spin","start","activeLibraries","byOrg","succeed","choices","orgId","libs","Object","entries","push","map","lib","name","id","value","message","error","fail"],"mappings":"AAAA,SAAQA,QAAQ,QAAO,mBAAkB;AACzC,SAAQC,MAAM,EAAEC,SAAS,EAAEC,OAAO,QAAO,sBAAqB;AAC9D,OAAOC,aAAa,uBAAsB;AAE1C,SAAQC,iBAAiB,QAAO,gCAA+B;AAE/D,MAAMC,QAAQN,SAAS;AAEvB;;;CAGC,GACD,OAAO,eAAeO,mBAAmBC,SAAiB;IACxDF,MAAM;IACN,MAAMG,OAAON,QAAQ,sCAAsCO,KAAK;IAEhE,IAAI;QACF,MAAMC,kBAAkB,MAAMN,kBAAkBG;QAEhD,MAAMI,QAAQR,QAAQO,iBAAiB;QAEvCF,KAAKI,OAAO;QAEZ,4CAA4C;QAC5C,MAAMC,UAA4D,EAAE;QACpE,KAAK,MAAM,CAACC,OAAOC,KAAK,IAAIC,OAAOC,OAAO,CAACN,OAAQ;YACjDE,QAAQK,IAAI,CACV,IAAIjB,UAAU,CAAC,cAAc,EAAEa,OAAO,MACnCC,KAAKI,GAAG,CAAC,CAACC,MAAS,CAAA;oBAACC,MAAMD,IAAIE,EAAE;oBAAEC,OAAOH,IAAIE,EAAE;gBAAA,CAAA;QAEtD;QAEA,OAAOtB,OAAO;YACZa;YACAW,SAAS;QACX;IACF,EAAE,OAAOC,OAAO;QACdjB,KAAKkB,IAAI,CAAC;QACV,MAAMD;IACR;AACF"}
|
|
@@ -29,14 +29,16 @@ export async function editDatasetAcl({ aclMode, datasetName, projectId }) {
|
|
|
29
29
|
aclMode
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
-
export async function createDataset({ aclMode, datasetName, projectId }) {
|
|
32
|
+
export async function createDataset({ aclMode, datasetName, embeddings, projectId }) {
|
|
33
33
|
const client = await getDatasetClient(projectId);
|
|
34
|
+
const options = {};
|
|
34
35
|
if (aclMode) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
options.aclMode = aclMode;
|
|
37
|
+
}
|
|
38
|
+
if (embeddings) {
|
|
39
|
+
options.embeddings = embeddings;
|
|
38
40
|
}
|
|
39
|
-
return client.datasets.create(datasetName);
|
|
41
|
+
return client.datasets.create(datasetName, options);
|
|
40
42
|
}
|
|
41
43
|
export async function copyDataset({ projectId, skipHistory, sourceDataset, targetDataset }) {
|
|
42
44
|
const client = await getDatasetClient(projectId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/datasets.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\nimport {type DatasetAclMode} from '@sanity/client'\nimport {EventSource} from 'eventsource'\nimport {Observable} from 'rxjs'\n\nexport const DATASET_API_VERSION = 'v2025-09-16'\n\nfunction getDatasetClient(projectId: string) {\n return getProjectCliClient({\n apiVersion: DATASET_API_VERSION,\n projectId,\n requireUser: true,\n })\n}\n\nexport async function listDatasets(projectId: string) {\n const client = await getDatasetClient(projectId)\n return client.datasets.list()\n}\n\nexport interface DatasetAliasDefinition {\n datasetName: string | null\n name: string\n}\n\nexport async function listDatasetAliases(projectId: string): Promise<DatasetAliasDefinition[]> {\n const client = await getDatasetClient(projectId)\n return client.request<DatasetAliasDefinition[]>({uri: '/aliases'})\n}\n\ninterface DeleteDatasetOptions {\n datasetName: string\n projectId: string\n}\n\nexport async function deleteDataset({datasetName, projectId}: DeleteDatasetOptions) {\n const client = await getDatasetClient(projectId)\n return client.datasets.delete(datasetName)\n}\n\ninterface EditDatasetAclOptions {\n aclMode: 'private' | 'public'\n datasetName: string\n projectId: string\n}\n\nexport async function editDatasetAcl({aclMode, datasetName, projectId}: EditDatasetAclOptions) {\n const client = await getDatasetClient(projectId)\n return client.datasets.edit(datasetName, {aclMode})\n}\n\ninterface CreateDatasetOptions {\n datasetName: string\n projectId: string\n\n aclMode?: DatasetAclMode\n}\n\nexport async function createDataset({aclMode, datasetName, projectId}: CreateDatasetOptions) {\n const client = await getDatasetClient(projectId)\n\n if (aclMode) {\n return client.datasets.create(datasetName, {aclMode})\n }\n\n return client.datasets.create(datasetName)\n}\n\ninterface CopyDatasetOptions {\n projectId: string\n skipHistory: boolean\n sourceDataset: string\n targetDataset: string\n}\n\ninterface CopyDatasetResponse {\n jobId: string\n}\n\nexport async function copyDataset({\n projectId,\n skipHistory,\n sourceDataset,\n targetDataset,\n}: CopyDatasetOptions): Promise<CopyDatasetResponse> {\n const client = await getDatasetClient(projectId)\n return client.request<CopyDatasetResponse>({\n body: {\n skipHistory,\n targetDataset,\n },\n method: 'PUT',\n uri: `/datasets/${sourceDataset}/copy`,\n })\n}\n\ninterface ListDatasetCopyJobsOptions {\n projectId: string\n\n limit?: number\n offset?: number\n}\n\nexport interface DatasetCopyJob {\n createdAt: string\n id: string\n sourceDataset: string\n state: string\n targetDataset: string\n updatedAt: string\n withHistory: boolean\n}\n\nexport async function listDatasetCopyJobs({\n limit,\n offset,\n projectId,\n}: ListDatasetCopyJobsOptions): Promise<DatasetCopyJob[]> {\n const client = await getDatasetClient(projectId)\n const query: {limit?: string; offset?: string} = {}\n\n if (offset !== undefined && offset >= 0) {\n query.offset = `${offset}`\n }\n if (limit !== undefined && limit > 0) {\n query.limit = `${limit}`\n }\n\n return client.request<DatasetCopyJob[]>({\n method: 'GET',\n query,\n uri: `/projects/${projectId}/datasets/copy`,\n })\n}\n\nexport interface CopyJobProgressEvent {\n type: 'reconnect' | string\n\n progress?: number\n state?: 'completed' | 'failed' | 'pending' | 'processing'\n}\n\ninterface FollowCopyJobProgressOptions {\n jobId: string\n projectId: string\n}\n\nasync function getJobListenUrl(projectId: string, jobId: string): Promise<string> {\n const client = await getDatasetClient(projectId)\n const baseUrl = client.config().url || 'https://api.sanity.io'\n return `${baseUrl}/jobs/${jobId}/listen`\n}\n\nexport function followCopyJobProgress({\n jobId,\n projectId,\n}: FollowCopyJobProgressOptions): Observable<CopyJobProgressEvent> {\n return new Observable<CopyJobProgressEvent>((observer) => {\n let progressSource: InstanceType<typeof EventSource> | null = null\n let stopped = false\n\n getJobListenUrl(projectId, jobId)\n .then((url) => {\n progressSource = new EventSource(url)\n\n function onError() {\n if (progressSource) {\n progressSource.close()\n progressSource = null\n }\n\n if (stopped) {\n return\n }\n\n observer.next({type: 'reconnect'})\n progressSource = new EventSource(url)\n attachListeners()\n }\n\n function onChannelError(error: MessageEvent) {\n stopped = true\n if (progressSource) {\n progressSource.close()\n progressSource = null\n }\n const errorMessage = error.data\n ? `Copy job failed: ${error.data}`\n : 'Copy job failed: Connection to server lost. Please check the job status using --list and retry if needed.'\n observer.error(new Error(errorMessage))\n }\n\n function onMessage(event: MessageEvent) {\n let data\n try {\n data = JSON.parse(event.data)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n observer.error(new Error(`Invalid JSON received from server: ${message}`))\n return\n }\n\n if (data.state === 'failed') {\n const failureReason = data.message || data.error || 'Unknown reason'\n observer.error(new Error(`Copy job failed: ${failureReason}`))\n } else if (data.state === 'completed') {\n onComplete()\n } else {\n observer.next(data)\n }\n }\n\n function onComplete() {\n if (progressSource) {\n progressSource.removeEventListener('error', onError)\n progressSource.removeEventListener('channel_error', onChannelError)\n progressSource.removeEventListener('job', onMessage)\n progressSource.removeEventListener('done', onComplete)\n progressSource.close()\n progressSource = null\n }\n observer.complete()\n }\n\n function attachListeners() {\n if (progressSource) {\n progressSource.addEventListener('error', onError)\n progressSource.addEventListener('channel_error', onChannelError)\n progressSource.addEventListener('job', onMessage)\n progressSource.addEventListener('done', onComplete)\n }\n }\n\n attachListeners()\n })\n .catch((error) => {\n observer.error(error)\n })\n\n return () => {\n if (stopped) return\n stopped = true\n if (progressSource) {\n progressSource.close()\n progressSource = null\n }\n }\n })\n}\n"],"names":["getProjectCliClient","EventSource","Observable","DATASET_API_VERSION","getDatasetClient","projectId","apiVersion","requireUser","listDatasets","client","datasets","list","listDatasetAliases","request","uri","deleteDataset","datasetName","delete","editDatasetAcl","aclMode","edit","createDataset","create","copyDataset","skipHistory","sourceDataset","targetDataset","body","method","listDatasetCopyJobs","limit","offset","query","undefined","getJobListenUrl","jobId","baseUrl","config","url","followCopyJobProgress","observer","progressSource","stopped","then","onError","close","next","type","attachListeners","onChannelError","error","errorMessage","data","Error","onMessage","event","JSON","parse","message","state","failureReason","onComplete","removeEventListener","complete","addEventListener","catch"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/services/datasets.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\nimport {\n type DatasetCreateOptions as ClientCreateOptions,\n type DatasetAclMode,\n type EmbeddingsSettingsBody,\n} from '@sanity/client'\nimport {EventSource} from 'eventsource'\nimport {Observable} from 'rxjs'\n\nexport const DATASET_API_VERSION = 'v2025-09-16'\n\nfunction getDatasetClient(projectId: string) {\n return getProjectCliClient({\n apiVersion: DATASET_API_VERSION,\n projectId,\n requireUser: true,\n })\n}\n\nexport async function listDatasets(projectId: string) {\n const client = await getDatasetClient(projectId)\n return client.datasets.list()\n}\n\nexport interface DatasetAliasDefinition {\n datasetName: string | null\n name: string\n}\n\nexport async function listDatasetAliases(projectId: string): Promise<DatasetAliasDefinition[]> {\n const client = await getDatasetClient(projectId)\n return client.request<DatasetAliasDefinition[]>({uri: '/aliases'})\n}\n\ninterface DeleteDatasetOptions {\n datasetName: string\n projectId: string\n}\n\nexport async function deleteDataset({datasetName, projectId}: DeleteDatasetOptions) {\n const client = await getDatasetClient(projectId)\n return client.datasets.delete(datasetName)\n}\n\ninterface EditDatasetAclOptions {\n aclMode: 'private' | 'public'\n datasetName: string\n projectId: string\n}\n\nexport async function editDatasetAcl({aclMode, datasetName, projectId}: EditDatasetAclOptions) {\n const client = await getDatasetClient(projectId)\n return client.datasets.edit(datasetName, {aclMode})\n}\n\ninterface CreateDatasetOptions {\n datasetName: string\n projectId: string\n\n aclMode?: DatasetAclMode\n embeddings?: EmbeddingsSettingsBody\n}\n\nexport async function createDataset({\n aclMode,\n datasetName,\n embeddings,\n projectId,\n}: CreateDatasetOptions) {\n const client = await getDatasetClient(projectId)\n const options: ClientCreateOptions = {}\n\n if (aclMode) {\n options.aclMode = aclMode\n }\n if (embeddings) {\n options.embeddings = embeddings\n }\n\n return client.datasets.create(datasetName, options)\n}\n\ninterface CopyDatasetOptions {\n projectId: string\n skipHistory: boolean\n sourceDataset: string\n targetDataset: string\n}\n\ninterface CopyDatasetResponse {\n jobId: string\n}\n\nexport async function copyDataset({\n projectId,\n skipHistory,\n sourceDataset,\n targetDataset,\n}: CopyDatasetOptions): Promise<CopyDatasetResponse> {\n const client = await getDatasetClient(projectId)\n return client.request<CopyDatasetResponse>({\n body: {\n skipHistory,\n targetDataset,\n },\n method: 'PUT',\n uri: `/datasets/${sourceDataset}/copy`,\n })\n}\n\ninterface ListDatasetCopyJobsOptions {\n projectId: string\n\n limit?: number\n offset?: number\n}\n\nexport interface DatasetCopyJob {\n createdAt: string\n id: string\n sourceDataset: string\n state: string\n targetDataset: string\n updatedAt: string\n withHistory: boolean\n}\n\nexport async function listDatasetCopyJobs({\n limit,\n offset,\n projectId,\n}: ListDatasetCopyJobsOptions): Promise<DatasetCopyJob[]> {\n const client = await getDatasetClient(projectId)\n const query: {limit?: string; offset?: string} = {}\n\n if (offset !== undefined && offset >= 0) {\n query.offset = `${offset}`\n }\n if (limit !== undefined && limit > 0) {\n query.limit = `${limit}`\n }\n\n return client.request<DatasetCopyJob[]>({\n method: 'GET',\n query,\n uri: `/projects/${projectId}/datasets/copy`,\n })\n}\n\nexport interface CopyJobProgressEvent {\n type: 'reconnect' | string\n\n progress?: number\n state?: 'completed' | 'failed' | 'pending' | 'processing'\n}\n\ninterface FollowCopyJobProgressOptions {\n jobId: string\n projectId: string\n}\n\nasync function getJobListenUrl(projectId: string, jobId: string): Promise<string> {\n const client = await getDatasetClient(projectId)\n const baseUrl = client.config().url || 'https://api.sanity.io'\n return `${baseUrl}/jobs/${jobId}/listen`\n}\n\nexport function followCopyJobProgress({\n jobId,\n projectId,\n}: FollowCopyJobProgressOptions): Observable<CopyJobProgressEvent> {\n return new Observable<CopyJobProgressEvent>((observer) => {\n let progressSource: InstanceType<typeof EventSource> | null = null\n let stopped = false\n\n getJobListenUrl(projectId, jobId)\n .then((url) => {\n progressSource = new EventSource(url)\n\n function onError() {\n if (progressSource) {\n progressSource.close()\n progressSource = null\n }\n\n if (stopped) {\n return\n }\n\n observer.next({type: 'reconnect'})\n progressSource = new EventSource(url)\n attachListeners()\n }\n\n function onChannelError(error: MessageEvent) {\n stopped = true\n if (progressSource) {\n progressSource.close()\n progressSource = null\n }\n const errorMessage = error.data\n ? `Copy job failed: ${error.data}`\n : 'Copy job failed: Connection to server lost. Please check the job status using --list and retry if needed.'\n observer.error(new Error(errorMessage))\n }\n\n function onMessage(event: MessageEvent) {\n let data\n try {\n data = JSON.parse(event.data)\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error'\n observer.error(new Error(`Invalid JSON received from server: ${message}`))\n return\n }\n\n if (data.state === 'failed') {\n const failureReason = data.message || data.error || 'Unknown reason'\n observer.error(new Error(`Copy job failed: ${failureReason}`))\n } else if (data.state === 'completed') {\n onComplete()\n } else {\n observer.next(data)\n }\n }\n\n function onComplete() {\n if (progressSource) {\n progressSource.removeEventListener('error', onError)\n progressSource.removeEventListener('channel_error', onChannelError)\n progressSource.removeEventListener('job', onMessage)\n progressSource.removeEventListener('done', onComplete)\n progressSource.close()\n progressSource = null\n }\n observer.complete()\n }\n\n function attachListeners() {\n if (progressSource) {\n progressSource.addEventListener('error', onError)\n progressSource.addEventListener('channel_error', onChannelError)\n progressSource.addEventListener('job', onMessage)\n progressSource.addEventListener('done', onComplete)\n }\n }\n\n attachListeners()\n })\n .catch((error) => {\n observer.error(error)\n })\n\n return () => {\n if (stopped) return\n stopped = true\n if (progressSource) {\n progressSource.close()\n progressSource = null\n }\n }\n })\n}\n"],"names":["getProjectCliClient","EventSource","Observable","DATASET_API_VERSION","getDatasetClient","projectId","apiVersion","requireUser","listDatasets","client","datasets","list","listDatasetAliases","request","uri","deleteDataset","datasetName","delete","editDatasetAcl","aclMode","edit","createDataset","embeddings","options","create","copyDataset","skipHistory","sourceDataset","targetDataset","body","method","listDatasetCopyJobs","limit","offset","query","undefined","getJobListenUrl","jobId","baseUrl","config","url","followCopyJobProgress","observer","progressSource","stopped","then","onError","close","next","type","attachListeners","onChannelError","error","errorMessage","data","Error","onMessage","event","JSON","parse","message","state","failureReason","onComplete","removeEventListener","complete","addEventListener","catch"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { getProjectCliClient } from '@sanity/cli-core';
|
|
2
|
+
import { DATASET_API_VERSION } from './datasets.js';
|
|
3
|
+
function getEmbeddingsClient(projectId) {
|
|
4
|
+
return getProjectCliClient({
|
|
5
|
+
apiVersion: DATASET_API_VERSION,
|
|
6
|
+
projectId,
|
|
7
|
+
requireUser: true
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export async function getEmbeddingsSettings(projectId, dataset) {
|
|
11
|
+
const client = await getEmbeddingsClient(projectId);
|
|
12
|
+
return client.datasets.getEmbeddingsSettings(dataset);
|
|
13
|
+
}
|
|
14
|
+
export async function setEmbeddingsSettings({ dataset, enabled, projectId, projection }) {
|
|
15
|
+
const client = await getEmbeddingsClient(projectId);
|
|
16
|
+
const body = {
|
|
17
|
+
enabled,
|
|
18
|
+
...projection ? {
|
|
19
|
+
projection
|
|
20
|
+
} : {}
|
|
21
|
+
};
|
|
22
|
+
await client.datasets.editEmbeddingsSettings(dataset, body);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/embeddings.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\nimport {type EmbeddingsSettings, type EmbeddingsSettingsBody} from '@sanity/client'\n\nimport {DATASET_API_VERSION} from './datasets.js'\n\nfunction getEmbeddingsClient(projectId: string) {\n return getProjectCliClient({\n apiVersion: DATASET_API_VERSION,\n projectId,\n requireUser: true,\n })\n}\n\nexport async function getEmbeddingsSettings(\n projectId: string,\n dataset: string,\n): Promise<EmbeddingsSettings> {\n const client = await getEmbeddingsClient(projectId)\n return client.datasets.getEmbeddingsSettings(dataset)\n}\n\ninterface SetEmbeddingsOptions {\n dataset: string\n enabled: boolean\n projectId: string\n\n projection?: string\n}\n\nexport async function setEmbeddingsSettings({\n dataset,\n enabled,\n projectId,\n projection,\n}: SetEmbeddingsOptions): Promise<void> {\n const client = await getEmbeddingsClient(projectId)\n const body: EmbeddingsSettingsBody = {enabled, ...(projection ? {projection} : {})}\n await client.datasets.editEmbeddingsSettings(dataset, body)\n}\n"],"names":["getProjectCliClient","DATASET_API_VERSION","getEmbeddingsClient","projectId","apiVersion","requireUser","getEmbeddingsSettings","dataset","client","datasets","setEmbeddingsSettings","enabled","projection","body","editEmbeddingsSettings"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,mBAAkB;AAGpD,SAAQC,mBAAmB,QAAO,gBAAe;AAEjD,SAASC,oBAAoBC,SAAiB;IAC5C,OAAOH,oBAAoB;QACzBI,YAAYH;QACZE;QACAE,aAAa;IACf;AACF;AAEA,OAAO,eAAeC,sBACpBH,SAAiB,EACjBI,OAAe;IAEf,MAAMC,SAAS,MAAMN,oBAAoBC;IACzC,OAAOK,OAAOC,QAAQ,CAACH,qBAAqB,CAACC;AAC/C;AAUA,OAAO,eAAeG,sBAAsB,EAC1CH,OAAO,EACPI,OAAO,EACPR,SAAS,EACTS,UAAU,EACW;IACrB,MAAMJ,SAAS,MAAMN,oBAAoBC;IACzC,MAAMU,OAA+B;QAACF;QAAS,GAAIC,aAAa;YAACA;QAAU,IAAI,CAAC,CAAC;IAAC;IAClF,MAAMJ,OAAOC,QAAQ,CAACK,sBAAsB,CAACP,SAASM;AACxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/graphql.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\n\nimport {\n type DeployResponse,\n type GeneratedApiSpecification,\n type ValidationResponse,\n} from '../actions/graphql/types.js'\nimport {getUrlHeaders} from './getUrlHeaders.js'\n\nexport const GRAPHQL_API_VERSION = 'v2025-09-19'\n\nexport interface GraphQLEndpoint {\n dataset: string\n generation: string\n playgroundEnabled: boolean\n projectId: string\n tag: string\n}\n\n/**\n * List all GraphQL endpoints for a project\n * @param client - The API client to use for the request\n * @returns A promise that resolves to an array of GraphQL endpoints\n *\n * @internal\n */\nexport async function listGraphQLEndpoints(projectId: string): Promise<GraphQLEndpoint[]> {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<GraphQLEndpoint[]>({\n method: 'GET',\n uri: '/apis/graphql',\n })\n}\n\ninterface DeleteGraphQLAPIOptions {\n dataset: string\n projectId: string\n tag: string\n}\n\nexport async function deleteGraphQLAPI({dataset, projectId, tag}: DeleteGraphQLAPIOptions) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request({\n method: 'DELETE',\n uri: `/apis/graphql/${dataset}/${tag}`,\n })\n}\n\nexport async function validateGraphQLAPI({\n dataset,\n enablePlayground,\n projectId,\n schema,\n tag,\n}: {\n dataset: string\n enablePlayground: boolean\n projectId: string\n schema: GeneratedApiSpecification\n tag: string\n}) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<ValidationResponse>({\n body: {enablePlayground, schema},\n maxRedirects: 0,\n method: 'POST',\n url: `/apis/graphql/${dataset}/${tag}/validate`,\n })\n}\n\ninterface DeployGraphQLAPIOptions {\n dataset: string\n enablePlayground: boolean\n projectId: string\n schema: GeneratedApiSpecification\n tag: string\n}\n\nexport async function deployGraphQLAPI({\n dataset,\n enablePlayground,\n projectId,\n schema,\n tag,\n}: DeployGraphQLAPIOptions) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<DeployResponse>({\n body: {enablePlayground, schema},\n maxRedirects: 0,\n method: 'PUT',\n url: `/apis/graphql/${dataset}/${tag}`,\n })\n}\n\nexport async function getClientUrl(projectId: string, uri: string) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return `${client.config().url}/${uri.replace(/^\\//, '')}`\n}\n\nexport async function getCurrentSchemaProps(\n projectId: string,\n dataset: string,\n tag: string,\n): Promise<{\n currentGeneration?: string\n playgroundEnabled?: boolean\n}> {\n try {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n })\n\n const uri = `/apis/graphql/${dataset}/${tag}`\n const config = client.config()\n const apiUrl = `${config.url}/${uri.replace(/^\\//, '')}`\n\n const res = await getUrlHeaders(apiUrl, {\n Authorization: `Bearer ${config.token}`,\n })\n\n return {\n currentGeneration: res['x-sanity-graphql-generation'],\n playgroundEnabled: res['x-sanity-graphql-playground'] === 'true',\n }\n } catch (err) {\n if (err instanceof Error
|
|
1
|
+
{"version":3,"sources":["../../src/services/graphql.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\n\nimport {\n type DeployResponse,\n type GeneratedApiSpecification,\n type ValidationResponse,\n} from '../actions/graphql/types.js'\nimport {getUrlHeaders} from './getUrlHeaders.js'\n\nexport const GRAPHQL_API_VERSION = 'v2025-09-19'\n\nexport interface GraphQLEndpoint {\n dataset: string\n generation: string\n playgroundEnabled: boolean\n projectId: string\n tag: string\n}\n\n/**\n * List all GraphQL endpoints for a project\n * @param client - The API client to use for the request\n * @returns A promise that resolves to an array of GraphQL endpoints\n *\n * @internal\n */\nexport async function listGraphQLEndpoints(projectId: string): Promise<GraphQLEndpoint[]> {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<GraphQLEndpoint[]>({\n method: 'GET',\n uri: '/apis/graphql',\n })\n}\n\ninterface DeleteGraphQLAPIOptions {\n dataset: string\n projectId: string\n tag: string\n}\n\nexport async function deleteGraphQLAPI({dataset, projectId, tag}: DeleteGraphQLAPIOptions) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request({\n method: 'DELETE',\n uri: `/apis/graphql/${dataset}/${tag}`,\n })\n}\n\nexport async function validateGraphQLAPI({\n dataset,\n enablePlayground,\n projectId,\n schema,\n tag,\n}: {\n dataset: string\n enablePlayground: boolean\n projectId: string\n schema: GeneratedApiSpecification\n tag: string\n}) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<ValidationResponse>({\n body: {enablePlayground, schema},\n maxRedirects: 0,\n method: 'POST',\n url: `/apis/graphql/${dataset}/${tag}/validate`,\n })\n}\n\ninterface DeployGraphQLAPIOptions {\n dataset: string\n enablePlayground: boolean\n projectId: string\n schema: GeneratedApiSpecification\n tag: string\n}\n\nexport async function deployGraphQLAPI({\n dataset,\n enablePlayground,\n projectId,\n schema,\n tag,\n}: DeployGraphQLAPIOptions) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<DeployResponse>({\n body: {enablePlayground, schema},\n maxRedirects: 0,\n method: 'PUT',\n url: `/apis/graphql/${dataset}/${tag}`,\n })\n}\n\nexport async function getClientUrl(projectId: string, uri: string) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return `${client.config().url}/${uri.replace(/^\\//, '')}`\n}\n\nexport async function getCurrentSchemaProps(\n projectId: string,\n dataset: string,\n tag: string,\n): Promise<{\n currentGeneration?: string\n playgroundEnabled?: boolean\n}> {\n try {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n })\n\n const uri = `/apis/graphql/${dataset}/${tag}`\n const config = client.config()\n const apiUrl = `${config.url}/${uri.replace(/^\\//, '')}`\n\n const res = await getUrlHeaders(apiUrl, {\n Authorization: `Bearer ${config.token}`,\n })\n\n return {\n currentGeneration: res['x-sanity-graphql-generation'],\n playgroundEnabled: res['x-sanity-graphql-playground'] === 'true',\n }\n } catch (err) {\n if (\n err instanceof Error &&\n 'response' in err &&\n typeof err.response === 'object' &&\n err.response !== null &&\n 'statusCode' in err.response &&\n err.response.statusCode === 404\n ) {\n return {}\n }\n\n throw err\n }\n}\n"],"names":["getProjectCliClient","getUrlHeaders","GRAPHQL_API_VERSION","listGraphQLEndpoints","projectId","client","apiVersion","requireUser","request","method","uri","deleteGraphQLAPI","dataset","tag","validateGraphQLAPI","enablePlayground","schema","body","maxRedirects","url","deployGraphQLAPI","getClientUrl","config","replace","getCurrentSchemaProps","apiUrl","res","Authorization","token","currentGeneration","playgroundEnabled","err","Error","response","statusCode"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,mBAAkB;AAOpD,SAAQC,aAAa,QAAO,qBAAoB;AAEhD,OAAO,MAAMC,sBAAsB,cAAa;AAUhD;;;;;;CAMC,GACD,OAAO,eAAeC,qBAAqBC,SAAiB;IAC1D,MAAMC,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAoB;QACvCC,QAAQ;QACRC,KAAK;IACP;AACF;AAQA,OAAO,eAAeC,iBAAiB,EAACC,OAAO,EAAER,SAAS,EAAES,GAAG,EAA0B;IACvF,MAAMR,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAC;QACpBC,QAAQ;QACRC,KAAK,CAAC,cAAc,EAAEE,QAAQ,CAAC,EAAEC,KAAK;IACxC;AACF;AAEA,OAAO,eAAeC,mBAAmB,EACvCF,OAAO,EACPG,gBAAgB,EAChBX,SAAS,EACTY,MAAM,EACNH,GAAG,EAOJ;IACC,MAAMR,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAqB;QACxCS,MAAM;YAACF;YAAkBC;QAAM;QAC/BE,cAAc;QACdT,QAAQ;QACRU,KAAK,CAAC,cAAc,EAAEP,QAAQ,CAAC,EAAEC,IAAI,SAAS,CAAC;IACjD;AACF;AAUA,OAAO,eAAeO,iBAAiB,EACrCR,OAAO,EACPG,gBAAgB,EAChBX,SAAS,EACTY,MAAM,EACNH,GAAG,EACqB;IACxB,MAAMR,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAiB;QACpCS,MAAM;YAACF;YAAkBC;QAAM;QAC/BE,cAAc;QACdT,QAAQ;QACRU,KAAK,CAAC,cAAc,EAAEP,QAAQ,CAAC,EAAEC,KAAK;IACxC;AACF;AAEA,OAAO,eAAeQ,aAAajB,SAAiB,EAAEM,GAAW;IAC/D,MAAML,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAO,GAAGF,OAAOiB,MAAM,GAAGH,GAAG,CAAC,CAAC,EAAET,IAAIa,OAAO,CAAC,OAAO,KAAK;AAC3D;AAEA,OAAO,eAAeC,sBACpBpB,SAAiB,EACjBQ,OAAe,EACfC,GAAW;IAKX,IAAI;QACF,MAAMR,SAAS,MAAML,oBAAoB;YACvCM,YAAYJ;YACZE;QACF;QAEA,MAAMM,MAAM,CAAC,cAAc,EAAEE,QAAQ,CAAC,EAAEC,KAAK;QAC7C,MAAMS,SAASjB,OAAOiB,MAAM;QAC5B,MAAMG,SAAS,GAAGH,OAAOH,GAAG,CAAC,CAAC,EAAET,IAAIa,OAAO,CAAC,OAAO,KAAK;QAExD,MAAMG,MAAM,MAAMzB,cAAcwB,QAAQ;YACtCE,eAAe,CAAC,OAAO,EAAEL,OAAOM,KAAK,EAAE;QACzC;QAEA,OAAO;YACLC,mBAAmBH,GAAG,CAAC,8BAA8B;YACrDI,mBAAmBJ,GAAG,CAAC,8BAA8B,KAAK;QAC5D;IACF,EAAE,OAAOK,KAAK;QACZ,IACEA,eAAeC,SACf,cAAcD,OACd,OAAOA,IAAIE,QAAQ,KAAK,YACxBF,IAAIE,QAAQ,KAAK,QACjB,gBAAgBF,IAAIE,QAAQ,IAC5BF,IAAIE,QAAQ,CAACC,UAAU,KAAK,KAC5B;YACA,OAAO,CAAC;QACV;QAEA,MAAMH;IACR;AACF"}
|
package/dist/services/schemas.js
CHANGED
|
@@ -30,7 +30,7 @@ export async function updateSchemas(dataset, projectId, schemas) {
|
|
|
30
30
|
const client = await getSchemaClient();
|
|
31
31
|
return client.request({
|
|
32
32
|
body: {
|
|
33
|
-
schemas
|
|
33
|
+
schemas
|
|
34
34
|
},
|
|
35
35
|
method: 'PUT',
|
|
36
36
|
url: `/projects/${projectId}/datasets/${dataset}/schemas`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/schemas.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {type StoredWorkspaceSchema} from '../actions/manifest/types.js'\n\nexport const SCHEMA_API_VERSION = 'v2025-03-01'\n\nasync function getSchemaClient() {\n return await getGlobalCliClient({\n apiVersion: SCHEMA_API_VERSION,\n requireUser: true,\n })\n}\n\nexport async function getSchemas(dataset: string, projectId: string, id?: string) {\n const client = await getSchemaClient()\n\n return client.request<StoredWorkspaceSchema[]>({\n method: 'GET',\n uri: `/projects/${projectId}/datasets/${dataset}/schemas${id ? `/${id}` : ''}`,\n })\n}\n\nexport async function deleteSchema(dataset: string, projectId: string, id: string) {\n const exists = await getSchemas(dataset, projectId, id)\n\n if (exists?.length === 0) {\n return {\n deleted: false,\n }\n }\n\n const client = await getSchemaClient()\n\n return client.request({\n method: 'DELETE',\n uri: `/projects/${projectId}/datasets/${dataset}/schemas/${id}`,\n })\n}\n\nexport async function updateSchemas<T>(dataset: string, projectId: string, schemas: T) {\n const client = await getSchemaClient()\n\n return client.request({\n body: {\n schemas
|
|
1
|
+
{"version":3,"sources":["../../src/services/schemas.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {type StoredWorkspaceSchema} from '../actions/manifest/types.js'\n\nexport const SCHEMA_API_VERSION = 'v2025-03-01'\n\nasync function getSchemaClient() {\n return await getGlobalCliClient({\n apiVersion: SCHEMA_API_VERSION,\n requireUser: true,\n })\n}\n\nexport async function getSchemas(dataset: string, projectId: string, id?: string) {\n const client = await getSchemaClient()\n\n return client.request<StoredWorkspaceSchema[]>({\n method: 'GET',\n uri: `/projects/${projectId}/datasets/${dataset}/schemas${id ? `/${id}` : ''}`,\n })\n}\n\nexport async function deleteSchema(dataset: string, projectId: string, id: string) {\n const exists = await getSchemas(dataset, projectId, id)\n\n if (exists?.length === 0) {\n return {\n deleted: false,\n }\n }\n\n const client = await getSchemaClient()\n\n return client.request({\n method: 'DELETE',\n uri: `/projects/${projectId}/datasets/${dataset}/schemas/${id}`,\n })\n}\n\nexport async function updateSchemas<T>(dataset: string, projectId: string, schemas: T) {\n const client = await getSchemaClient()\n\n return client.request({\n body: {\n schemas,\n },\n method: 'PUT',\n url: `/projects/${projectId}/datasets/${dataset}/schemas`,\n })\n}\n"],"names":["getGlobalCliClient","SCHEMA_API_VERSION","getSchemaClient","apiVersion","requireUser","getSchemas","dataset","projectId","id","client","request","method","uri","deleteSchema","exists","length","deleted","updateSchemas","schemas","body","url"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAInD,OAAO,MAAMC,qBAAqB,cAAa;AAE/C,eAAeC;IACb,OAAO,MAAMF,mBAAmB;QAC9BG,YAAYF;QACZG,aAAa;IACf;AACF;AAEA,OAAO,eAAeC,WAAWC,OAAe,EAAEC,SAAiB,EAAEC,EAAW;IAC9E,MAAMC,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAA0B;QAC7CC,QAAQ;QACRC,KAAK,CAAC,UAAU,EAAEL,UAAU,UAAU,EAAED,QAAQ,QAAQ,EAAEE,KAAK,CAAC,CAAC,EAAEA,IAAI,GAAG,IAAI;IAChF;AACF;AAEA,OAAO,eAAeK,aAAaP,OAAe,EAAEC,SAAiB,EAAEC,EAAU;IAC/E,MAAMM,SAAS,MAAMT,WAAWC,SAASC,WAAWC;IAEpD,IAAIM,QAAQC,WAAW,GAAG;QACxB,OAAO;YACLC,SAAS;QACX;IACF;IAEA,MAAMP,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAAC;QACpBC,QAAQ;QACRC,KAAK,CAAC,UAAU,EAAEL,UAAU,UAAU,EAAED,QAAQ,SAAS,EAAEE,IAAI;IACjE;AACF;AAEA,OAAO,eAAeS,cAAiBX,OAAe,EAAEC,SAAiB,EAAEW,OAAU;IACnF,MAAMT,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAAC;QACpBS,MAAM;YACJD;QACF;QACAP,QAAQ;QACRS,KAAK,CAAC,UAAU,EAAEb,UAAU,UAAU,EAAED,QAAQ,QAAQ,CAAC;IAC3D;AACF"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["/**\n * PackageJson type is now consolidated in readPackageJson.ts\n * Re-exported here for backward compatibility.\n *\n * @public\n */\nexport type {PackageJson, ReadPackageJsonOptions} from '@sanity/cli-core'\n\nexport interface CliApiConfig {\n dataset?: string\n projectId?: string\n}\n\nexport interface SanityJson {\n __experimental_spaces?: {\n api: {\n dataset?: string\n projectId?: string\n }\n default?: true\n name: string\n title: string\n }[]\n api?: CliApiConfig\n env?: {\n development?: SanityJson\n production?: SanityJson\n staging?: SanityJson\n }\n parts?: {\n description?: string\n implements?: string\n name?: string\n path?: string\n }[]\n plugins?: string[]\n project?: {\n basePath?: string\n name?: string\n }\n root?: boolean\n}\n"],"names":[],"mappings":"AAAA;;;;;CAKC,
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["/**\n * PackageJson type is now consolidated in readPackageJson.ts\n * Re-exported here for backward compatibility.\n *\n * @public\n */\nexport type {PackageJson, ReadPackageJsonOptions} from '@sanity/cli-core'\n\n/**\n * @public\n */\nexport interface CliApiConfig {\n dataset?: string\n projectId?: string\n}\n\nexport interface SanityJson {\n __experimental_spaces?: {\n api: {\n dataset?: string\n projectId?: string\n }\n default?: true\n name: string\n title: string\n }[]\n api?: CliApiConfig\n env?: {\n development?: SanityJson\n production?: SanityJson\n staging?: SanityJson\n }\n parts?: {\n description?: string\n implements?: string\n name?: string\n path?: string\n }[]\n plugins?: string[]\n project?: {\n basePath?: string\n name?: string\n }\n root?: boolean\n}\n"],"names":[],"mappings":"AAAA;;;;;CAKC,GAWD,WA4BC"}
|
|
@@ -28,11 +28,11 @@ const defaultRequester = createRequester({
|
|
|
28
28
|
* @param workDir - The path to the working directory containing the package.json file.
|
|
29
29
|
* @param options - Optional configuration for version comparison.
|
|
30
30
|
*
|
|
31
|
-
* @returns A promise that resolves to an
|
|
32
|
-
*
|
|
31
|
+
* @returns A promise that resolves to an object containing `mismatched` (packages whose local and remote versions differ)
|
|
32
|
+
* and `unresolvedPrerelease` (packages with prerelease versions that could not be resolved remotely).
|
|
33
33
|
*
|
|
34
|
-
* @throws Throws an error if the remote version of a package cannot be fetched, or if the local version
|
|
35
|
-
* cannot be parsed.
|
|
34
|
+
* @throws Throws an error if the remote version of a non-prerelease package cannot be fetched, or if the local version
|
|
35
|
+
* of a package cannot be parsed.
|
|
36
36
|
*/ export async function compareDependencyVersions(packages, workDir, { appId, requester = defaultRequester } = {}) {
|
|
37
37
|
const manifest = await readPackageJson(path.join(workDir, 'package.json'), {
|
|
38
38
|
skipSchemaValidation: true
|
|
@@ -41,11 +41,26 @@ const defaultRequester = createRequester({
|
|
|
41
41
|
...manifest?.dependencies,
|
|
42
42
|
...manifest?.devDependencies
|
|
43
43
|
};
|
|
44
|
-
const
|
|
44
|
+
const mismatched = [];
|
|
45
|
+
const unresolvedPrerelease = [];
|
|
45
46
|
for (const pkg of packages){
|
|
47
|
+
// Skip packages that are not declared in the local package.json
|
|
48
|
+
if (!dependencies[pkg.name]) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
46
51
|
const resolvedVersion = await getRemoteResolvedVersion(getModuleUrl(pkg, {
|
|
47
52
|
appId
|
|
48
53
|
}), requester);
|
|
54
|
+
if (resolvedVersion === null) {
|
|
55
|
+
if (semver.prerelease(pkg.version)) {
|
|
56
|
+
unresolvedPrerelease.push({
|
|
57
|
+
pkg: pkg.name,
|
|
58
|
+
version: pkg.version
|
|
59
|
+
});
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
throw new Error(`Failed to resolve remote version for ${pkg.name}@${pkg.version}: package not found`);
|
|
63
|
+
}
|
|
49
64
|
const packageVersion = await getLocalPackageVersion(pkg.name, workDir);
|
|
50
65
|
const manifestVersion = dependencies[pkg.name];
|
|
51
66
|
const installed = semver.coerce(packageVersion ? semver.parse(packageVersion) : semver.coerce(manifestVersion));
|
|
@@ -53,14 +68,17 @@ const defaultRequester = createRequester({
|
|
|
53
68
|
throw new Error(`Failed to parse installed version for ${pkg.name}`);
|
|
54
69
|
}
|
|
55
70
|
if (!semver.eq(resolvedVersion, installed.version)) {
|
|
56
|
-
|
|
71
|
+
mismatched.push({
|
|
57
72
|
installed: installed.version,
|
|
58
73
|
pkg: pkg.name,
|
|
59
74
|
remote: resolvedVersion
|
|
60
75
|
});
|
|
61
76
|
}
|
|
62
77
|
}
|
|
63
|
-
return
|
|
78
|
+
return {
|
|
79
|
+
mismatched,
|
|
80
|
+
unresolvedPrerelease
|
|
81
|
+
};
|
|
64
82
|
}
|
|
65
83
|
async function getRemoteResolvedVersion(url, request) {
|
|
66
84
|
let response;
|
|
@@ -82,6 +100,9 @@ async function getRemoteResolvedVersion(url, request) {
|
|
|
82
100
|
}
|
|
83
101
|
return resolved;
|
|
84
102
|
}
|
|
103
|
+
if (response.statusCode === 404) {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
85
106
|
throw new Error(`Unexpected HTTP response: ${response.statusCode} ${response.statusMessage}`);
|
|
86
107
|
}
|
|
87
108
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/compareDependencyVersions.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {readPackageJson} from '@sanity/cli-core'\nimport {createRequester} from '@sanity/cli-core/request'\nimport semver from 'semver'\n\nimport {getModuleUrl} from '../actions/build/getAutoUpdatesImportMap.js'\nimport {getLocalPackageVersion} from './getLocalPackageVersion.js'\n\nconst defaultRequester = createRequester({\n middleware: {httpErrors: false, promise: {onlyBody: false}},\n})\n\ninterface CompareDependencyVersions {\n installed: string\n pkg: string\n remote: string\n}\n\ninterface CompareDependencyVersionsOptions {\n /** When provided, uses the app-specific module endpoint instead of the default endpoint. */\n appId?: string\n /** Optional requester for dependency injection (primarily for testing). */\n requester?: typeof defaultRequester\n}\n\n/**\n * @internal\n *\n * Compares the versions of dependencies in the studio or app with their remote versions.\n *\n * This function reads the package.json file in the provided working directory, and compares the versions of the dependencies\n * specified in the `autoUpdatesImports` parameter with their remote versions. If the versions do not match, the dependency is\n * added to a list of failed dependencies, which is returned by the function.\n *\n * The failed dependencies are anything that does not strictly match the remote version.\n * This means that if a version is lower or greater by even a patch it will be marked as failed.\n *\n * @param packages - An array of packages with their name and version to compare against remote.\n * @param workDir - The path to the working directory containing the package.json file.\n * @param options - Optional configuration for version comparison.\n *\n * @returns A promise that resolves to an
|
|
1
|
+
{"version":3,"sources":["../../src/util/compareDependencyVersions.ts"],"sourcesContent":["import path from 'node:path'\n\nimport {readPackageJson} from '@sanity/cli-core'\nimport {createRequester} from '@sanity/cli-core/request'\nimport semver from 'semver'\n\nimport {getModuleUrl} from '../actions/build/getAutoUpdatesImportMap.js'\nimport {getLocalPackageVersion} from './getLocalPackageVersion.js'\n\nconst defaultRequester = createRequester({\n middleware: {httpErrors: false, promise: {onlyBody: false}},\n})\n\ninterface CompareDependencyVersions {\n installed: string\n pkg: string\n remote: string\n}\n\nexport interface UnresolvedPrerelease {\n pkg: string\n version: string\n}\n\ninterface CompareDependencyVersionsResult {\n mismatched: Array<CompareDependencyVersions>\n unresolvedPrerelease: Array<UnresolvedPrerelease>\n}\n\ninterface CompareDependencyVersionsOptions {\n /** When provided, uses the app-specific module endpoint instead of the default endpoint. */\n appId?: string\n /** Optional requester for dependency injection (primarily for testing). */\n requester?: typeof defaultRequester\n}\n\n/**\n * @internal\n *\n * Compares the versions of dependencies in the studio or app with their remote versions.\n *\n * This function reads the package.json file in the provided working directory, and compares the versions of the dependencies\n * specified in the `autoUpdatesImports` parameter with their remote versions. If the versions do not match, the dependency is\n * added to a list of failed dependencies, which is returned by the function.\n *\n * The failed dependencies are anything that does not strictly match the remote version.\n * This means that if a version is lower or greater by even a patch it will be marked as failed.\n *\n * @param packages - An array of packages with their name and version to compare against remote.\n * @param workDir - The path to the working directory containing the package.json file.\n * @param options - Optional configuration for version comparison.\n *\n * @returns A promise that resolves to an object containing `mismatched` (packages whose local and remote versions differ)\n * and `unresolvedPrerelease` (packages with prerelease versions that could not be resolved remotely).\n *\n * @throws Throws an error if the remote version of a non-prerelease package cannot be fetched, or if the local version\n * of a package cannot be parsed.\n */\nexport async function compareDependencyVersions(\n packages: {name: string; version: string}[],\n workDir: string,\n {appId, requester = defaultRequester}: CompareDependencyVersionsOptions = {},\n): Promise<CompareDependencyVersionsResult> {\n const manifest = await readPackageJson(path.join(workDir, 'package.json'), {\n skipSchemaValidation: true,\n })\n const dependencies = {...manifest?.dependencies, ...manifest?.devDependencies}\n\n const mismatched: Array<CompareDependencyVersions> = []\n const unresolvedPrerelease: Array<UnresolvedPrerelease> = []\n\n for (const pkg of packages) {\n // Skip packages that are not declared in the local package.json\n if (!dependencies[pkg.name]) {\n continue\n }\n\n const resolvedVersion = await getRemoteResolvedVersion(getModuleUrl(pkg, {appId}), requester)\n\n if (resolvedVersion === null) {\n if (semver.prerelease(pkg.version)) {\n unresolvedPrerelease.push({pkg: pkg.name, version: pkg.version})\n continue\n }\n throw new Error(\n `Failed to resolve remote version for ${pkg.name}@${pkg.version}: package not found`,\n )\n }\n\n const packageVersion = await getLocalPackageVersion(pkg.name, workDir)\n\n const manifestVersion = dependencies[pkg.name]\n\n const installed = semver.coerce(\n packageVersion ? semver.parse(packageVersion) : semver.coerce(manifestVersion),\n )\n\n if (!installed) {\n throw new Error(`Failed to parse installed version for ${pkg.name}`)\n }\n\n if (!semver.eq(resolvedVersion, installed.version)) {\n mismatched.push({\n installed: installed.version,\n pkg: pkg.name,\n remote: resolvedVersion,\n })\n }\n }\n\n return {mismatched, unresolvedPrerelease}\n}\n\nasync function getRemoteResolvedVersion(\n url: string,\n request: typeof defaultRequester,\n): Promise<string | null> {\n let response\n try {\n response = await request({\n maxRedirects: 0,\n method: 'HEAD',\n url,\n })\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n throw new Error(`Failed to fetch remote version for ${url}: ${message}`)\n }\n\n // 302 is expected, but lets also handle 2xx\n if (response.statusCode < 400) {\n const resolved = response.headers['x-resolved-version']\n if (!resolved) {\n throw new Error(`Missing 'x-resolved-version' header on response from HEAD ${url}`)\n }\n return resolved\n }\n\n if (response.statusCode === 404) {\n return null\n }\n\n throw new Error(`Unexpected HTTP response: ${response.statusCode} ${response.statusMessage}`)\n}\n"],"names":["path","readPackageJson","createRequester","semver","getModuleUrl","getLocalPackageVersion","defaultRequester","middleware","httpErrors","promise","onlyBody","compareDependencyVersions","packages","workDir","appId","requester","manifest","join","skipSchemaValidation","dependencies","devDependencies","mismatched","unresolvedPrerelease","pkg","name","resolvedVersion","getRemoteResolvedVersion","prerelease","version","push","Error","packageVersion","manifestVersion","installed","coerce","parse","eq","remote","url","request","response","maxRedirects","method","err","message","String","statusCode","resolved","headers","statusMessage"],"mappings":"AAAA,OAAOA,UAAU,YAAW;AAE5B,SAAQC,eAAe,QAAO,mBAAkB;AAChD,SAAQC,eAAe,QAAO,2BAA0B;AACxD,OAAOC,YAAY,SAAQ;AAE3B,SAAQC,YAAY,QAAO,8CAA6C;AACxE,SAAQC,sBAAsB,QAAO,8BAA6B;AAElE,MAAMC,mBAAmBJ,gBAAgB;IACvCK,YAAY;QAACC,YAAY;QAAOC,SAAS;YAACC,UAAU;QAAK;IAAC;AAC5D;AAyBA;;;;;;;;;;;;;;;;;;;;;CAqBC,GACD,OAAO,eAAeC,0BACpBC,QAA2C,EAC3CC,OAAe,EACf,EAACC,KAAK,EAAEC,YAAYT,gBAAgB,EAAmC,GAAG,CAAC,CAAC;IAE5E,MAAMU,WAAW,MAAMf,gBAAgBD,KAAKiB,IAAI,CAACJ,SAAS,iBAAiB;QACzEK,sBAAsB;IACxB;IACA,MAAMC,eAAe;QAAC,GAAGH,UAAUG,YAAY;QAAE,GAAGH,UAAUI,eAAe;IAAA;IAE7E,MAAMC,aAA+C,EAAE;IACvD,MAAMC,uBAAoD,EAAE;IAE5D,KAAK,MAAMC,OAAOX,SAAU;QAC1B,gEAAgE;QAChE,IAAI,CAACO,YAAY,CAACI,IAAIC,IAAI,CAAC,EAAE;YAC3B;QACF;QAEA,MAAMC,kBAAkB,MAAMC,yBAAyBtB,aAAamB,KAAK;YAACT;QAAK,IAAIC;QAEnF,IAAIU,oBAAoB,MAAM;YAC5B,IAAItB,OAAOwB,UAAU,CAACJ,IAAIK,OAAO,GAAG;gBAClCN,qBAAqBO,IAAI,CAAC;oBAACN,KAAKA,IAAIC,IAAI;oBAAEI,SAASL,IAAIK,OAAO;gBAAA;gBAC9D;YACF;YACA,MAAM,IAAIE,MACR,CAAC,qCAAqC,EAAEP,IAAIC,IAAI,CAAC,CAAC,EAAED,IAAIK,OAAO,CAAC,mBAAmB,CAAC;QAExF;QAEA,MAAMG,iBAAiB,MAAM1B,uBAAuBkB,IAAIC,IAAI,EAAEX;QAE9D,MAAMmB,kBAAkBb,YAAY,CAACI,IAAIC,IAAI,CAAC;QAE9C,MAAMS,YAAY9B,OAAO+B,MAAM,CAC7BH,iBAAiB5B,OAAOgC,KAAK,CAACJ,kBAAkB5B,OAAO+B,MAAM,CAACF;QAGhE,IAAI,CAACC,WAAW;YACd,MAAM,IAAIH,MAAM,CAAC,sCAAsC,EAAEP,IAAIC,IAAI,EAAE;QACrE;QAEA,IAAI,CAACrB,OAAOiC,EAAE,CAACX,iBAAiBQ,UAAUL,OAAO,GAAG;YAClDP,WAAWQ,IAAI,CAAC;gBACdI,WAAWA,UAAUL,OAAO;gBAC5BL,KAAKA,IAAIC,IAAI;gBACba,QAAQZ;YACV;QACF;IACF;IAEA,OAAO;QAACJ;QAAYC;IAAoB;AAC1C;AAEA,eAAeI,yBACbY,GAAW,EACXC,OAAgC;IAEhC,IAAIC;IACJ,IAAI;QACFA,WAAW,MAAMD,QAAQ;YACvBE,cAAc;YACdC,QAAQ;YACRJ;QACF;IACF,EAAE,OAAOK,KAAK;QACZ,MAAMC,UAAUD,eAAeb,QAAQa,IAAIC,OAAO,GAAGC,OAAOF;QAC5D,MAAM,IAAIb,MAAM,CAAC,mCAAmC,EAAEQ,IAAI,EAAE,EAAEM,SAAS;IACzE;IAEA,4CAA4C;IAC5C,IAAIJ,SAASM,UAAU,GAAG,KAAK;QAC7B,MAAMC,WAAWP,SAASQ,OAAO,CAAC,qBAAqB;QACvD,IAAI,CAACD,UAAU;YACb,MAAM,IAAIjB,MAAM,CAAC,0DAA0D,EAAEQ,KAAK;QACpF;QACA,OAAOS;IACT;IAEA,IAAIP,SAASM,UAAU,KAAK,KAAK;QAC/B,OAAO;IACT;IAEA,MAAM,IAAIhB,MAAM,CAAC,0BAA0B,EAAEU,SAASM,UAAU,CAAC,CAAC,EAAEN,SAASS,aAAa,EAAE;AAC9F"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export const NO_PROJECT_ID = `sanity.cli.ts does not contain a project identifier ("api.projectId"), which is required for the Sanity CLI to communicate with the Sanity API`;
|
|
2
|
-
export const NO_DATASET_ID = `sanity.cli.ts does not contain a dataset identifier ("api.dataset"), which is required for the Sanity CLI to communicate with the Sanity API`;
|
|
3
2
|
export const NO_ORGANIZATION_ID = `sanity.cli.ts does not contain an organization identifier ("app.organizationId"), which is required for the Sanity CLI to communicate with the Sanity API`;
|
|
4
3
|
export const NO_MEDIA_LIBRARY_ASPECTS_PATH = `sanity.cli.ts does not contain a media library aspects path ("mediaLibrary.aspectsPath"), which is required for the Sanity CLI to manage aspects.`;
|
|
5
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/util/errorMessages.ts"],"sourcesContent":["export const NO_PROJECT_ID = `sanity.cli.ts does not contain a project identifier (\"api.projectId\"), which is required for the Sanity CLI to communicate with the Sanity API`\nexport const
|
|
1
|
+
{"version":3,"sources":["../../src/util/errorMessages.ts"],"sourcesContent":["export const NO_PROJECT_ID = `sanity.cli.ts does not contain a project identifier (\"api.projectId\"), which is required for the Sanity CLI to communicate with the Sanity API`\nexport const NO_ORGANIZATION_ID = `sanity.cli.ts does not contain an organization identifier (\"app.organizationId\"), which is required for the Sanity CLI to communicate with the Sanity API`\nexport const NO_MEDIA_LIBRARY_ASPECTS_PATH = `sanity.cli.ts does not contain a media library aspects path (\"mediaLibrary.aspectsPath\"), which is required for the Sanity CLI to manage aspects.`\n"],"names":["NO_PROJECT_ID","NO_ORGANIZATION_ID","NO_MEDIA_LIBRARY_ASPECTS_PATH"],"mappings":"AAAA,OAAO,MAAMA,gBAAgB,CAAC,8IAA8I,CAAC,CAAA;AAC7K,OAAO,MAAMC,qBAAqB,CAAC,yJAAyJ,CAAC,CAAA;AAC7L,OAAO,MAAMC,gCAAgC,CAAC,iJAAiJ,CAAC,CAAA"}
|