@sanity/cli 8.7.0 → 8.9.0

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.
Files changed (102) hide show
  1. package/README.md +396 -0
  2. package/dist/actions/api/distillApiRoutes.js +1 -1
  3. package/dist/actions/api/distillApiRoutes.js.map +1 -1
  4. package/dist/actions/api/resolveEndpoint.js +1 -1
  5. package/dist/actions/api/resolveEndpoint.js.map +1 -1
  6. package/dist/actions/backup/archiveDir.js +7 -3
  7. package/dist/actions/backup/archiveDir.js.map +1 -1
  8. package/dist/actions/context/resolveOrganizationId.js +17 -0
  9. package/dist/actions/context/resolveOrganizationId.js.map +1 -0
  10. package/dist/actions/context/waitForJob.js +24 -0
  11. package/dist/actions/context/waitForJob.js.map +1 -0
  12. package/dist/actions/context/watchJob.js +32 -0
  13. package/dist/actions/context/watchJob.js.map +1 -0
  14. package/dist/actions/deploy/deployApp.js +7 -6
  15. package/dist/actions/deploy/deployApp.js.map +1 -1
  16. package/dist/actions/deploy/deployStudio.js +7 -6
  17. package/dist/actions/deploy/deployStudio.js.map +1 -1
  18. package/dist/actions/exec/execScript.js +6 -18
  19. package/dist/actions/exec/execScript.js.map +1 -1
  20. package/dist/actions/exec/runScript.worker.js +21 -0
  21. package/dist/actions/exec/runScript.worker.js.map +1 -0
  22. package/dist/actions/init/initAction.js +1 -1
  23. package/dist/actions/init/initAction.js.map +1 -1
  24. package/dist/actions/media/importMedia.js +4 -2
  25. package/dist/actions/media/importMedia.js.map +1 -1
  26. package/dist/actions/typegen/parseTypegenConfig.js +21 -0
  27. package/dist/actions/typegen/parseTypegenConfig.js.map +1 -0
  28. package/dist/commands/backups/download.js +8 -17
  29. package/dist/commands/backups/download.js.map +1 -1
  30. package/dist/commands/context/build.js +111 -0
  31. package/dist/commands/context/build.js.map +1 -0
  32. package/dist/commands/context/create.js +106 -0
  33. package/dist/commands/context/create.js.map +1 -0
  34. package/dist/commands/context/delete.js +68 -0
  35. package/dist/commands/context/delete.js.map +1 -0
  36. package/dist/commands/context/get.js +95 -0
  37. package/dist/commands/context/get.js.map +1 -0
  38. package/dist/commands/context/imports/create.js +270 -0
  39. package/dist/commands/context/imports/create.js.map +1 -0
  40. package/dist/commands/context/imports/delete.js +73 -0
  41. package/dist/commands/context/imports/delete.js.map +1 -0
  42. package/dist/commands/context/imports/download.js +65 -0
  43. package/dist/commands/context/imports/download.js.map +1 -0
  44. package/dist/commands/context/imports/get.js +93 -0
  45. package/dist/commands/context/imports/get.js.map +1 -0
  46. package/dist/commands/context/imports/list.js +105 -0
  47. package/dist/commands/context/imports/list.js.map +1 -0
  48. package/dist/commands/context/jobs/get.js +90 -0
  49. package/dist/commands/context/jobs/get.js.map +1 -0
  50. package/dist/commands/context/list.js +109 -0
  51. package/dist/commands/context/list.js.map +1 -0
  52. package/dist/commands/context/refresh.js +46 -0
  53. package/dist/commands/context/refresh.js.map +1 -0
  54. package/dist/commands/context/update.js +127 -0
  55. package/dist/commands/context/update.js.map +1 -0
  56. package/dist/commands/datasets/alias/delete.js +4 -9
  57. package/dist/commands/datasets/alias/delete.js.map +1 -1
  58. package/dist/commands/datasets/alias/unlink.js +4 -9
  59. package/dist/commands/datasets/alias/unlink.js.map +1 -1
  60. package/dist/commands/datasets/delete.js +4 -9
  61. package/dist/commands/datasets/delete.js.map +1 -1
  62. package/dist/commands/graphql/undeploy.js +4 -9
  63. package/dist/commands/graphql/undeploy.js.map +1 -1
  64. package/dist/commands/init.js +1 -1
  65. package/dist/commands/init.js.map +1 -1
  66. package/dist/commands/media/create-aspect.js +5 -6
  67. package/dist/commands/media/create-aspect.js.map +1 -1
  68. package/dist/commands/media/delete-aspect.js +7 -23
  69. package/dist/commands/media/delete-aspect.js.map +1 -1
  70. package/dist/commands/media/deploy-aspect.js +4 -9
  71. package/dist/commands/media/deploy-aspect.js.map +1 -1
  72. package/dist/commands/media/export.js +3 -7
  73. package/dist/commands/media/export.js.map +1 -1
  74. package/dist/commands/media/import.js +3 -7
  75. package/dist/commands/media/import.js.map +1 -1
  76. package/dist/commands/organizations/create.js +4 -9
  77. package/dist/commands/organizations/create.js.map +1 -1
  78. package/dist/commands/schemas/delete.js +3 -8
  79. package/dist/commands/schemas/delete.js.map +1 -1
  80. package/dist/commands/tokens/delete.js +4 -7
  81. package/dist/commands/tokens/delete.js.map +1 -1
  82. package/dist/commands/typegen/generate.js +4 -3
  83. package/dist/commands/typegen/generate.js.map +1 -1
  84. package/dist/commands/users/invite.js +8 -18
  85. package/dist/commands/users/invite.js.map +1 -1
  86. package/dist/exports/index.js +1 -1
  87. package/dist/exports/index.js.map +1 -1
  88. package/dist/exports/invokeSanityCli/commandPolicies/mcpPolicy.js +18 -0
  89. package/dist/exports/invokeSanityCli/commandPolicies/mcpPolicy.js.map +1 -1
  90. package/dist/generated/apiRoutes.js +11 -9
  91. package/dist/generated/apiRoutes.js.map +1 -1
  92. package/dist/prompts/promptForOrganization.js +19 -0
  93. package/dist/prompts/promptForOrganization.js.map +1 -0
  94. package/dist/server/vite/plugin-typegen.js +3 -2
  95. package/dist/server/vite/plugin-typegen.js.map +1 -1
  96. package/dist/services/context.js +132 -0
  97. package/dist/services/context.js.map +1 -0
  98. package/dist/util/sharedFlags.js +24 -0
  99. package/dist/util/sharedFlags.js.map +1 -1
  100. package/oclif.config.js +1 -0
  101. package/oclif.manifest.json +1516 -718
  102. package/package.json +18 -23
