@g3nomaly/core 0.3.1 → 0.3.3
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 +122 -0
- package/dist/cli/commands/add.d.ts +24 -4
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +37 -14
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/conflict.d.ts +52 -0
- package/dist/cli/commands/conflict.d.ts.map +1 -0
- package/dist/cli/commands/conflict.js +88 -0
- package/dist/cli/commands/conflict.js.map +1 -0
- package/dist/cli/commands/installFromSources.d.ts +42 -13
- package/dist/cli/commands/installFromSources.d.ts.map +1 -1
- package/dist/cli/commands/installFromSources.js +68 -19
- package/dist/cli/commands/installFromSources.js.map +1 -1
- package/dist/cli/commands/ls.d.ts +13 -3
- package/dist/cli/commands/ls.d.ts.map +1 -1
- package/dist/cli/commands/ls.js +26 -6
- package/dist/cli/commands/ls.js.map +1 -1
- package/dist/cli/commands/remove.d.ts +7 -1
- package/dist/cli/commands/remove.d.ts.map +1 -1
- package/dist/cli/commands/remove.js +15 -1
- package/dist/cli/commands/remove.js.map +1 -1
- package/dist/cli/commands/sources.d.ts +34 -10
- package/dist/cli/commands/sources.d.ts.map +1 -1
- package/dist/cli/commands/sources.js +17 -3
- package/dist/cli/commands/sources.js.map +1 -1
- package/dist/cli/commands/update.d.ts +11 -4
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +32 -14
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/dialogue.d.ts +65 -13
- package/dist/cli/dialogue.d.ts.map +1 -1
- package/dist/cli/dialogue.js +46 -7
- package/dist/cli/dialogue.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/installDialogues.d.ts +11 -3
- package/dist/cli/installDialogues.d.ts.map +1 -1
- package/dist/cli/installDialogues.js +22 -5
- package/dist/cli/installDialogues.js.map +1 -1
- package/dist/cli/pick.d.ts +11 -2
- package/dist/cli/pick.d.ts.map +1 -1
- package/dist/cli/pick.js +11 -2
- package/dist/cli/pick.js.map +1 -1
- package/dist/cli/report.d.ts +32 -8
- package/dist/cli/report.d.ts.map +1 -1
- package/dist/cli/report.js +26 -5
- package/dist/cli/report.js.map +1 -1
- package/dist/cli/theme.d.ts +4 -0
- package/dist/cli/theme.d.ts.map +1 -1
- package/dist/cli/theme.js +4 -0
- package/dist/cli/theme.js.map +1 -1
- package/dist/cli/types.d.ts +56 -5
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/config/config.d.ts +32 -7
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +37 -7
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +58 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +0 -10
- package/dist/config/types.js.map +1 -1
- package/dist/hash/hash.d.ts +6 -8
- package/dist/hash/hash.d.ts.map +1 -1
- package/dist/hash/hash.js +7 -8
- package/dist/hash/hash.js.map +1 -1
- package/dist/hash/index.d.ts.map +1 -1
- package/dist/hash/index.js +1 -0
- package/dist/hash/index.js.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/installer/classify.d.ts +27 -1
- package/dist/installer/classify.d.ts.map +1 -1
- package/dist/installer/classify.js +36 -1
- package/dist/installer/classify.js.map +1 -1
- package/dist/installer/files.d.ts +10 -6
- package/dist/installer/files.d.ts.map +1 -1
- package/dist/installer/files.js +4 -3
- package/dist/installer/files.js.map +1 -1
- package/dist/installer/index.d.ts +1 -1
- package/dist/installer/index.d.ts.map +1 -1
- package/dist/installer/index.js +1 -1
- package/dist/installer/index.js.map +1 -1
- package/dist/installer/install.d.ts +18 -6
- package/dist/installer/install.d.ts.map +1 -1
- package/dist/installer/install.js +20 -7
- package/dist/installer/install.js.map +1 -1
- package/dist/installer/io.d.ts +6 -1
- package/dist/installer/io.d.ts.map +1 -1
- package/dist/installer/io.js +6 -1
- package/dist/installer/io.js.map +1 -1
- package/dist/installer/manifest.d.ts +29 -19
- package/dist/installer/manifest.d.ts.map +1 -1
- package/dist/installer/manifest.js +20 -10
- package/dist/installer/manifest.js.map +1 -1
- package/dist/installer/manifestSources.d.ts +18 -7
- package/dist/installer/manifestSources.d.ts.map +1 -1
- package/dist/installer/manifestSources.js +18 -7
- package/dist/installer/manifestSources.js.map +1 -1
- package/dist/installer/marketplace.d.ts +24 -12
- package/dist/installer/marketplace.d.ts.map +1 -1
- package/dist/installer/marketplace.js +18 -10
- package/dist/installer/marketplace.js.map +1 -1
- package/dist/installer/origin.d.ts +23 -7
- package/dist/installer/origin.d.ts.map +1 -1
- package/dist/installer/origin.js +14 -7
- package/dist/installer/origin.js.map +1 -1
- package/dist/installer/remove.d.ts +17 -5
- package/dist/installer/remove.d.ts.map +1 -1
- package/dist/installer/remove.js +17 -5
- package/dist/installer/remove.js.map +1 -1
- package/dist/installer/resolve.d.ts +80 -31
- package/dist/installer/resolve.d.ts.map +1 -1
- package/dist/installer/resolve.js +96 -29
- package/dist/installer/resolve.js.map +1 -1
- package/dist/installer/sourceRegistry.d.ts +59 -22
- package/dist/installer/sourceRegistry.d.ts.map +1 -1
- package/dist/installer/sourceRegistry.js +25 -10
- package/dist/installer/sourceRegistry.js.map +1 -1
- package/dist/installer/types.d.ts +72 -19
- package/dist/installer/types.d.ts.map +1 -1
- package/dist/installer/types.js +18 -8
- package/dist/installer/types.js.map +1 -1
- package/dist/registry/index.d.ts +0 -4
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -4
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/registry.handlers.d.ts +7 -0
- package/dist/registry/registry.handlers.d.ts.map +1 -1
- package/dist/registry/registry.handlers.js.map +1 -1
- package/dist/registry/registry.io.d.ts +23 -7
- package/dist/registry/registry.io.d.ts.map +1 -1
- package/dist/registry/registry.io.js +37 -14
- package/dist/registry/registry.io.js.map +1 -1
- package/dist/registry/registry.mutations.d.ts +10 -3
- package/dist/registry/registry.mutations.d.ts.map +1 -1
- package/dist/registry/registry.mutations.js +10 -3
- package/dist/registry/registry.mutations.js.map +1 -1
- package/dist/registry/registry.selectors.d.ts +41 -11
- package/dist/registry/registry.selectors.d.ts.map +1 -1
- package/dist/registry/registry.selectors.js +41 -11
- package/dist/registry/registry.selectors.js.map +1 -1
- package/dist/registry/registry.store.d.ts +22 -9
- package/dist/registry/registry.store.d.ts.map +1 -1
- package/dist/registry/registry.store.js +12 -3
- package/dist/registry/registry.store.js.map +1 -1
- package/dist/registry/registry.template.d.ts +12 -6
- package/dist/registry/registry.template.d.ts.map +1 -1
- package/dist/registry/registry.template.js +13 -6
- package/dist/registry/registry.template.js.map +1 -1
- package/dist/registry/types.d.ts +17 -3
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/registry/types.js +16 -6
- package/dist/registry/types.js.map +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -0
- package/dist/security/index.js.map +1 -1
- package/dist/security/securityParser.d.ts +9 -8
- package/dist/security/securityParser.d.ts.map +1 -1
- package/dist/security/securityParser.js +12 -22
- package/dist/security/securityParser.js.map +1 -1
- package/dist/security/securityWorker.d.ts +11 -0
- package/dist/security/securityWorker.d.ts.map +1 -1
- package/dist/security/securityWorker.js +17 -38
- package/dist/security/securityWorker.js.map +1 -1
- package/dist/sources/checkout.d.ts +10 -4
- package/dist/sources/checkout.d.ts.map +1 -1
- package/dist/sources/checkout.js +10 -4
- package/dist/sources/checkout.js.map +1 -1
- package/dist/sources/git.d.ts +5 -3
- package/dist/sources/git.d.ts.map +1 -1
- package/dist/sources/git.js +5 -3
- package/dist/sources/git.js.map +1 -1
- package/dist/sources/local.d.ts +6 -4
- package/dist/sources/local.d.ts.map +1 -1
- package/dist/sources/local.js +6 -4
- package/dist/sources/local.js.map +1 -1
- package/dist/sources/npm.d.ts +10 -7
- package/dist/sources/npm.d.ts.map +1 -1
- package/dist/sources/npm.js +49 -15
- package/dist/sources/npm.js.map +1 -1
- package/dist/sources/parse.d.ts +24 -16
- package/dist/sources/parse.d.ts.map +1 -1
- package/dist/sources/parse.js +40 -18
- package/dist/sources/parse.js.map +1 -1
- package/dist/sources/process.d.ts +10 -7
- package/dist/sources/process.d.ts.map +1 -1
- package/dist/sources/process.js +10 -7
- package/dist/sources/process.js.map +1 -1
- package/dist/sources/register.d.ts +20 -5
- package/dist/sources/register.d.ts.map +1 -1
- package/dist/sources/register.js +20 -5
- package/dist/sources/register.js.map +1 -1
- package/dist/sources/types.d.ts +43 -8
- package/dist/sources/types.d.ts.map +1 -1
- package/dist/sources/types.js +21 -4
- package/dist/sources/types.js.map +1 -1
- package/dist/utils/errors.d.ts +6 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +6 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/merge.d.ts +8 -2
- package/dist/utils/merge.d.ts.map +1 -1
- package/dist/utils/merge.js +9 -2
- package/dist/utils/merge.js.map +1 -1
- package/dist/utils/packageMeta.d.ts +16 -2
- package/dist/utils/packageMeta.d.ts.map +1 -1
- package/dist/utils/packageMeta.js +6 -2
- package/dist/utils/packageMeta.js.map +1 -1
- package/dist/utils/paths.d.ts +16 -5
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +16 -5
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/prompt.d.ts +6 -1
- package/dist/utils/prompt.d.ts.map +1 -1
- package/dist/utils/prompt.js +6 -1
- package/dist/utils/prompt.js.map +1 -1
- package/dist/utils/version.d.ts +7 -2
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +40 -3
- package/dist/utils/version.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,15 +6,20 @@ import { register } from "../../registry/registry.mutations";
|
|
|
6
6
|
import { applyClassifications, classifyFiles, recordedHashes, removeInstalledFiles } from "../../installer";
|
|
7
7
|
import { createInstallerIO } from "../../installer/io";
|
|
8
8
|
import { ConflictDecision, FileState } from "../../installer/types";
|
|
9
|
-
import { runDialogueValue } from "../dialogue";
|
|
10
9
|
import { c, lineSuccess, lineWarn, lineInfo } from "../theme";
|
|
11
10
|
import { latestHashFrom } from "./add";
|
|
11
|
+
import { chooseConflict, forkedFrom, forkEntry } from "./conflict";
|
|
12
12
|
const DRY_RUN_LABELS = {
|
|
13
13
|
[FileState.UpToDate]: chalk.dim("up to date"),
|
|
14
14
|
[FileState.SafeUpdate]: chalk.cyan("would update") + chalk.dim(" (package changed, file unmodified)"),
|
|
15
15
|
[FileState.UserOnly]: chalk.yellow("would keep") + chalk.dim(" — local changes"),
|
|
16
|
-
[FileState.Conflict]: chalk.red("conflict") + chalk.dim(" —
|
|
16
|
+
[FileState.Conflict]: chalk.red("conflict") + chalk.dim(" — restore, fork or skip"),
|
|
17
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* @brief Prints one dry-run line per file with its state.
|
|
20
|
+
*
|
|
21
|
+
* @param classifications - Files to print, each with its state.
|
|
22
|
+
*/
|
|
18
23
|
function printDryRun(classifications) {
|
|
19
24
|
for (const cl of classifications) {
|
|
20
25
|
const rel = c.file(path.relative(process.cwd(), cl.destPath));
|
|
@@ -22,10 +27,17 @@ function printDryRun(classifications) {
|
|
|
22
27
|
}
|
|
23
28
|
}
|
|
24
29
|
/**
|
|
25
|
-
* Re-installs entries already present in a target's manifest; with no keys
|
|
26
|
-
* everything installed is updated. Local changes prompt
|
|
27
|
-
* through `onCollision` unless `--force`. The caller
|
|
28
|
-
* and saves each target's store after.
|
|
30
|
+
* @brief Re-installs entries already present in a target's manifest; with no keys
|
|
31
|
+
* everything installed is updated, forks excepted. Local changes prompt
|
|
32
|
+
* restore/fork/skip through `onCollision` unless `--force`. The caller
|
|
33
|
+
* resolves keys before and saves each target's store after.
|
|
34
|
+
*
|
|
35
|
+
* @param registry - Entries available to install, by key.
|
|
36
|
+
* @param targets - Destinations to update.
|
|
37
|
+
* @param source - Source of each entry's files.
|
|
38
|
+
* @param keys - Keys to update; empty to update everything installed.
|
|
39
|
+
* @param options - Force, dry run and preset answers.
|
|
40
|
+
* @param dialogues - Dialogue for local changes.
|
|
29
41
|
*/
|
|
30
42
|
export async function updateEntries(registry, targets, source, keys, options = {}, dialogues = {}) {
|
|
31
43
|
const io = createInstallerIO();
|
|
@@ -39,12 +51,17 @@ export async function updateEntries(registry, targets, source, keys, options = {
|
|
|
39
51
|
continue;
|
|
40
52
|
}
|
|
41
53
|
for (const key of wanted) {
|
|
54
|
+
const installed = get(target.store, key);
|
|
55
|
+
const original = installed === undefined ? undefined : forkedFrom(installed);
|
|
56
|
+
if (original !== undefined) {
|
|
57
|
+
console.log(lineInfo(`${c.key(key)} is a fork of ${c.key(original)} — not updated`));
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
42
60
|
const meta = registry[key];
|
|
43
61
|
if (!meta) {
|
|
44
62
|
console.log(lineWarn(`${c.key(key)} is installed but no longer in the package — leaving as is`));
|
|
45
63
|
continue;
|
|
46
64
|
}
|
|
47
|
-
const installed = get(target.store, key);
|
|
48
65
|
const fileSource = await source(meta);
|
|
49
66
|
const classifications = await classifyFiles(meta.files, target.installDir, recordedHashes(installed), io, latestHashFrom(fileSource, io));
|
|
50
67
|
const stale = (installed?.files ?? []).filter((f) => !meta.files.some((m) => m.path === f.path));
|
|
@@ -56,14 +73,15 @@ export async function updateEntries(registry, targets, source, keys, options = {
|
|
|
56
73
|
}
|
|
57
74
|
continue;
|
|
58
75
|
}
|
|
59
|
-
let decision = ConflictDecision.Keep;
|
|
60
76
|
const hasLocalChanges = classifications.some((cl) => cl.state >= FileState.UserOnly);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
77
|
+
const choice = hasLocalChanges
|
|
78
|
+
? await chooseConflict(dialogues.onCollision, key, installed ?? meta, target, options)
|
|
79
|
+
: { decision: ConflictDecision.Keep };
|
|
80
|
+
if (choice.decision === ConflictDecision.Fork) {
|
|
81
|
+
await forkEntry(target, key, installed ?? meta, choice.forkKey, io);
|
|
82
|
+
continue;
|
|
65
83
|
}
|
|
66
|
-
const result = await applyClassifications(classifications, fileSource, { decision, force: options.force ?? false }, io);
|
|
84
|
+
const result = await applyClassifications(classifications, fileSource, { decision: choice.decision, force: options.force ?? false }, io);
|
|
67
85
|
if (stale.length > 0) {
|
|
68
86
|
const removal = await removeInstalledFiles(stale, target.installDir, { force: options.force }, io);
|
|
69
87
|
for (const file of removal.kept) {
|
|
@@ -77,7 +95,7 @@ export async function updateEntries(registry, targets, source, keys, options = {
|
|
|
77
95
|
console.log(lineWarn(`No content for ${c.file(file)} in the package source — skipped`));
|
|
78
96
|
}
|
|
79
97
|
if (result.kept.length > 0) {
|
|
80
|
-
console.log(lineWarn(`${c.key(key)} —
|
|
98
|
+
console.log(lineWarn(`${c.key(key)} — skipped ${result.kept.map((f) => c.file(f)).join(", ")} ${chalk.dim("(local changes, asked again next update)")}`));
|
|
81
99
|
}
|
|
82
100
|
if (result.written.length > 0) {
|
|
83
101
|
console.log(lineSuccess(`Updated ${c.key(key)} ${chalk.dim(`(${result.written.length} file${result.written.length === 1 ? "" : "s"})`)}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/dialogue.d.ts
CHANGED
|
@@ -4,8 +4,16 @@ export declare const StepKind: {
|
|
|
4
4
|
readonly Confirm: 2;
|
|
5
5
|
readonly Text: 3;
|
|
6
6
|
};
|
|
7
|
+
/** Kind of a dialogue step: select, multi-select, confirm or text. */
|
|
7
8
|
export type StepKind = (typeof StepKind)[keyof typeof StepKind];
|
|
9
|
+
/** Answers a dialogue collects, keyed by step id. */
|
|
8
10
|
export type DialogueAnswers = Record<string, unknown>;
|
|
11
|
+
/**
|
|
12
|
+
* @brief One choice of a select or multi-select step.
|
|
13
|
+
*
|
|
14
|
+
* @property value - Value the step answers with.
|
|
15
|
+
* @property label - Text shown for the choice, with `{name}` placeholders filled from the input.
|
|
16
|
+
*/
|
|
9
17
|
export interface StepChoice<V = unknown> {
|
|
10
18
|
value: V;
|
|
11
19
|
label: string;
|
|
@@ -13,61 +21,105 @@ export interface StepChoice<V = unknown> {
|
|
|
13
21
|
/** A literal value, or a function deriving it from the walk's input. */
|
|
14
22
|
export type Resolvable<Input, V> = V | ((input: Input) => V);
|
|
15
23
|
/**
|
|
16
|
-
* One question of a dialogue
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
24
|
+
* @brief One question of a dialogue, shared by every kind of step.
|
|
25
|
+
*
|
|
26
|
+
* `{name}` placeholders in messages and labels are filled from the walk's input.
|
|
27
|
+
*
|
|
28
|
+
* @property message - Question shown to the user.
|
|
29
|
+
* @property when - Decides whether the step runs at all; a skipped step records no answer and falls through to `next`.
|
|
30
|
+
* @property next - Following step: a step id for linear flow, a function of the answer for branching, absent to end.
|
|
21
31
|
*/
|
|
22
32
|
interface StepBase<Input> {
|
|
23
33
|
message: string;
|
|
24
34
|
when?: (input: Input, answers: DialogueAnswers) => boolean;
|
|
25
35
|
next?: string | ((answer: unknown, answers: DialogueAnswers, input: Input) => string | null);
|
|
26
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* @brief A step that asks the user to pick one of its choices.
|
|
39
|
+
*
|
|
40
|
+
* @property kind - Always `StepKind.Select`.
|
|
41
|
+
* @property choices - Choices offered, literal or derived from the input.
|
|
42
|
+
* @property initial - Choice preselected, literal or derived from the input.
|
|
43
|
+
*/
|
|
27
44
|
export interface SelectStep<Input = DialogueAnswers> extends StepBase<Input> {
|
|
28
45
|
kind: typeof StepKind.Select;
|
|
29
46
|
choices: Resolvable<Input, StepChoice[]>;
|
|
30
47
|
initial?: Resolvable<Input, string | number | boolean>;
|
|
31
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* @brief A step that asks the user to pick any number of its choices.
|
|
51
|
+
*
|
|
52
|
+
* @property kind - Always `StepKind.MultiSelect`.
|
|
53
|
+
* @property choices - Choices offered, literal or derived from the input.
|
|
54
|
+
* @property initial - Choices preselected, literal or derived from the input.
|
|
55
|
+
* @property required - Whether at least one choice must be picked.
|
|
56
|
+
*/
|
|
32
57
|
export interface MultiSelectStep<Input = DialogueAnswers> extends StepBase<Input> {
|
|
33
58
|
kind: typeof StepKind.MultiSelect;
|
|
34
59
|
choices: Resolvable<Input, StepChoice[]>;
|
|
35
60
|
initial?: Resolvable<Input, unknown[]>;
|
|
36
61
|
required?: boolean;
|
|
37
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* @brief A step that asks a yes or no question.
|
|
65
|
+
*
|
|
66
|
+
* @property kind - Always `StepKind.Confirm`.
|
|
67
|
+
* @property initial - Starting answer, literal or derived from the input.
|
|
68
|
+
*/
|
|
38
69
|
export interface ConfirmStep<Input = DialogueAnswers> extends StepBase<Input> {
|
|
39
70
|
kind: typeof StepKind.Confirm;
|
|
40
71
|
initial?: Resolvable<Input, boolean>;
|
|
41
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* @brief A step that asks for free text.
|
|
75
|
+
*
|
|
76
|
+
* @property kind - Always `StepKind.Text`.
|
|
77
|
+
* @property initial - Starting text, literal or derived from the input.
|
|
78
|
+
* @property validate - Returns an error message for an invalid value, or `undefined` when it is valid.
|
|
79
|
+
*/
|
|
42
80
|
export interface TextStep<Input = DialogueAnswers> extends StepBase<Input> {
|
|
43
81
|
kind: typeof StepKind.Text;
|
|
44
82
|
initial?: Resolvable<Input, string>;
|
|
45
83
|
validate?: (value: string | undefined) => string | undefined;
|
|
46
84
|
}
|
|
85
|
+
/** One step of a dialogue, of any kind. */
|
|
47
86
|
export type DialogueStep<Input = DialogueAnswers> = SelectStep<Input> | MultiSelectStep<Input> | ConfirmStep<Input> | TextStep<Input>;
|
|
48
87
|
/**
|
|
49
|
-
* A command's interaction with the user: a graph of steps keyed by id,
|
|
88
|
+
* @brief A command's interaction with the user: a graph of steps keyed by id,
|
|
50
89
|
* entered at the first key and linked through each step's `next`. Commands
|
|
51
90
|
* take dialogues through named slots (e.g. `onNoValue`, `onCollision`) and
|
|
52
91
|
* run them with `runDialogueValue`; init flows are linked lists run with
|
|
53
92
|
* `runDialogue`. Preset answers (`options.answers`, keyed by step id) skip
|
|
54
93
|
* the terminal prompt — that is how tests and non-interactive runs answer.
|
|
94
|
+
*
|
|
95
|
+
* @property steps - Steps keyed by id; the walk enters at the first key.
|
|
55
96
|
*/
|
|
56
97
|
export interface Dialogue<Input = DialogueAnswers> {
|
|
57
98
|
steps: Record<string, DialogueStep<Input>>;
|
|
58
99
|
}
|
|
59
100
|
/**
|
|
60
|
-
* Walks a dialogue from its first step
|
|
61
|
-
*
|
|
101
|
+
* @brief Walks a dialogue from its first step and collects answers by step id.
|
|
102
|
+
*
|
|
103
|
+
* Skips steps whose `when` is false. A preset answer in `answers` is
|
|
62
104
|
* recorded without prompting; anything else renders in the terminal.
|
|
63
|
-
* Returns the cancel symbol as soon as any step is cancelled.
|
|
64
|
-
*
|
|
105
|
+
* Returns the cancel symbol as soon as any step is cancelled.
|
|
106
|
+
*
|
|
107
|
+
* @param dialogue - Dialogue to walk.
|
|
108
|
+
* @param input - Input the steps read.
|
|
109
|
+
* @param answers - Preset answers by step id.
|
|
110
|
+
* @returns Answers by step id, or the cancel symbol.
|
|
111
|
+
* @throws {Error} When the walk reaches a step id that is not in the dialogue.
|
|
65
112
|
*/
|
|
66
113
|
export declare function runDialogue<Input>(dialogue: Dialogue<Input>, input: Input, answers?: DialogueAnswers): Promise<DialogueAnswers | symbol>;
|
|
67
114
|
/**
|
|
68
|
-
* Runs a dialogue and returns the answer of its last executed step
|
|
69
|
-
*
|
|
70
|
-
*
|
|
115
|
+
* @brief Runs a dialogue and returns the answer of its last executed step.
|
|
116
|
+
*
|
|
117
|
+
* This is the contract for the commands' named dialogue slots.
|
|
118
|
+
*
|
|
119
|
+
* @param dialogue - Dialogue to run.
|
|
120
|
+
* @param input - Input the steps read.
|
|
121
|
+
* @param answers - Preset answers by step id.
|
|
122
|
+
* @returns The answer of the last step that ran, `undefined` when no step ran, or the cancel symbol.
|
|
71
123
|
*/
|
|
72
124
|
export declare function runDialogueValue<Input>(dialogue: Dialogue<Input>, input: Input, answers?: DialogueAnswers): Promise<unknown>;
|
|
73
125
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialogue.d.ts","sourceRoot":"","sources":["../../src/cli/dialogue.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ;aACnB,MAAM,EAAO,CAAC;aACd,WAAW,EAAE,CAAC;aACd,OAAO,EAAM,CAAC;aACd,IAAI,EAAS,CAAC;CACN,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEhE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEtD,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wEAAwE;AACxE,MAAM,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC;AAE7D
|
|
1
|
+
{"version":3,"file":"dialogue.d.ts","sourceRoot":"","sources":["../../src/cli/dialogue.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/dialogue.js
CHANGED
|
@@ -9,6 +9,13 @@ export const StepKind = {
|
|
|
9
9
|
// ---------------------------------------------------------------------------
|
|
10
10
|
// Resolving
|
|
11
11
|
// ---------------------------------------------------------------------------
|
|
12
|
+
/**
|
|
13
|
+
* @brief Fills the `{name}` placeholders of a template from the fields of the input.
|
|
14
|
+
*
|
|
15
|
+
* @param template - Text with `{name}` placeholders.
|
|
16
|
+
* @param input - Object whose fields fill the placeholders; a placeholder without a field stays as written.
|
|
17
|
+
* @returns The text with its placeholders filled.
|
|
18
|
+
*/
|
|
12
19
|
function interpolate(template, input) {
|
|
13
20
|
const record = (typeof input === "object" && input !== null ? input : {});
|
|
14
21
|
return template.replace(/\{(\w+)\}/g, (match, name) => {
|
|
@@ -16,9 +23,24 @@ function interpolate(template, input) {
|
|
|
16
23
|
return value === undefined ? match : String(value);
|
|
17
24
|
});
|
|
18
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* @brief Resolves a value that is literal or a function of the input.
|
|
28
|
+
*
|
|
29
|
+
* @param value - Literal value, or a function of `input`; `undefined` passes through.
|
|
30
|
+
* @param input - Input the function is called with.
|
|
31
|
+
* @returns The literal, or the function's result.
|
|
32
|
+
*/
|
|
19
33
|
function resolveValue(value, input) {
|
|
20
34
|
return typeof value === "function" ? value(input) : value;
|
|
21
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* @brief Resolves every field of a step against the input, ready to render.
|
|
38
|
+
*
|
|
39
|
+
* @param id - Id of the step.
|
|
40
|
+
* @param step - Step to resolve.
|
|
41
|
+
* @param input - Input the placeholders and functions read.
|
|
42
|
+
* @returns The resolved step.
|
|
43
|
+
*/
|
|
22
44
|
function resolveStep(id, step, input) {
|
|
23
45
|
const resolved = { id, kind: step.kind, message: interpolate(step.message, input) };
|
|
24
46
|
switch (step.kind) {
|
|
@@ -43,6 +65,12 @@ function resolveStep(id, step, input) {
|
|
|
43
65
|
// ---------------------------------------------------------------------------
|
|
44
66
|
// Rendering
|
|
45
67
|
// ---------------------------------------------------------------------------
|
|
68
|
+
/**
|
|
69
|
+
* @brief Renders one resolved step in the terminal and returns the answer.
|
|
70
|
+
*
|
|
71
|
+
* @param step - Step to render.
|
|
72
|
+
* @returns The user's answer, or the cancel symbol.
|
|
73
|
+
*/
|
|
46
74
|
async function render(step) {
|
|
47
75
|
switch (step.kind) {
|
|
48
76
|
case StepKind.Select:
|
|
@@ -77,11 +105,17 @@ async function render(step) {
|
|
|
77
105
|
// Walking
|
|
78
106
|
// ---------------------------------------------------------------------------
|
|
79
107
|
/**
|
|
80
|
-
* Walks a dialogue from its first step
|
|
81
|
-
*
|
|
108
|
+
* @brief Walks a dialogue from its first step and collects answers by step id.
|
|
109
|
+
*
|
|
110
|
+
* Skips steps whose `when` is false. A preset answer in `answers` is
|
|
82
111
|
* recorded without prompting; anything else renders in the terminal.
|
|
83
|
-
* Returns the cancel symbol as soon as any step is cancelled.
|
|
84
|
-
*
|
|
112
|
+
* Returns the cancel symbol as soon as any step is cancelled.
|
|
113
|
+
*
|
|
114
|
+
* @param dialogue - Dialogue to walk.
|
|
115
|
+
* @param input - Input the steps read.
|
|
116
|
+
* @param answers - Preset answers by step id.
|
|
117
|
+
* @returns Answers by step id, or the cancel symbol.
|
|
118
|
+
* @throws {Error} When the walk reaches a step id that is not in the dialogue.
|
|
85
119
|
*/
|
|
86
120
|
export async function runDialogue(dialogue, input, answers = {}) {
|
|
87
121
|
const collected = {};
|
|
@@ -103,9 +137,14 @@ export async function runDialogue(dialogue, input, answers = {}) {
|
|
|
103
137
|
return collected;
|
|
104
138
|
}
|
|
105
139
|
/**
|
|
106
|
-
* Runs a dialogue and returns the answer of its last executed step
|
|
107
|
-
*
|
|
108
|
-
*
|
|
140
|
+
* @brief Runs a dialogue and returns the answer of its last executed step.
|
|
141
|
+
*
|
|
142
|
+
* This is the contract for the commands' named dialogue slots.
|
|
143
|
+
*
|
|
144
|
+
* @param dialogue - Dialogue to run.
|
|
145
|
+
* @param input - Input the steps read.
|
|
146
|
+
* @param answers - Preset answers by step id.
|
|
147
|
+
* @returns The answer of the last step that ran, `undefined` when no step ran, or the cancel symbol.
|
|
109
148
|
*/
|
|
110
149
|
export async function runDialogueValue(dialogue, input, answers = {}) {
|
|
111
150
|
const record = await runDialogue(dialogue, input, answers);
|
package/dist/cli/dialogue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialogue.js","sourceRoot":"","sources":["../../src/cli/dialogue.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,MAAM,EAAO,CAAC;IACd,WAAW,EAAE,CAAC;IACd,OAAO,EAAM,CAAC;IACd,IAAI,EAAS,CAAC;CACN,CAAC;
|
|
1
|
+
{"version":3,"file":"dialogue.js","sourceRoot":"","sources":["../../src/cli/dialogue.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export { lsSourceRegistry } from "./commands/ls";
|
|
|
13
13
|
export { addSourceEntries, lsSources, removeSourceEntries } from "./commands/sources";
|
|
14
14
|
export type { SourceCommandContext, SourceAddOptions } from "./commands/sources";
|
|
15
15
|
export { pickOffers, selectEntriesDialogue } from "./pick";
|
|
16
|
-
export {
|
|
16
|
+
export { conflictDialogue, removeChangedDialogue, cascadeDialogue, incompleteDialogue, selectRemovalDialogue, notInstalledDialogue } from "./installDialogues";
|
|
17
17
|
export { addFromSources, updateFromSources, removeFromTargets } from "./commands/installFromSources";
|
|
18
18
|
export type { ManifestTarget, InstallCommandContext, AfterTarget } from "./commands/installFromSources";
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACpE,YAAY,EACV,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAC/D,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,GACnD,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC/G,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACrF,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACpE,YAAY,EACV,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAC/D,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,GACnD,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC/G,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACrF,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC9J,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACpG,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA"}
|
package/dist/cli/index.js
CHANGED
|
@@ -11,6 +11,6 @@ export { reportSourceRegistry, orExit, reportResolution, entryNotFoundDialogue,
|
|
|
11
11
|
export { lsSourceRegistry } from "./commands/ls";
|
|
12
12
|
export { addSourceEntries, lsSources, removeSourceEntries } from "./commands/sources";
|
|
13
13
|
export { pickOffers, selectEntriesDialogue } from "./pick";
|
|
14
|
-
export {
|
|
14
|
+
export { conflictDialogue, removeChangedDialogue, cascadeDialogue, incompleteDialogue, selectRemovalDialogue, notInstalledDialogue } from "./installDialogues";
|
|
15
15
|
export { addFromSources, updateFromSources, removeFromTargets } from "./commands/installFromSources";
|
|
16
16
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAKpE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE/G,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAErF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAKpE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAE/G,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAErF,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC9J,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA"}
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import type { Dialogue } from "./dialogue";
|
|
2
2
|
import type { InstallInput } from "./types";
|
|
3
|
-
/**
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @brief Restore, fork or skip an entry with local changes, for `add` and `update`; step id `conflict`, then
|
|
5
|
+
* `forkName` for the key of the fork.
|
|
6
|
+
*/
|
|
7
|
+
export declare const conflictDialogue: Dialogue<InstallInput>;
|
|
5
8
|
/** Keep or remove an entry with local changes, for `remove`; step id `conflict`. */
|
|
6
9
|
export declare const removeChangedDialogue: Dialogue<InstallInput>;
|
|
7
10
|
/** Whether to remove the installed entries that depend on one being removed; step id `cascade`. */
|
|
8
11
|
export declare const cascadeDialogue: Dialogue<InstallInput>;
|
|
9
12
|
/** Whether to remove an entry with files already missing on disk; step id `incomplete`. */
|
|
10
13
|
export declare const incompleteDialogue: Dialogue<InstallInput>;
|
|
11
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* @brief Builds the picker that asks which installed entries to remove.
|
|
16
|
+
*
|
|
17
|
+
* @param noun - What one entry is called, e.g. `skill`.
|
|
18
|
+
* @returns Dialogue with the step `selectEntries`.
|
|
19
|
+
*/
|
|
12
20
|
export declare function selectRemovalDialogue(noun: string): Dialogue<InstallInput>;
|
|
13
21
|
/** Whether to go on when some names given to `update` are not installed; step id `entryNotFound`. */
|
|
14
22
|
export declare const notInstalledDialogue: Dialogue<InstallInput>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installDialogues.d.ts","sourceRoot":"","sources":["../../src/cli/installDialogues.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C
|
|
1
|
+
{"version":3,"file":"installDialogues.d.ts","sourceRoot":"","sources":["../../src/cli/installDialogues.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAAQ,CAAC,YAAY,CAoBnD,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAWxD,CAAC;AAEF,mGAAmG;AACnG,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,YAAY,CAQlD,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,YAAY,CAQrD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAU1E;AAED,qGAAqG;AACrG,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,YAAY,CAQvD,CAAC"}
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
// packages/core/src/cli/installDialogues.ts
|
|
2
2
|
import { ConflictDecision } from "../installer/types";
|
|
3
3
|
import { StepKind } from "./dialogue";
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* @brief Restore, fork or skip an entry with local changes, for `add` and `update`; step id `conflict`, then
|
|
6
|
+
* `forkName` for the key of the fork.
|
|
7
|
+
*/
|
|
8
|
+
export const conflictDialogue = {
|
|
6
9
|
steps: {
|
|
7
10
|
conflict: {
|
|
8
11
|
kind: StepKind.Select,
|
|
9
12
|
message: "{key} ({target}) has local changes. What would you like to do?",
|
|
10
13
|
choices: [
|
|
11
|
-
{ value: ConflictDecision.
|
|
12
|
-
{ value: ConflictDecision.
|
|
14
|
+
{ value: ConflictDecision.Overwrite, label: "Restore: overwrite my changes with the source version" },
|
|
15
|
+
{ value: ConflictDecision.Fork, label: "Fork: keep my changes as a local entry under a new name" },
|
|
16
|
+
{ value: ConflictDecision.Keep, label: "Skip: leave my changes and ask again next time" },
|
|
13
17
|
],
|
|
18
|
+
initial: ConflictDecision.Keep,
|
|
19
|
+
next: (answer) => (answer === ConflictDecision.Fork ? "forkName" : null),
|
|
20
|
+
},
|
|
21
|
+
forkName: {
|
|
22
|
+
kind: StepKind.Text,
|
|
23
|
+
message: "Name of the local entry:",
|
|
24
|
+
initial: (input) => input.forkName ?? "",
|
|
25
|
+
validate: (value) => (value === undefined || !/^\S+$/.test(value) ? "Enter a name without spaces" : undefined),
|
|
14
26
|
},
|
|
15
27
|
},
|
|
16
28
|
};
|
|
@@ -47,7 +59,12 @@ export const incompleteDialogue = {
|
|
|
47
59
|
},
|
|
48
60
|
},
|
|
49
61
|
};
|
|
50
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* @brief Builds the picker that asks which installed entries to remove.
|
|
64
|
+
*
|
|
65
|
+
* @param noun - What one entry is called, e.g. `skill`.
|
|
66
|
+
* @returns Dialogue with the step `selectEntries`.
|
|
67
|
+
*/
|
|
51
68
|
export function selectRemovalDialogue(noun) {
|
|
52
69
|
return {
|
|
53
70
|
steps: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installDialogues.js","sourceRoot":"","sources":["../../src/cli/installDialogues.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC
|
|
1
|
+
{"version":3,"file":"installDialogues.js","sourceRoot":"","sources":["../../src/cli/installDialogues.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,KAAK,EAAE;QACL,QAAQ,EAAE;YACR,IAAI,EAAK,QAAQ,CAAC,MAAM;YACxB,OAAO,EAAE,gEAAgE;YACzE,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,uDAAuD,EAAE;gBACrG,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAO,KAAK,EAAE,yDAAyD,EAAE;gBACvG,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAO,KAAK,EAAE,gDAAgD,EAAE;aAC/F;YACD,OAAO,EAAE,gBAAgB,CAAC,IAAI;YAC9B,IAAI,EAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;SAC5E;QACD,QAAQ,EAAE;YACR,IAAI,EAAM,QAAQ,CAAC,IAAI;YACvB,OAAO,EAAG,0BAA0B;YACpC,OAAO,EAAG,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE;YACzC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;SAC/G;KACF;CACF,CAAC;AAEF,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,KAAK,EAAE;QACL,QAAQ,EAAE;YACR,IAAI,EAAK,QAAQ,CAAC,MAAM;YACxB,OAAO,EAAE,gEAAgE;YACzE,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAO,KAAK,EAAE,yBAAyB,EAAE;gBACvE,EAAE,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,wCAAwC,EAAE;aACvF;SACF;KACF;CACF,CAAC;AAEF,mGAAmG;AACnG,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,KAAK,EAAE;QACL,OAAO,EAAE;YACP,IAAI,EAAK,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,2BAA2B;YACpC,OAAO,EAAE,IAAI;SACd;KACF;CACF,CAAC;AAEF,2FAA2F;AAC3F,MAAM,CAAC,MAAM,kBAAkB,GAA2B;IACxD,KAAK,EAAE;QACL,UAAU,EAAE;YACV,IAAI,EAAK,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,gFAAgF;YACzF,OAAO,EAAE,IAAI;SACd;KACF;CACF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO;QACL,KAAK,EAAE;YACL,aAAa,EAAE;gBACb,IAAI,EAAK,QAAQ,CAAC,WAAW;gBAC7B,OAAO,EAAE,UAAU,IAAI,cAAc;gBACrC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;aAC3C;SACF;KACF,CAAC;AACJ,CAAC;AAED,qGAAqG;AACrG,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,KAAK,EAAE;QACL,aAAa,EAAE;YACb,IAAI,EAAK,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,kEAAkE;YAC3E,OAAO,EAAE,KAAK;SACf;KACF;CACF,CAAC"}
|
package/dist/cli/pick.d.ts
CHANGED
|
@@ -2,12 +2,21 @@ import type { OriginEntry } from "../installer/origin";
|
|
|
2
2
|
import type { SourceOffer } from "../installer/sourceRegistry";
|
|
3
3
|
import type { Dialogue, DialogueAnswers } from "./dialogue";
|
|
4
4
|
import type { InstallInput } from "./types";
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* @brief Builds the multi-select `pickOffers` asks through, by step id `selectEntries`.
|
|
7
|
+
*
|
|
8
|
+
* @param noun - What one entry is called, e.g. `skill`.
|
|
9
|
+
* @returns Dialogue with the step `selectEntries`.
|
|
10
|
+
*/
|
|
6
11
|
export declare function selectEntriesDialogue(noun: string): Dialogue<InstallInput>;
|
|
7
12
|
/**
|
|
8
|
-
* Asks which offers to install, each as `<key>@<source>`, so two sources
|
|
13
|
+
* @brief Asks which offers to install, each as `<key>@<source>`, so two sources
|
|
9
14
|
* offering one key stay apart. Exits when the prompt is cancelled.
|
|
10
15
|
*
|
|
16
|
+
* @param available - Offers to pick from.
|
|
17
|
+
* @param noun - What one entry is called, e.g. `skill`.
|
|
18
|
+
* @param answers - Preset answers by step id.
|
|
19
|
+
*
|
|
11
20
|
* @returns the picked requests, e.g. `["emphasise@g3n-skills"]`
|
|
12
21
|
*/
|
|
13
22
|
export declare function pickOffers<T extends OriginEntry>(available: readonly SourceOffer<T>[], noun: string, answers?: DialogueAnswers): Promise<string[]>;
|
package/dist/cli/pick.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pick.d.ts","sourceRoot":"","sources":["../../src/cli/pick.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C
|
|
1
|
+
{"version":3,"file":"pick.d.ts","sourceRoot":"","sources":["../../src/cli/pick.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG/D,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAU1E;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,SAAS,EAAE,SAAS,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAQxJ"}
|
package/dist/cli/pick.js
CHANGED
|
@@ -5,7 +5,12 @@ import { guardCancel } from "../utils/prompt";
|
|
|
5
5
|
import { StepKind, runDialogueValue } from "./dialogue";
|
|
6
6
|
import { c } from "./theme";
|
|
7
7
|
const PicksSchema = z.array(z.string());
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* @brief Builds the multi-select `pickOffers` asks through, by step id `selectEntries`.
|
|
10
|
+
*
|
|
11
|
+
* @param noun - What one entry is called, e.g. `skill`.
|
|
12
|
+
* @returns Dialogue with the step `selectEntries`.
|
|
13
|
+
*/
|
|
9
14
|
export function selectEntriesDialogue(noun) {
|
|
10
15
|
return {
|
|
11
16
|
steps: {
|
|
@@ -18,9 +23,13 @@ export function selectEntriesDialogue(noun) {
|
|
|
18
23
|
};
|
|
19
24
|
}
|
|
20
25
|
/**
|
|
21
|
-
* Asks which offers to install, each as `<key>@<source>`, so two sources
|
|
26
|
+
* @brief Asks which offers to install, each as `<key>@<source>`, so two sources
|
|
22
27
|
* offering one key stay apart. Exits when the prompt is cancelled.
|
|
23
28
|
*
|
|
29
|
+
* @param available - Offers to pick from.
|
|
30
|
+
* @param noun - What one entry is called, e.g. `skill`.
|
|
31
|
+
* @param answers - Preset answers by step id.
|
|
32
|
+
*
|
|
24
33
|
* @returns the picked requests, e.g. `["emphasise@g3n-skills"]`
|
|
25
34
|
*/
|
|
26
35
|
export async function pickOffers(available, noun, answers) {
|
package/dist/cli/pick.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pick.js","sourceRoot":"","sources":["../../src/cli/pick.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;AAE5B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAExC
|
|
1
|
+
{"version":3,"file":"pick.js","sourceRoot":"","sources":["../../src/cli/pick.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;AAE5B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO;QACL,KAAK,EAAE;YACL,aAAa,EAAE;gBACb,IAAI,EAAK,QAAQ,CAAC,WAAW;gBAC7B,OAAO,EAAE,UAAU,IAAI,eAAe;gBACtC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE;aAC3C;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAwB,SAAoC,EAAE,IAAY,EAAE,OAAyB;IACnI,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC;SAC9B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACxG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;QACxB,KAAK,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;QACtC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;KACjI,CAAC,CAAC,CAAC;IACN,OAAO,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5H,CAAC"}
|