@sanity/runtime-cli 12.0.1 → 12.2.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 (67) hide show
  1. package/README.md +25 -24
  2. package/dist/actions/blueprints/blueprint.d.ts +5 -4
  3. package/dist/actions/blueprints/config.d.ts +7 -6
  4. package/dist/actions/blueprints/config.js +8 -6
  5. package/dist/actions/blueprints/stacks.d.ts +8 -4
  6. package/dist/actions/blueprints/stacks.js +6 -32
  7. package/dist/commands/blueprints/destroy.js +2 -0
  8. package/dist/commands/blueprints/doctor.d.ts +1 -0
  9. package/dist/commands/blueprints/doctor.js +4 -0
  10. package/dist/commands/blueprints/info.js +1 -1
  11. package/dist/commands/blueprints/init.js +1 -1
  12. package/dist/commands/blueprints/stacks.js +1 -1
  13. package/dist/commands/functions/dev.d.ts +2 -2
  14. package/dist/commands/functions/dev.js +3 -2
  15. package/dist/config.js +12 -2
  16. package/dist/constants.d.ts +7 -0
  17. package/dist/constants.js +7 -0
  18. package/dist/cores/blueprints/config.js +36 -39
  19. package/dist/cores/blueprints/doctor.d.ts +1 -0
  20. package/dist/cores/blueprints/doctor.js +36 -5
  21. package/dist/cores/blueprints/info.js +2 -2
  22. package/dist/cores/blueprints/init.d.ts +2 -0
  23. package/dist/cores/blueprints/init.js +38 -14
  24. package/dist/cores/functions/env/add.js +2 -2
  25. package/dist/cores/functions/env/list.js +2 -2
  26. package/dist/cores/functions/env/remove.js +2 -2
  27. package/dist/cores/functions/logs.js +2 -2
  28. package/dist/cores/functions/test.js +31 -23
  29. package/dist/server/app.js +32 -21
  30. package/dist/server/handlers/invoke.d.ts +2 -2
  31. package/dist/server/handlers/invoke.js +2 -2
  32. package/dist/server/static/components/api-base.js +3 -0
  33. package/dist/server/static/components/app.css +120 -95
  34. package/dist/server/static/components/clear-button.js +1 -1
  35. package/dist/server/static/components/console-panel.js +6 -6
  36. package/dist/server/static/components/fetch-button.js +1 -1
  37. package/dist/server/static/components/filter-api-version.js +3 -3
  38. package/dist/server/static/components/filter-document-id.js +5 -5
  39. package/dist/server/static/components/filter-with-token.js +4 -4
  40. package/dist/server/static/components/filters.js +2 -2
  41. package/dist/server/static/components/function-list.js +14 -5
  42. package/dist/server/static/components/help-button.js +4 -1
  43. package/dist/server/static/components/payload-panel.js +9 -9
  44. package/dist/server/static/components/response-panel.js +8 -8
  45. package/dist/server/static/components/rule-panel.js +4 -4
  46. package/dist/server/static/components/run-panel.js +4 -4
  47. package/dist/server/static/components/select-dropdown.js +5 -25
  48. package/dist/server/static/index.html +9 -9
  49. package/dist/server/static/vendor/m-.css +1 -0
  50. package/dist/server/static/vendor/m-.woff2 +0 -0
  51. package/dist/utils/display/blueprints-formatting.d.ts +3 -2
  52. package/dist/utils/display/blueprints-formatting.js +102 -50
  53. package/dist/utils/display/presenters.d.ts +1 -0
  54. package/dist/utils/display/presenters.js +3 -0
  55. package/dist/utils/display/prompt.js +10 -9
  56. package/dist/utils/display/resources-formatting.d.ts +6 -2
  57. package/dist/utils/display/resources-formatting.js +71 -17
  58. package/dist/utils/find-function.d.ts +2 -2
  59. package/dist/utils/find-function.js +9 -2
  60. package/dist/utils/invoke-local.d.ts +2 -2
  61. package/dist/utils/invoke-local.js +27 -16
  62. package/dist/utils/types.d.ts +46 -22
  63. package/dist/utils/types.js +25 -2
  64. package/dist/utils/validate/resource.js +144 -23
  65. package/dist/utils/validated-token.js +1 -1
  66. package/oclif.manifest.json +23 -4
  67. package/package.json +7 -4
