@seamapi/cli 0.20.0 → 0.22.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/README.md +39 -4
- package/bin/cli.js +26 -6
- package/bin/cli.js.map +1 -1
- package/lib/args/parse.d.ts +9 -0
- package/lib/args/parse.js +42 -2
- package/lib/args/parse.js.map +1 -1
- package/lib/args/validate.d.ts +10 -0
- package/lib/args/validate.js +23 -0
- package/lib/args/validate.js.map +1 -1
- package/lib/auth/operations.d.ts +7 -20
- package/lib/auth/operations.js +13 -38
- package/lib/auth/operations.js.map +1 -1
- package/lib/commands/local/login.js +4 -12
- package/lib/commands/local/login.js.map +1 -1
- package/lib/commands/local/select-endpoint.js +10 -7
- package/lib/commands/local/select-endpoint.js.map +1 -1
- package/lib/commands/local/select-workspace.js +12 -4
- package/lib/commands/local/select-workspace.js.map +1 -1
- package/lib/commands/registry.d.ts +11 -0
- package/lib/commands/registry.js +11 -0
- package/lib/commands/registry.js.map +1 -1
- package/lib/commands/spec.d.ts +12 -0
- package/lib/commands/spec.js +16 -0
- package/lib/commands/spec.js.map +1 -1
- package/lib/context.d.ts +5 -4
- package/lib/context.js +23 -8
- package/lib/context.js.map +1 -1
- package/lib/interactions/endpoint-selection.js +5 -23
- package/lib/interactions/endpoint-selection.js.map +1 -1
- package/lib/overrides.d.ts +20 -0
- package/lib/overrides.js +23 -0
- package/lib/overrides.js.map +1 -0
- package/lib/render/help.js +20 -1
- package/lib/render/help.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
- package/src/bin/cli.ts +31 -6
- package/src/lib/args/parse.ts +47 -2
- package/src/lib/args/validate.ts +37 -0
- package/src/lib/auth/operations.ts +13 -54
- package/src/lib/commands/local/login.ts +4 -15
- package/src/lib/commands/local/select-endpoint.ts +11 -7
- package/src/lib/commands/local/select-workspace.ts +13 -4
- package/src/lib/commands/registry.ts +20 -0
- package/src/lib/commands/spec.ts +31 -0
- package/src/lib/context.ts +30 -12
- package/src/lib/interactions/endpoint-selection.ts +5 -29
- package/src/lib/overrides.ts +32 -0
- package/src/lib/render/help.ts +21 -1
- package/src/lib/version.ts +1 -1
|
@@ -18,6 +18,8 @@ export interface Command {
|
|
|
18
18
|
/** Everything a single run of a command was given. */
|
|
19
19
|
export interface Invocation {
|
|
20
20
|
path: string[];
|
|
21
|
+
/** The value written after the command path, when the command takes one. */
|
|
22
|
+
positional?: string | undefined;
|
|
21
23
|
/** Params given as arguments, held to what the command accepts. */
|
|
22
24
|
argParams: Record<string, unknown>;
|
|
23
25
|
/** Params piped in as JSON, passed through as given. */
|
|
@@ -49,6 +51,15 @@ export declare const localCommandDefinitions: CommandDefinition[];
|
|
|
49
51
|
* commands before any definitions are loaded.
|
|
50
52
|
*/
|
|
51
53
|
export declare const findLocalCommand: (path: string[]) => Command | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* The local command the given words invoke with a value after its path, e.g.,
|
|
56
|
+
* `select endpoint` for `select endpoint https://connect.getseam.com`, or
|
|
57
|
+
* `undefined` when the words are not a command taking one.
|
|
58
|
+
*
|
|
59
|
+
* Only commands declaring a positional match, so a stray word after any other
|
|
60
|
+
* command stays what it has always been: no command at all.
|
|
61
|
+
*/
|
|
62
|
+
export declare const findLocalCommandTakingPositional: (words: string[]) => Command | undefined;
|
|
52
63
|
/** Parameter names a command accepts as arguments. */
|
|
53
64
|
export declare const acceptedParamsOf: (definition: CommandDefinition) => Set<string>;
|
|
54
65
|
export declare const buildRegistry: (blueprint: ApiBlueprint) => CommandRegistry;
|
package/lib/commands/registry.js
CHANGED
|
@@ -37,6 +37,17 @@ export const localCommandDefinitions = localCommands
|
|
|
37
37
|
* commands before any definitions are loaded.
|
|
38
38
|
*/
|
|
39
39
|
export const findLocalCommand = (path) => localCommands.find((command) => isSamePath(command.definition.path, path));
|
|
40
|
+
/**
|
|
41
|
+
* The local command the given words invoke with a value after its path, e.g.,
|
|
42
|
+
* `select endpoint` for `select endpoint https://connect.getseam.com`, or
|
|
43
|
+
* `undefined` when the words are not a command taking one.
|
|
44
|
+
*
|
|
45
|
+
* Only commands declaring a positional match, so a stray word after any other
|
|
46
|
+
* command stays what it has always been: no command at all.
|
|
47
|
+
*/
|
|
48
|
+
export const findLocalCommandTakingPositional = (words) => localCommands.find(({ definition }) => definition.positional != null &&
|
|
49
|
+
words.length === definition.path.length + 1 &&
|
|
50
|
+
isSamePath(definition.path, words.slice(0, -1)));
|
|
40
51
|
/** Parameter names a command accepts as arguments. */
|
|
41
52
|
export const acceptedParamsOf = (definition) => new Set(definition.flags.flatMap(({ long }) => long == null ? [] : [toParameterName(long)]));
|
|
42
53
|
export const buildRegistry = (blueprint) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/commands/registry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAInD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAA;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAA;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAGL,cAAc,EACd,UAAU,GACX,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/commands/registry.ts"],"names":[],"mappings":"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"}
|
package/lib/commands/spec.d.ts
CHANGED
|
@@ -15,6 +15,16 @@ export interface CommandFlag {
|
|
|
15
15
|
* Whether a command is part of the CLI itself or calls a Seam API endpoint.
|
|
16
16
|
*/
|
|
17
17
|
export type CommandKind = 'cli' | 'api';
|
|
18
|
+
/**
|
|
19
|
+
* A value written after the command rather than behind a flag, e.g., the URL
|
|
20
|
+
* in `seam select endpoint <url>`. At most one, always required: it is the
|
|
21
|
+
* one thing the command is about.
|
|
22
|
+
*/
|
|
23
|
+
export interface CommandPositional {
|
|
24
|
+
/** Name shown in the usage line, without the angle brackets. */
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
}
|
|
18
28
|
export interface CommandDefinition {
|
|
19
29
|
path: string[];
|
|
20
30
|
kind: CommandKind;
|
|
@@ -23,6 +33,8 @@ export interface CommandDefinition {
|
|
|
23
33
|
/** Longer prose about the command, empty when there is none to add. */
|
|
24
34
|
description: string;
|
|
25
35
|
flags: CommandFlag[];
|
|
36
|
+
/** The value the command takes after its path, when it takes one. */
|
|
37
|
+
positional?: CommandPositional;
|
|
26
38
|
}
|
|
27
39
|
export interface Subcommand {
|
|
28
40
|
name: string;
|
package/lib/commands/spec.js
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { firstSentence, toPlainText } from '../render/text.js';
|
|
2
2
|
export const globalFlags = [
|
|
3
|
+
{
|
|
4
|
+
long: 'endpoint',
|
|
5
|
+
short: null,
|
|
6
|
+
description: 'Seam API endpoint to run this one command against, instead of the selected one.',
|
|
7
|
+
values: [],
|
|
8
|
+
takesValue: true,
|
|
9
|
+
isRequired: false,
|
|
10
|
+
},
|
|
3
11
|
{
|
|
4
12
|
long: 'help',
|
|
5
13
|
short: 'h',
|
|
@@ -56,6 +64,14 @@ export const globalFlags = [
|
|
|
56
64
|
takesValue: false,
|
|
57
65
|
isRequired: false,
|
|
58
66
|
},
|
|
67
|
+
{
|
|
68
|
+
long: 'workspace-id',
|
|
69
|
+
short: null,
|
|
70
|
+
description: 'Workspace to run this one command against, instead of the selected one.',
|
|
71
|
+
values: [],
|
|
72
|
+
takesValue: true,
|
|
73
|
+
isRequired: false,
|
|
74
|
+
},
|
|
59
75
|
];
|
|
60
76
|
export const flagTokens = (flag) => {
|
|
61
77
|
const tokens = [];
|
package/lib/commands/spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/lib/commands/spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/lib/commands/spec.ts"],"names":[],"mappings":"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"}
|
package/lib/context.d.ts
CHANGED
|
@@ -5,13 +5,14 @@ import type { SeamApi } from './http/api.js';
|
|
|
5
5
|
import type { Output } from './output/output.js';
|
|
6
6
|
export declare const defaultEndpoint = "https://connect.getseam.com";
|
|
7
7
|
/** Where a resolved value came from, e.g., to refuse writes the env shadows. */
|
|
8
|
-
export type ValueSource = 'env' | 'config' | 'default';
|
|
8
|
+
export type ValueSource = 'flag' | 'env' | 'config' | 'default';
|
|
9
9
|
/**
|
|
10
10
|
* The endpoint, token, and workspace requests are made with.
|
|
11
11
|
*
|
|
12
|
-
* Resolved in one place so the precedence rule exists once:
|
|
13
|
-
*
|
|
14
|
-
*
|
|
12
|
+
* Resolved in one place so the precedence rule exists once: a flag given for
|
|
13
|
+
* the one command wins over an environment variable, which wins over the
|
|
14
|
+
* stored value, and the endpoint falls back to Seam. The source tags say
|
|
15
|
+
* where each value came from.
|
|
15
16
|
*/
|
|
16
17
|
export interface AuthContext {
|
|
17
18
|
endpoint: string;
|
package/lib/context.js
CHANGED
|
@@ -1,27 +1,42 @@
|
|
|
1
1
|
import { getConfigStore } from './config/index.js';
|
|
2
2
|
import { getEndpointFromEnv, getTokenFromEnv, getWorkspaceIdFromEnv, } from './env.js';
|
|
3
|
+
import { getAuthOverrides } from './overrides.js';
|
|
3
4
|
export const defaultEndpoint = 'https://connect.getseam.com';
|
|
4
5
|
export const resolveAuth = (config = getConfigStore()) => {
|
|
6
|
+
const { endpoint: flagEndpoint, workspaceId: flagWorkspaceId } = getAuthOverrides();
|
|
5
7
|
const envEndpoint = getEndpointFromEnv();
|
|
6
8
|
// Configs written before the endpoint was called one still hold it under
|
|
7
9
|
// `server`, so fall back to that key rather than silently resetting them.
|
|
8
10
|
const storedEndpoint = config.get('endpoint') ?? config.get('server');
|
|
9
|
-
const endpoint =
|
|
11
|
+
const endpoint = flagEndpoint ??
|
|
12
|
+
envEndpoint ??
|
|
13
|
+
(typeof storedEndpoint === 'string' ? storedEndpoint : null);
|
|
10
14
|
const envToken = getTokenFromEnv();
|
|
15
|
+
// The token is stored per endpoint, so an overridden endpoint is read with
|
|
16
|
+
// the token belonging to it rather than the one it replaced.
|
|
11
17
|
const storedToken = readString(config.get(`${endpoint ?? defaultEndpoint}.pat`));
|
|
12
18
|
const envWorkspaceId = getWorkspaceIdFromEnv();
|
|
13
19
|
const storedWorkspaceId = readString(config.get('current_workspace_id'));
|
|
20
|
+
const workspaceId = flagWorkspaceId ?? envWorkspaceId ?? storedWorkspaceId;
|
|
14
21
|
return {
|
|
15
22
|
endpoint: endpoint ?? defaultEndpoint,
|
|
16
|
-
endpointSource:
|
|
23
|
+
endpointSource: flagEndpoint != null
|
|
24
|
+
? 'flag'
|
|
25
|
+
: envEndpoint != null
|
|
26
|
+
? 'env'
|
|
27
|
+
: endpoint != null
|
|
28
|
+
? 'config'
|
|
29
|
+
: 'default',
|
|
17
30
|
token: envToken ?? storedToken,
|
|
18
31
|
tokenSource: envToken != null ? 'env' : storedToken != null ? 'config' : null,
|
|
19
|
-
workspaceId
|
|
20
|
-
workspaceIdSource:
|
|
21
|
-
? '
|
|
22
|
-
:
|
|
23
|
-
? '
|
|
24
|
-
: null
|
|
32
|
+
workspaceId,
|
|
33
|
+
workspaceIdSource: flagWorkspaceId != null
|
|
34
|
+
? 'flag'
|
|
35
|
+
: envWorkspaceId != null
|
|
36
|
+
? 'env'
|
|
37
|
+
: storedWorkspaceId != null
|
|
38
|
+
? 'config'
|
|
39
|
+
: null,
|
|
25
40
|
};
|
|
26
41
|
};
|
|
27
42
|
const readString = (value) => {
|
package/lib/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/lib/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/lib/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,qBAAqB,GACtB,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,MAAM,CAAC,MAAM,eAAe,GAAG,6BAA6B,CAAA;AAsB5D,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,SAAsB,cAAc,EAAE,EACzB,EAAE;IACf,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,GAC5D,gBAAgB,EAAE,CAAA;IAEpB,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAA;IACxC,yEAAyE;IACzE,0EAA0E;IAC1E,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACrE,MAAM,QAAQ,GACZ,YAAY;QACZ,WAAW;QACX,CAAC,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IAE9D,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAA;IAClC,2EAA2E;IAC3E,6DAA6D;IAC7D,MAAM,WAAW,GAAG,UAAU,CAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,IAAI,eAAe,MAAM,CAAC,CACjD,CAAA;IAED,MAAM,cAAc,GAAG,qBAAqB,EAAE,CAAA;IAC9C,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;IACxE,MAAM,WAAW,GAAG,eAAe,IAAI,cAAc,IAAI,iBAAiB,CAAA;IAE1E,OAAO;QACL,QAAQ,EAAE,QAAQ,IAAI,eAAe;QACrC,cAAc,EACZ,YAAY,IAAI,IAAI;YAClB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,WAAW,IAAI,IAAI;gBACnB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,QAAQ,IAAI,IAAI;oBAChB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,SAAS;QACnB,KAAK,EAAE,QAAQ,IAAI,WAAW;QAC9B,WAAW,EACT,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;QAClE,WAAW;QACX,iBAAiB,EACf,eAAe,IAAI,IAAI;YACrB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,cAAc,IAAI,IAAI;gBACtB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,iBAAiB,IAAI,IAAI;oBACzB,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,IAAI;KACf,CAAA;AACH,CAAC,CAAA;AAgBD,MAAM,UAAU,GAAG,CAAC,KAAc,EAAiB,EAAE;IACnD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAE1C,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAEjC,OAAO,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAA;AAClD,CAAC,CAAA"}
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { assertMutable, selectEndpoint, selectFakeEndpoint, } from '../auth/operations.js';
|
|
1
|
+
import { assertMutable, selectEndpoint } from '../auth/operations.js';
|
|
3
2
|
import { getConfigStore } from '../config/index.js';
|
|
4
3
|
import { resolveAuth } from '../context.js';
|
|
5
4
|
import { getOutput } from '../output/get-output.js';
|
|
6
|
-
import { promptAutocomplete
|
|
5
|
+
import { promptAutocomplete } from '../prompt.js';
|
|
7
6
|
export async function interactForEndpointSelection() {
|
|
8
7
|
const config = getConfigStore();
|
|
9
8
|
assertMutable(resolveAuth(config), 'endpoint', 'select an endpoint');
|
|
10
|
-
const endpoints = [
|
|
11
|
-
'http://localhost:3020',
|
|
12
|
-
'https://connect.getseam.com',
|
|
13
|
-
'https://fakeseamconnect.seam.vc',
|
|
14
|
-
];
|
|
9
|
+
const endpoints = ['http://localhost:3020', 'https://connect.getseam.com'];
|
|
15
10
|
// Searchable, as selecting a device or a command is.
|
|
16
11
|
const endpoint = await promptAutocomplete({
|
|
17
12
|
message: 'Select an endpoint:',
|
|
@@ -20,20 +15,7 @@ export async function interactForEndpointSelection() {
|
|
|
20
15
|
value: endpoint,
|
|
21
16
|
})),
|
|
22
17
|
});
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
let userUrlSeed = await promptText({
|
|
26
|
-
message: 'You can input a custom endpoint URL or leave this field empty to use a new fakeserver.',
|
|
27
|
-
});
|
|
28
|
-
if (userUrlSeed.trim().length === 0) {
|
|
29
|
-
userUrlSeed = randomBytes(5).toString('hex');
|
|
30
|
-
}
|
|
31
|
-
selectFakeEndpoint({ urlSeed: userUrlSeed, config });
|
|
32
|
-
output.info(`PAT set to use fakeseamconnect with "seam_apikey1_token"`);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
selectEndpoint(endpoint, config);
|
|
36
|
-
}
|
|
37
|
-
output.info(`Endpoint set to ${endpoint}`);
|
|
18
|
+
selectEndpoint(endpoint, config);
|
|
19
|
+
getOutput().info(`Endpoint set to ${endpoint}`);
|
|
38
20
|
}
|
|
39
21
|
//# sourceMappingURL=endpoint-selection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoint-selection.js","sourceRoot":"","sources":["../../src/lib/interactions/endpoint-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"endpoint-selection.js","sourceRoot":"","sources":["../../src/lib/interactions/endpoint-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,MAAM,CAAC,KAAK,UAAU,4BAA4B;IAChD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAA;IAEpE,MAAM,SAAS,GAAG,CAAC,uBAAuB,EAAE,6BAA6B,CAAC,CAAA;IAE1E,qDAAqD;IACrD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC;QACxC,OAAO,EAAE,qBAAqB;QAC9B,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YACpC,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;KACJ,CAAC,CAAA;IAEF,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAChC,SAAS,EAAE,CAAC,IAAI,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAA;AACjD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The endpoint and workspace may be overridden for a single command.
|
|
3
|
+
*
|
|
4
|
+
* `--endpoint` and `--workspace-id` change what one invocation resolves to
|
|
5
|
+
* and are never stored: only `seam select endpoint` and `seam select
|
|
6
|
+
* workspace` write those settings. They are held here rather than threaded
|
|
7
|
+
* through every call because auth resolves ambiently, exactly as the
|
|
8
|
+
* environment variables they shadow do (see `env.ts`).
|
|
9
|
+
*
|
|
10
|
+
* Set once from the parsed arguments before anything resolves auth, and
|
|
11
|
+
* reset between tests.
|
|
12
|
+
*/
|
|
13
|
+
export interface AuthOverrides {
|
|
14
|
+
endpoint: string | null;
|
|
15
|
+
workspaceId: string | null;
|
|
16
|
+
}
|
|
17
|
+
export declare const getAuthOverrides: () => AuthOverrides;
|
|
18
|
+
export declare const setAuthOverrides: (next: AuthOverrides) => void;
|
|
19
|
+
/** Drop the overrides, e.g., between tests sharing a process. */
|
|
20
|
+
export declare const resetAuthOverrides: () => void;
|
package/lib/overrides.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The endpoint and workspace may be overridden for a single command.
|
|
3
|
+
*
|
|
4
|
+
* `--endpoint` and `--workspace-id` change what one invocation resolves to
|
|
5
|
+
* and are never stored: only `seam select endpoint` and `seam select
|
|
6
|
+
* workspace` write those settings. They are held here rather than threaded
|
|
7
|
+
* through every call because auth resolves ambiently, exactly as the
|
|
8
|
+
* environment variables they shadow do (see `env.ts`).
|
|
9
|
+
*
|
|
10
|
+
* Set once from the parsed arguments before anything resolves auth, and
|
|
11
|
+
* reset between tests.
|
|
12
|
+
*/
|
|
13
|
+
const noOverrides = { endpoint: null, workspaceId: null };
|
|
14
|
+
let overrides = noOverrides;
|
|
15
|
+
export const getAuthOverrides = () => overrides;
|
|
16
|
+
export const setAuthOverrides = (next) => {
|
|
17
|
+
overrides = next;
|
|
18
|
+
};
|
|
19
|
+
/** Drop the overrides, e.g., between tests sharing a process. */
|
|
20
|
+
export const resetAuthOverrides = () => {
|
|
21
|
+
overrides = noOverrides;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../src/lib/overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,MAAM,WAAW,GAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;AAExE,IAAI,SAAS,GAAkB,WAAW,CAAA;AAE1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAkB,EAAE,CAAC,SAAS,CAAA;AAE9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAmB,EAAQ,EAAE;IAC5D,SAAS,GAAG,IAAI,CAAA;AAClB,CAAC,CAAA;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAS,EAAE;IAC3C,SAAS,GAAG,WAAW,CAAA;AACzB,CAAC,CAAA"}
|
package/lib/render/help.js
CHANGED
|
@@ -101,12 +101,31 @@ const commandSectionsForGroup = (group, isRoot) => {
|
|
|
101
101
|
const commandSections = (command, spec) => {
|
|
102
102
|
const name = ['seam', ...command.path].join(' ');
|
|
103
103
|
const hasFlags = command.flags.length > 0;
|
|
104
|
+
const { positional } = command;
|
|
104
105
|
return [
|
|
105
106
|
{
|
|
106
107
|
header: name,
|
|
107
108
|
content: [command.title, command.description].filter((line) => line !== ''),
|
|
108
109
|
},
|
|
109
|
-
{
|
|
110
|
+
{
|
|
111
|
+
header: 'Usage',
|
|
112
|
+
content: positional == null
|
|
113
|
+
? `${name} [options]`
|
|
114
|
+
: `${name} <${positional.name}> [options]`,
|
|
115
|
+
},
|
|
116
|
+
...(positional == null
|
|
117
|
+
? []
|
|
118
|
+
: [
|
|
119
|
+
{
|
|
120
|
+
header: 'Arguments',
|
|
121
|
+
content: [
|
|
122
|
+
{
|
|
123
|
+
name: `{underline <${positional.name}>}`,
|
|
124
|
+
summary: positional.description,
|
|
125
|
+
},
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
]),
|
|
110
129
|
// The command's own parameters are what the request is made of, so keep
|
|
111
130
|
// them apart from the options every seam command takes.
|
|
112
131
|
...(hasFlags ? [optionSection(command.flags, 'Parameters')] : []),
|
package/lib/render/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/lib/render/help.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/lib/render/help.ts"],"names":[],"mappings":"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"}
|
package/lib/version.d.ts
CHANGED
package/lib/version.js
CHANGED
package/package.json
CHANGED
package/src/bin/cli.ts
CHANGED
|
@@ -8,9 +8,10 @@ import {
|
|
|
8
8
|
cliFlags,
|
|
9
9
|
getInteractivity,
|
|
10
10
|
parseCliArgs,
|
|
11
|
+
toAuthOverrides,
|
|
11
12
|
toParameterName,
|
|
12
13
|
} from 'lib/args/parse.js'
|
|
13
|
-
import { assertKnownArgs } from 'lib/args/validate.js'
|
|
14
|
+
import { assertKnownArgs, assertNoAuthOverrides } from 'lib/args/validate.js'
|
|
14
15
|
import { getApiBlueprint } from 'lib/blueprint/index.js'
|
|
15
16
|
import { printCompletion } from 'lib/commands/local/completion.js'
|
|
16
17
|
import { runWizard } from 'lib/commands/local/wizard.js'
|
|
@@ -18,6 +19,7 @@ import {
|
|
|
18
19
|
acceptedParamsOf,
|
|
19
20
|
buildRegistry,
|
|
20
21
|
findLocalCommand,
|
|
22
|
+
findLocalCommandTakingPositional,
|
|
21
23
|
} from 'lib/commands/registry.js'
|
|
22
24
|
import { getConfigStore } from 'lib/config/index.js'
|
|
23
25
|
import { type CliContext, resolveAuth } from 'lib/context.js'
|
|
@@ -29,6 +31,7 @@ import { getOutput, setOutput } from 'lib/output/get-output.js'
|
|
|
29
31
|
import { createOutput } from 'lib/output/output.js'
|
|
30
32
|
import { readStdinJson } from 'lib/output/read-stdin-json.js'
|
|
31
33
|
import { resolveOutputFormat } from 'lib/output/resolve-output-format.js'
|
|
34
|
+
import { setAuthOverrides } from 'lib/overrides.js'
|
|
32
35
|
import { canPrompt } from 'lib/prompt.js'
|
|
33
36
|
import {
|
|
34
37
|
completionShells,
|
|
@@ -41,6 +44,21 @@ async function cli(args: ParsedArgs, argv: string[]) {
|
|
|
41
44
|
const config = getConfigStore()
|
|
42
45
|
const output = getOutput()
|
|
43
46
|
|
|
47
|
+
// Scoped to this one command, and read wherever auth resolves, so they are
|
|
48
|
+
// in place before anything asks what the endpoint or the workspace is.
|
|
49
|
+
const authOverrides = toAuthOverrides(args)
|
|
50
|
+
setAuthOverrides(authOverrides)
|
|
51
|
+
|
|
52
|
+
// A command may take one value after its path, e.g., the URL in 'seam
|
|
53
|
+
// select endpoint <url>'. Split it off before the path is normalized, or
|
|
54
|
+
// lowercasing the path would rewrite the value along with it.
|
|
55
|
+
const commandWords = args._.map(toCommandWord)
|
|
56
|
+
const commandTakingPositional = findLocalCommandTakingPositional(commandWords)
|
|
57
|
+
const positional =
|
|
58
|
+
commandTakingPositional == null ? undefined : String(args._.at(-1))
|
|
59
|
+
args._ =
|
|
60
|
+
commandTakingPositional == null ? commandWords : commandWords.slice(0, -1)
|
|
61
|
+
|
|
44
62
|
const update = args['update'] === true
|
|
45
63
|
|
|
46
64
|
const helpFlag = args['help'] ?? args['h']
|
|
@@ -75,8 +93,6 @@ async function cli(args: ParsedArgs, argv: string[]) {
|
|
|
75
93
|
return
|
|
76
94
|
}
|
|
77
95
|
|
|
78
|
-
args._ = args._.map(toCommandWord)
|
|
79
|
-
|
|
80
96
|
// Argument keys name parameters however they are written, so normalize each
|
|
81
97
|
// one to the name the API gives it. Replace the key rather than adding the
|
|
82
98
|
// normalized form alongside it, or an argument would be sent twice: once as
|
|
@@ -121,6 +137,12 @@ async function cli(args: ParsedArgs, argv: string[]) {
|
|
|
121
137
|
|
|
122
138
|
const localCommand = findLocalCommand(args._)
|
|
123
139
|
|
|
140
|
+
// Before the login gate, so a command that selects reports the flag it
|
|
141
|
+
// cannot take rather than whatever the flag pointed it at.
|
|
142
|
+
if (localCommand != null) {
|
|
143
|
+
assertNoAuthOverrides(localCommand.definition, authOverrides)
|
|
144
|
+
}
|
|
145
|
+
|
|
124
146
|
// Commands declared not to need a token bypass the login gate. A partial
|
|
125
147
|
// path keeps the historical rule: only login and select endpoint may be
|
|
126
148
|
// reached logged out.
|
|
@@ -185,13 +207,14 @@ async function cli(args: ParsedArgs, argv: string[]) {
|
|
|
185
207
|
|
|
186
208
|
// Check the arguments before the command acts on any of them, so a
|
|
187
209
|
// mistake is reported rather than half applied.
|
|
210
|
+
assertNoAuthOverrides(command.definition, authOverrides)
|
|
188
211
|
assertKnownArgs(argParams, selectedCommand, {
|
|
189
212
|
accepted: acceptedParamsOf(command.definition),
|
|
190
213
|
isLocal: findLocalCommand(selectedCommand) != null,
|
|
191
214
|
})
|
|
192
215
|
|
|
193
216
|
const result = await command.execute(
|
|
194
|
-
{ path: selectedCommand, argParams, stdinParams, args, argv },
|
|
217
|
+
{ path: selectedCommand, positional, argParams, stdinParams, args, argv },
|
|
195
218
|
ctx,
|
|
196
219
|
)
|
|
197
220
|
|
|
@@ -204,8 +227,10 @@ async function cli(args: ParsedArgs, argv: string[]) {
|
|
|
204
227
|
}
|
|
205
228
|
}
|
|
206
229
|
|
|
207
|
-
|
|
208
|
-
|
|
230
|
+
// minimist reads a numeric word as a number, so a command path is only a
|
|
231
|
+
// path once every word is one.
|
|
232
|
+
const toCommandWord = (arg: string | number): string =>
|
|
233
|
+
String(arg).toLowerCase().replace(/_/g, '-')
|
|
209
234
|
|
|
210
235
|
const run = async (argv: string[]) => {
|
|
211
236
|
if (argv[0] === 'wizard') {
|
package/src/lib/args/parse.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import parseArgs, { type ParsedArgs } from 'minimist'
|
|
2
2
|
|
|
3
|
+
import type { AuthOverrides } from 'lib/overrides.js'
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* How the CLI should behave when properties are not given as arguments.
|
|
5
7
|
*
|
|
@@ -29,12 +31,14 @@ export const interactivityFlags: string[] = [
|
|
|
29
31
|
*/
|
|
30
32
|
export const cliFlags: string[] = [
|
|
31
33
|
...interactivityFlags,
|
|
34
|
+
'endpoint',
|
|
32
35
|
'h',
|
|
33
36
|
'help',
|
|
34
37
|
'json',
|
|
35
38
|
'remote_api_defs',
|
|
36
39
|
'update',
|
|
37
40
|
'version',
|
|
41
|
+
'workspace_id',
|
|
38
42
|
]
|
|
39
43
|
|
|
40
44
|
export interface ParseCliArgsOptions {
|
|
@@ -53,8 +57,18 @@ export const parseCliArgs = (
|
|
|
53
57
|
): ParsedArgs =>
|
|
54
58
|
parseArgs(argv, {
|
|
55
59
|
// A page cursor and a code are opaque even before the endpoint's own
|
|
56
|
-
// parameter types are known, so always keep them exactly as given.
|
|
57
|
-
|
|
60
|
+
// parameter types are known, so always keep them exactly as given. The
|
|
61
|
+
// overrides are read as given for the same reason: a URL or an id is
|
|
62
|
+
// never a number, however it happens to be spelled.
|
|
63
|
+
string: [
|
|
64
|
+
'code',
|
|
65
|
+
'endpoint',
|
|
66
|
+
'page-cursor',
|
|
67
|
+
'page_cursor',
|
|
68
|
+
'workspace-id',
|
|
69
|
+
'workspace_id',
|
|
70
|
+
...stringKeys,
|
|
71
|
+
],
|
|
58
72
|
boolean: ['non-interactive', 'interactive', 'json'],
|
|
59
73
|
// Deliberately not aliased to -n, which is reserved for a future
|
|
60
74
|
// --dry-run flag.
|
|
@@ -76,6 +90,37 @@ export const toArgParams = (args: ParsedArgs): Record<string, unknown> => {
|
|
|
76
90
|
return argParams
|
|
77
91
|
}
|
|
78
92
|
|
|
93
|
+
/**
|
|
94
|
+
* The auth overrides among the parsed arguments.
|
|
95
|
+
*
|
|
96
|
+
* Both scope a single command: they change what it resolves to and are never
|
|
97
|
+
* stored, so they read like the environment variables they take precedence
|
|
98
|
+
* over, down to treating a blank value as though it were not given.
|
|
99
|
+
*/
|
|
100
|
+
export const toAuthOverrides = (args: ParsedArgs): AuthOverrides => {
|
|
101
|
+
// Read by the name each key names, as every other argument is, so the
|
|
102
|
+
// overrides may be written `--workspace-id`, `--workspace_id`, or in caps,
|
|
103
|
+
// and so they resolve whenever they are read.
|
|
104
|
+
const byName: Record<string, unknown> = {}
|
|
105
|
+
for (const [key, value] of Object.entries(args)) {
|
|
106
|
+
if (key === '_') continue
|
|
107
|
+
byName[toParameterName(key)] = value
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return {
|
|
111
|
+
endpoint: readOverride(byName['endpoint']),
|
|
112
|
+
workspaceId: readOverride(byName['workspace_id']),
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const readOverride = (value: unknown): string | null => {
|
|
117
|
+
if (typeof value !== 'string') return null
|
|
118
|
+
|
|
119
|
+
const trimmedValue = value.trim()
|
|
120
|
+
|
|
121
|
+
return trimmedValue === '' ? null : trimmedValue
|
|
122
|
+
}
|
|
123
|
+
|
|
79
124
|
export interface GetInteractivityOptions {
|
|
80
125
|
/**
|
|
81
126
|
* Whether there is a terminal to prompt on.
|