@pristine-ts/cli 2.0.7 → 2.0.17
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/lib/cjs/bootstrap/build-staleness-prompt.js +12 -13
- package/dist/lib/cjs/bootstrap/build-staleness-prompt.js.map +1 -1
- package/dist/lib/cjs/bootstrap/init-prompt.js +16 -47
- package/dist/lib/cjs/bootstrap/init-prompt.js.map +1 -1
- package/dist/lib/cjs/cli.configuration-keys.js +24 -0
- package/dist/lib/cjs/cli.configuration-keys.js.map +1 -0
- package/dist/lib/cjs/cli.js +23 -10
- package/dist/lib/cjs/cli.js.map +1 -1
- package/dist/lib/cjs/cli.module.js +29 -1
- package/dist/lib/cjs/cli.module.js.map +1 -1
- package/dist/lib/cjs/commands/commands.js +6 -0
- package/dist/lib/cjs/commands/commands.js.map +1 -1
- package/dist/lib/cjs/commands/logs-alias.command.js +49 -0
- package/dist/lib/cjs/commands/logs-alias.command.js.map +1 -0
- package/dist/lib/cjs/commands/logs.command-options.js +72 -0
- package/dist/lib/cjs/commands/logs.command-options.js.map +1 -0
- package/dist/lib/cjs/commands/logs.command.js +102 -0
- package/dist/lib/cjs/commands/logs.command.js.map +1 -0
- package/dist/lib/cjs/commands/requests-alias.command.js +49 -0
- package/dist/lib/cjs/commands/requests-alias.command.js.map +1 -0
- package/dist/lib/cjs/commands/requests.command-options.js +26 -0
- package/dist/lib/cjs/commands/requests.command-options.js.map +1 -0
- package/dist/lib/cjs/commands/requests.command.js +88 -0
- package/dist/lib/cjs/commands/requests.command.js.map +1 -0
- package/dist/lib/cjs/commands/trace-alias.command.js +49 -0
- package/dist/lib/cjs/commands/trace-alias.command.js.map +1 -0
- package/dist/lib/cjs/commands/trace.command-options.js +59 -0
- package/dist/lib/cjs/commands/trace.command-options.js.map +1 -0
- package/dist/lib/cjs/commands/trace.command.js +84 -0
- package/dist/lib/cjs/commands/trace.command.js.map +1 -0
- package/dist/lib/cjs/config/config-loader.js +34 -13
- package/dist/lib/cjs/config/config-loader.js.map +1 -1
- package/dist/lib/cjs/decorators/command-parameter.decorator.js +40 -0
- package/dist/lib/cjs/decorators/command-parameter.decorator.js.map +1 -0
- package/dist/lib/cjs/decorators/decorators.js +18 -0
- package/dist/lib/cjs/decorators/decorators.js.map +1 -0
- package/dist/lib/cjs/enums/cli-decorator-metadata-keyname.enum.js +14 -0
- package/dist/lib/cjs/enums/cli-decorator-metadata-keyname.enum.js.map +1 -0
- package/dist/lib/cjs/enums/enums.js +19 -0
- package/dist/lib/cjs/enums/enums.js.map +1 -0
- package/dist/lib/cjs/enums/terminal-key-name.enum.js +21 -0
- package/dist/lib/cjs/enums/terminal-key-name.enum.js.map +1 -0
- package/dist/lib/cjs/errors/cli-error-code.enum.js +11 -1
- package/dist/lib/cjs/errors/cli-error-code.enum.js.map +1 -1
- package/dist/lib/cjs/errors/errors.js +1 -0
- package/dist/lib/cjs/errors/errors.js.map +1 -1
- package/dist/lib/cjs/errors/prompt-cancelled.error.js +25 -0
- package/dist/lib/cjs/errors/prompt-cancelled.error.js.map +1 -0
- package/dist/lib/cjs/event-handlers/cli.event-handler.js +21 -65
- package/dist/lib/cjs/event-handlers/cli.event-handler.js.map +1 -1
- package/dist/lib/cjs/event-handlers/event-handlers.js +1 -0
- package/dist/lib/cjs/event-handlers/event-handlers.js.map +1 -1
- package/dist/lib/cjs/event-handlers/repl-start.event-handler.js +280 -0
- package/dist/lib/cjs/event-handlers/repl-start.event-handler.js.map +1 -0
- package/dist/lib/cjs/event-payloads/event-payloads.js +1 -0
- package/dist/lib/cjs/event-payloads/event-payloads.js.map +1 -1
- package/dist/lib/cjs/event-payloads/start-repl.event-payload.js +19 -0
- package/dist/lib/cjs/event-payloads/start-repl.event-payload.js.map +1 -0
- package/dist/lib/cjs/interfaces/interfaces.js +1 -0
- package/dist/lib/cjs/interfaces/interfaces.js.map +1 -1
- package/dist/lib/cjs/interfaces/terminal-key.interface.js +3 -0
- package/dist/lib/cjs/interfaces/terminal-key.interface.js.map +1 -0
- package/dist/lib/cjs/managers/cli-prompt.manager.js +181 -15
- package/dist/lib/cjs/managers/cli-prompt.manager.js.map +1 -1
- package/dist/lib/cjs/managers/managers.js +1 -0
- package/dist/lib/cjs/managers/managers.js.map +1 -1
- package/dist/lib/cjs/managers/terminal-key-reader.manager.js +99 -0
- package/dist/lib/cjs/managers/terminal-key-reader.manager.js.map +1 -0
- package/dist/lib/cjs/mappers/command-event.mapper.js +48 -8
- package/dist/lib/cjs/mappers/command-event.mapper.js.map +1 -1
- package/dist/lib/cjs/mappers/mappers.js +1 -0
- package/dist/lib/cjs/mappers/mappers.js.map +1 -1
- package/dist/lib/cjs/mappers/repl-start-event.mapper.js +80 -0
- package/dist/lib/cjs/mappers/repl-start-event.mapper.js.map +1 -0
- package/dist/lib/cjs/options/command-parameter.options.js +3 -0
- package/dist/lib/cjs/options/command-parameter.options.js.map +1 -0
- package/dist/lib/cjs/options/options.js +1 -0
- package/dist/lib/cjs/options/options.js.map +1 -1
- package/dist/lib/cjs/services/command-argument-resolver.js +62 -0
- package/dist/lib/cjs/services/command-argument-resolver.js.map +1 -0
- package/dist/lib/cjs/services/command-options-resolver.js +114 -0
- package/dist/lib/cjs/services/command-options-resolver.js.map +1 -0
- package/dist/lib/cjs/services/command-parameter-prompter.js +311 -0
- package/dist/lib/cjs/services/command-parameter-prompter.js.map +1 -0
- package/dist/lib/cjs/services/services.js +20 -0
- package/dist/lib/cjs/services/services.js.map +1 -0
- package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/lib/cjs/types/start-repl-event-response.type.js +13 -0
- package/dist/lib/cjs/types/start-repl-event-response.type.js.map +1 -0
- package/dist/lib/cjs/types/types.js +1 -0
- package/dist/lib/cjs/types/types.js.map +1 -1
- package/dist/lib/cjs/utils/boolean-answer-parser.js +25 -0
- package/dist/lib/cjs/utils/boolean-answer-parser.js.map +1 -0
- package/dist/lib/cjs/utils/pristine-argv.js +87 -0
- package/dist/lib/cjs/utils/pristine-argv.js.map +1 -0
- package/dist/lib/cjs/utils/terminal-key-decoder.js +71 -0
- package/dist/lib/cjs/utils/terminal-key-decoder.js.map +1 -0
- package/dist/lib/esm/bootstrap/build-staleness-prompt.js +12 -13
- package/dist/lib/esm/bootstrap/build-staleness-prompt.js.map +1 -1
- package/dist/lib/esm/bootstrap/init-prompt.js +16 -47
- package/dist/lib/esm/bootstrap/init-prompt.js.map +1 -1
- package/dist/lib/esm/cli.configuration-keys.js +21 -0
- package/dist/lib/esm/cli.configuration-keys.js.map +1 -0
- package/dist/lib/esm/cli.js +23 -10
- package/dist/lib/esm/cli.js.map +1 -1
- package/dist/lib/esm/cli.module.js +29 -1
- package/dist/lib/esm/cli.module.js.map +1 -1
- package/dist/lib/esm/commands/commands.js +6 -0
- package/dist/lib/esm/commands/commands.js.map +1 -1
- package/dist/lib/esm/commands/logs-alias.command.js +46 -0
- package/dist/lib/esm/commands/logs-alias.command.js.map +1 -0
- package/dist/lib/esm/commands/logs.command-options.js +68 -0
- package/dist/lib/esm/commands/logs.command-options.js.map +1 -0
- package/dist/lib/esm/commands/logs.command.js +99 -0
- package/dist/lib/esm/commands/logs.command.js.map +1 -0
- package/dist/lib/esm/commands/requests-alias.command.js +46 -0
- package/dist/lib/esm/commands/requests-alias.command.js.map +1 -0
- package/dist/lib/esm/commands/requests.command-options.js +22 -0
- package/dist/lib/esm/commands/requests.command-options.js.map +1 -0
- package/dist/lib/esm/commands/requests.command.js +85 -0
- package/dist/lib/esm/commands/requests.command.js.map +1 -0
- package/dist/lib/esm/commands/trace-alias.command.js +46 -0
- package/dist/lib/esm/commands/trace-alias.command.js.map +1 -0
- package/dist/lib/esm/commands/trace.command-options.js +55 -0
- package/dist/lib/esm/commands/trace.command-options.js.map +1 -0
- package/dist/lib/esm/commands/trace.command.js +81 -0
- package/dist/lib/esm/commands/trace.command.js.map +1 -0
- package/dist/lib/esm/config/config-loader.js +34 -13
- package/dist/lib/esm/config/config-loader.js.map +1 -1
- package/dist/lib/esm/decorators/command-parameter.decorator.js +36 -0
- package/dist/lib/esm/decorators/command-parameter.decorator.js.map +1 -0
- package/dist/lib/esm/decorators/decorators.js +2 -0
- package/dist/lib/esm/decorators/decorators.js.map +1 -0
- package/dist/lib/esm/enums/cli-decorator-metadata-keyname.enum.js +11 -0
- package/dist/lib/esm/enums/cli-decorator-metadata-keyname.enum.js.map +1 -0
- package/dist/lib/esm/enums/enums.js +3 -0
- package/dist/lib/esm/enums/enums.js.map +1 -0
- package/dist/lib/esm/enums/terminal-key-name.enum.js +18 -0
- package/dist/lib/esm/enums/terminal-key-name.enum.js.map +1 -0
- package/dist/lib/esm/errors/cli-error-code.enum.js +11 -1
- package/dist/lib/esm/errors/cli-error-code.enum.js.map +1 -1
- package/dist/lib/esm/errors/errors.js +1 -0
- package/dist/lib/esm/errors/errors.js.map +1 -1
- package/dist/lib/esm/errors/prompt-cancelled.error.js +21 -0
- package/dist/lib/esm/errors/prompt-cancelled.error.js.map +1 -0
- package/dist/lib/esm/event-handlers/cli.event-handler.js +22 -66
- package/dist/lib/esm/event-handlers/cli.event-handler.js.map +1 -1
- package/dist/lib/esm/event-handlers/event-handlers.js +1 -0
- package/dist/lib/esm/event-handlers/event-handlers.js.map +1 -1
- package/dist/lib/esm/event-handlers/repl-start.event-handler.js +244 -0
- package/dist/lib/esm/event-handlers/repl-start.event-handler.js.map +1 -0
- package/dist/lib/esm/event-payloads/event-payloads.js +1 -0
- package/dist/lib/esm/event-payloads/event-payloads.js.map +1 -1
- package/dist/lib/esm/event-payloads/start-repl.event-payload.js +15 -0
- package/dist/lib/esm/event-payloads/start-repl.event-payload.js.map +1 -0
- package/dist/lib/esm/interfaces/interfaces.js +1 -0
- package/dist/lib/esm/interfaces/interfaces.js.map +1 -1
- package/dist/lib/esm/interfaces/terminal-key.interface.js +2 -0
- package/dist/lib/esm/interfaces/terminal-key.interface.js.map +1 -0
- package/dist/lib/esm/managers/cli-prompt.manager.js +182 -16
- package/dist/lib/esm/managers/cli-prompt.manager.js.map +1 -1
- package/dist/lib/esm/managers/managers.js +1 -0
- package/dist/lib/esm/managers/managers.js.map +1 -1
- package/dist/lib/esm/managers/terminal-key-reader.manager.js +96 -0
- package/dist/lib/esm/managers/terminal-key-reader.manager.js.map +1 -0
- package/dist/lib/esm/mappers/command-event.mapper.js +49 -9
- package/dist/lib/esm/mappers/command-event.mapper.js.map +1 -1
- package/dist/lib/esm/mappers/mappers.js +1 -0
- package/dist/lib/esm/mappers/mappers.js.map +1 -1
- package/dist/lib/esm/mappers/repl-start-event.mapper.js +77 -0
- package/dist/lib/esm/mappers/repl-start-event.mapper.js.map +1 -0
- package/dist/lib/esm/options/command-parameter.options.js +2 -0
- package/dist/lib/esm/options/command-parameter.options.js.map +1 -0
- package/dist/lib/esm/options/options.js +1 -0
- package/dist/lib/esm/options/options.js.map +1 -1
- package/dist/lib/esm/services/command-argument-resolver.js +59 -0
- package/dist/lib/esm/services/command-argument-resolver.js.map +1 -0
- package/dist/lib/esm/services/command-options-resolver.js +111 -0
- package/dist/lib/esm/services/command-options-resolver.js.map +1 -0
- package/dist/lib/esm/services/command-parameter-prompter.js +308 -0
- package/dist/lib/esm/services/command-parameter-prompter.js.map +1 -0
- package/dist/lib/esm/services/services.js +4 -0
- package/dist/lib/esm/services/services.js.map +1 -0
- package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/lib/esm/types/start-repl-event-response.type.js +9 -0
- package/dist/lib/esm/types/start-repl-event-response.type.js.map +1 -0
- package/dist/lib/esm/types/types.js +1 -0
- package/dist/lib/esm/types/types.js.map +1 -1
- package/dist/lib/esm/utils/boolean-answer-parser.js +21 -0
- package/dist/lib/esm/utils/boolean-answer-parser.js.map +1 -0
- package/dist/lib/esm/utils/pristine-argv.js +50 -0
- package/dist/lib/esm/utils/pristine-argv.js.map +1 -0
- package/dist/lib/esm/utils/terminal-key-decoder.js +67 -0
- package/dist/lib/esm/utils/terminal-key-decoder.js.map +1 -0
- package/dist/types/bootstrap/build-staleness-prompt.d.ts +3 -3
- package/dist/types/bootstrap/init-prompt.d.ts +5 -5
- package/dist/types/cli.configuration-keys.d.ts +32 -0
- package/dist/types/cli.d.ts +8 -4
- package/dist/types/cli.module.d.ts +4 -0
- package/dist/types/commands/commands.d.ts +6 -0
- package/dist/types/commands/logs-alias.command.d.ts +14 -0
- package/dist/types/commands/logs.command-options.d.ts +38 -0
- package/dist/types/commands/logs.command.d.ts +31 -0
- package/dist/types/commands/requests-alias.command.d.ts +14 -0
- package/dist/types/commands/requests.command-options.d.ts +8 -0
- package/dist/types/commands/requests.command.d.ts +25 -0
- package/dist/types/commands/trace-alias.command.d.ts +14 -0
- package/dist/types/commands/trace.command-options.d.ts +31 -0
- package/dist/types/commands/trace.command.d.ts +21 -0
- package/dist/types/config/config-loader.d.ts +15 -3
- package/dist/types/decorators/command-parameter.decorator.d.ts +30 -0
- package/dist/types/decorators/decorators.d.ts +1 -0
- package/dist/types/enums/cli-decorator-metadata-keyname.enum.d.ts +9 -0
- package/dist/types/enums/enums.d.ts +2 -0
- package/dist/types/enums/terminal-key-name.enum.d.ts +16 -0
- package/dist/types/errors/cli-error-code.enum.d.ts +12 -2
- package/dist/types/errors/errors.d.ts +1 -0
- package/dist/types/errors/prompt-cancelled.error.d.ts +13 -0
- package/dist/types/event-handlers/cli.event-handler.d.ts +16 -13
- package/dist/types/event-handlers/event-handlers.d.ts +1 -0
- package/dist/types/event-handlers/repl-start.event-handler.d.ts +70 -0
- package/dist/types/event-payloads/event-payloads.d.ts +1 -0
- package/dist/types/event-payloads/start-repl.event-payload.d.ts +13 -0
- package/dist/types/interfaces/interfaces.d.ts +1 -0
- package/dist/types/interfaces/terminal-key.interface.d.ts +11 -0
- package/dist/types/managers/cli-prompt.manager.d.ts +63 -6
- package/dist/types/managers/managers.d.ts +1 -0
- package/dist/types/managers/terminal-key-reader.manager.d.ts +31 -0
- package/dist/types/mappers/command-event.mapper.d.ts +10 -1
- package/dist/types/mappers/mappers.d.ts +1 -0
- package/dist/types/mappers/repl-start-event.mapper.d.ts +28 -0
- package/dist/types/options/command-parameter.options.d.ts +29 -0
- package/dist/types/options/options.d.ts +1 -0
- package/dist/types/services/command-argument-resolver.d.ts +24 -0
- package/dist/types/services/command-options-resolver.d.ts +35 -0
- package/dist/types/services/command-parameter-prompter.d.ts +113 -0
- package/dist/types/services/services.d.ts +3 -0
- package/dist/types/types/start-repl-event-response.type.d.ts +10 -0
- package/dist/types/types/types.d.ts +1 -0
- package/dist/types/utils/boolean-answer-parser.d.ts +11 -0
- package/dist/types/utils/pristine-argv.d.ts +33 -0
- package/dist/types/utils/terminal-key-decoder.d.ts +28 -0
- package/package.json +16 -12
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StartReplEventPayload = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Payload that signals "launch the interactive REPL." Produced by `ReplStartEventMapper`
|
|
6
|
+
* for argv shapes with no command (`pristine`) or with the explicit `repl` command
|
|
7
|
+
* (`pristine repl`). Consumed by `ReplStartEventHandler` which runs the readline loop
|
|
8
|
+
* for the rest of the process lifetime.
|
|
9
|
+
*
|
|
10
|
+
* The payload carries the `scriptPath` (argv[1]) for parity with `CommandEventPayload`
|
|
11
|
+
* and for diagnostics; the REPL itself reads its input from stdin, not from the payload.
|
|
12
|
+
*/
|
|
13
|
+
class StartReplEventPayload {
|
|
14
|
+
constructor(scriptPath) {
|
|
15
|
+
this.scriptPath = scriptPath;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.StartReplEventPayload = StartReplEventPayload;
|
|
19
|
+
//# sourceMappingURL=start-repl.event-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-repl.event-payload.js","sourceRoot":"","sources":["../../../../src/event-payloads/start-repl.event-payload.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;GAQG;AACH,MAAa,qBAAqB;IAChC,YAAmB,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;IACrC,CAAC;CACF;AAHD,sDAGC"}
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./command.interface"), exports);
|
|
18
|
+
__exportStar(require("./terminal-key.interface"), exports);
|
|
18
19
|
//# sourceMappingURL=interfaces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC"}
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../../src/interfaces/interfaces.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,2DAAyC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-key.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/terminal-key.interface.ts"],"names":[],"mappings":""}
|
|
@@ -38,6 +38,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
38
38
|
return result;
|
|
39
39
|
};
|
|
40
40
|
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
41
44
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
42
45
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
43
46
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -47,6 +50,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
47
50
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
48
51
|
});
|
|
49
52
|
};
|
|
53
|
+
var CliPrompt_1;
|
|
50
54
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
55
|
exports.CliPrompt = void 0;
|
|
52
56
|
const tsyringe_1 = require("tsyringe");
|
|
@@ -56,11 +60,24 @@ const readline = __importStar(require("node:readline/promises"));
|
|
|
56
60
|
const node_readline_1 = require("node:readline");
|
|
57
61
|
const node_process_1 = require("node:process");
|
|
58
62
|
const console_readline_options_1 = require("../options/console-readline.options");
|
|
63
|
+
const terminal_key_reader_manager_1 = require("./terminal-key-reader.manager");
|
|
64
|
+
const terminal_key_name_enum_1 = require("../enums/terminal-key-name.enum");
|
|
65
|
+
const boolean_answer_parser_1 = require("../utils/boolean-answer-parser");
|
|
66
|
+
const prompt_cancelled_error_1 = require("../errors/prompt-cancelled.error");
|
|
59
67
|
/**
|
|
60
|
-
* Interactive
|
|
61
|
-
*
|
|
68
|
+
* Interactive terminal prompts for CLI commands, implemented entirely on Node's `readline`
|
|
69
|
+
* and raw-mode stdin — no third-party prompt library. Line-based prompts (`readLine`,
|
|
70
|
+
* `input`, `confirm`) go through `readline/promises`; the keystroke-level prompts (`select`
|
|
71
|
+
* arrow menu, masked `readSecret`) go through {@link TerminalKeyReader}.
|
|
72
|
+
*
|
|
73
|
+
* `Ctrl+C` rejects with {@link PromptCancelledError} across all of them — the line prompts
|
|
74
|
+
* via a `readline` SIGINT handler, the raw-mode prompts via the key reader — so callers get
|
|
75
|
+
* one consistent cancellation signal.
|
|
62
76
|
*/
|
|
63
|
-
let CliPrompt = class CliPrompt {
|
|
77
|
+
let CliPrompt = CliPrompt_1 = class CliPrompt {
|
|
78
|
+
constructor(terminalKeyReader) {
|
|
79
|
+
this.terminalKeyReader = terminalKeyReader;
|
|
80
|
+
}
|
|
64
81
|
/**
|
|
65
82
|
* Reads a string from stdin synchronously. Returns whatever `process.stdin.read()`
|
|
66
83
|
* gives back (which may be `null` when no data is buffered).
|
|
@@ -71,29 +88,178 @@ let CliPrompt = class CliPrompt {
|
|
|
71
88
|
/**
|
|
72
89
|
* Reads a line from stdin after displaying a prompt. When
|
|
73
90
|
* `options.showCharactersOnTyping` is false, the answered line is cleared and replaced
|
|
74
|
-
* with a masked echo so the typed value isn't left visible on screen
|
|
91
|
+
* with a masked echo so the typed value isn't left visible on screen (a post-input clear,
|
|
92
|
+
* not true keystroke suppression — use {@link readSecret} for real masking).
|
|
75
93
|
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
94
|
+
* `Ctrl+C` rejects with {@link PromptCancelledError}: registering a `SIGINT` listener on
|
|
95
|
+
* the readline interface overrides Node's default interrupt handling, turning it into a
|
|
96
|
+
* clean rejection rather than a hung promise.
|
|
79
97
|
*/
|
|
80
98
|
readLine(question_1) {
|
|
81
99
|
return __awaiter(this, arguments, void 0, function* (question, options = new console_readline_options_1.ConsoleReadlineOptions()) {
|
|
82
100
|
const rl = readline.createInterface({ input: node_process_1.stdin, output: node_process_1.stdout });
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
101
|
+
try {
|
|
102
|
+
const answer = yield new Promise((resolve, reject) => {
|
|
103
|
+
rl.on("SIGINT", () => reject(new prompt_cancelled_error_1.PromptCancelledError()));
|
|
104
|
+
rl.question(question).then(resolve, reject);
|
|
105
|
+
});
|
|
106
|
+
if (!options.showCharactersOnTyping) {
|
|
107
|
+
(0, node_readline_1.moveCursor)(node_process_1.stdout, 0, -1);
|
|
108
|
+
(0, node_readline_1.clearLine)(node_process_1.stdout, 0);
|
|
109
|
+
process.stdout.write(`${question} [******]\n`);
|
|
110
|
+
}
|
|
111
|
+
return answer;
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
rl.close();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Asks a free-text question, optionally with a default. The default is shown as a hint and
|
|
120
|
+
* returned verbatim when the user submits an empty line. The answer is trimmed.
|
|
121
|
+
*/
|
|
122
|
+
input(message, defaultValue) {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
const suffix = defaultValue !== undefined && defaultValue !== ""
|
|
125
|
+
? ` ${CliPrompt_1.DIM}(${defaultValue})${CliPrompt_1.RESET}`
|
|
126
|
+
: "";
|
|
127
|
+
const answer = (yield this.readLine(`${message}${suffix} `)).trim();
|
|
128
|
+
if (answer.length === 0 && defaultValue !== undefined) {
|
|
129
|
+
return defaultValue;
|
|
88
130
|
}
|
|
89
|
-
rl.close();
|
|
90
131
|
return answer;
|
|
91
132
|
});
|
|
92
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Asks a yes/no question. An empty answer takes the default; anything `BooleanAnswerParser`
|
|
136
|
+
* understands (`y`/`yes`/`true`/`1`, `n`/`no`/`false`/`0`) is accepted; anything else is
|
|
137
|
+
* re-asked. The default is shown capitalized in the `(Y/n)` / `(y/N)` hint.
|
|
138
|
+
*/
|
|
139
|
+
confirm(message_1) {
|
|
140
|
+
return __awaiter(this, arguments, void 0, function* (message, defaultValue = true) {
|
|
141
|
+
const hint = defaultValue ? "(Y/n)" : "(y/N)";
|
|
142
|
+
for (;;) {
|
|
143
|
+
const raw = (yield this.readLine(`${message} ${hint} `)).trim();
|
|
144
|
+
if (raw.length === 0) {
|
|
145
|
+
return defaultValue;
|
|
146
|
+
}
|
|
147
|
+
const parsed = boolean_answer_parser_1.BooleanAnswerParser.parse(raw);
|
|
148
|
+
if (parsed !== undefined) {
|
|
149
|
+
return parsed;
|
|
150
|
+
}
|
|
151
|
+
process.stdout.write("Please answer yes (y) or no (n).\n");
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Presents an arrow-key menu and returns the chosen choice's `value`. `↑`/`↓` move the
|
|
157
|
+
* highlight (wrapping at the ends), `Enter` selects, `Ctrl+C` cancels. When `defaultValue`
|
|
158
|
+
* matches a choice, the menu starts on it. The cursor is hidden while the menu is active
|
|
159
|
+
* and restored afterward.
|
|
160
|
+
*/
|
|
161
|
+
select(message, choices, defaultValue) {
|
|
162
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
163
|
+
if (choices.length === 0) {
|
|
164
|
+
throw new Error("CliPrompt.select requires at least one choice.");
|
|
165
|
+
}
|
|
166
|
+
const defaultIndex = choices.findIndex((choice) => choice.value === defaultValue);
|
|
167
|
+
let active = defaultIndex >= 0 ? defaultIndex : 0;
|
|
168
|
+
process.stdout.write(CliPrompt_1.HIDE_CURSOR);
|
|
169
|
+
process.stdout.write(`${CliPrompt_1.CYAN}?${CliPrompt_1.RESET} ${message}\n`);
|
|
170
|
+
this.renderChoices(choices, active);
|
|
171
|
+
try {
|
|
172
|
+
return yield this.terminalKeyReader.read((key, resolve) => {
|
|
173
|
+
if (key.name === terminal_key_name_enum_1.TerminalKeyName.Up) {
|
|
174
|
+
active = (active - 1 + choices.length) % choices.length;
|
|
175
|
+
this.repaintChoices(choices, active);
|
|
176
|
+
}
|
|
177
|
+
else if (key.name === terminal_key_name_enum_1.TerminalKeyName.Down) {
|
|
178
|
+
active = (active + 1) % choices.length;
|
|
179
|
+
this.repaintChoices(choices, active);
|
|
180
|
+
}
|
|
181
|
+
else if (key.name === terminal_key_name_enum_1.TerminalKeyName.Enter) {
|
|
182
|
+
resolve(choices[active].value);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
process.stdout.write(CliPrompt_1.SHOW_CURSOR);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Reads a secret (password, token, …) from stdin with the typed characters masked as `*`.
|
|
193
|
+
* Real keystroke suppression via raw mode (unlike {@link readLine}'s post-input clear):
|
|
194
|
+
* each character echoes a `*`, `Backspace` erases one, `Enter` submits, `Ctrl+C` cancels.
|
|
195
|
+
* The value is returned untrimmed — a secret may legitimately contain surrounding
|
|
196
|
+
* whitespace.
|
|
197
|
+
*/
|
|
198
|
+
readSecret(question) {
|
|
199
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
200
|
+
process.stdout.write(question);
|
|
201
|
+
let value = "";
|
|
202
|
+
try {
|
|
203
|
+
yield this.terminalKeyReader.read((key, resolve) => {
|
|
204
|
+
if (key.name === terminal_key_name_enum_1.TerminalKeyName.Enter) {
|
|
205
|
+
resolve(undefined);
|
|
206
|
+
}
|
|
207
|
+
else if (key.name === terminal_key_name_enum_1.TerminalKeyName.Backspace) {
|
|
208
|
+
if (value.length > 0) {
|
|
209
|
+
value = value.slice(0, -1);
|
|
210
|
+
process.stdout.write("\b \b");
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else if (key.name === terminal_key_name_enum_1.TerminalKeyName.Character) {
|
|
214
|
+
value += key.sequence;
|
|
215
|
+
process.stdout.write("*");
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
process.stdout.write("\n");
|
|
221
|
+
}
|
|
222
|
+
return value;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Writes the choice rows, highlighting the active one with a colored pointer. Each row is
|
|
227
|
+
* cleared before it's written so a repaint never leaves a longer previous label behind.
|
|
228
|
+
* @private
|
|
229
|
+
*/
|
|
230
|
+
renderChoices(choices, active) {
|
|
231
|
+
choices.forEach((choice, index) => {
|
|
232
|
+
(0, node_readline_1.clearLine)(process.stdout, 0);
|
|
233
|
+
(0, node_readline_1.cursorTo)(process.stdout, 0);
|
|
234
|
+
if (index === active) {
|
|
235
|
+
process.stdout.write(`${CliPrompt_1.CYAN}${CliPrompt_1.POINTER} ${choice.name}${CliPrompt_1.RESET}\n`);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
process.stdout.write(` ${choice.name}\n`);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Moves the cursor back up over the previously-rendered choice rows and rewrites them, so
|
|
244
|
+
* the menu updates in place as the selection moves.
|
|
245
|
+
* @private
|
|
246
|
+
*/
|
|
247
|
+
repaintChoices(choices, active) {
|
|
248
|
+
(0, node_readline_1.moveCursor)(process.stdout, 0, -choices.length);
|
|
249
|
+
this.renderChoices(choices, active);
|
|
250
|
+
}
|
|
93
251
|
};
|
|
94
252
|
exports.CliPrompt = CliPrompt;
|
|
95
|
-
|
|
253
|
+
// ANSI constants, matching the conventions used by CliSpinner / CliProgressBar.
|
|
254
|
+
CliPrompt.CYAN = "\x1b[36m";
|
|
255
|
+
CliPrompt.DIM = "\x1b[2m";
|
|
256
|
+
CliPrompt.RESET = "\x1b[0m";
|
|
257
|
+
CliPrompt.HIDE_CURSOR = "\x1B[?25l";
|
|
258
|
+
CliPrompt.SHOW_CURSOR = "\x1B[?25h";
|
|
259
|
+
CliPrompt.POINTER = "❯";
|
|
260
|
+
exports.CliPrompt = CliPrompt = CliPrompt_1 = __decorate([
|
|
96
261
|
(0, tsyringe_1.injectable)(),
|
|
97
|
-
(0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname)
|
|
262
|
+
(0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
|
|
263
|
+
__metadata("design:paramtypes", [terminal_key_reader_manager_1.TerminalKeyReader])
|
|
98
264
|
], CliPrompt);
|
|
99
265
|
//# sourceMappingURL=cli-prompt.manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-prompt.manager.js","sourceRoot":"","sources":["../../../../src/managers/cli-prompt.manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli-prompt.manager.js","sourceRoot":"","sources":["../../../../src/managers/cli-prompt.manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,5 +18,6 @@ __exportStar(require("./cli-output.manager"), exports);
|
|
|
18
18
|
__exportStar(require("./cli-progress-bar.manager"), exports);
|
|
19
19
|
__exportStar(require("./cli-prompt.manager"), exports);
|
|
20
20
|
__exportStar(require("./cli-spinner.manager"), exports);
|
|
21
|
+
__exportStar(require("./terminal-key-reader.manager"), exports);
|
|
21
22
|
__exportStar(require("./shell.manager"), exports);
|
|
22
23
|
//# sourceMappingURL=managers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,6DAA2C;AAC3C,uDAAqC;AACrC,wDAAsC;AACtC,kDAAgC"}
|
|
1
|
+
{"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,6DAA2C;AAC3C,uDAAqC;AACrC,wDAAsC;AACtC,gEAA8C;AAC9C,kDAAgC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TerminalKeyReader = void 0;
|
|
10
|
+
const tsyringe_1 = require("tsyringe");
|
|
11
|
+
const common_1 = require("@pristine-ts/common");
|
|
12
|
+
const cli_module_keyname_1 = require("../cli.module.keyname");
|
|
13
|
+
const terminal_key_name_enum_1 = require("../enums/terminal-key-name.enum");
|
|
14
|
+
const terminal_key_decoder_1 = require("../utils/terminal-key-decoder");
|
|
15
|
+
const prompt_cancelled_error_1 = require("../errors/prompt-cancelled.error");
|
|
16
|
+
/**
|
|
17
|
+
* Owns the raw-mode keystroke reading the interactive prompts need (arrow-key `select`,
|
|
18
|
+
* masked `readSecret`) — the one place in the CLI that flips stdin into raw mode. Node's
|
|
19
|
+
* stock `readline` is line-buffered and echoes input, so it can't drive an arrow-key menu
|
|
20
|
+
* or suppress a password's characters; this reads keys one at a time instead.
|
|
21
|
+
*
|
|
22
|
+
* Two responsibilities are handled centrally so callers don't each reimplement them:
|
|
23
|
+
* - **Cancellation:** `Ctrl+C` rejects the read with {@link PromptCancelledError}.
|
|
24
|
+
* - **Terminal restore:** raw mode is entered on start and restored in every exit path,
|
|
25
|
+
* so a thrown handler or a cancellation never leaves the terminal in raw mode.
|
|
26
|
+
*
|
|
27
|
+
* The `input`/`output` fields default to the process streams and exist as a seam so tests
|
|
28
|
+
* can drive synthetic keystrokes without a real TTY.
|
|
29
|
+
*/
|
|
30
|
+
let TerminalKeyReader = class TerminalKeyReader {
|
|
31
|
+
constructor() {
|
|
32
|
+
this.input = process.stdin;
|
|
33
|
+
this.output = process.stdout;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Whether both stdin and stdout are interactive terminals. Raw-mode reading is only
|
|
37
|
+
* meaningful on a real TTY; callers fall back (or skip prompting) when this is false.
|
|
38
|
+
*/
|
|
39
|
+
isInteractive() {
|
|
40
|
+
return Boolean(this.input.isTTY) && Boolean(this.output.isTTY);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Reads keystrokes in raw mode, handing each decoded {@link TerminalKey} to `onKey` until
|
|
44
|
+
* `onKey` ends the read by invoking its `resolve` callback with the result. Resolves to
|
|
45
|
+
* that value; rejects with {@link PromptCancelledError} on `Ctrl+C`. Raw mode is entered
|
|
46
|
+
* on start and restored to its prior state in every exit path.
|
|
47
|
+
*/
|
|
48
|
+
read(onKey) {
|
|
49
|
+
const input = this.input;
|
|
50
|
+
const wasRaw = input.isRaw === true;
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
let settled = false;
|
|
53
|
+
const cleanup = () => {
|
|
54
|
+
input.removeListener("data", onData);
|
|
55
|
+
if (input.isTTY && typeof input.setRawMode === "function") {
|
|
56
|
+
input.setRawMode(wasRaw);
|
|
57
|
+
}
|
|
58
|
+
input.pause();
|
|
59
|
+
};
|
|
60
|
+
const settle = (run) => {
|
|
61
|
+
if (settled) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
settled = true;
|
|
65
|
+
cleanup();
|
|
66
|
+
run();
|
|
67
|
+
};
|
|
68
|
+
const onData = (data) => {
|
|
69
|
+
for (const key of terminal_key_decoder_1.TerminalKeyDecoder.decode(data.toString())) {
|
|
70
|
+
if (key.name === terminal_key_name_enum_1.TerminalKeyName.CtrlC) {
|
|
71
|
+
settle(() => reject(new prompt_cancelled_error_1.PromptCancelledError()));
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
onKey(key, (value) => settle(() => resolve(value)));
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
settle(() => reject(error));
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (settled) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
if (input.isTTY && typeof input.setRawMode === "function") {
|
|
87
|
+
input.setRawMode(true);
|
|
88
|
+
}
|
|
89
|
+
input.resume();
|
|
90
|
+
input.on("data", onData);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
exports.TerminalKeyReader = TerminalKeyReader;
|
|
95
|
+
exports.TerminalKeyReader = TerminalKeyReader = __decorate([
|
|
96
|
+
(0, tsyringe_1.injectable)(),
|
|
97
|
+
(0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname)
|
|
98
|
+
], TerminalKeyReader);
|
|
99
|
+
//# sourceMappingURL=terminal-key-reader.manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-key-reader.manager.js","sourceRoot":"","sources":["../../../../src/managers/terminal-key-reader.manager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAoC;AACpC,gDAAiD;AACjD,8DAAuD;AAEvD,4EAAgE;AAChE,wEAAiE;AACjE,6EAAsE;AAEtE;;;;;;;;;;;;;GAaG;AAGI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAAvB;QACL,UAAK,GAAsB,OAAO,CAAC,KAAK,CAAC;QACzC,WAAM,GAAuB,OAAO,CAAC,MAAM,CAAC;IAmE9C,CAAC;IAjEC;;;OAGG;IACH,aAAa;QACX,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAI,KAA8D;QACpE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;QAEpC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACrC,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;oBAC1D,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC3B,CAAC;gBACD,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,CAAC,GAAe,EAAE,EAAE;gBACjC,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,GAAG,EAAE,CAAC;YACR,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,CAAC,IAAqB,EAAE,EAAE;gBACvC,KAAK,MAAM,GAAG,IAAI,yCAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;oBAC7D,IAAI,GAAG,CAAC,IAAI,KAAK,wCAAe,CAAC,KAAK,EAAE,CAAC;wBACvC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,6CAAoB,EAAE,CAAC,CAAC,CAAC;wBACjD,OAAO;oBACT,CAAC;oBAED,IAAI,CAAC;wBACH,KAAK,CAAC,GAAG,EAAE,CAAC,KAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACzD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAc,CAAC,CAAC,CAAC;wBACrC,OAAO;oBACT,CAAC;oBAED,IAAI,OAAO,EAAE,CAAC;wBACZ,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBAC1D,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,KAAK,CAAC,MAAM,EAAE,CAAC;YACf,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AArEY,8CAAiB;4BAAjB,iBAAiB;IAF7B,IAAA,qBAAU,GAAE;IACZ,IAAA,qBAAY,EAAC,qCAAgB,CAAC;GAClB,iBAAiB,CAqE7B"}
|
|
@@ -5,6 +5,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
8
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
12
|
exports.CommandEventMapper = void 0;
|
|
10
13
|
const core_1 = require("@pristine-ts/core");
|
|
@@ -12,10 +15,30 @@ const tsyringe_1 = require("tsyringe");
|
|
|
12
15
|
const command_event_payload_1 = require("../event-payloads/command.event-payload");
|
|
13
16
|
const common_1 = require("@pristine-ts/common");
|
|
14
17
|
const cli_module_keyname_1 = require("../cli.module.keyname");
|
|
15
|
-
const
|
|
18
|
+
const pristine_argv_1 = require("../utils/pristine-argv");
|
|
16
19
|
let CommandEventMapper = class CommandEventMapper {
|
|
20
|
+
constructor(eventIdManager) {
|
|
21
|
+
this.eventIdManager = eventIdManager;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Matches argv that names an explicit command. The no-command shape and the bare
|
|
25
|
+
* `pristine repl` form are deliberately rejected here; `ReplStartEventMapper` claims
|
|
26
|
+
* those. Commands typed inside the interactive session are also re-dispatched under
|
|
27
|
+
* `Cli`, so this mapper handles them too. Argv parsing is delegated to `PristineArgv`,
|
|
28
|
+
* which scans for the bin token rather than relying on positional indexing.
|
|
29
|
+
*/
|
|
17
30
|
supportsMapping(rawEvent, executionContext) {
|
|
18
|
-
|
|
31
|
+
if (executionContext.keyname !== core_1.ExecutionContextKeynameEnum.Cli) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(rawEvent) === false) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const argv = new pristine_argv_1.PristineArgv(rawEvent);
|
|
38
|
+
if (argv.isValid === false) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
return argv.userArgs.length >= 1 && argv.userArgs[0] !== "repl";
|
|
19
42
|
}
|
|
20
43
|
/**
|
|
21
44
|
* Inspired from: https://github.com/eveningkid/args-parser
|
|
@@ -23,21 +46,31 @@ let CommandEventMapper = class CommandEventMapper {
|
|
|
23
46
|
* @param executionContext
|
|
24
47
|
*/
|
|
25
48
|
map(rawEvent, executionContext) {
|
|
49
|
+
// `supportsMapping` already filters out the unsupported shapes — these guards stay only
|
|
50
|
+
// as a defence in case the pipeline ever invokes `map` without consulting `supportsMapping`.
|
|
26
51
|
if (Array.isArray(rawEvent) === false) {
|
|
27
52
|
throw new Error("If using the 'CLI', process.argv should be passed as the event.");
|
|
28
53
|
}
|
|
29
|
-
|
|
54
|
+
const argv = new pristine_argv_1.PristineArgv(rawEvent);
|
|
55
|
+
if (argv.isValid === false || argv.userArgs.length === 0) {
|
|
30
56
|
throw new Error("If using the 'CLI', there must be at least one command passed");
|
|
31
57
|
}
|
|
32
|
-
const command = new command_event_payload_1.CommandEventPayload(
|
|
58
|
+
const command = new command_event_payload_1.CommandEventPayload(argv.userArgs[0], argv.scriptPath);
|
|
33
59
|
// if argument starts with - or --, then there is two options. Either there's an equal sign in the string and after the equal sign is the value or the next argument is actually the value
|
|
34
60
|
// for the value, we need to check if it can be a boolean and if not, if it can be a number. If yes, they should be transformed. Else, the value should be a string.
|
|
35
61
|
// If the argument doesn't start with --, then it's value is simply the true boolean
|
|
36
|
-
const passedArguments =
|
|
62
|
+
const passedArguments = argv.userArgs.slice(1);
|
|
37
63
|
for (let i = 0; i < passedArguments.length; i++) {
|
|
38
64
|
const arg = passedArguments[i];
|
|
39
65
|
if (arg.startsWith("-") === false) {
|
|
66
|
+
// Bare (non-dashed) tokens are positionals. Kept as `arguments[arg] = true` for
|
|
67
|
+
// backward compatibility, and additionally collected in order under the reserved
|
|
68
|
+
// `_` key so commands like `trace <id>` / `logs <id>` can read a real positional.
|
|
40
69
|
command.arguments[arg] = true;
|
|
70
|
+
if (Array.isArray(command.arguments._) === false) {
|
|
71
|
+
command.arguments._ = [];
|
|
72
|
+
}
|
|
73
|
+
command.arguments._.push(arg);
|
|
41
74
|
continue;
|
|
42
75
|
}
|
|
43
76
|
const numberOfStartingDashes = arg.startsWith("--") ? 2 : 1;
|
|
@@ -90,12 +123,18 @@ let CommandEventMapper = class CommandEventMapper {
|
|
|
90
123
|
command.arguments[argumentName] = argumentValue;
|
|
91
124
|
}
|
|
92
125
|
return {
|
|
93
|
-
events: [new core_1.Event("command", command,
|
|
126
|
+
events: [new core_1.Event("command", command, this.eventIdManager.generateEventId())],
|
|
94
127
|
executionOrder: "sequential",
|
|
95
128
|
};
|
|
96
129
|
}
|
|
97
130
|
supportsReverseMapping(eventResponse, response, executionContext) {
|
|
98
|
-
|
|
131
|
+
var _a;
|
|
132
|
+
if (executionContext.keyname !== core_1.ExecutionContextKeynameEnum.Cli) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
// Reverse-map only the command responses this mapper owns — the REPL-start payload
|
|
136
|
+
// flows through `ReplStartEventMapper` and would otherwise be silently clobbered here.
|
|
137
|
+
return ((_a = eventResponse.event) === null || _a === void 0 ? void 0 : _a.payload) instanceof command_event_payload_1.CommandEventPayload;
|
|
99
138
|
}
|
|
100
139
|
/**
|
|
101
140
|
* We want to support returning an exit code directly. This means that in the cli.ts file of the customers, they can directly do:
|
|
@@ -112,6 +151,7 @@ exports.CommandEventMapper = CommandEventMapper;
|
|
|
112
151
|
exports.CommandEventMapper = CommandEventMapper = __decorate([
|
|
113
152
|
(0, common_1.tag)(common_1.ServiceDefinitionTagEnum.EventMapper),
|
|
114
153
|
(0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
|
|
115
|
-
(0, tsyringe_1.injectable)()
|
|
154
|
+
(0, tsyringe_1.injectable)(),
|
|
155
|
+
__metadata("design:paramtypes", [core_1.EventIdManager])
|
|
116
156
|
], CommandEventMapper);
|
|
117
157
|
//# sourceMappingURL=command-event.mapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-event.mapper.js","sourceRoot":"","sources":["../../../../src/mappers/command-event.mapper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command-event.mapper.js","sourceRoot":"","sources":["../../../../src/mappers/command-event.mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./command-event.mapper"), exports);
|
|
18
|
+
__exportStar(require("./repl-start-event.mapper"), exports);
|
|
18
19
|
//# sourceMappingURL=mappers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../../src/mappers/mappers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC"}
|
|
1
|
+
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../../src/mappers/mappers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,4DAA0C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ReplStartEventMapper = void 0;
|
|
13
|
+
const core_1 = require("@pristine-ts/core");
|
|
14
|
+
const tsyringe_1 = require("tsyringe");
|
|
15
|
+
const common_1 = require("@pristine-ts/common");
|
|
16
|
+
const start_repl_event_payload_1 = require("../event-payloads/start-repl.event-payload");
|
|
17
|
+
const cli_module_keyname_1 = require("../cli.module.keyname");
|
|
18
|
+
const pristine_argv_1 = require("../utils/pristine-argv");
|
|
19
|
+
/**
|
|
20
|
+
* Maps the "no command" / `repl` argv shapes onto a `StartReplEventPayload` so the kernel
|
|
21
|
+
* can dispatch the REPL launch through the normal event pipeline — `cli.ts` just calls
|
|
22
|
+
* `kernel.handle(process.argv, {keyname: Cli})` regardless of whether the user invoked
|
|
23
|
+
* `pristine`, `pristine repl`, or `pristine <some-command>`.
|
|
24
|
+
*
|
|
25
|
+
* Argv parsing is delegated to `PristineArgv`, which scans for the bin token rather than
|
|
26
|
+
* assuming positional layout — so the rule is runtime-agnostic and survives launchers
|
|
27
|
+
* that shape argv differently.
|
|
28
|
+
*
|
|
29
|
+
* `CommandEventMapper` explicitly excludes these same shapes from its own
|
|
30
|
+
* `supportsMapping` so the two mappers partition argv space cleanly — no shape is claimed
|
|
31
|
+
* by both.
|
|
32
|
+
*/
|
|
33
|
+
let ReplStartEventMapper = class ReplStartEventMapper {
|
|
34
|
+
constructor(eventIdManager) {
|
|
35
|
+
this.eventIdManager = eventIdManager;
|
|
36
|
+
}
|
|
37
|
+
supportsMapping(rawEvent, executionContext) {
|
|
38
|
+
if (executionContext.keyname !== core_1.ExecutionContextKeynameEnum.Cli) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
if (Array.isArray(rawEvent) === false) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const argv = new pristine_argv_1.PristineArgv(rawEvent);
|
|
45
|
+
if (argv.isValid === false) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// No user args → REPL. First user arg is `repl` → REPL (any tokens after `repl` are
|
|
49
|
+
// ignored at routing time, by design).
|
|
50
|
+
return argv.userArgs.length === 0 || argv.userArgs[0] === "repl";
|
|
51
|
+
}
|
|
52
|
+
map(rawEvent, executionContext) {
|
|
53
|
+
const argv = new pristine_argv_1.PristineArgv(Array.isArray(rawEvent) ? rawEvent : []);
|
|
54
|
+
const payload = new start_repl_event_payload_1.StartReplEventPayload(argv.scriptPath);
|
|
55
|
+
return {
|
|
56
|
+
events: [new core_1.Event("start-repl", payload, this.eventIdManager.generateEventId())],
|
|
57
|
+
executionOrder: "sequential",
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
supportsReverseMapping(eventResponse, response, executionContext) {
|
|
61
|
+
var _a;
|
|
62
|
+
return executionContext.keyname === core_1.ExecutionContextKeynameEnum.Cli
|
|
63
|
+
&& ((_a = eventResponse.event) === null || _a === void 0 ? void 0 : _a.payload) instanceof start_repl_event_payload_1.StartReplEventPayload;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The REPL handler resolves with the session's exit code; surface it as-is so
|
|
67
|
+
* `Cli.bootstrap()` can return it to the bin (which calls `process.exit`).
|
|
68
|
+
*/
|
|
69
|
+
reverseMap(eventResponse, response, executionContext) {
|
|
70
|
+
return eventResponse.response;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
exports.ReplStartEventMapper = ReplStartEventMapper;
|
|
74
|
+
exports.ReplStartEventMapper = ReplStartEventMapper = __decorate([
|
|
75
|
+
(0, common_1.tag)(common_1.ServiceDefinitionTagEnum.EventMapper),
|
|
76
|
+
(0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
|
|
77
|
+
(0, tsyringe_1.injectable)(),
|
|
78
|
+
__metadata("design:paramtypes", [core_1.EventIdManager])
|
|
79
|
+
], ReplStartEventMapper);
|
|
80
|
+
//# sourceMappingURL=repl-start-event.mapper.js.map
|