package/README.md CHANGED
@@ -20,7 +20,7 @@ $ npm install -g @sanity/runtime-cli
20
20
  $ sanity-run COMMAND
21
21
  running command...
22
22
  $ sanity-run (--version)
23
- @sanity/runtime-cli/12.0.1 linux-x64 node-v24.11.1
23
+ @sanity/runtime-cli/12.2.0 linux-x64 node-v24.11.1
24
24
  $ sanity-run --help [COMMAND]
25
25
  USAGE
26
26
  $ sanity-run COMMAND
@@ -92,7 +92,7 @@ EXAMPLES
92
92
  $ sanity-run blueprints add function --name my-function --fn-type document-create --fn-type document-update --lang js
93
93
  ```
94
94
 
95
- _See code: [src/commands/blueprints/add.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/add.ts)_
95
+ _See code: [src/commands/blueprints/add.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/add.ts)_
96
96
 
97
97
  ## `sanity-run blueprints config`
98
98
 
@@ -121,7 +121,7 @@ EXAMPLES
121
121
  $ sanity-run blueprints config --edit --project-id <projectId> --stack-id <stackId>
122
122
  ```
123
123
 
124
- _See code: [src/commands/blueprints/config.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/config.ts)_
124
+ _See code: [src/commands/blueprints/config.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/config.ts)_
125
125
 
126
126
  ## `sanity-run blueprints deploy`
127
127
 
@@ -143,7 +143,7 @@ EXAMPLES
143
143
  $ sanity-run blueprints deploy --no-wait
144
144
  ```
145
145
 
146
- _See code: [src/commands/blueprints/deploy.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/deploy.ts)_
146
+ _See code: [src/commands/blueprints/deploy.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/deploy.ts)_
147
147
 
148
148
  ## `sanity-run blueprints destroy`
149
149
 
@@ -170,7 +170,7 @@ EXAMPLES
170
170
  $ sanity-run blueprints destroy --stack-id <stackId> --project-id <projectId> --force --no-wait
171
171
  ```
172
172
 
173
- _See code: [src/commands/blueprints/destroy.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/destroy.ts)_
173
+ _See code: [src/commands/blueprints/destroy.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/destroy.ts)_
174
174
 
175
175
  ## `sanity-run blueprints doctor`
176
176
 
@@ -178,9 +178,10 @@ Diagnose potential issues with Blueprint configuration
178
178
 
179
179
  ```
180
180
  USAGE
181
- $ sanity-run blueprints doctor [--verbose] [--path <value>]
181
+ $ sanity-run blueprints doctor [--verbose] [--path <value>] [--fix]
182
182
 
183
183
  FLAGS
184
+ --fix Interactively fix configuration issues
184
185
  --path=<value> Path to the Blueprint configuration file
185
186
  --verbose Provide detailed information about issues
186
187
 
@@ -188,7 +189,7 @@ DESCRIPTION
188
189
  Diagnose potential issues with Blueprint configuration
189
190
  ```
190
191
 
191
- _See code: [src/commands/blueprints/doctor.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/doctor.ts)_
192
+ _See code: [src/commands/blueprints/doctor.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/doctor.ts)_
192
193
 
193
194
  ## `sanity-run blueprints info`
194
195
 
@@ -207,14 +208,14 @@ DESCRIPTION
207
208
  EXAMPLES
208
209
  $ sanity-run blueprints info
209
210
 
210
- $ sanity-run blueprints info --stack-id <stackId>
211
+ $ sanity-run blueprints info --id <stackId>
211
212
  ```
212
213
 
213
- _See code: [src/commands/blueprints/info.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/info.ts)_
214
+ _See code: [src/commands/blueprints/info.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/info.ts)_
214
215
 
215
216
  ## `sanity-run blueprints init [DIR]`
216
217
 
217
- Initialize a new Blueprint
218
+ Initialize a new Blueprint Stack deployment
218
219
 
219
220
  ```