@@ -0,0 +1,132 @@
1
+ import { getGlobalCliClient } from '@sanity/cli-core';
2
+ const CONTEXT_API_VERSION = 'v2026-08-25';
3
+ /**
4
+ * Knowledge-base-scoped methods on `client.context` (imports, builds, jobs)
5
+ * operate on the client's configured `resource`; collection-level methods
6
+ * (`client.context.knowledgeBases.*`) are addressed per call and need none.
7
+ */ async function getContextClient(knowledgeBaseId) {
8
+ return getGlobalCliClient({
9
+ apiVersion: CONTEXT_API_VERSION,
10
+ requireUser: true,
11
+ ...knowledgeBaseId === undefined ? {} : {
12
+ resource: {
13
+ id: knowledgeBaseId,
14
+ type: 'knowledge-base'
15
+ }
16
+ }
17
+ });
18
+ }
19
+ /**
20
+ * Create a knowledge base in an organization
21
+ */ export async function createKnowledgeBase(params) {
22
+ const client = await getContextClient();
23
+ return client.context.knowledgeBases.create(params);
24
+ }
25
+ /**
26
+ * List all knowledge bases in an organization (drains pagination)
27
+ */ export async function listKnowledgeBases(organizationId) {
28
+ const client = await getContextClient();
29
+ const knowledgeBases = [];
30
+ let cursor;
31
+ do {
32
+ const page = await client.context.knowledgeBases.list({
33
+ cursor,
34
+ organizationId
35
+ });
36
+ knowledgeBases.push(...page.data);
37
+ cursor = page.nextCursor ?? undefined;
38
+ }while (cursor !== undefined)
39
+ return knowledgeBases;
40
+ }
41
+ /**
42
+ * Get a single knowledge base by ID
43
+ */ export async function getKnowledgeBase(knowledgeBaseId) {
44
+ const client = await getContextClient();
45
+ return client.context.knowledgeBases.get(knowledgeBaseId);
46
+ }
47
+ /**
48
+ * Update a knowledge base's configuration
49
+ */ export async function updateKnowledgeBase(knowledgeBaseId, params) {
50
+ const client = await getContextClient();
51
+ return client.context.knowledgeBases.edit(knowledgeBaseId, params);
52
+ }
53
+ /**
54
+ * Delete a knowledge base and its generated content
55
+ */ export async function deleteKnowledgeBase(knowledgeBaseId) {
56
+ const client = await getContextClient();
57
+ await client.context.knowledgeBases.delete(knowledgeBaseId);
58
+ }
59
+ /**
60
+ * Import content into a knowledge base. File imports are staged and uploaded
61
+ * to signed storage by the client.
62
+ */ export async function createImport(knowledgeBaseId, params) {
63
+ const client = await getContextClient(knowledgeBaseId);
64
+ return client.context.imports.create(params);
65
+ }
66
+ /**
67
+ * List all imports for a knowledge base (drains pagination)
68
+ */ export async function listImports(knowledgeBaseId) {
69
+ const client = await getContextClient(knowledgeBaseId);
70
+ const imports = [];
71
+ let cursor;
72
+ do {
73
+ const page = await client.context.imports.list({
74
+ cursor
75
+ });
76
+ imports.push(...page.data);
77
+ cursor = page.nextCursor ?? undefined;
78
+ }while (cursor !== undefined)
79
+ return imports;
80
+ }
81
+ /**
82
+ * Get a single import by ID
83
+ */ export async function getImport(knowledgeBaseId, importId) {
84
+ const client = await getContextClient(knowledgeBaseId);
85
+ return client.context.imports.get({
86
+ importId
87
+ });
88
+ }
89
+ /**
90
+ * Get a short-lived signed URL for an import's original uploaded bytes
91
+ */ export async function downloadImport(knowledgeBaseId, importId) {
92
+ const client = await getContextClient(knowledgeBaseId);
93
+ return client.context.imports.download({
94
+ importId
95
+ });
96
+ }
97
+ /**
98
+ * Delete an import from a knowledge base
99
+ */ export async function deleteImport(knowledgeBaseId, importId) {
100
+ const client = await getContextClient(knowledgeBaseId);
101
+ await client.context.imports.delete({
102
+ importId
103
+ });
104
+ }
105
+ /**
106
+ * Start a build of a knowledge base
107
+ */ export async function buildKnowledgeBase(knowledgeBaseId) {
108
+ const client = await getContextClient(knowledgeBaseId);
109
+ return client.context.build();
110
+ }
111
+ /**
112
+ * Cancel the running build of a knowledge base, if any
113
+ */ export async function cancelKnowledgeBaseBuild(knowledgeBaseId) {
114
+ const client = await getContextClient(knowledgeBaseId);
115
+ return client.context.cancelBuild();
116
+ }
117
+ /**
118
+ * Run an incremental refresh: re-check sources and apply what changed
119
+ */ export async function refreshKnowledgeBase(knowledgeBaseId) {
120
+ const client = await getContextClient(knowledgeBaseId);
121
+ return client.context.refresh();
122
+ }
123
+ /**
124
+ * Get an async job (build, import) by ID
125
+ */ export async function getJob(knowledgeBaseId, jobId) {
126
+ const client = await getContextClient(knowledgeBaseId);
127
+ return client.context.jobs.get({
128
+ jobId
129
+ });
130
+ }
131
+
132
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/services/context.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\nimport {type Context} from '@sanity/client'\n\nconst CONTEXT_API_VERSION = 'v2026-08-25'\n\n/**\n * Knowledge-base-scoped methods on `client.context` (imports, builds, jobs)\n * operate on the client's configured `resource`; collection-level methods\n * (`client.context.knowledgeBases.*`) are addressed per call and need none.\n */\nasync function getContextClient(knowledgeBaseId?: string) {\n return getGlobalCliClient({\n apiVersion: CONTEXT_API_VERSION,\n requireUser: true,\n ...(knowledgeBaseId === undefined\n ? {}\n : {resource: {id: knowledgeBaseId, type: 'knowledge-base' as const}}),\n })\n}\n\n/**\n * Create a knowledge base in an organization\n */\nexport async function createKnowledgeBase(\n params: Context.CreateKnowledgeBaseParams,\n): Promise<Context.KnowledgeBase> {\n const client = await getContextClient()\n return client.context.knowledgeBases.create(params)\n}\n\n/**\n * List all knowledge bases in an organization (drains pagination)\n */\nexport async function listKnowledgeBases(organizationId: string): Promise<Context.KnowledgeBase[]> {\n const client = await getContextClient()\n\n const knowledgeBases: Context.KnowledgeBase[] = []\n let cursor: string | undefined\n do {\n const page = await client.context.knowledgeBases.list({cursor, organizationId})\n knowledgeBases.push(...page.data)\n cursor = page.nextCursor ?? undefined\n } while (cursor !== undefined)\n\n return knowledgeBases\n}\n\n/**\n * Get a single knowledge base by ID\n */\nexport async function getKnowledgeBase(knowledgeBaseId: string): Promise<Context.KnowledgeBase> {\n const client = await getContextClient()\n return client.context.knowledgeBases.get(knowledgeBaseId)\n}\n\n/**\n * Update a knowledge base's configuration\n */\nexport async function updateKnowledgeBase(\n knowledgeBaseId: string,\n params: Context.EditKnowledgeBaseParams,\n): Promise<Context.KnowledgeBase> {\n const client = await getContextClient()\n return client.context.knowledgeBases.edit(knowledgeBaseId, params)\n}\n\n/**\n * Delete a knowledge base and its generated content\n */\nexport async function deleteKnowledgeBase(knowledgeBaseId: string): Promise<void> {\n const client = await getContextClient()\n await client.context.knowledgeBases.delete(knowledgeBaseId)\n}\n\n/**\n * Import content into a knowledge base. File imports are staged and uploaded\n * to signed storage by the client.\n */\nexport async function createImport(\n knowledgeBaseId: string,\n params: Context.CreateFileImportParams | Context.CreateImportParams,\n): Promise<Context.JobAccepted> {\n const client = await getContextClient(knowledgeBaseId)\n return client.context.imports.create(params)\n}\n\n/**\n * List all imports for a knowledge base (drains pagination)\n */\nexport async function listImports(knowledgeBaseId: string): Promise<Context.Import[]> {\n const client = await getContextClient(knowledgeBaseId)\n\n const imports: Context.Import[] = []\n let cursor: string | undefined\n do {\n const page = await client.context.imports.list({cursor})\n imports.push(...page.data)\n cursor = page.nextCursor ?? undefined\n } while (cursor !== undefined)\n\n return imports\n}\n\n/**\n * Get a single import by ID\n */\nexport async function getImport(\n knowledgeBaseId: string,\n importId: string,\n): Promise<Context.ImportDetail> {\n const client = await getContextClient(knowledgeBaseId)\n return client.context.imports.get({importId})\n}\n\n/**\n * Get a short-lived signed URL for an import's original uploaded bytes\n */\nexport async function downloadImport(\n knowledgeBaseId: string,\n importId: string,\n): Promise<Context.ImportDownloadResponse> {\n const client = await getContextClient(knowledgeBaseId)\n return client.context.imports.download({importId})\n}\n\n/**\n * Delete an import from a knowledge base\n */\nexport async function deleteImport(knowledgeBaseId: string, importId: string): Promise<void> {\n const client = await getContextClient(knowledgeBaseId)\n await client.context.imports.delete({importId})\n}\n\n/**\n * Start a build of a knowledge base\n */\nexport async function buildKnowledgeBase(knowledgeBaseId: string): Promise<Context.JobAccepted> {\n const client = await getContextClient(knowledgeBaseId)\n return client.context.build()\n}\n\n/**\n * Cancel the running build of a knowledge base, if any\n */\nexport async function cancelKnowledgeBaseBuild(\n knowledgeBaseId: string,\n): Promise<{cancelled: boolean}> {\n const client = await getContextClient(knowledgeBaseId)\n return client.context.cancelBuild()\n}\n\n/**\n * Run an incremental refresh: re-check sources and apply what changed\n */\nexport async function refreshKnowledgeBase(\n knowledgeBaseId: string,\n): Promise<{jobId: string; started: boolean}> {\n const client = await getContextClient(knowledgeBaseId)\n return client.context.refresh()\n}\n\n/**\n * Get an async job (build, import) by ID\n */\nexport async function getJob(knowledgeBaseId: string, jobId: string): Promise<Context.Job> {\n const client = await getContextClient(knowledgeBaseId)\n return client.context.jobs.get({jobId})\n}\n"],"names":["getGlobalCliClient","CONTEXT_API_VERSION","getContextClient","knowledgeBaseId","apiVersion","requireUser","undefined","resource","id","type","createKnowledgeBase","params","client","context","knowledgeBases","create","listKnowledgeBases","organizationId","cursor","page","list","push","data","nextCursor","getKnowledgeBase","get","updateKnowledgeBase","edit","deleteKnowledgeBase","delete","createImport","imports","listImports","getImport","importId","downloadImport","download","deleteImport","buildKnowledgeBase","build","cancelKnowledgeBaseBuild","cancelBuild","refreshKnowledgeBase","refresh","getJob","jobId","jobs"],"mappings":"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"}
@@ -25,6 +25,30 @@ const OVERRIDE_SUFFIX = ' (overrides CLI configuration)';
25
25
  })
