@sanity/runtime-cli 11.1.3 → 11.1.4

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 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/11.1.3 linux-x64 node-v24.11.0
23
+ @sanity/runtime-cli/11.1.4 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/v11.1.3/src/commands/blueprints/add.ts)_
95
+ _See code: [src/commands/blueprints/add.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/add.ts)_
96
96
 
97
97
  ## `sanity-run blueprints config`
98
98
 
@@ -124,7 +124,7 @@ EXAMPLES
124
124
  $ sanity-run blueprints config --edit --project-id <projectId> --stack-id <stackId>
125
125
  ```
126
126
 
127
- _See code: [src/commands/blueprints/config.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/blueprints/config.ts)_
127
+ _See code: [src/commands/blueprints/config.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/config.ts)_
128
128
 
129
129
  ## `sanity-run blueprints deploy`
130
130
 
@@ -146,7 +146,7 @@ EXAMPLES
146
146
  $ sanity-run blueprints deploy --no-wait
147
147
  ```
148
148
 
149
- _See code: [src/commands/blueprints/deploy.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/blueprints/deploy.ts)_
149
+ _See code: [src/commands/blueprints/deploy.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/deploy.ts)_
150
150
 
151
151
  ## `sanity-run blueprints destroy`
152
152
 
@@ -173,7 +173,7 @@ EXAMPLES
173
173
  $ sanity-run blueprints destroy --stack-id <stackId> --project-id <projectId> --force --no-wait
174
174
  ```
175
175
 
176
- _See code: [src/commands/blueprints/destroy.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/blueprints/destroy.ts)_
176
+ _See code: [src/commands/blueprints/destroy.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/destroy.ts)_
177
177
 
178
178
  ## `sanity-run blueprints doctor`
179
179
 
@@ -191,7 +191,7 @@ DESCRIPTION
191
191
  Diagnose potential issues with Blueprint configuration
192
192
  ```
193
193
 
194
- _See code: [src/commands/blueprints/doctor.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/blueprints/doctor.ts)_
194
+ _See code: [src/commands/blueprints/doctor.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/doctor.ts)_
195
195
 
196
196
  ## `sanity-run blueprints info`
197
197
 
@@ -213,7 +213,7 @@ EXAMPLES
213
213
  $ sanity-run blueprints info --stack-id <stackId>
214
214
  ```
215
215
 
216
- _See code: [src/commands/blueprints/info.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/blueprints/info.ts)_
216
+ _See code: [src/commands/blueprints/info.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/info.ts)_
217
217
 
218
218
  ## `sanity-run blueprints init [DIR]`
219
219
 
@@ -252,7 +252,7 @@ EXAMPLES
252
252
  $ sanity-run blueprints init --blueprint-type <json|js|ts> --stack-name <stackName>
253
253
  ```
254
254
 
255
- _See code: [src/commands/blueprints/init.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/blueprints/init.ts)_
255
+ _See code: [src/commands/blueprints/init.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/init.ts)_
256
256
 
257
257
  ## `sanity-run blueprints logs`
258
258
 
@@ -274,7 +274,7 @@ EXAMPLES
274
274
  $ sanity-run blueprints logs --watch
275
275
  ```
276
276
 
277
- _See code: [src/commands/blueprints/logs.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/blueprints/logs.ts)_
277
+ _See code: [src/commands/blueprints/logs.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/logs.ts)_
278
278
 
279
279
  ## `sanity-run blueprints plan`
280
280
 
@@ -291,7 +291,7 @@ EXAMPLES
291
291
  $ sanity-run blueprints plan
292
292
  ```
293
293
 
294
- _See code: [src/commands/blueprints/plan.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/blueprints/plan.ts)_
294
+ _See code: [src/commands/blueprints/plan.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/plan.ts)_
295
295
 
296
296
  ## `sanity-run blueprints stacks`
297
297
 
@@ -316,7 +316,7 @@ EXAMPLES
316
316
  $ sanity-run blueprints stacks --organization-id <organizationId>
