@codetreker/daynight 0.6.1 → 0.8.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.
- package/dist/cli/commands.js +2 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/context.d.ts +2 -0
- package/dist/cli/context.js +2 -0
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/prompts.d.ts +9 -0
- package/dist/cli/prompts.js +55 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/schema.d.ts +1 -0
- package/dist/cli/schema.js +7 -2
- package/dist/cli/schema.js.map +1 -1
- package/dist/commands/completion/bash.js +12 -5
- package/dist/commands/completion/bash.js.map +1 -1
- package/dist/commands/completion/command.js +14 -6
- package/dist/commands/completion/command.js.map +1 -1
- package/dist/commands/completion/definition.js +18 -4
- package/dist/commands/completion/definition.js.map +1 -1
- package/dist/commands/completion/setup.d.ts +21 -0
- package/dist/commands/completion/setup.js +210 -0
- package/dist/commands/completion/setup.js.map +1 -0
- package/dist/commands/completion/zsh.js +35 -6
- package/dist/commands/completion/zsh.js.map +1 -1
- package/dist/commands/project/command.js +24 -3
- package/dist/commands/project/command.js.map +1 -1
- package/dist/commands/project/definition.js +5 -4
- package/dist/commands/project/definition.js.map +1 -1
- package/dist/commands/review/command.js +7 -2
- package/dist/commands/review/command.js.map +1 -1
- package/dist/commands/review/config.js +10 -3
- package/dist/commands/review/config.js.map +1 -1
- package/dist/commands/review/repositories.d.ts +2 -0
- package/dist/commands/review/repositories.js +2 -2
- package/dist/commands/review/repositories.js.map +1 -1
- package/dist/commands/server/runtime.js +19 -3
- package/dist/commands/server/runtime.js.map +1 -1
- package/dist/commands/setup/command.d.ts +2 -0
- package/dist/commands/setup/command.js +21 -0
- package/dist/commands/setup/command.js.map +1 -0
- package/dist/commands/setup/definition.d.ts +2 -0
- package/dist/commands/setup/definition.js +12 -0
- package/dist/commands/setup/definition.js.map +1 -0
- package/dist/config/errors.d.ts +9 -0
- package/dist/config/errors.js +24 -0
- package/dist/config/errors.js.map +1 -0
- package/dist/config/files.d.ts +1 -1
- package/dist/config/files.js +36 -2
- package/dist/config/files.js.map +1 -1
- package/dist/config/server.js +2 -1
- package/dist/config/server.js.map +1 -1
- package/dist/config/setup.d.ts +10 -0
- package/dist/config/setup.js +142 -0
- package/dist/config/setup.js.map +1 -0
- package/package.json +2 -2
package/dist/cli/commands.js
CHANGED
|
@@ -3,7 +3,9 @@ import { reviewDefinition } from "../commands/review/definition.js";
|
|
|
3
3
|
import { projectDefinition } from "../commands/project/definition.js";
|
|
4
4
|
import { taskDefinition } from "../commands/task/definition.js";
|
|
5
5
|
import { updateDefinition } from "../commands/update/definition.js";
|
|
6
|
+
import { setupDefinition } from "../commands/setup/definition.js";
|
|
6
7
|
export const commands = [
|
|
8
|
+
{ ...setupDefinition, load: async () => ({ run: (await import("../commands/setup/command.js")).runSetupCommand }) },
|
|
7
9
|
{
|
|
8
10
|
...reviewDefinition,
|
|
9
11
|
load: async () => ({ run: (await import("../commands/review/command.js")).runReviewCommand }),
|
package/dist/cli/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAMlE,MAAM,CAAC,MAAM,QAAQ,GAAmC;IACtD,EAAE,GAAG,eAAe,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE;IACnH;QACE,GAAG,gBAAgB;QACnB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;KAC9F;IACD;QACE,GAAG,gBAAgB;QACnB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;KAC9F;IACD;QACE,GAAG,oBAAoB;QACvB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;KACtG;IACD;QACE,GAAG,iBAAiB;QACpB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;KAChG;IACD;QACE,GAAG,cAAc;QACjB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;KAC1F;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAsB;IAC5C,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,oDAAoD;IACjE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC;IAC/D,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE;QAC1E,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,EAAE,SAAS,EAAE;KAC7F;IACD,OAAO,EAAE,kDAAkD;CAC5D,CAAC"}
|
package/dist/cli/context.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CliPrompt } from "./prompts.js";
|
|
1
2
|
export type CliContext = {
|
|
2
3
|
version: string;
|
|
3
4
|
packageDirectory: string;
|
|
@@ -5,6 +6,7 @@ export type CliContext = {
|
|
|
5
6
|
workingDirectory: () => string;
|
|
6
7
|
stdout: (text: string) => void;
|
|
7
8
|
stderr: (text: string) => void;
|
|
9
|
+
prompt?: CliPrompt;
|
|
8
10
|
};
|
|
9
11
|
export type CliCommand = {
|
|
10
12
|
run: (args: readonly string[], context: CliContext) => Promise<void>;
|
package/dist/cli/context.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { homedir } from "node:os";
|
|
2
|
+
import { createTerminalPrompt } from "./prompts.js";
|
|
2
3
|
export class UsageError extends Error {
|
|
3
4
|
helpCommand;
|
|
4
5
|
constructor(message, helpCommand = "daynight --help") {
|
|
@@ -15,5 +16,6 @@ export const createCliContext = (version, packageDirectory) => ({
|
|
|
15
16
|
workingDirectory: process.cwd,
|
|
16
17
|
stdout: (text) => { process.stdout.write(text); },
|
|
17
18
|
stderr: (text) => { process.stderr.write(text); },
|
|
19
|
+
prompt: createTerminalPrompt(),
|
|
18
20
|
});
|
|
19
21
|
//# sourceMappingURL=context.js.map
|
package/dist/cli/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAiBpD,MAAM,OAAO,UAAW,SAAQ,KAAK;IACG,WAAW;IAAjD,YAAY,OAAe,EAAW,WAAW,GAAG,iBAAiB;QACnE,KAAK,CAAC,OAAO,CAAC,CAAC;2BADqB,WAAW;QAE/C,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,QAA4B,EAAW,EAAE,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC;AAE5G,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAE,gBAAwB,EAAc,EAAE,CAAC,CAAC;IAC1F,OAAO;IACP,gBAAgB;IAChB,aAAa,EAAE,OAAO;IACtB,gBAAgB,EAAE,OAAO,CAAC,GAAG;IAC7B,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,EAAE,oBAAoB,EAAE;CAC/B,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class SetupCancelledError extends Error {
|
|
2
|
+
constructor(options?: ErrorOptions);
|
|
3
|
+
}
|
|
4
|
+
export type CliPrompt = {
|
|
5
|
+
readonly isInteractive: boolean;
|
|
6
|
+
ask(question: string, signal: AbortSignal): Promise<string>;
|
|
7
|
+
close(): void;
|
|
8
|
+
};
|
|
9
|
+
export declare const createTerminalPrompt: () => CliPrompt;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
export class SetupCancelledError extends Error {
|
|
3
|
+
constructor(options) {
|
|
4
|
+
super("Setup cancelled.", options);
|
|
5
|
+
this.name = "SetupCancelledError";
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export const createTerminalPrompt = () => {
|
|
9
|
+
let terminal;
|
|
10
|
+
let closed = false;
|
|
11
|
+
const lines = [];
|
|
12
|
+
let waiting;
|
|
13
|
+
const cancel = () => {
|
|
14
|
+
closed = true;
|
|
15
|
+
waiting?.reject(new SetupCancelledError());
|
|
16
|
+
waiting = undefined;
|
|
17
|
+
};
|
|
18
|
+
return {
|
|
19
|
+
isInteractive: process.stdin.isTTY === true && process.stderr.isTTY === true,
|
|
20
|
+
ask: async (question, signal) => {
|
|
21
|
+
signal.throwIfAborted();
|
|
22
|
+
if (closed)
|
|
23
|
+
throw new SetupCancelledError();
|
|
24
|
+
if (terminal === undefined) {
|
|
25
|
+
terminal = createInterface({ input: process.stdin, output: process.stderr, terminal: true });
|
|
26
|
+
terminal.on("line", (line) => {
|
|
27
|
+
if (waiting === undefined)
|
|
28
|
+
lines.push(line);
|
|
29
|
+
else {
|
|
30
|
+
const pending = waiting;
|
|
31
|
+
waiting = undefined;
|
|
32
|
+
pending.resolve(line);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
terminal.on("close", cancel);
|
|
36
|
+
terminal.on("SIGINT", cancel);
|
|
37
|
+
}
|
|
38
|
+
process.stderr.write(question);
|
|
39
|
+
if (lines.length !== 0)
|
|
40
|
+
return lines.shift();
|
|
41
|
+
return new Promise((resolve, reject) => {
|
|
42
|
+
const abort = () => { waiting = undefined; reject(new SetupCancelledError({ cause: signal.reason })); };
|
|
43
|
+
waiting = {
|
|
44
|
+
resolve: (line) => { signal.removeEventListener("abort", abort); resolve(line); },
|
|
45
|
+
reject: (cause) => { signal.removeEventListener("abort", abort); reject(cause); },
|
|
46
|
+
};
|
|
47
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
48
|
+
if (signal.aborted)
|
|
49
|
+
abort();
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
close: () => { closed = true; terminal?.close(); },
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/schema.d.ts
CHANGED
package/dist/cli/schema.js
CHANGED
|
@@ -24,9 +24,14 @@ export const parseCommand = (definition, args, path = [definition.name], helpCom
|
|
|
24
24
|
return { kind: action, command: definition, path };
|
|
25
25
|
const values = [];
|
|
26
26
|
const options = new Map();
|
|
27
|
+
let optionsTerminated = false;
|
|
27
28
|
for (let index = 0; index < args.length; index++) {
|
|
28
29
|
const argument = args[index];
|
|
29
|
-
if (argument
|
|
30
|
+
if (!optionsTerminated && argument === "--" && definition.allowOptionsTerminator === true) {
|
|
31
|
+
optionsTerminated = true;
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
if (!optionsTerminated && argument.startsWith("-")) {
|
|
30
35
|
const separator = argument.indexOf("=");
|
|
31
36
|
const inline = separator !== -1;
|
|
32
37
|
const optionName = inline ? argument.slice(0, separator) : argument;
|
|
@@ -63,7 +68,7 @@ export const parseCommand = (definition, args, path = [definition.name], helpCom
|
|
|
63
68
|
const positional = definition.arguments?.[values.length];
|
|
64
69
|
if (positional === undefined)
|
|
65
70
|
throw new UsageError(`Unexpected ${definition.name} argument ${JSON.stringify(argument)}.`, helpCommand);
|
|
66
|
-
if (argument
|
|
71
|
+
if (argument === "")
|
|
67
72
|
throw new UsageError(`${definition.name} requires a ${positional.name} value.`, helpCommand);
|
|
68
73
|
if (positional.choices !== undefined && !positional.choices.includes(argument)) {
|
|
69
74
|
throw new UsageError(`Unknown ${positional.name} ${JSON.stringify(argument)}. Expected ${positional.choices.join(" or ")}.`, helpCommand);
|
package/dist/cli/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/cli/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/cli/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,7 @@ const commandCases = (root) => {
|
|
|
44
44
|
dn_option_empty=${shellArray(optionEmpty)}
|
|
45
45
|
dn_option_repeats=${shellArray(optionRepeats)}
|
|
46
46
|
dn_argument_count=${node.arguments?.length ?? 0}
|
|
47
|
+
dn_allow_terminator=${node.allowOptionsTerminator === true ? 1 : 0}
|
|
47
48
|
case "$dn_position" in
|
|
48
49
|
${choices.join("\n")}
|
|
49
50
|
esac
|
|
@@ -132,7 +133,7 @@ const runtime = String.raw `
|
|
|
132
133
|
local -a dn_option_values dn_option_actions dn_choices
|
|
133
134
|
local -a dn_option_empty dn_option_repeats dn_value_choices
|
|
134
135
|
local dn_node=0 dn_position=0 dn_argument_count=0 dn_count=0 dn_pending=''
|
|
135
|
-
local dn_value_option=-1 dn_value_match=-1 dn_inline=0
|
|
136
|
+
local dn_value_option=-1 dn_value_match=-1 dn_inline=0 dn_options_terminated=0 dn_allow_terminator=0
|
|
136
137
|
local dn_used='|' dn_tilde dn_current dn_word dn_index dn_match dn_option
|
|
137
138
|
local dn_candidate dn_prefix dn_fragment dn_trim dn_choice
|
|
138
139
|
local dn_name dn_value dn_inline_prefix
|
|
@@ -153,11 +154,16 @@ const runtime = String.raw `
|
|
|
153
154
|
@PREFIX@_schema
|
|
154
155
|
continue
|
|
155
156
|
fi
|
|
157
|
+
if ((!dn_options_terminated && dn_allow_terminator)) && [[ "$dn_word" == -- ]]; then
|
|
158
|
+
dn_options_terminated=1
|
|
159
|
+
((dn_count+=1))
|
|
160
|
+
continue
|
|
161
|
+
fi
|
|
156
162
|
dn_name="$dn_word"; dn_inline=0
|
|
157
163
|
if [[ "$dn_word" == -*=* ]]; then dn_name="@{dn_word%%=*}"; dn_inline=1; fi
|
|
158
164
|
dn_match=-1
|
|
159
165
|
for ((dn_option=0; dn_option<@{#dn_options[@]}; dn_option++)); do
|
|
160
|
-
if [[ "$dn_name" == "@{dn_options[dn_option]}" ]]; then dn_match=$dn_option; break; fi
|
|
166
|
+
if ((!dn_options_terminated)) && [[ "$dn_name" == "@{dn_options[dn_option]}" ]]; then dn_match=$dn_option; break; fi
|
|
161
167
|
done
|
|
162
168
|
if ((dn_match >= 0)); then
|
|
163
169
|
[[ "@{dn_option_repeats[dn_match]}" == 1 || "$dn_used" != *"|@{dn_option_ids[dn_match]}|"* ]] || return 0
|
|
@@ -175,7 +181,7 @@ const runtime = String.raw `
|
|
|
175
181
|
((dn_count+=1))
|
|
176
182
|
continue
|
|
177
183
|
fi
|
|
178
|
-
[[ "$dn_word" != -* ]] || return 0
|
|
184
|
+
((dn_options_terminated)) || [[ "$dn_word" != -* ]] || return 0
|
|
179
185
|
if ((@{#dn_children[@]} > 0)); then
|
|
180
186
|
dn_match=-1
|
|
181
187
|
for ((dn_option=0; dn_option<@{#dn_children[@]}; dn_option++)); do
|
|
@@ -188,7 +194,7 @@ const runtime = String.raw `
|
|
|
188
194
|
continue
|
|
189
195
|
fi
|
|
190
196
|
((dn_position < dn_argument_count)) || return 0
|
|
191
|
-
[[ "$dn_word"
|
|
197
|
+
[[ -n "$dn_word" ]] || return 0
|
|
192
198
|
if ((@{#dn_choices[@]} > 0)); then
|
|
193
199
|
dn_match=0
|
|
194
200
|
for dn_choice in "@{dn_choices[@]}"; do
|
|
@@ -226,7 +232,7 @@ const runtime = String.raw `
|
|
|
226
232
|
compopt -o filenames -o nospace 2>/dev/null || :
|
|
227
233
|
return 0
|
|
228
234
|
fi
|
|
229
|
-
if [[ "$dn_current" == -*=* ]]; then
|
|
235
|
+
if ((!dn_options_terminated)) && [[ "$dn_current" == -*=* ]]; then
|
|
230
236
|
dn_name="@{dn_current%%=*}"
|
|
231
237
|
for ((dn_option=0; dn_option<@{#dn_options[@]}; dn_option++)); do
|
|
232
238
|
[[ "$dn_name" == "@{dn_options[dn_option]}" ]] || continue
|
|
@@ -249,6 +255,7 @@ const runtime = String.raw `
|
|
|
249
255
|
for dn_candidate in "@{dn_children[@]}" "@{dn_choices[@]}"; do
|
|
250
256
|
[[ "$dn_candidate" == "$dn_current"* ]] && COMPREPLY+=("$dn_candidate")
|
|
251
257
|
done
|
|
258
|
+
((dn_options_terminated)) && return 0
|
|
252
259
|
for ((dn_option=0; dn_option<@{#dn_options[@]}; dn_option++)); do
|
|
253
260
|
[[ "@{dn_option_repeats[dn_option]}" == 1 || "$dn_used" != *"|@{dn_option_ids[dn_option]}|"* ]] || continue
|
|
254
261
|
[[ -z "@{dn_option_actions[dn_option]}" || "$dn_count" == 0 ]] || continue
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/commands/completion/bash.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../src/commands/completion/bash.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,16 +5,24 @@ import { renderBashCompletion } from "./bash.js";
|
|
|
5
5
|
import { renderZshCompletion } from "./zsh.js";
|
|
6
6
|
export const runCompletionCommand = async (args, context) => {
|
|
7
7
|
const commandPath = [commandTree.name, completionDefinition.name];
|
|
8
|
-
if (args.length === 0) {
|
|
9
|
-
context.stdout(renderCommandHelp(completionDefinition, commandPath));
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
8
|
const parsed = parseCommand(completionDefinition, args, commandPath);
|
|
13
9
|
if (parsed.kind !== "run") {
|
|
14
|
-
context.stdout(renderCommandHelp(
|
|
10
|
+
context.stdout(renderCommandHelp(parsed.command, parsed.path));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (parsed.command.name === "setup") {
|
|
14
|
+
const shell = parsed.options.get("--shell");
|
|
15
|
+
const rcFile = parsed.options.get("--rc-file");
|
|
16
|
+
const { setupCompletion } = await import("./setup.js");
|
|
17
|
+
const result = await setupCompletion({ shell, rcFile }, context);
|
|
18
|
+
for (const file of result.files)
|
|
19
|
+
context.stdout(`Completion configuration ${file.installed ? "installed" : "already present"}: ${file.path}\n`);
|
|
20
|
+
if (result.shell === "zsh")
|
|
21
|
+
context.stdout("Initialize compinit in the current shell if needed: autoload -Uz compinit; compinit\n");
|
|
22
|
+
context.stdout(`Activate completion in the current shell:\n source <(daynight completion ${result.shell})\n`);
|
|
15
23
|
return;
|
|
16
24
|
}
|
|
17
|
-
const render = parsed.
|
|
25
|
+
const render = parsed.command.name === "bash" ? renderBashCompletion : renderZshCompletion;
|
|
18
26
|
context.stdout(render(commandTree));
|
|
19
27
|
};
|
|
20
28
|
//# sourceMappingURL=command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/completion/command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/completion/command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,IAAuB,EAAE,OAAmB,EAAiB,EAAE;IACxG,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,YAAY,CAAC,oBAAoB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAgC,CAAC;QAC3E,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAuB,CAAC;QACrE,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QACjE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAChJ,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,uFAAuF,CAAC,CAAC;QACpI,OAAO,CAAC,MAAM,CAAC,6EAA6E,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC;QAC/G,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC3F,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;AACtC,CAAC,CAAC"}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
|
+
const help = { names: ["-h", "--help"], description: "Show this help", action: "help" };
|
|
1
2
|
export const completionDefinition = {
|
|
2
3
|
name: "completion",
|
|
3
|
-
description: "Generate shell completion for Bash or zsh",
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
description: "Generate or install shell completion for Bash or zsh",
|
|
5
|
+
commands: [
|
|
6
|
+
{ name: "bash", description: "Generate Bash >=4.2 completion", options: [help] },
|
|
7
|
+
{ name: "zsh", description: "Generate native zsh completion", options: [help] },
|
|
8
|
+
{
|
|
9
|
+
name: "setup",
|
|
10
|
+
description: "Install completion in shell startup files",
|
|
11
|
+
options: [
|
|
12
|
+
{ names: ["--shell"], description: "Select the shell instead of detecting the calling shell", value: { name: "shell", kind: "text", choices: ["bash", "zsh"] } },
|
|
13
|
+
{ names: ["--rc-file"], description: "Manage only this startup file", value: { name: "path", kind: "text" } },
|
|
14
|
+
help,
|
|
15
|
+
],
|
|
16
|
+
details: "Without --shell, detect the calling Bash or zsh process.\nBash setup covers ~/.bashrc and the first existing login profile.\nzsh setup uses $ZDOTDIR/.zshrc, or ~/.zshrc when ZDOTDIR is unset.\nSetup installs startup configuration; activate the current shell with source <(daynight completion bash|zsh).",
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
options: [help],
|
|
20
|
+
details: "Bash >=4.2: source <(daynight completion bash).\nzsh: initialize compinit, then source <(daynight completion zsh).\nRun daynight completion setup to install startup configuration.\nReload the script in existing shells after updating daynight.",
|
|
7
21
|
};
|
|
8
22
|
//# sourceMappingURL=definition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/commands/completion/definition.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../../src/commands/completion/definition.ts"],"names":[],"mappings":"AAEA,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAW,CAAC;AAEjG,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,sDAAsD;IACnE,QAAQ,EAAE;QACR,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,gCAAgC,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;QAChF,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,gCAAgC,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;QAC/E;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,yDAAyD,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;gBAChK,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;gBAC7G,IAAI;aACL;YACD,OAAO,EAAE,gTAAgT;SAC1T;KACF;IACD,OAAO,EAAE,CAAC,IAAI,CAAC;IACf,OAAO,EAAE,oPAAoP;CAC9P,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CliContext } from "../../cli/context.js";
|
|
2
|
+
export type CompletionShell = "bash" | "zsh";
|
|
3
|
+
type SetupOptions = {
|
|
4
|
+
shell: CompletionShell | undefined;
|
|
5
|
+
rcFile: string | undefined;
|
|
6
|
+
};
|
|
7
|
+
type SetupResult = {
|
|
8
|
+
shell: CompletionShell;
|
|
9
|
+
files: {
|
|
10
|
+
path: string;
|
|
11
|
+
installed: boolean;
|
|
12
|
+
}[];
|
|
13
|
+
};
|
|
14
|
+
export type SetupDependencies = {
|
|
15
|
+
environment: NodeJS.ProcessEnv;
|
|
16
|
+
callingShell: () => Promise<CompletionShell | undefined>;
|
|
17
|
+
};
|
|
18
|
+
export declare const detectCallingShell: () => Promise<CompletionShell | undefined>;
|
|
19
|
+
export declare const renderSetupBlock: (shell: CompletionShell) => string;
|
|
20
|
+
export declare const setupCompletion: (options: SetupOptions, context: Pick<CliContext, "homeDirectory" | "workingDirectory">, dependencies?: SetupDependencies) => Promise<SetupResult>;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { access, lstat, mkdir, open, readFile, realpath, unlink } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { setTimeout } from "node:timers/promises";
|
|
7
|
+
import { UsageError } from "../../cli/context.js";
|
|
8
|
+
const execute = promisify(execFile);
|
|
9
|
+
const begin = "# >>> daynight completion >>>";
|
|
10
|
+
const end = "# <<< daynight completion <<<";
|
|
11
|
+
const isMissing = (error) => error.code === "ENOENT";
|
|
12
|
+
export const detectCallingShell = async () => {
|
|
13
|
+
if (process.platform === "win32")
|
|
14
|
+
return undefined;
|
|
15
|
+
const { stdout } = await execute("ps", ["-p", String(process.ppid), "-o", "comm="], { timeout: 3_000, encoding: "utf8" });
|
|
16
|
+
const name = path.basename(stdout.trim()).replace(/^-/, "");
|
|
17
|
+
return name === "bash" || name === "zsh" ? name : undefined;
|
|
18
|
+
};
|
|
19
|
+
const loadScript = (shell, indent) => [
|
|
20
|
+
`if __daynight_completion_script="$(daynight completion ${shell})"; then`,
|
|
21
|
+
' if eval "$__daynight_completion_script"; then',
|
|
22
|
+
' unset __daynight_completion_script',
|
|
23
|
+
' else',
|
|
24
|
+
' __daynight_completion_status=$?',
|
|
25
|
+
' unset __daynight_completion_script',
|
|
26
|
+
' return "$__daynight_completion_status"',
|
|
27
|
+
' fi',
|
|
28
|
+
'else',
|
|
29
|
+
' __daynight_completion_status=$?',
|
|
30
|
+
' unset __daynight_completion_script',
|
|
31
|
+
' return "$__daynight_completion_status"',
|
|
32
|
+
'fi',
|
|
33
|
+
].map((line) => `${indent}${line}`);
|
|
34
|
+
export const renderSetupBlock = (shell) => {
|
|
35
|
+
const lines = shell === "bash" ? [
|
|
36
|
+
begin,
|
|
37
|
+
'if [ -n "${BASH_VERSION-}" ]; then',
|
|
38
|
+
' case $- in',
|
|
39
|
+
' *i*)',
|
|
40
|
+
' if ! declare -F _daynight_completion >/dev/null || [ "$(complete -p daynight 2>/dev/null)" != \'complete -F _daynight_completion daynight\' ]; then',
|
|
41
|
+
...loadScript(shell, " "),
|
|
42
|
+
' fi',
|
|
43
|
+
' ;;',
|
|
44
|
+
' esac',
|
|
45
|
+
'fi',
|
|
46
|
+
end,
|
|
47
|
+
] : [
|
|
48
|
+
begin,
|
|
49
|
+
'if [[ -o interactive ]]; then',
|
|
50
|
+
' if (( $+functions[compdef] )) || { autoload -Uz compinit && compinit; }; then',
|
|
51
|
+
' if [[ "${_comps[daynight]-}" != _daynight ]] || (( ! $+functions[_daynight] )); then',
|
|
52
|
+
...loadScript(shell, " "),
|
|
53
|
+
' fi',
|
|
54
|
+
' else',
|
|
55
|
+
' return $?',
|
|
56
|
+
' fi',
|
|
57
|
+
'fi',
|
|
58
|
+
end,
|
|
59
|
+
];
|
|
60
|
+
return `${lines.join("\n")}\n`;
|
|
61
|
+
};
|
|
62
|
+
const configured = (content, shell, file) => {
|
|
63
|
+
const lines = content.toString("utf8").split(/\r?\n/);
|
|
64
|
+
const starts = lines.flatMap((line, index) => line.includes(begin) ? [index] : []);
|
|
65
|
+
const ends = lines.flatMap((line, index) => line.includes(end) ? [index] : []);
|
|
66
|
+
if (starts.length !== 0 || ends.length !== 0) {
|
|
67
|
+
if (starts.length !== 1 || ends.length !== 1 || starts[0] >= ends[0]) {
|
|
68
|
+
throw new Error(`Malformed or duplicate daynight completion block in ${file}. Remove or repair its markers before running setup.`);
|
|
69
|
+
}
|
|
70
|
+
const block = lines.slice(starts[0], ends[0] + 1).join("\n");
|
|
71
|
+
if (block !== renderSetupBlock(shell).trimEnd())
|
|
72
|
+
throw new Error(`Unrecognized daynight completion block in ${file}. Remove or repair it before running setup.`);
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return lines.some((line) => line.trim() === `source <(daynight completion ${shell})`);
|
|
76
|
+
};
|
|
77
|
+
const targetPath = async (file) => {
|
|
78
|
+
try {
|
|
79
|
+
const info = await lstat(file);
|
|
80
|
+
if (info.isSymbolicLink()) {
|
|
81
|
+
const resolved = await realpath(file);
|
|
82
|
+
if (!(await lstat(resolved)).isFile())
|
|
83
|
+
throw new Error(`Completion startup target is not a regular file: ${file}`);
|
|
84
|
+
return resolved;
|
|
85
|
+
}
|
|
86
|
+
if (!info.isFile())
|
|
87
|
+
throw new Error(`Completion startup target is not a regular file: ${file}`);
|
|
88
|
+
return file;
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (isMissing(error)) {
|
|
92
|
+
// A dangling link is not a new startup file: creating through it hides a broken configuration.
|
|
93
|
+
try {
|
|
94
|
+
await lstat(file);
|
|
95
|
+
}
|
|
96
|
+
catch (missing) {
|
|
97
|
+
if (isMissing(missing))
|
|
98
|
+
return file;
|
|
99
|
+
throw missing;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const acquireLock = async (file) => {
|
|
106
|
+
for (let attempt = 0;; attempt += 1) {
|
|
107
|
+
try {
|
|
108
|
+
return await open(file, "wx", 0o600);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (error.code !== "EEXIST" || attempt === 40) {
|
|
112
|
+
throw new Error(`Cannot lock completion startup file. Another setup may be running; inspect ${file}.`, { cause: error });
|
|
113
|
+
}
|
|
114
|
+
await setTimeout(50);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
const install = async (file, shell) => {
|
|
119
|
+
const resolved = await targetPath(file);
|
|
120
|
+
try {
|
|
121
|
+
if (configured(await readFile(resolved), shell, file))
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (!isMissing(error))
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
await mkdir(path.dirname(resolved), { recursive: true });
|
|
129
|
+
const lockPath = `${resolved}.daynight-completion.lock`;
|
|
130
|
+
const lock = await acquireLock(lockPath);
|
|
131
|
+
try {
|
|
132
|
+
if (await targetPath(file) !== resolved)
|
|
133
|
+
throw new Error(`Completion startup target changed during setup: ${file}`);
|
|
134
|
+
// Append keeps existing bytes, mode and symlink identity, including concurrent unrelated appends.
|
|
135
|
+
const handle = await open(resolved, constants.O_RDWR | constants.O_CREAT | constants.O_APPEND | constants.O_NOFOLLOW, 0o666);
|
|
136
|
+
try {
|
|
137
|
+
const before = await handle.stat();
|
|
138
|
+
if (!before.isFile())
|
|
139
|
+
throw new Error(`Completion startup target is not a regular file: ${file}`);
|
|
140
|
+
const content = await handle.readFile();
|
|
141
|
+
if (configured(content, shell, file))
|
|
142
|
+
return false;
|
|
143
|
+
const current = await lstat(resolved);
|
|
144
|
+
if (await targetPath(file) !== resolved || current.dev !== before.dev || current.ino !== before.ino || current.size !== before.size || current.mtimeMs !== before.mtimeMs) {
|
|
145
|
+
throw new Error(`Completion startup file changed during setup; run setup again: ${file}`);
|
|
146
|
+
}
|
|
147
|
+
const separator = content.length === 0 || content.at(-1) === 10 ? "" : "\n";
|
|
148
|
+
await handle.writeFile(`${separator}${renderSetupBlock(shell)}`);
|
|
149
|
+
await handle.sync();
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
await handle.close();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
throw new Error(`Cannot configure completion in ${file}.`, { cause: error });
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
await lock.close();
|
|
161
|
+
await unlink(lockPath);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
const bashTargets = async (home) => {
|
|
165
|
+
let unreadable;
|
|
166
|
+
for (const name of [".bash_profile", ".bash_login", ".profile"]) {
|
|
167
|
+
const file = path.join(home, name);
|
|
168
|
+
try {
|
|
169
|
+
await lstat(file);
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
if (isMissing(error))
|
|
173
|
+
continue;
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
176
|
+
try {
|
|
177
|
+
await access(file, constants.R_OK);
|
|
178
|
+
return [path.join(home, ".bashrc"), file];
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
if (error.code !== "EACCES")
|
|
182
|
+
throw error;
|
|
183
|
+
unreadable = error;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (unreadable !== undefined)
|
|
187
|
+
throw new Error("No existing Bash login profile is readable. Make a profile readable before running setup.", { cause: unreadable });
|
|
188
|
+
return [path.join(home, ".bashrc"), path.join(home, ".bash_profile")];
|
|
189
|
+
};
|
|
190
|
+
export const setupCompletion = async (options, context, dependencies = { environment: process.env, callingShell: detectCallingShell }) => {
|
|
191
|
+
let shell = options.shell;
|
|
192
|
+
if (shell === undefined) {
|
|
193
|
+
try {
|
|
194
|
+
shell = await dependencies.callingShell();
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
throw new Error("Cannot detect the calling shell. Specify --shell bash or --shell zsh.", { cause: error });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (shell === undefined)
|
|
201
|
+
throw new UsageError("Cannot identify the calling Bash or zsh shell. Specify --shell bash or --shell zsh.", "daynight completion setup --help");
|
|
202
|
+
const targets = options.rcFile !== undefined ? [path.resolve(context.workingDirectory(), options.rcFile)] : shell === "bash"
|
|
203
|
+
? await bashTargets(context.homeDirectory())
|
|
204
|
+
: [path.resolve(context.workingDirectory(), `${dependencies.environment.ZDOTDIR === undefined ? context.homeDirectory() : dependencies.environment.ZDOTDIR}/.zshrc`)];
|
|
205
|
+
const files = [];
|
|
206
|
+
for (const file of targets)
|
|
207
|
+
files.push({ path: file, installed: await install(file, shell) });
|
|
208
|
+
return { shell, files };
|
|
209
|
+
};
|
|
210
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/completion/setup.ts"],"names":[],"mappings":"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"}
|