220
221
  USAGE
@@ -236,7 +237,7 @@ FLAGS
236
237
  --verbose Verbose output
237
238
 
238
239
  DESCRIPTION
239
- Initialize a new Blueprint
240
+ Initialize a new Blueprint Stack deployment
240
241
 
241
242
  EXAMPLES
242
243
  $ sanity-run blueprints init
@@ -250,7 +251,7 @@ EXAMPLES
250
251
  $ sanity-run blueprints init --blueprint-type <json|js|ts> --stack-name <stackName>
251
252
  ```
252
253
 
253
- _See code: [src/commands/blueprints/init.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/init.ts)_
254
+ _See code: [src/commands/blueprints/init.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/init.ts)_
254
255
 
255
256
  ## `sanity-run blueprints logs`
256
257
 
@@ -272,7 +273,7 @@ EXAMPLES
272
273
  $ sanity-run blueprints logs --watch
273
274
  ```
274
275
 
275
- _See code: [src/commands/blueprints/logs.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/logs.ts)_
276
+ _See code: [src/commands/blueprints/logs.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/logs.ts)_
276
277
 
277
278
  ## `sanity-run blueprints plan`
278
279
 
@@ -289,11 +290,11 @@ EXAMPLES
289
290
  $ sanity-run blueprints plan
290
291
  ```
291
292
 
292
- _See code: [src/commands/blueprints/plan.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/plan.ts)_
293
+ _See code: [src/commands/blueprints/plan.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/plan.ts)_
293
294
 
294
295
  ## `sanity-run blueprints stacks`
295
296
 
296
- List all Blueprint stacks
297
+ List all Blueprint Stacks
297
298
 
298
299
  ```
299
300
  USAGE
@@ -304,7 +305,7 @@ FLAGS
304
305
  --project-id=<value> Project ID to show stacks for
305
306
 
306
307
  DESCRIPTION
307
- List all Blueprint stacks
308
+ List all Blueprint Stacks
308
309
 
309
310
  EXAMPLES
310
311
  $ sanity-run blueprints stacks
@@ -314,7 +315,7 @@ EXAMPLES
314
315
  $ sanity-run blueprints stacks --organization-id <organizationId>
315
316
  ```
316
317
 
317
- _See code: [src/commands/blueprints/stacks.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/blueprints/stacks.ts)_
318
+ _See code: [src/commands/blueprints/stacks.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/blueprints/stacks.ts)_
318
319
 
319
320
  ## `sanity-run functions add`
320
321
 
@@ -356,7 +357,7 @@ EXAMPLES
356
357
  $ sanity-run functions add --name my-function --type document-create --type document-update --lang js
357
358
  ```
358
359
 
359
- _See code: [src/commands/functions/add.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/functions/add.ts)_
360
+ _See code: [src/commands/functions/add.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/functions/add.ts)_
360
361
 
361
362
  ## `sanity-run functions dev`
362
363
 
@@ -379,7 +380,7 @@ EXAMPLES
379
380
  $ sanity-run functions dev --host 127.0.0.1 --port 8974
380
381
  ```
381
382
 
382
- _See code: [src/commands/functions/dev.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/functions/dev.ts)_
383
+ _See code: [src/commands/functions/dev.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/functions/dev.ts)_
383
384
 
384
385
  ## `sanity-run functions env add NAME KEY VALUE`
385
386
 
@@ -401,7 +402,7 @@ EXAMPLES
401
402
  $ sanity-run functions env add MyFunction API_URL https://api.example.com/
402
403
  ```
403
404
 
404
- _See code: [src/commands/functions/env/add.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/functions/env/add.ts)_
405
+ _See code: [src/commands/functions/env/add.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/functions/env/add.ts)_
405
406
 
406
407
  ## `sanity-run functions env list NAME`
407
408
 
@@ -421,7 +422,7 @@ EXAMPLES
421
422
  $ sanity-run functions env list MyFunction