317
317
  ```
318
318
 
319
- _See code: [src/commands/blueprints/stacks.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/blueprints/stacks.ts)_
319
+ _See code: [src/commands/blueprints/stacks.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/blueprints/stacks.ts)_
320
320
 
321
321
  ## `sanity-run functions add`
322
322
 
@@ -358,7 +358,7 @@ EXAMPLES
358
358
  $ sanity-run functions add --name my-function --type document-create --type document-update --lang js
359
359
  ```
360
360
 
361
- _See code: [src/commands/functions/add.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/functions/add.ts)_
361
+ _See code: [src/commands/functions/add.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/functions/add.ts)_
362
362
 
363
363
  ## `sanity-run functions dev`
364
364
 
@@ -381,7 +381,7 @@ EXAMPLES
381
381
  $ sanity-run functions dev --host 127.0.0.1 --port 8974
382
382
  ```
383
383
 
384
- _See code: [src/commands/functions/dev.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/functions/dev.ts)_
384
+ _See code: [src/commands/functions/dev.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/functions/dev.ts)_
385
385
 
386
386
  ## `sanity-run functions env add NAME KEY VALUE`
387
387
 
@@ -403,7 +403,7 @@ EXAMPLES
403
403
  $ sanity-run functions env add MyFunction API_URL https://api.example.com/
404
404
  ```
405
405
 
406
- _See code: [src/commands/functions/env/add.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/functions/env/add.ts)_
406
+ _See code: [src/commands/functions/env/add.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/functions/env/add.ts)_
407
407
 
408
408
  ## `sanity-run functions env list NAME`
409
409
 
@@ -423,7 +423,7 @@ EXAMPLES
423
423
  $ sanity-run functions env list MyFunction
424
424
  ```
425
425
 
426
- _See code: [src/commands/functions/env/list.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/functions/env/list.ts)_
426
+ _See code: [src/commands/functions/env/list.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/functions/env/list.ts)_
427
427
 
428
428
  ## `sanity-run functions env remove NAME KEY`
429
429
 
@@ -444,7 +444,7 @@ EXAMPLES
444
444
  $ sanity-run functions env remove MyFunction API_URL
445
445
  ```
446
446
 
447
- _See code: [src/commands/functions/env/remove.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/functions/env/remove.ts)_
447
+ _See code: [src/commands/functions/env/remove.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/functions/env/remove.ts)_
448
448
 
449
449
  ## `sanity-run functions logs NAME`
450
450
 
@@ -478,7 +478,7 @@ EXAMPLES
478
478
  $ sanity-run functions logs <name> --delete
479
479
  ```
480
480
 
481
- _See code: [src/commands/functions/logs.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/functions/logs.ts)_
481
+ _See code: [src/commands/functions/logs.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/functions/logs.ts)_
482
482
 
483
483
  ## `sanity-run functions test NAME`
484
484
 
@@ -527,7 +527,7 @@ EXAMPLES
527
527
  $ sanity-run functions test <name> --event update --data-before '{ "title": "before" }' --data-after '{ "title": "after" }'
528
528
  ```
529
529
 
530
- _See code: [src/commands/functions/test.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.3/src/commands/functions/test.ts)_
530
+ _See code: [src/commands/functions/test.ts](https://github.com/sanity-io/runtime-cli/blob/v11.1.4/src/commands/functions/test.ts)_
531
531
 
532
532
  ## `sanity-run help [COMMAND]`
533
533
 
@@ -1,10 +1,10 @@
1
1
  import invoke from '../../utils/invoke-local.js';
2
2
  export async function testAction(resource, payload, context, options) {
3
3
  try {
4
- const { json, logs } = await invoke(resource, payload, context, options);
5
- return { error: undefined, json, logs };
4
+ const { json, logs, error } = await invoke(resource, payload, context, options);
5
+ return { error: error, json, logs };
6
6
  }
7
7
  catch (error) {
8
- return { error, json: undefined, logs: undefined };
8
+ return { error: error, json: undefined, logs: undefined };
9
9
  }
10
10
  }
@@ -18,8 +18,6 @@ export async function blueprintPlanCore(options) {
18
18
  const diff = stackDeployDiff(parsedBlueprint, stackResponse.stack);
19
19
  if (diff)
20
20
  log(diff);
21
- else
22
- log(chalk.dim('No changes detected to live deployment'));
23
21
  }
24
22
  }
