@seamapi/cli 0.15.0 → 0.16.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.
- package/lib/interact-for-server-selection.js +2 -1
- package/lib/interact-for-server-selection.js.map +1 -1
- package/lib/interact-for-workspace-id.js +3 -1
- package/lib/interact-for-workspace-id.js.map +1 -1
- package/lib/util/prompt.d.ts +9 -0
- package/lib/util/prompt.js +27 -1
- package/lib/util/prompt.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/src/lib/interact-for-server-selection.ts +2 -1
- package/src/lib/interact-for-workspace-id.ts +3 -1
- package/src/lib/util/prompt.ts +37 -1
- package/src/lib/version.ts +1 -1
|
@@ -13,7 +13,8 @@ export async function interactForServerSelection() {
|
|
|
13
13
|
];
|
|
14
14
|
const { server } = await prompt([
|
|
15
15
|
{
|
|
16
|
-
|
|
16
|
+
// Searchable, as selecting a device or a command is.
|
|
17
|
+
type: 'autocomplete',
|
|
17
18
|
name: 'server',
|
|
18
19
|
message: 'Select a server:',
|
|
19
20
|
choices: servers.map((server) => ({ title: server, value: server })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interact-for-server-selection.js","sourceRoot":"","sources":["../src/lib/interact-for-server-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,WAAW,GACZ,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,CAAC,CAAA;IAE1E,MAAM,OAAO,GAAG;QACd,uBAAuB;QACvB,6BAA6B;QAC7B,iCAAiC;KAClC,CAAA;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;QAC9B;YACE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"interact-for-server-selection.js","sourceRoot":"","sources":["../src/lib/interact-for-server-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,WAAW,GACZ,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,CAAC,KAAK,UAAU,0BAA0B;IAC9C,iBAAiB,CAAC,cAAc,EAAE,kBAAkB,EAAE,EAAE,iBAAiB,CAAC,CAAA;IAE1E,MAAM,OAAO,GAAG;QACd,uBAAuB;QACvB,6BAA6B;QAC7B,iCAAiC;KAClC,CAAA;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;QAC9B;YACE,qDAAqD;YACrD,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;SACrE;KACF,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC;YACjC;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa;gBACnB,OAAO,EACL,sFAAsF;aACzF;SACF,CAAC,CAAA;QAEF,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC9C,CAAC;QACD,iBAAiB,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,QAAQ,CAAC,CAAA;QAC3D,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,WAAW,0BAA0B,CAAC,CAAA;QACtE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAA;QACtD,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IACzE,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC9B,CAAC;IACD,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAA;IACrC,MAAM,CAAC,IAAI,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAA;AACxC,CAAC"}
|
|
@@ -16,7 +16,9 @@ export const interactForWorkspaceId = async (personalAccessToken) => {
|
|
|
16
16
|
const workspaces = await withLoading('Fetching workspaces...', () => seam.workspaces.list());
|
|
17
17
|
const { workspaceId } = await prompt({
|
|
18
18
|
name: 'workspaceId',
|
|
19
|
-
|
|
19
|
+
// Searchable, as selecting a device or a command is: an account may have
|
|
20
|
+
// more workspaces than fit on a screen.
|
|
21
|
+
type: 'autocomplete',
|
|
20
22
|
message: 'Select a workspace:',
|
|
21
23
|
choices: workspaces.map((workspace) => ({
|
|
22
24
|
title: workspace.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interact-for-workspace-id.js","sourceRoot":"","sources":["../src/lib/interact-for-workspace-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,mBAA4B,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,iBAAiB,CACf,iBAAiB,EACjB,qBAAqB,EAAE,EACvB,oBAAoB,CACrB,CAAA;IAED,MAAM,IAAI,GAAG,mBAAmB;QAC9B,CAAC,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,mBAAmB,EAAE;YACpE,QAAQ,EAAE,SAAS,EAAE;SACtB,CAAC;QACJ,CAAC,CAAC,MAAM,qBAAqB,EAAE,CAAA;IAEjC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAClE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CACvB,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC;QACnC,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"interact-for-workspace-id.js","sourceRoot":"","sources":["../src/lib/interact-for-workspace-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,mBAA4B,EAAE,EAAE;IAC3E,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,iBAAiB,CACf,iBAAiB,EACjB,qBAAqB,EAAE,EACvB,oBAAoB,CACrB,CAAA;IAED,MAAM,IAAI,GAAG,mBAAmB;QAC9B,CAAC,CAAC,wBAAwB,CAAC,uBAAuB,CAAC,mBAAmB,EAAE;YACpE,QAAQ,EAAE,SAAS,EAAE;SACtB,CAAC;QACJ,CAAC,CAAC,MAAM,qBAAqB,EAAE,CAAA;IAEjC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAClE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CACvB,CAAA;IACD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC;QACnC,IAAI,EAAE,aAAa;QACnB,yEAAyE;QACzE,wCAAwC;QACxC,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,qBAAqB;QAC9B,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAc,EAAE,EAAE,CAAC,CAAC;YAC3C,KAAK,EAAE,SAAS,CAAC,IAAI;YACrB,KAAK,EAAE,SAAS,CAAC,YAAY;YAC7B,WAAW,EAAE,SAAS,CAAC,YAAY;SACpC,CAAC,CAAC;KACJ,CAAC,CAAA;IAEF,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAA;QAC/C,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAA;AAC3B,CAAC,CAAA"}
|
package/lib/util/prompt.d.ts
CHANGED
|
@@ -15,3 +15,12 @@ export declare const canPrompt: () => boolean;
|
|
|
15
15
|
* so it must not end up in stdout when the CLI is piped.
|
|
16
16
|
*/
|
|
17
17
|
export declare const prompt: <T extends string = string>(questions: PromptObject<T> | Array<PromptObject<T>>, options?: Options) => Promise<Answers<T>>;
|
|
18
|
+
export interface SearchableChoice {
|
|
19
|
+
title?: string | undefined;
|
|
20
|
+
description?: string | undefined;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Filter choices by every whitespace separated term of the input, matched
|
|
24
|
+
* case insensitively against the title and the description.
|
|
25
|
+
*/
|
|
26
|
+
export declare const searchChoices: <Choice extends SearchableChoice>(input: string, choices: Choice[]) => Promise<Choice[]>;
|
package/lib/util/prompt.js
CHANGED
|
@@ -20,6 +20,32 @@ export const prompt = async (questions, options) => {
|
|
|
20
20
|
throw new NonInteractiveError('Cannot prompt without a terminal: pass the missing arguments, or pipe them in as JSON');
|
|
21
21
|
}
|
|
22
22
|
const questionList = Array.isArray(questions) ? questions : [questions];
|
|
23
|
-
return await prompts(questionList.map((question) => ({
|
|
23
|
+
return await prompts(questionList.map((question) => ({
|
|
24
|
+
...question,
|
|
25
|
+
// Search a list by any part of a name, rather than only by what it
|
|
26
|
+
// starts with, which is all prompts does for itself.
|
|
27
|
+
...(question.type === 'autocomplete' && question.suggest == null
|
|
28
|
+
? { suggest: searchChoices }
|
|
29
|
+
: {}),
|
|
30
|
+
stdout: process.stderr,
|
|
31
|
+
})), options);
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Filter choices by every whitespace separated term of the input, matched
|
|
35
|
+
* case insensitively against the title and the description.
|
|
36
|
+
*/
|
|
37
|
+
export const searchChoices = async (input, choices) => {
|
|
38
|
+
const terms = input
|
|
39
|
+
.toLowerCase()
|
|
40
|
+
.split(/\s+/)
|
|
41
|
+
.filter((term) => term.length > 0);
|
|
42
|
+
if (terms.length === 0)
|
|
43
|
+
return choices;
|
|
44
|
+
return choices.filter((choice) => {
|
|
45
|
+
const searchable = `${choice.title ?? ''} ${choice.description ?? ''}`
|
|
46
|
+
.toLowerCase()
|
|
47
|
+
.trim();
|
|
48
|
+
return terms.every((term) => searchable.includes(term));
|
|
49
|
+
});
|
|
24
50
|
};
|
|
25
51
|
//# sourceMappingURL=prompt.js.map
|
package/lib/util/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/util/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAiD,MAAM,SAAS,CAAA;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAEnD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAY,EAAE,CACrC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EACzB,SAAmD,EACnD,OAAiB,EACI,EAAE;IACvB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,mBAAmB,CAC3B,uFAAuF,CACxF,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAEvE,OAAO,MAAM,OAAO,CAClB,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/lib/util/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAAiD,MAAM,SAAS,CAAA;AAEhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAEnD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAY,EAAE,CACrC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAA;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EACzB,SAAmD,EACnD,OAAiB,EACI,EAAE;IACvB,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,mBAAmB,CAC3B,uFAAuF,CACxF,CAAA;IACH,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAEvE,OAAO,MAAM,OAAO,CAClB,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC9B,GAAG,QAAQ;QACX,mEAAmE;QACnE,qDAAqD;QACrD,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,cAAc,IAAI,QAAQ,CAAC,OAAO,IAAI,IAAI;YAC9D,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE;YAC5B,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC,EACH,OAAO,CACR,CAAA;AACH,CAAC,CAAA;AAOD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,KAAa,EACb,OAAiB,EACE,EAAE;IACrB,MAAM,KAAK,GAAG,KAAK;SAChB,WAAW,EAAE;SACb,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAEpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAA;IAEtC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;QAC/B,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,EAAE;aACnE,WAAW,EAAE;aACb,IAAI,EAAE,CAAA;QACT,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
package/lib/version.d.ts
CHANGED
package/lib/version.js
CHANGED
package/package.json
CHANGED
|
@@ -23,7 +23,8 @@ export async function interactForServerSelection() {
|
|
|
23
23
|
|
|
24
24
|
const { server } = await prompt([
|
|
25
25
|
{
|
|
26
|
-
|
|
26
|
+
// Searchable, as selecting a device or a command is.
|
|
27
|
+
type: 'autocomplete',
|
|
27
28
|
name: 'server',
|
|
28
29
|
message: 'Select a server:',
|
|
29
30
|
choices: servers.map((server) => ({ title: server, value: server })),
|
|
@@ -31,7 +31,9 @@ export const interactForWorkspaceId = async (personalAccessToken?: string) => {
|
|
|
31
31
|
)
|
|
32
32
|
const { workspaceId } = await prompt({
|
|
33
33
|
name: 'workspaceId',
|
|
34
|
-
|
|
34
|
+
// Searchable, as selecting a device or a command is: an account may have
|
|
35
|
+
// more workspaces than fit on a screen.
|
|
36
|
+
type: 'autocomplete',
|
|
35
37
|
message: 'Select a workspace:',
|
|
36
38
|
choices: workspaces.map((workspace: any) => ({
|
|
37
39
|
title: workspace.name,
|
package/src/lib/util/prompt.ts
CHANGED
|
@@ -32,7 +32,43 @@ export const prompt = async <T extends string = string>(
|
|
|
32
32
|
const questionList = Array.isArray(questions) ? questions : [questions]
|
|
33
33
|
|
|
34
34
|
return await prompts(
|
|
35
|
-
questionList.map((question) => ({
|
|
35
|
+
questionList.map((question) => ({
|
|
36
|
+
...question,
|
|
37
|
+
// Search a list by any part of a name, rather than only by what it
|
|
38
|
+
// starts with, which is all prompts does for itself.
|
|
39
|
+
...(question.type === 'autocomplete' && question.suggest == null
|
|
40
|
+
? { suggest: searchChoices }
|
|
41
|
+
: {}),
|
|
42
|
+
stdout: process.stderr,
|
|
43
|
+
})),
|
|
36
44
|
options,
|
|
37
45
|
)
|
|
38
46
|
}
|
|
47
|
+
|
|
48
|
+
export interface SearchableChoice {
|
|
49
|
+
title?: string | undefined
|
|
50
|
+
description?: string | undefined
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Filter choices by every whitespace separated term of the input, matched
|
|
55
|
+
* case insensitively against the title and the description.
|
|
56
|
+
*/
|
|
57
|
+
export const searchChoices = async <Choice extends SearchableChoice>(
|
|
58
|
+
input: string,
|
|
59
|
+
choices: Choice[],
|
|
60
|
+
): Promise<Choice[]> => {
|
|
61
|
+
const terms = input
|
|
62
|
+
.toLowerCase()
|
|
63
|
+
.split(/\s+/)
|
|
64
|
+
.filter((term) => term.length > 0)
|
|
65
|
+
|
|
66
|
+
if (terms.length === 0) return choices
|
|
67
|
+
|
|
68
|
+
return choices.filter((choice) => {
|
|
69
|
+
const searchable = `${choice.title ?? ''} ${choice.description ?? ''}`
|
|
70
|
+
.toLowerCase()
|
|
71
|
+
.trim()
|
|
72
|
+
return terms.every((term) => searchable.includes(term))
|
|
73
|
+
})
|
|
74
|
+
}
|
package/src/lib/version.ts
CHANGED