422
423
  ```
423
424
 
424
- _See code: [src/commands/functions/env/list.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/functions/env/list.ts)_
425
+ _See code: [src/commands/functions/env/list.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/functions/env/list.ts)_
425
426
 
426
427
  ## `sanity-run functions env remove NAME KEY`
427
428
 
@@ -442,7 +443,7 @@ EXAMPLES
442
443
  $ sanity-run functions env remove MyFunction API_URL
443
444
  ```
444
445
 
445
- _See code: [src/commands/functions/env/remove.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/functions/env/remove.ts)_
446
+ _See code: [src/commands/functions/env/remove.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/functions/env/remove.ts)_
446
447
 
447
448
  ## `sanity-run functions logs NAME`
448
449
 
@@ -476,7 +477,7 @@ EXAMPLES
476
477
  $ sanity-run functions logs <name> --delete
477
478
  ```
478
479
 
479
- _See code: [src/commands/functions/logs.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/functions/logs.ts)_
480
+ _See code: [src/commands/functions/logs.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/functions/logs.ts)_
480
481
 
481
482
  ## `sanity-run functions test NAME`
482
483
 
@@ -525,7 +526,7 @@ EXAMPLES
525
526
  $ sanity-run functions test <name> --event update --data-before '{ "title": "before" }' --data-after '{ "title": "after" }'
526
527
  ```
527
528
 
