@seamapi/cli 0.18.0 → 0.18.1

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.
@@ -1,5 +1,5 @@
1
1
  import { getOutput } from './output/get-output.js';
2
- import { promptSelect, promptText } from './util/prompt.js';
2
+ import { PromptCancelledError, promptSelect, promptText, withBackHint, } from './util/prompt.js';
3
3
  export const interactForCustomMetadata = async (customMetadata) => {
4
4
  const updatedCustomMetadata = { ...customMetadata };
5
5
  const output = getOutput();
@@ -17,44 +17,59 @@ export const interactForCustomMetadata = async (customMetadata) => {
17
17
  let action;
18
18
  do {
19
19
  displayCurrentCustomMetadata();
20
- action = await promptSelect({
21
- message: 'Choose an action:',
22
- choices: [
23
- { label: 'Add an item to params', value: 'add' },
24
- { label: 'Remove an item from params', value: 'remove' },
25
- { label: 'Finish editing params', value: 'done' },
26
- ],
27
- });
28
- if (action === 'add') {
29
- const newKey = await promptText({
30
- message: 'Enter a key to add or edit:',
20
+ try {
21
+ action = await promptSelect({
22
+ message: withBackHint('Choose an action:'),
23
+ choices: [
24
+ { label: 'Add an item to params', value: 'add' },
25
+ { label: 'Remove an item from params', value: 'remove' },
26
+ { label: 'Finish editing params', value: 'done' },
27
+ ],
31
28
  });
32
- let newValue = await promptText({
33
- message: 'Enter the new value to add or edit (or null to delete):',
34
- });
35
- if (newKey) {
36
- if (newValue === 'false' || newValue === 'true') {
37
- newValue = newValue === 'true';
38
- }
39
- if (newValue === 'null') {
40
- updatedCustomMetadata[newKey] = null;
41
- }
42
- else {
43
- updatedCustomMetadata[newKey] = newValue;
29
+ }
30
+ catch (error) {
31
+ if (!(error instanceof PromptCancelledError))
32
+ throw error;
33
+ // Dismissing the action menu finishes editing, keeping the changes.
34
+ break;
35
+ }
36
+ try {
37
+ if (action === 'add') {
38
+ const newKey = await promptText({
39
+ message: withBackHint('Enter a key to add or edit:'),
40
+ });
41
+ let newValue = await promptText({
42
+ message: withBackHint('Enter the new value to add or edit (or null to delete):'),
43
+ });
44
+ if (newKey) {
45
+ if (newValue === 'false' || newValue === 'true') {
46
+ newValue = newValue === 'true';
47
+ }
48
+ if (newValue === 'null') {
49
+ updatedCustomMetadata[newKey] = null;
50
+ }
51
+ else {
52
+ updatedCustomMetadata[newKey] = newValue;
53
+ }
44
54
  }
45
55
  }
56
+ else if (action === 'remove') {
57
+ const customKeyToRemove = await promptSelect({
58
+ message: withBackHint('Choose a key-value pair to remove from params:'),
59
+ choices: Object.keys(updatedCustomMetadata).map((customMetadataKey) => {
60
+ return {
61
+ label: `${customMetadataKey}: ${updatedCustomMetadata[customMetadataKey]}`,
62
+ value: customMetadataKey,
63
+ };
64
+ }),
65
+ });
66
+ delete updatedCustomMetadata[customKeyToRemove];
67
+ }
46
68
  }
47
- else if (action === 'remove') {
48
- const customKeyToRemove = await promptSelect({
49
- message: 'Choose a key-value pair to remove from params:',
50
- choices: Object.keys(updatedCustomMetadata).map((customMetadataKey) => {
51
- return {
52
- label: `${customMetadataKey}: ${updatedCustomMetadata[customMetadataKey]}`,
53
- value: customMetadataKey,
54
- };
55
- }),
56
- });
57
- delete updatedCustomMetadata[customKeyToRemove];
69
+ catch (error) {
70
+ if (!(error instanceof PromptCancelledError))
71
+ throw error;
72
+ // Dismissing an inner prompt returns to the action menu.
58
73
  }
59
74
  } while (action !== 'done');
60
75
  return updatedCustomMetadata;
@@ -1 +1 @@
1
- {"version":3,"file":"interact-for-custom-metadata.js","sourceRoot":"","sources":["../src/lib/interact-for-custom-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAU3D,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAC5C,cAA8B,EAC9B,EAAE;IACF,MAAM,qBAAqB,GAA0B,EAAE,GAAG,cAAc,EAAE,CAAA;IAC1E,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,MAAM,4BAA4B,GAAG,GAAG,EAAE;QACxC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC/B,IAAI,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBACxD,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,GAAG,KAAK,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACpE,CAAC,CAAC,CAAA;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;QACpD,CAAC;IACH,CAAC,CAAA;IAED,IAAI,MAAc,CAAA;IAElB,GAAG,CAAC;QACF,4BAA4B,EAAE,CAAA;QAE9B,MAAM,GAAG,MAAM,YAAY,CAAC;YAC1B,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK,EAAE;gBAChD,EAAE,KAAK,EAAE,4BAA4B,EAAE,KAAK,EAAE,QAAQ,EAAE;gBACxD,EAAE,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,MAAM,EAAE;aAClD;SACF,CAAC,CAAA;QAEF,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;gBAC9B,OAAO,EAAE,6BAA6B;aACvC,CAAC,CAAA;YAEF,IAAI,QAAQ,GAAqB,MAAM,UAAU,CAAC;gBAChD,OAAO,EAAE,yDAAyD;aACnE,CAAC,CAAA;YACF,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;oBAChD,QAAQ,GAAG,QAAQ,KAAK,MAAM,CAAA;gBAChC,CAAC;gBACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACxB,qBAAqB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;gBACtC,CAAC;qBAAM,CAAC;oBACN,qBAAqB,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAA;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC;gBAC3C,OAAO,EAAE,gDAAgD;gBACzD,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,iBAAiB,EAAE,EAAE;oBACpE,OAAO;wBACL,KAAK,EAAE,GAAG,iBAAiB,KAAK,qBAAqB,CAAC,iBAAiB,CAAC,EAAE;wBAC1E,KAAK,EAAE,iBAAiB;qBACzB,CAAA;gBACH,CAAC,CAAC;aACH,CAAC,CAAA;YAEF,OAAO,qBAAqB,CAAC,iBAAiB,CAAC,CAAA;QACjD,CAAC;IACH,CAAC,QAAQ,MAAM,KAAK,MAAM,EAAC;IAE3B,OAAO,qBAAqB,CAAA;AAC9B,CAAC,CAAA"}
1
+ {"version":3,"file":"interact-for-custom-metadata.js","sourceRoot":"","sources":["../src/lib/interact-for-custom-metadata.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- import { promptAutocomplete } from './util/prompt.js';
1
+ import { promptAutocomplete, withBackHint } from './util/prompt.js';
2
2
  import { withLoading } from './util/with-loading.js';
3
3
  export const interactForResource = async ({ resourceName, fetchResources, toChoice, message = `Select a ${resourceName}:`, }) => {
4
4
  const resources = await withLoading(`Fetching ${resourceName.replace(/_/g, ' ')}s...`, fetchResources);
5
5
  return await promptAutocomplete({
6
- message,
6
+ // Resource pickers are only reached from the parameter flow, which
7
+ // returns to its menu when one is dismissed.
8
+ message: withBackHint(message),
7
9
  choices: resources.map((resource) => {
8
10
  const { title, value, description } = toChoice(resource);
9
11
  return { label: title, value, hint: description };
@@ -1 +1 @@
1
- {"version":3,"file":"interact-for-resource.js","sourceRoot":"","sources":["../src/lib/interact-for-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAQpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAY,EAClD,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,OAAO,GAAG,YAAY,YAAY,GAAG,GAMtC,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,YAAY,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EACjD,cAAc,CACf,CAAA;IACD,OAAO,MAAM,kBAAkB,CAAC;QAC9B,OAAO;QACP,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAClC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;YACxD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;QACnD,CAAC,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA"}
1
+ {"version":3,"file":"interact-for-resource.js","sourceRoot":"","sources":["../src/lib/interact-for-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAQpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAY,EAClD,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,OAAO,GAAG,YAAY,YAAY,GAAG,GAMtC,EAAE,EAAE;IACH,MAAM,SAAS,GAAG,MAAM,WAAW,CACjC,YAAY,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EACjD,cAAc,CACf,CAAA;IACD,OAAO,MAAM,kBAAkB,CAAC;QAC9B,mEAAmE;QACnE,6CAA6C;QAC7C,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC;QAC9B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAClC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;YACxD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAA;QACnD,CAAC,CAAC;KACH,CAAC,CAAA;AACJ,CAAC,CAAA"}
@@ -1,8 +1,8 @@
1
- import { promptText } from './util/prompt.js';
1
+ import { promptText, withBackHint } from './util/prompt.js';
2
2
  export const interactForTimestamp = async () => {
3
3
  const now = new Date().toISOString();
4
4
  const timestamp = await promptText({
5
- message: 'Enter a timestamp:',
5
+ message: withBackHint('Enter a timestamp:'),
6
6
  placeholder: now,
7
7
  defaultValue: now,
8
8
  validate: (value) => {
@@ -1 +1 @@
1
- {"version":3,"file":"interact-for-timestamp.js","sourceRoot":"","sources":["../src/lib/interact-for-timestamp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAI,EAAE;IAC7C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC;QACjC,OAAO,EAAE,oBAAoB;QAC7B,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG;QACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;gBAAE,OAAO,SAAS,CAAA;YACnD,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C,OAAO,iCAAiC,GAAG,EAAE,CAAA;YAC/C,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;AAC1C,CAAC,CAAA"}
1
+ {"version":3,"file":"interact-for-timestamp.js","sourceRoot":"","sources":["../src/lib/interact-for-timestamp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAI,EAAE;IAC7C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC;QACjC,OAAO,EAAE,YAAY,CAAC,oBAAoB,CAAC;QAC3C,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG;QACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAClB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;gBAAE,OAAO,SAAS,CAAA;YACnD,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5C,OAAO,iCAAiC,GAAG,EAAE,CAAA;YAC/C,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;AAC1C,CAAC,CAAA"}
@@ -18,6 +18,15 @@ export interface PromptChoice<Value> {
18
18
  value: Value;
19
19
  hint?: string | undefined;
20
20
  }
21
+ /**
22
+ * Note on a prompt message that dismissing it returns to the previous step.
23
+ *
24
+ * Only for prompts whose caller catches the dismissal: elsewhere it still
25
+ * stops the CLI, and saying otherwise would mislead. The note goes in the
26
+ * message because clack renders its own keyboard hints from a hardcoded list
27
+ * that a caller cannot add to.
28
+ */
29
+ export declare const withBackHint: (message: string) => string;
21
30
  /**
22
31
  * The arrow keypress an Emacs-style control keypress stands for, or
23
32
  * undefined for any other key: ctrl-p is up and ctrl-n is down.
@@ -1,4 +1,5 @@
1
1
  import { autocomplete, autocompleteMultiselect, confirm, isCancel, select, text, } from '@clack/prompts';
2
+ import chalk from 'chalk';
2
3
  import { NonInteractiveError } from './cli-args.js';
3
4
  /**
4
5
  * Whether the CLI can ask the user a question.
@@ -15,6 +16,15 @@ export class PromptCancelledError extends Error {
15
16
  super('Cancelled');
16
17
  }
17
18
  }
19
+ /**
20
+ * Note on a prompt message that dismissing it returns to the previous step.
21
+ *
22
+ * Only for prompts whose caller catches the dismissal: elsewhere it still
23
+ * stops the CLI, and saying otherwise would mislead. The note goes in the
24
+ * message because clack renders its own keyboard hints from a hardcoded list
25
+ * that a caller cannot add to.
26
+ */
27
+ export const withBackHint = (message) => `${message} ${chalk.dim('· Esc: go back')}`;
18
28
  const ensureInteractive = () => {
19
29
  if (!canPrompt()) {
20
30
  throw new NonInteractiveError('Cannot prompt without a terminal: pass the missing arguments, or pipe them in as JSON');
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/util/prompt.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/util/prompt.ts"],"names":[],"mappings":"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"}
package/lib/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare const seamapiCliVersion = "0.18.0";
1
+ declare const seamapiCliVersion = "0.18.1";
2
2
  declare const seamapiBlueprintVersion = "1.2.0";
3
3
  export { seamapiBlueprintVersion };
4
4
  export default seamapiCliVersion;
package/lib/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // Versions are replaced with generated values when the package is packed.
2
- const seamapiCliVersion = '0.18.0';
2
+ const seamapiCliVersion = '0.18.1';
3
3
  const seamapiBlueprintVersion = '1.2.0';
4
4
  export { seamapiBlueprintVersion };
5
5
  export default seamapiCliVersion;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamapi/cli",
3
- "version": "0.18.0",
3
+ "version": "0.18.1",
4
4
  "description": "A command-line interface (CLI) for interacting with the Seam API.",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -1,5 +1,11 @@
1
1
  import { getOutput } from './output/get-output.js'
2
- import { promptNumber, promptSelect, promptText } from './util/prompt.js'
2
+ import {
3
+ PromptCancelledError,
4
+ promptNumber,
5
+ promptSelect,
6
+ promptText,
7
+ withBackHint,
8
+ } from './util/prompt.js'
3
9
 
4
10
  export const interactForArray = async (
5
11
  array: string[],
@@ -23,31 +29,42 @@ export const interactForArray = async (
23
29
  do {
24
30
  displayList()
25
31
 
26
- action = await promptSelect({
27
- message: 'Choose an action:',
28
- choices: [
29
- { label: 'Add an item', value: 'add' },
30
- { label: 'Remove an item', value: 'remove' },
31
- { label: 'Finish editing', value: 'done' },
32
- ],
33
- })
34
-
35
- if (action === 'add') {
36
- const newItem = await promptText({
37
- message: 'Enter the new item:',
32
+ try {
33
+ action = await promptSelect({
34
+ message: withBackHint('Choose an action:'),
35
+ choices: [
36
+ { label: 'Add an item', value: 'add' },
37
+ { label: 'Remove an item', value: 'remove' },
38
+ { label: 'Finish editing', value: 'done' },
39
+ ],
38
40
  })
39
- if (newItem) {
40
- updatedArray.push(newItem)
41
+ } catch (error) {
42
+ if (!(error instanceof PromptCancelledError)) throw error
43
+ // Dismissing the action menu finishes editing, keeping the changes.
44
+ break
45
+ }
46
+
47
+ try {
48
+ if (action === 'add') {
49
+ const newItem = await promptText({
50
+ message: withBackHint('Enter the new item:'),
51
+ })
52
+ if (newItem) {
53
+ updatedArray.push(newItem)
54
+ }
55
+ } else if (action === 'remove') {
56
+ const index = await promptNumber({
57
+ message: withBackHint('Enter the index of the item to remove:'),
58
+ validate: (value) =>
59
+ value > 0 && value <= updatedArray.length
60
+ ? undefined
61
+ : 'Invalid index',
62
+ })
63
+ updatedArray.splice(index - 1, 1)
41
64
  }
42
- } else if (action === 'remove') {
43
- const index = await promptNumber({
44
- message: 'Enter the index of the item to remove:',
45
- validate: (value) =>
46
- value > 0 && value <= updatedArray.length
47
- ? undefined
48
- : 'Invalid index',
49
- })
50
- updatedArray.splice(index - 1, 1)
65
+ } catch (error) {
66
+ if (!(error instanceof PromptCancelledError)) throw error
67
+ // Dismissing an inner prompt returns to the action menu.
51
68
  }
52
69
  } while (action !== 'done')
53
70