25
23
  log(`\n Run "${chalk.bold.magenta(`${bin} blueprints deploy`)}" to deploy these changes`);
@@ -129,7 +129,7 @@ export async function functionTestCore(options) {
129
129
  spinner.fail('Function execution failed.');
130
130
  return {
131
131
  success: false,
132
- error: error.toString(),
132
+ error: error.stack || error.message || error.name,
133
133
  };
134
134
  }
135
135
  spinner.succeed('Function execution succeeded.');
@@ -51,7 +51,7 @@ export async function initDeployedBlueprintConfig(config) {
51
51
  const auth = { token: config.token, scopeType, scopeId };
52
52
  const stackResponse = await getStack({ stackId, auth });
53
53
  if (!stackResponse.ok) {
54
- config.log(`Could not retrieve deployment info for ${niceId(stackId)}. Was it destroyed?`);
54
+ config.log(`Could not retrieve deployment info for ${niceId(stackId)}.`);
55
55
  config.log(`Run \`${config.bin} blueprints doctor\` for diagnostics.`);
56
56
  return { ok: false, error: 'Missing deployment' };
57
57
  }
@@ -29,7 +29,7 @@ class ConsolePanel extends ApiBaseElement {
29
29
  let update = ''
30
30
  if (error) {
31
31
  // Display error details in the console
32
- update = error?.details?.error ?? 'An error occurred.'
32
+ update = (error.stack || error.message || error.name) ?? 'An error occurred.'
33
33
  } else {
34
34
  // Display regular logs
35
35
  update = logs ?? '' // Handle case where logs might be null/undefined
@@ -84,44 +84,62 @@ process.on('message', async (data) => {
84
84
  // invalid payload so return early
85
85
  return
86
86
  }
87
+
87
88
  const {srcPath, payload} = jsonData
88
89
  const {context, ...event} = payload
90
+
89
91
  let logs = ''
92
+ let errorLogs = ''
90
93
  let json = null
91
94
 
92
- // Import the function code
93
- const entry = await import(getFunctionSource(srcPath))
94
-
95
- let eventHandler = null
96
-
97
- if (typeof entry.handler === 'function') {
98
- eventHandler = entry.handler
99
- } else if (typeof entry.default === 'function') {
100
- eventHandler = entry.default
101
- }
102
-
103
- if (!eventHandler) {
104
- throw new Error(
105
- 'No valid handler found. Please provide a default export or a named export, "handler"',
106
- )
107
- }
108
-
109
- // backup stdout
95
+ // Capture stdout and stderr
110
96
  const originalStdoutWrite = process.stdout.write.bind(process.stdout)
97
+ const originalStderrWrite = process.stderr.write.bind(process.stderr)
111
98
 
112
- // redirect stdout to a buffer
113
99
  process.stdout.write = (chunk) => {
114
- if (typeof chunk === 'string') {
115
- logs += chunk
116
- }
100
+ if (typeof chunk === 'string') logs += chunk
101
+ return true
102
+ }
103
+ process.stderr.write = (chunk) => {
104
+ if (typeof chunk === 'string') errorLogs += chunk
117
105
  return true
118
106
  }
119
107
 
120
- json = await eventHandler({context, event})
121
-
122
- // revert changes to stdout
123
- process.stdout.write = originalStdoutWrite
108
+ try {
109
+ // Import the function code
110
+ const entry = await import(getFunctionSource(srcPath))
111
+ const eventHandler = entry.handler || entry.default
112
+
113
+ if (typeof eventHandler !== 'function') {
114
+ throw new Error(
115
+ 'No valid handler found. Please provide a default export or a named export, "handler"',
116
+ )
117
+ }
124
118
 
125
- // Send result of handler code to parent process.
126
- process.send(JSON.stringify({json, logs}))
119
+ json = await eventHandler({context, event})
120
+
121
+ // Restore streams
122
+ process.stdout.write = originalStdoutWrite
123
+ process.stderr.write = originalStderrWrite
124
+
125
+ // Send result to parent
126
+ process.send(JSON.stringify({json, logs, errorLogs}))
127
+ } catch (err) {
128
+ // Restore streams on error
129
+ process.stdout.write = originalStdoutWrite
130
+ process.stderr.write = originalStderrWrite
131
+
132
+ const errorInfo = {
133
+ json: null,
134
+ logs,
135
+ errorLogs,
136
+ error: {
137
+ message: err?.message,
138
+ stack: err?.stack,
139
+ name: err?.name,
140
+ },
141
+ }
142
+ process.send(JSON.stringify(errorInfo))
143
+ process.exit(1)
144
+ }
127
145
  })
@@ -106,17 +106,26 @@ export default async function invoke(resource, payload, context, options) {
106
106
  executionStart = performance.now();
107
107
  child = spawn('node', ['--enable-source-maps', getChildProcessWrapperPath()], {
108
108
  cwd: cwd(),
109
- stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
109
+ stdio: ['pipe', 'pipe', 'pipe', 'ipc'], // changed: use 'pipe' so we can capture output
110
110
  env: { ...process.env, ...resource.env, FORCE_COLOR: forceColor ? '1' : '0' },
111
111
  });
112
+ // NEW: capture stdout and stderr
113
+ let stdout = '';
114
+ let stderr = '';
115
+ child.stdout?.on('data', (data) => {
116
+ stdout += data.toString();
117
+ });
118
+ child.stderr?.on('data', (data) => {
119
+ stderr += data.toString();
120
+ });
112
121
  child.on('message', (data) => {
113
122
  const executionTimeMs = performance.now() - executionStart;
114
- const { json, logs } = JSON.parse(data.toString());
123
+ const { json, logs, error } = JSON.parse(data.toString());
115
124
  shutdown();
116
125
  resolve({
117
126
  json,
118
127
  logs: sanitizeLogs(logs),
119
- error: undefined,
128
+ error,
120
129
  timings: {
121
130
  ...bundleTimings,
122
131
  execute: executionTimeMs,
@@ -131,12 +140,16 @@ export default async function invoke(resource, payload, context, options) {
131
140
  const executionTimeMs = performance.now() - executionStart;
132
141
  shutdown();
133
142
  if (code !== 0) {
134
- reject(new Error(`exited with code ${code}`));
143
+ // use captured stderr if available
144
+ const message = stderr.trim().length > 0
145
+ ? `Process failed with code ${code}\n${stderr}`
146
+ : `exited with code ${code}`;
147
+ reject(new Error(message));
135
148
  }
136
149
  else {
137
150
  resolve({
138
151
  json: undefined,
139
- logs: '',
152
+ logs: sanitizeLogs(stdout),
140
153
  error: undefined,
141
154
  timings: {
142
155
  ...bundleTimings,
@@ -138,12 +138,18 @@ export interface InvokeExecutionOptions {
138
138
  }
139
139
  /** @internal */
140
140
  export interface InvocationResponse {
141
- error: undefined | unknown;
141
+ error: InvocationError | undefined;
142
142
  json: JsonInvocationResponse | undefined;
143
143
  logs: string | undefined;
144
144
  timings?: Record<string, number>;
145
145
  }
146
146
  /** @internal */
147
+ export interface InvocationError {
148
+ stack: string;
149
+ message: string;
150
+ name: string;
151
+ }
152
+ /** @internal */
147
153
  export interface JsonInvocationResponse {
148
154
  data: Record<string, unknown> | undefined;
149
155
  }
@@ -1417,5 +1417,5 @@
1417
1417
  ]
1418
1418
  }
1419
1419
  },
1420
- "version": "11.1.3"
1420
+ "version": "11.1.4"
1421
1421
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sanity/runtime-cli",
3
3
  "description": "Sanity's Runtime CLI for Blueprints and Functions",
4
- "version": "11.1.3",
4
+ "version": "11.1.4",
5
5
  "author": "Sanity Runtime Team",
6
6
  "type": "module",
7
7
  "license": "MIT",