528
- _See code: [src/commands/functions/test.ts](https://github.com/sanity-io/runtime-cli/blob/v12.0.1/src/commands/functions/test.ts)_
529
+ _See code: [src/commands/functions/test.ts](https://github.com/sanity-io/runtime-cli/blob/v12.2.0/src/commands/functions/test.ts)_
529
530
 
530
531
  ## `sanity-run help [COMMAND]`
531
532
 
@@ -1,7 +1,8 @@
1
+ import type { BlueprintResource } from '@sanity/blueprints';
1
2
  import { type Blueprint } from '@sanity/blueprints-parser';
2
- import type { BlueprintParserError, Resource } from '../../utils/types.js';
3
+ import type { BlueprintParserError } from '../../utils/types.js';
3
4
  import { type ScopeType } from '../../utils/types.js';
4
- import { type BlueprintsConfig } from './config.js';
5
+ import { type LocatedBlueprintsConfig } from './config.js';
5
6
  declare const SUPPORTED_FILE_EXTENSIONS: readonly [".json", ".js", ".mjs", ".ts"];
6
7
  type BlueprintFileExtension = (typeof SUPPORTED_FILE_EXTENSIONS)[number];
7
8
  export declare const JSON_BLUEPRINT_CONTENT: {
@@ -29,7 +30,7 @@ export declare function findBlueprintFile(blueprintPath?: string): FileInfo | nu
29
30
  /** Result of the blueprint read operation */
30
31
  export interface ReadBlueprintResult {
31
32
  fileInfo: FileInfo;
32
- blueprintConfig: BlueprintsConfig | null;
33
+ blueprintConfig: LocatedBlueprintsConfig | null;
33
34
  rawBlueprint: Record<string, unknown>;
34
35
  parsedBlueprint: Blueprint;
35
36
  errors: BlueprintParserError[];
@@ -51,7 +52,7 @@ export declare function writeBlueprintToDisk({ blueprintFilePath, jsonContent, }
51
52
  blueprintFilePath: string;
52
53
  jsonContent?: Blueprint;
53
54
  }): string;
54
- export declare function addResourceToBlueprint<T extends Resource>({ blueprintFilePath, resource, }: {
55
+ export declare function addResourceToBlueprint<T extends BlueprintResource>({ blueprintFilePath, resource, }: {
55
56
  blueprintFilePath?: string;
56
57
  resource: T;
57
58
  }): T | undefined;
@@ -5,12 +5,14 @@ export interface ConfigUpdate {
5
5
  stackId?: string;
6
6
  }
7
7
  export interface BlueprintsConfig extends ConfigUpdate {
8
- configPath: string;
9
8
  blueprintConfigVersion?: typeof BLUEPRINT_CONFIG_VERSION;
10
9
  runtimeCliVersion?: typeof RUNTIME_CLI_VERSION;
11
10
  updatedAt?: number;
12
11
  }
13
- export declare function readConfigFile(blueprintFilePath?: string): BlueprintsConfig | null;
12
+ export interface LocatedBlueprintsConfig extends BlueprintsConfig {
13
+ configPath: string;
14
+ }
15
+ export declare function readConfigFile(blueprintFilePath?: string): LocatedBlueprintsConfig | null;
14
16
  /**
15
17
  * Create or update the config file to disk.
16
18
  * One of organizationId or projectId must be provided. Not both.
@@ -21,8 +23,7 @@ export declare function readConfigFile(blueprintFilePath?: string): BlueprintsCo
21
23
  * @param options.projectId - the project ID
22
24
  * @param options.stackId - the stack ID
23
25
  */
24
- export declare function writeConfigFile(options: {
25
- blueprintFilePath?: string;
26
+ export declare function writeConfigFile(blueprintFilePath: string, options: {
26
27
  stackId?: string;
27
28
  } & ({
28
29
  organizationId: string;
@@ -30,7 +31,7 @@ export declare function writeConfigFile(options: {
30
31
  } | {
31
32
  projectId: string;
32
33
  organizationId?: string;
33
- })): void;
34
+ })): BlueprintsConfig;
34
35
  /**
35
36
  * Update the config file with the given properties.
36
37
  * Config file must already exist.
@@ -41,7 +42,7 @@ export declare function writeConfigFile(options: {
41
42
  * @param updateableProperties.projectId - the project ID
42
43
  * @param updateableProperties.stackId - the stack ID
43
44
  */
44
- export declare function patchConfigFile(blueprintFilePath: string, updateableProperties: ConfigUpdate): void;
45
+ export declare function patchConfigFile(blueprintFilePath: string, updateableProperties: ConfigUpdate): BlueprintsConfig;
45
46
  /**
46
47
  * Find and write an organizationId to the config file by getting it from the projectId
47
48
  * @throws {Error} if unable to fetch project
@@ -28,8 +28,8 @@ export function readConfigFile(blueprintFilePath) {
28
28
  * @param options.projectId - the project ID
29
29
  * @param options.stackId - the stack ID
30
30
  */
31
- export function writeConfigFile(options) {
32
- const { blueprintFilePath, organizationId, projectId, stackId } = options;
31
+ export function writeConfigFile(blueprintFilePath, options) {
32
+ const { organizationId, projectId, stackId } = options;
33
33
  const blueprintDir = blueprintFilePath ? dirname(blueprintFilePath) : cwd();
34
34
  const configDir = join(blueprintDir, BLUEPRINT_CONFIG_DIR);
35
35
  const configPath = join(configDir, BLUEPRINT_CONFIG_FILE);
@@ -49,6 +49,7 @@ export function writeConfigFile(options) {
49
49
  config.runtimeCliVersion = RUNTIME_CLI_VERSION;
50
50
  config.updatedAt = Date.now();
51
51
  writeFileSync(configPath, JSON.stringify(config, null, 2));
52
+ return config;
52
53
  }
53
54
  /**
54
55
  * Update the config file with the given properties.
@@ -66,13 +67,14 @@ export function patchConfigFile(blueprintFilePath, updateableProperties) {
66
67
  throw new Error('No config file found');
67
68
  const { configPath, ...existingConfigProperties } = existingConfig;
68
69
  const newConfig = {
69
- blueprintConfigVersion: BLUEPRINT_CONFIG_VERSION, // don't overwrite the version
70
+ blueprintConfigVersion: BLUEPRINT_CONFIG_VERSION, // patch doesn't overwrite versions
71
+ runtimeCliVersion: RUNTIME_CLI_VERSION,
70
72
  ...existingConfigProperties,
71
73
  ...updateableProperties,
72
74
  updatedAt: Date.now(),
73
- runtimeCliVersion: RUNTIME_CLI_VERSION,
74
75
  };
75
76
  writeFileSync(configPath, JSON.stringify(newConfig, null, 2));
77
+ return newConfig;
76
78
  }
77
79
  /**
78
80
  * Find and write an organizationId to the config file by getting it from the projectId
@@ -97,7 +99,7 @@ export async function backfillOrganizationId({ blueprintFilePath, projectId, })
97
99
  }
98
100
  if (!organizationId)
99
101
  throw new Error('No organizationId found');
100
- writeConfigFile({ blueprintFilePath, organizationId });
102
+ patchConfigFile(blueprintFilePath, { organizationId });
101
103
  return organizationId;
102
104
  }
103
105
  export async function backfillProjectBasedStackId({ blueprintFilePath, projectId, }) {
@@ -117,7 +119,7 @@ export async function backfillProjectBasedStackId({ blueprintFilePath, projectId
117
119
  stacks[0].scopeType === 'project' &&
118
120
  stacks[0].id === possibleStackId) {
119
121
  // jackpot
120
- writeConfigFile({ blueprintFilePath, projectId, stackId: possibleStackId });
122
+ patchConfigFile(blueprintFilePath, { projectId, stackId: possibleStackId });
121
123
  return possibleStackId;
122
124
  }
123
125
  return undefined;
@@ -1,10 +1,14 @@
1
1
  import type { AuthParams, ScopeType, Stack, StackMutation } from '../../utils/types.js';
2
2
  export declare const stacksUrl: string;
3
- interface ListStacksResponse {
4
- ok: boolean;
5
- error: string | null;
3
+ type ListStacksResponse = {
4
+ ok: true;
5
+ error: null;
6
6
  stacks: Stack[];
7
- }
7
+ } | {
8
+ ok: false;
9
+ error: string;
10
+ stacks: unknown;
11
+ };
8
12
  export declare function listStacks(auth: AuthParams): Promise<ListStacksResponse>;
9
13
  interface GetStackResponse {
10
14
  ok: boolean;
@@ -2,32 +2,6 @@ import config from '../../config.js';
2
2
  import getHeaders from '../../utils/get-headers.js';
3
3
  const { apiUrl } = config;
4
4
  export const stacksUrl = `${apiUrl}vX/blueprints/stacks`;
5
- /** Discriminate between Resource and Resource with parameters */
6
- function hasParameters(obj) {
7
- return (typeof obj === 'object' &&
8
- obj !== null &&
9
- 'parameters' in obj &&
10
- typeof obj.parameters === 'object' &&
11
- obj.parameters !== null);
12
- }
13
- /** Flatten Resource with parameters */
14
- function flattenResource(resource) {
15
- if (hasParameters(resource)) {
16
- const { parameters, ...rest } = resource;
17
- return { ...rest, ...parameters };
18
- }
19
- return resource;
20
- }
21
- /** Flatten a Stack's resources */
22
- function flattenStackResources(stack) {
23
- if (stack && Array.isArray(stack.resources)) {
24
- return {
25
- ...stack,
26
- resources: stack.resources.map(flattenResource),
27
- };
28
- }
29
- return stack;
30
- }
31
5
  export async function listStacks(auth) {
32
6
  const response = await fetch(stacksUrl, {
33
7
  method: 'GET',
@@ -37,7 +11,7 @@ export async function listStacks(auth) {
37
11
  return {
38
12
  ok: response.ok,
39
13
  error: response.ok ? null : data.message,
40
- stacks: response.ok ? data.map(flattenStackResources) : data,
14
+ stacks: data,
41
15
  };
42
16
  }
43
17
  export async function getStack({ stackId, auth, }) {
@@ -49,7 +23,7 @@ export async function getStack({ stackId, auth, }) {
49
23
  return {
50
24
  ok: response.ok,
51
25
  error: response.ok ? null : data.message,
52
- stack: response.ok ? flattenStackResources(data) : data,
26
+ stack: data,
53
27
  response,
54
28
  };
55
29
  }
@@ -63,7 +37,7 @@ export async function createStack({ stackMutation, auth, }) {
63
37
  return {
64
38
  ok: response.ok,
65
39
  error: response.ok ? null : data.message,
66
- stack: response.ok ? flattenStackResources(data) : data,
40
+ stack: data,
67
41
  };
68
42
  }
69
43
  export async function createEmptyStack({ token, scopeType, scopeId, name, }) {
@@ -80,7 +54,7 @@ export async function createEmptyStack({ token, scopeType, scopeId, name, }) {
80
54
  if (!response.ok) {
81
55
  throw new Error(response.error || 'Failed to create new Stack');
82
56
  }
83
- return flattenStackResources(response.stack);
57
+ return response.stack;
84
58
  }
85
59
  export async function updateStack({ stackId, stackMutation, auth, }) {
86
60
  const response = await fetch(`${stacksUrl}/${stackId}`, {
@@ -92,7 +66,7 @@ export async function updateStack({ stackId, stackMutation, auth, }) {
92
66
  return {
93
67
  ok: response.ok,
94
68
  error: response.ok ? null : data.message,
95
- stack: response.ok ? flattenStackResources(data) : data,
69
+ stack: data,
96
70
  };
97
71
  }
98
72
  export async function destroyStack({ stackId, auth, }) {
@@ -104,6 +78,6 @@ export async function destroyStack({ stackId, auth, }) {
104
78
  return {
105
79
  ok: response.ok,
106
80
  error: response.ok ? null : data.message,
107
- stack: response.ok ? flattenStackResources(data) : data,
81
+ stack: data,
108
82
  };
109
83
  }
@@ -17,11 +17,13 @@ export default class DestroyCommand extends BlueprintCommand {
17
17
  description: 'Project associated with the Stack',
18
18
  aliases: ['projectId', 'project'],
19
19
  dependsOn: ['stack-id', 'force'],
20
+ exclusive: ['organization-id'],
20
21
  }),
21
22
  'organization-id': Flags.string({
22
23
  description: 'Organization associated with the Stack',
23
24
  aliases: ['organizationId', 'organization', 'org'],
24
25
  dependsOn: ['stack-id', 'force'],
26
+ exclusive: ['project-id'],
25
27
  }),
26
28
  'stack-id': Flags.string({
27
29
  description: 'Stack ID to destroy (defaults to current Stack)',
@@ -5,6 +5,7 @@ export default class DoctorCommand extends Command {
5
5
  static flags: {
6
6
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
7
  path: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ fix: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
9
  };
9
10
  run(): Promise<void>;
10
11
  }
@@ -12,6 +12,10 @@ export default class DoctorCommand extends Command {
12
12
  path: Flags.string({
13
13
  description: 'Path to the Blueprint configuration file',
14
14
  }),
15
+ fix: Flags.boolean({
16
+ description: 'Interactively fix configuration issues',
17
+ default: false,
18
+ }),
15
19
  };
16
20
  async run() {
17
21
  const { flags } = await this.parse(DoctorCommand);
@@ -5,7 +5,7 @@ export default class InfoCommand extends DeployedBlueprintCommand {
5
5
  static description = 'Show information about a Blueprint Stack deployment';
6
6
  static examples = [
7
7
  '<%= config.bin %> <%= command.id %>',
8
- '<%= config.bin %> <%= command.id %> --stack-id <stackId>',
8
+ '<%= config.bin %> <%= command.id %> --id <stackId>',
9
9
  ];
10
10
  static flags = {
11
11
  id: Flags.string({
@@ -2,7 +2,7 @@ import { Args, Command, Flags } from '@oclif/core';
2
2
  import { blueprintInitCore } from '../../cores/blueprints/init.js';
3
3
  import { validTokenOrErrorMessage } from '../../utils/validated-token.js';
4
4
  export default class InitCommand extends Command {
5
- static description = 'Initialize a new Blueprint';
5
+ static description = 'Initialize a new Blueprint Stack deployment';
6
6
  static examples = [
7
7
  '<%= config.bin %> <%= command.id %>',
8
8
  '<%= config.bin %> <%= command.id %> [directory]',
@@ -2,7 +2,7 @@ import { Flags } from '@oclif/core';
2
2
  import { BlueprintCommand } from '../../baseCommands.js';
3
3
  import { blueprintStacksCore } from '../../cores/blueprints/stacks.js';
4
4
  export default class StacksCommand extends BlueprintCommand {
5
- static description = 'List all Blueprint stacks';
5
+ static description = 'List all Blueprint Stacks';
6
6
  static examples = [
7
7
  '<%= config.bin %> <%= command.id %>',
8
8
  '<%= config.bin %> <%= command.id %> --project-id <projectId>',
@@ -1,5 +1,5 @@
1
- import { Command } from '@oclif/core';
2
- export default class DevCommand extends Command {
1
+ import { BlueprintCommand } from '../../baseCommands.js';
2
+ export default class DevCommand extends BlueprintCommand<typeof DevCommand> {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  static flags: {
@@ -1,6 +1,7 @@
1
- import { Command, Flags } from '@oclif/core';
1
+ import { Flags } from '@oclif/core';
2
+ import { BlueprintCommand } from '../../baseCommands.js';
2
3
  import { functionDevCore } from '../../cores/functions/dev.js';
3
- export default class DevCommand extends Command {
4
+ export default class DevCommand extends BlueprintCommand {
4
5
  static description = 'Start the Sanity Function emulator';
5
6
  static examples = ['<%= config.bin %> <%= command.id %> --host 127.0.0.1 --port 8974'];
6
7
  static flags = {
package/dist/config.js CHANGED
@@ -1,13 +1,23 @@
1
1
  import { readFileSync } from 'node:fs';
2
- import { dirname, join } from 'node:path';
3
2
  import { env } from 'node:process';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { findUpSync } from 'find-up';
4
5
  import getToken from './utils/get-token.js';
5
6
  export const BLUEPRINT_CONFIG_VERSION = 'v2025-05-08';
6
7
  export const BLUEPRINT_CONFIG_DIR = '.sanity';
7
8
  export const BLUEPRINT_CONFIG_FILE = 'blueprint.config.json';
8
9
  export let RUNTIME_CLI_VERSION;
9
10
  try {
10
- RUNTIME_CLI_VERSION = JSON.parse(readFileSync(join(dirname(import.meta.url), '..', 'package.json'), 'utf8')).version;
11
+ const packageJsonPath = findUpSync('package.json', {
12
+ cwd: fileURLToPath(new URL('.', import.meta.url)),
13
+ type: 'file',
14
+ });
15
+ if (packageJsonPath) {
16
+ const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
17
+ if (packageJson.name === '@sanity/runtime-cli') {
18
+ RUNTIME_CLI_VERSION = packageJson.version;
19
+ }
20
+ }
11
21
  }
12
22
  catch { }
13
23
  const nodeEnv = env.NODE_ENV?.toLowerCase() ?? 'production';
@@ -0,0 +1,7 @@
1
+ export declare const SANITY_ACCESS_ROLE = "sanity.access.role";
2
+ export declare const SANITY_FUNCTION_DOCUMENT = "sanity.function.document";
3
+ export declare const SANITY_FUNCTION_MEDIA_LIBRARY_ASSET = "sanity.function.media-library.asset";
4
+ export declare const SANITY_FUNCTION_SCHEDULE = "sanity.function.cron";
5
+ export declare const SANITY_PROJECT_CORS = "sanity.project.cors";
6
+ export declare const SANITY_PROJECT_DATASET = "sanity.project.dataset";
7
+ export declare const SANITY_PROJECT_WEBHOOK = "sanity.project.webhook";
@@ -0,0 +1,7 @@
1
+ export const SANITY_ACCESS_ROLE = 'sanity.access.role';
2
+ export const SANITY_FUNCTION_DOCUMENT = 'sanity.function.document';
3
+ export const SANITY_FUNCTION_MEDIA_LIBRARY_ASSET = 'sanity.function.media-library.asset';
4
+ export const SANITY_FUNCTION_SCHEDULE = 'sanity.function.cron';
5
+ export const SANITY_PROJECT_CORS = 'sanity.project.cors';
6
+ export const SANITY_PROJECT_DATASET = 'sanity.project.dataset';
7
+ export const SANITY_PROJECT_WEBHOOK = 'sanity.project.webhook';