26
26
  };
27
27
  }
28
+ /**
29
+ * Returns an `--organization` flag definition.
30
+ *
31
+ * Locked: flag name (`organization`), `helpValue` (`<id>`), and parse (trims + validates non-empty).
32
+ */ export function getOrganizationFlag(options) {
33
+ const { description: baseDescription, helpGroup, semantics, ...rest } = options;
34
+ const isOverride = semantics === 'override';
35
+ const description = (baseDescription ?? 'Organization ID to use') + (isOverride ? OVERRIDE_SUFFIX : '');
36
+ return {
37
+ organization: Flags.string({
38
+ description,
39
+ helpGroup: helpGroup ?? (isOverride ? 'OVERRIDE' : undefined),
40
+ helpValue: '<id>',
41
+ ...rest,
42
+ parse: async (input)=>{
43
+ const trimmed = input.trim();
44
+ if (trimmed === '') {
45
+ throw new Error('`--organization` cannot be empty if provided');
46
+ }
47
+ return trimmed;
48
+ }
49
+ })
50
+ };
51
+ }
28
52
  /**
29
53
  * Returns a `--dataset` / `-d` flag definition.
30
54
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/util/sharedFlags.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\n\n/**\n * Controls how the flag relates to CLI configuration:\n *\n * - `'override'` — The command falls back to CLI config (sanity.cli.ts) when the flag is not\n * provided. The flag description automatically gets an \" (overrides CLI configuration)\" suffix,\n * and `helpGroup` defaults to `'OVERRIDE'`.\n *\n * - `'specify'` — The command does NOT fall back to CLI config; the flag is simply how the user\n * provides the value. No suffix is appended, and no default `helpGroup` is set.\n */\ntype FlagSemantics = 'override' | 'specify'\n\n/**\n * Options accepted by the shared flag getters.\n * Locked properties (char, parse, name, helpValue) are excluded to ensure\n * consistent behavior across all commands.\n */\ninterface SharedFlagOptions {\n /**\n * Controls description suffix and default helpGroup.\n * @see {@link FlagSemantics}\n */\n semantics: FlagSemantics\n\n dependsOn?: string[]\n description?: string\n env?: string\n exclusive?: string[]\n helpGroup?: string\n hidden?: boolean\n required?: boolean\n}\n\nconst OVERRIDE_SUFFIX = ' (overrides CLI configuration)'\n\n/**\n * Returns a `--project-id` / `-p` flag definition.\n *\n * Locked: flag name (`project-id`), char (`p`), `helpValue` (`<id>`), and parse (trims + validates non-empty).\n */\nexport function getProjectIdFlag(options: SharedFlagOptions) {\n const {description: baseDescription, helpGroup, semantics, ...rest} = options\n const isOverride = semantics === 'override'\n const description = (baseDescription ?? 'Project ID to use') + (isOverride ? OVERRIDE_SUFFIX : '')\n\n return {\n 'project-id': Flags.string({\n description,\n helpGroup: helpGroup ?? (isOverride ? 'OVERRIDE' : undefined),\n helpValue: '<id>',\n ...rest,\n char: 'p',\n parse: async (input: string) => {\n const trimmed = input.trim()\n if (trimmed === '') {\n throw new Error('`--project-id` cannot be empty if provided')\n }\n return trimmed\n },\n }),\n }\n}\n\n/**\n * Returns a `--dataset` / `-d` flag definition.\n *\n * Locked: flag name (`dataset`), char (`d`), `helpValue` (`<name>`), and parse (trims + validates non-empty).\n */\nexport function getDatasetFlag(options: SharedFlagOptions) {\n const {description: baseDescription, helpGroup, semantics, ...rest} = options\n const isOverride = semantics === 'override'\n const description = (baseDescription ?? 'Dataset to use') + (isOverride ? OVERRIDE_SUFFIX : '')\n\n return {\n dataset: Flags.string({\n description,\n helpGroup: helpGroup ?? (isOverride ? 'OVERRIDE' : undefined),\n helpValue: '<name>',\n ...rest,\n char: 'd',\n parse: async (input: string) => {\n const trimmed = input.trim()\n if (trimmed === '') {\n throw new Error('`--dataset` cannot be empty if provided')\n }\n return trimmed\n },\n }),\n }\n}\n"],"names":["Flags","OVERRIDE_SUFFIX","getProjectIdFlag","options","description","baseDescription","helpGroup","semantics","rest","isOverride","string","undefined","helpValue","char","parse","input","trimmed","trim","Error","getDatasetFlag","dataset"],"mappings":"AAAA,SAAQA,KAAK,QAAO,cAAa;AAmCjC,MAAMC,kBAAkB;AAExB;;;;CAIC,GACD,OAAO,SAASC,iBAAiBC,OAA0B;IACzD,MAAM,EAACC,aAAaC,eAAe,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGC,MAAK,GAAGL;IACtE,MAAMM,aAAaF,cAAc;IACjC,MAAMH,cAAc,AAACC,CAAAA,mBAAmB,mBAAkB,IAAMI,CAAAA,aAAaR,kBAAkB,EAAC;IAEhG,OAAO;QACL,cAAcD,MAAMU,MAAM,CAAC;YACzBN;YACAE,WAAWA,aAAcG,CAAAA,aAAa,aAAaE,SAAQ;YAC3DC,WAAW;YACX,GAAGJ,IAAI;YACPK,MAAM;YACNC,OAAO,OAAOC;gBACZ,MAAMC,UAAUD,MAAME,IAAI;gBAC1B,IAAID,YAAY,IAAI;oBAClB,MAAM,IAAIE,MAAM;gBAClB;gBACA,OAAOF;YACT;QACF;IACF;AACF;AAEA;;;;CAIC,GACD,OAAO,SAASG,eAAehB,OAA0B;IACvD,MAAM,EAACC,aAAaC,eAAe,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGC,MAAK,GAAGL;IACtE,MAAMM,aAAaF,cAAc;IACjC,MAAMH,cAAc,AAACC,CAAAA,mBAAmB,gBAAe,IAAMI,CAAAA,aAAaR,kBAAkB,EAAC;IAE7F,OAAO;QACLmB,SAASpB,MAAMU,MAAM,CAAC;YACpBN;YACAE,WAAWA,aAAcG,CAAAA,aAAa,aAAaE,SAAQ;YAC3DC,WAAW;YACX,GAAGJ,IAAI;YACPK,MAAM;YACNC,OAAO,OAAOC;gBACZ,MAAMC,UAAUD,MAAME,IAAI;gBAC1B,IAAID,YAAY,IAAI;oBAClB,MAAM,IAAIE,MAAM;gBAClB;gBACA,OAAOF;YACT;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/util/sharedFlags.ts"],"sourcesContent":["import {Flags} from '@oclif/core'\n\n/**\n * Controls how the flag relates to CLI configuration:\n *\n * - `'override'` — The command falls back to CLI config (sanity.cli.ts) when the flag is not\n * provided. The flag description automatically gets an \" (overrides CLI configuration)\" suffix,\n * and `helpGroup` defaults to `'OVERRIDE'`.\n *\n * - `'specify'` — The command does NOT fall back to CLI config; the flag is simply how the user\n * provides the value. No suffix is appended, and no default `helpGroup` is set.\n */\ntype FlagSemantics = 'override' | 'specify'\n\n/**\n * Options accepted by the shared flag getters.\n * Locked properties (char, parse, name, helpValue) are excluded to ensure\n * consistent behavior across all commands.\n */\ninterface SharedFlagOptions {\n /**\n * Controls description suffix and default helpGroup.\n * @see {@link FlagSemantics}\n */\n semantics: FlagSemantics\n\n dependsOn?: string[]\n description?: string\n env?: string\n exclusive?: string[]\n helpGroup?: string\n hidden?: boolean\n required?: boolean\n}\n\nconst OVERRIDE_SUFFIX = ' (overrides CLI configuration)'\n\n/**\n * Returns a `--project-id` / `-p` flag definition.\n *\n * Locked: flag name (`project-id`), char (`p`), `helpValue` (`<id>`), and parse (trims + validates non-empty).\n */\nexport function getProjectIdFlag(options: SharedFlagOptions) {\n const {description: baseDescription, helpGroup, semantics, ...rest} = options\n const isOverride = semantics === 'override'\n const description = (baseDescription ?? 'Project ID to use') + (isOverride ? OVERRIDE_SUFFIX : '')\n\n return {\n 'project-id': Flags.string({\n description,\n helpGroup: helpGroup ?? (isOverride ? 'OVERRIDE' : undefined),\n helpValue: '<id>',\n ...rest,\n char: 'p',\n parse: async (input: string) => {\n const trimmed = input.trim()\n if (trimmed === '') {\n throw new Error('`--project-id` cannot be empty if provided')\n }\n return trimmed\n },\n }),\n }\n}\n\n/**\n * Returns an `--organization` flag definition.\n *\n * Locked: flag name (`organization`), `helpValue` (`<id>`), and parse (trims + validates non-empty).\n */\nexport function getOrganizationFlag(options: SharedFlagOptions) {\n const {description: baseDescription, helpGroup, semantics, ...rest} = options\n const isOverride = semantics === 'override'\n const description =\n (baseDescription ?? 'Organization ID to use') + (isOverride ? OVERRIDE_SUFFIX : '')\n\n return {\n organization: Flags.string({\n description,\n helpGroup: helpGroup ?? (isOverride ? 'OVERRIDE' : undefined),\n helpValue: '<id>',\n ...rest,\n parse: async (input: string) => {\n const trimmed = input.trim()\n if (trimmed === '') {\n throw new Error('`--organization` cannot be empty if provided')\n }\n return trimmed\n },\n }),\n }\n}\n\n/**\n * Returns a `--dataset` / `-d` flag definition.\n *\n * Locked: flag name (`dataset`), char (`d`), `helpValue` (`<name>`), and parse (trims + validates non-empty).\n */\nexport function getDatasetFlag(options: SharedFlagOptions) {\n const {description: baseDescription, helpGroup, semantics, ...rest} = options\n const isOverride = semantics === 'override'\n const description = (baseDescription ?? 'Dataset to use') + (isOverride ? OVERRIDE_SUFFIX : '')\n\n return {\n dataset: Flags.string({\n description,\n helpGroup: helpGroup ?? (isOverride ? 'OVERRIDE' : undefined),\n helpValue: '<name>',\n ...rest,\n char: 'd',\n parse: async (input: string) => {\n const trimmed = input.trim()\n if (trimmed === '') {\n throw new Error('`--dataset` cannot be empty if provided')\n }\n return trimmed\n },\n }),\n }\n}\n"],"names":["Flags","OVERRIDE_SUFFIX","getProjectIdFlag","options","description","baseDescription","helpGroup","semantics","rest","isOverride","string","undefined","helpValue","char","parse","input","trimmed","trim","Error","getOrganizationFlag","organization","getDatasetFlag","dataset"],"mappings":"AAAA,SAAQA,KAAK,QAAO,cAAa;AAmCjC,MAAMC,kBAAkB;AAExB;;;;CAIC,GACD,OAAO,SAASC,iBAAiBC,OAA0B;IACzD,MAAM,EAACC,aAAaC,eAAe,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGC,MAAK,GAAGL;IACtE,MAAMM,aAAaF,cAAc;IACjC,MAAMH,cAAc,AAACC,CAAAA,mBAAmB,mBAAkB,IAAMI,CAAAA,aAAaR,kBAAkB,EAAC;IAEhG,OAAO;QACL,cAAcD,MAAMU,MAAM,CAAC;YACzBN;YACAE,WAAWA,aAAcG,CAAAA,aAAa,aAAaE,SAAQ;YAC3DC,WAAW;YACX,GAAGJ,IAAI;YACPK,MAAM;YACNC,OAAO,OAAOC;gBACZ,MAAMC,UAAUD,MAAME,IAAI;gBAC1B,IAAID,YAAY,IAAI;oBAClB,MAAM,IAAIE,MAAM;gBAClB;gBACA,OAAOF;YACT;QACF;IACF;AACF;AAEA;;;;CAIC,GACD,OAAO,SAASG,oBAAoBhB,OAA0B;IAC5D,MAAM,EAACC,aAAaC,eAAe,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGC,MAAK,GAAGL;IACtE,MAAMM,aAAaF,cAAc;IACjC,MAAMH,cACJ,AAACC,CAAAA,mBAAmB,wBAAuB,IAAMI,CAAAA,aAAaR,kBAAkB,EAAC;IAEnF,OAAO;QACLmB,cAAcpB,MAAMU,MAAM,CAAC;YACzBN;YACAE,WAAWA,aAAcG,CAAAA,aAAa,aAAaE,SAAQ;YAC3DC,WAAW;YACX,GAAGJ,IAAI;YACPM,OAAO,OAAOC;gBACZ,MAAMC,UAAUD,MAAME,IAAI;gBAC1B,IAAID,YAAY,IAAI;oBAClB,MAAM,IAAIE,MAAM;gBAClB;gBACA,OAAOF;YACT;QACF;IACF;AACF;AAEA;;;;CAIC,GACD,OAAO,SAASK,eAAelB,OAA0B;IACvD,MAAM,EAACC,aAAaC,eAAe,EAAEC,SAAS,EAAEC,SAAS,EAAE,GAAGC,MAAK,GAAGL;IACtE,MAAMM,aAAaF,cAAc;IACjC,MAAMH,cAAc,AAACC,CAAAA,mBAAmB,gBAAe,IAAMI,CAAAA,aAAaR,kBAAkB,EAAC;IAE7F,OAAO;QACLqB,SAAStB,MAAMU,MAAM,CAAC;YACpBN;YACAE,WAAWA,aAAcG,CAAAA,aAAa,aAAaE,SAAQ;YAC3DC,WAAW;YACX,GAAGJ,IAAI;YACPK,MAAM;YACNC,OAAO,OAAOC;gBACZ,MAAMC,UAAUD,MAAME,IAAI;gBAC1B,IAAID,YAAY,IAAI;oBAClB,MAAM,IAAIE,MAAM;gBAClB;gBACA,OAAOF;YACT;QACF;IACF;AACF"}
package/oclif.config.js CHANGED
@@ -16,6 +16,7 @@ export default {
16
16
  plugins: ['@oclif/plugin-help', '@sanity/runtime-cli', '@sanity/workflow-cli'],
17
17
  topics: {
18
18
  backups: {description: 'Manage dataset backups'},
19
+ context: {description: 'Manage Context knowledge bases'},
19
20
  cors: {description: 'Manage CORS origins for your project'},
20
21
  datasets: {description: 'Manage datasets in your project'},
21
22
  docs: {description: 'Browse and search Sanity documentation'},