@pristine-ts/cli 2.0.7 → 2.0.16
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/bin.js +0 -0
- package/dist/lib/cjs/bootstrap/app-module-cache.js +71 -0
- package/dist/lib/cjs/bootstrap/app-module-cache.js.map +1 -0
- package/dist/lib/cjs/bootstrap/app-module-discoverer.js +119 -0
- package/dist/lib/cjs/bootstrap/app-module-discoverer.js.map +1 -0
- package/dist/lib/cjs/bootstrap/app-module-discovery-candidate.js +21 -0
- package/dist/lib/cjs/bootstrap/app-module-discovery-candidate.js.map +1 -0
- package/dist/lib/cjs/bootstrap/app-module-discovery-reason.enum.js +15 -0
- package/dist/lib/cjs/bootstrap/app-module-discovery-reason.enum.js.map +1 -0
- package/dist/lib/cjs/bootstrap/app-module-prompt.js +78 -0
- package/dist/lib/cjs/bootstrap/app-module-prompt.js.map +1 -0
- 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/config-init.command.js +133 -0
- package/dist/lib/cjs/commands/config-init.command.js.map +1 -0
- 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/exit-code.enum.js +9 -0
- package/dist/lib/cjs/enums/exit-code.enum.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/console.manager.js +277 -0
- package/dist/lib/cjs/managers/console.manager.js.map +1 -0
- package/dist/lib/cjs/managers/managers.js +1 -0
- package/dist/lib/cjs/managers/managers.js.map +1 -1
- package/dist/lib/cjs/managers/repl-session.js +251 -0
- package/dist/lib/cjs/managers/repl-session.js.map +1 -0
- 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/app-module-cache.js +65 -0
- package/dist/lib/esm/bootstrap/app-module-cache.js.map +1 -0
- package/dist/lib/esm/bootstrap/app-module-discoverer.js +113 -0
- package/dist/lib/esm/bootstrap/app-module-discoverer.js.map +1 -0
- package/dist/lib/esm/bootstrap/app-module-discovery-candidate.js +17 -0
- package/dist/lib/esm/bootstrap/app-module-discovery-candidate.js.map +1 -0
- package/dist/lib/esm/bootstrap/app-module-discovery-reason.enum.js +12 -0
- package/dist/lib/esm/bootstrap/app-module-discovery-reason.enum.js.map +1 -0
- package/dist/lib/esm/bootstrap/app-module-prompt.js +75 -0
- package/dist/lib/esm/bootstrap/app-module-prompt.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/config-init.command.js +127 -0
- package/dist/lib/esm/commands/config-init.command.js.map +1 -0
- 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/exit-code.enum.js +6 -0
- package/dist/lib/esm/enums/exit-code.enum.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/console.manager.js +241 -0
- package/dist/lib/esm/managers/console.manager.js.map +1 -0
- package/dist/lib/esm/managers/managers.js +1 -0
- package/dist/lib/esm/managers/managers.js.map +1 -1
- package/dist/lib/esm/managers/repl-session.js +215 -0
- package/dist/lib/esm/managers/repl-session.js.map +1 -0
- 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/app-module-cache.d.ts +15 -0
- package/dist/types/bootstrap/app-module-discoverer.d.ts +30 -0
- package/dist/types/bootstrap/app-module-discovery-candidate.d.ts +18 -0
- package/dist/types/bootstrap/app-module-discovery-reason.enum.d.ts +10 -0
- package/dist/types/bootstrap/app-module-prompt.d.ts +20 -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/config-init.command.d.ts +18 -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/exit-code.enum.d.ts +4 -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/console.manager.d.ts +93 -0
- package/dist/types/managers/managers.d.ts +1 -0
- package/dist/types/managers/repl-session.d.ts +62 -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,215 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
var ReplSession_1;
|
|
20
|
+
import * as readline from "node:readline";
|
|
21
|
+
import { injectable } from "tsyringe";
|
|
22
|
+
import { ExitCode, moduleScoped, ServiceDefinitionTagEnum } from "@pristine-ts/common";
|
|
23
|
+
import { ExecutionContextKeynameEnum } from "@pristine-ts/core";
|
|
24
|
+
import { ObservabilityStoreReader } from "@pristine-ts/observability";
|
|
25
|
+
import { CliOutput } from "./cli-output.manager";
|
|
26
|
+
import { CliModuleKeyname } from "../cli.module.keyname";
|
|
27
|
+
/**
|
|
28
|
+
* The interactive `pristine` console — launched when the bin is invoked with no command
|
|
29
|
+
* (or `pristine repl`). It keeps the kernel booted for the whole session, so every
|
|
30
|
+
* command runs instantly with no per-invocation boot cost.
|
|
31
|
+
*
|
|
32
|
+
* Slash-prefixed commands dispatch through the *same* path as a one-shot
|
|
33
|
+
* `pristine <command>` invocation — `kernel.handle(argv, {keyname: Cli})` — so the REPL
|
|
34
|
+
* and the command line resolve, validate and run commands identically. (This works
|
|
35
|
+
* because `CliEventHandler` returns the exit code instead of calling `process.exit`.)
|
|
36
|
+
* Plus the session verbs `/help`, `/clear`, `/exit`. Tab-completion is driven by the live
|
|
37
|
+
* command registry and by recent trace ids for `/trace` / `/logs`.
|
|
38
|
+
*
|
|
39
|
+
* The kernel is **not** a constructor dependency — `ReplSession` is a driver *of* the
|
|
40
|
+
* kernel, so the running kernel is handed to `start()` by whoever owns it (`Cli`). Only
|
|
41
|
+
* genuine collaborator services are injected.
|
|
42
|
+
*/
|
|
43
|
+
let ReplSession = ReplSession_1 = class ReplSession {
|
|
44
|
+
constructor(cliOutput, storeReader) {
|
|
45
|
+
this.cliOutput = cliOutput;
|
|
46
|
+
this.storeReader = storeReader;
|
|
47
|
+
this.commands = [];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Runs the read-eval-print loop until `/exit` or EOF (Ctrl-D). Resolves with the exit
|
|
51
|
+
* code the bin should return.
|
|
52
|
+
*
|
|
53
|
+
* @param kernel The already-started kernel this session drives — passed in by the
|
|
54
|
+
* caller that owns it, rather than injected.
|
|
55
|
+
*/
|
|
56
|
+
start(kernel) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
this.commands = this.resolveCommands(kernel);
|
|
59
|
+
this.printBanner();
|
|
60
|
+
const rl = readline.createInterface({
|
|
61
|
+
input: process.stdin,
|
|
62
|
+
output: process.stdout,
|
|
63
|
+
prompt: ReplSession_1.PROMPT,
|
|
64
|
+
completer: (line) => this.complete(line),
|
|
65
|
+
});
|
|
66
|
+
return new Promise((resolve) => {
|
|
67
|
+
rl.prompt();
|
|
68
|
+
rl.on("line", (line) => {
|
|
69
|
+
const trimmed = line.trim();
|
|
70
|
+
if (trimmed.length === 0) {
|
|
71
|
+
rl.prompt();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Pause input while a command runs so its own SIGINT handling (e.g. `logs -f`)
|
|
75
|
+
// owns Ctrl-C, and so a second line can't interleave mid-dispatch.
|
|
76
|
+
rl.pause();
|
|
77
|
+
void this.handleLine(trimmed, kernel).then((shouldExit) => {
|
|
78
|
+
if (shouldExit) {
|
|
79
|
+
rl.close();
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
rl.resume();
|
|
83
|
+
rl.prompt();
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
// Ctrl-C at an idle prompt clears the line rather than killing the session.
|
|
87
|
+
rl.on("SIGINT", () => {
|
|
88
|
+
this.cliOutput.writeLine("(type /exit to quit)");
|
|
89
|
+
rl.prompt();
|
|
90
|
+
});
|
|
91
|
+
rl.on("close", () => {
|
|
92
|
+
void this.shutdown(kernel).then(() => resolve(ExitCode.Success));
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Handles one input line. Returns true when the session should end.
|
|
99
|
+
*/
|
|
100
|
+
handleLine(input, kernel) {
|
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
+
const withoutSlash = input.startsWith("/") ? input.slice(1) : input;
|
|
103
|
+
const tokens = withoutSlash.split(/\s+/).filter(token => token.length > 0);
|
|
104
|
+
const name = tokens[0];
|
|
105
|
+
const rest = tokens.slice(1);
|
|
106
|
+
if (name === "exit" || name === "quit") {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
if (name === "clear") {
|
|
110
|
+
console.clear();
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
if (name === "help") {
|
|
114
|
+
this.printHelp();
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
// Dispatch through the exact same path as a one-shot `pristine <command>`: a
|
|
119
|
+
// synthetic argv handed to `kernel.handle` with the `Cli` execution context. The
|
|
120
|
+
// kernel maps it, `CliEventHandler` resolves + validates + runs it and returns the
|
|
121
|
+
// exit code (no `process.exit`), so the loop survives. An unknown command throws
|
|
122
|
+
// `CommandNotFoundError`, caught below.
|
|
123
|
+
yield kernel.handle(["node", "repl", name, ...rest], { keyname: ExecutionContextKeynameEnum.Cli, context: null });
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
this.cliOutput.writeLine(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Readline completer. Completes `/`-prefixed command names and session verbs; for
|
|
133
|
+
* `/trace` and `/logs` it completes the trailing token with recent trace ids.
|
|
134
|
+
*/
|
|
135
|
+
complete(line) {
|
|
136
|
+
const traceIdMatch = /^\/(trace|logs)\s+(\S*)$/.exec(line);
|
|
137
|
+
if (traceIdMatch !== null) {
|
|
138
|
+
const partial = traceIdMatch[2];
|
|
139
|
+
const hits = this.storeReader.recentTraceIds(ReplSession_1.TRACE_ID_COMPLETION_LIMIT)
|
|
140
|
+
.filter(id => id.startsWith(partial));
|
|
141
|
+
return [hits, partial];
|
|
142
|
+
}
|
|
143
|
+
const candidates = [
|
|
144
|
+
...this.commands.map(command => `/${command.name}`),
|
|
145
|
+
...ReplSession_1.SESSION_VERBS,
|
|
146
|
+
];
|
|
147
|
+
const hits = candidates.filter(candidate => candidate.startsWith(line));
|
|
148
|
+
return [hits.length > 0 ? hits : candidates, line];
|
|
149
|
+
}
|
|
150
|
+
printBanner() {
|
|
151
|
+
this.cliOutput.writeLine("Pristine — interactive console");
|
|
152
|
+
this.cliOutput.writeLine("Type /help for commands, /exit to quit.");
|
|
153
|
+
this.cliOutput.writeLine("");
|
|
154
|
+
}
|
|
155
|
+
printHelp() {
|
|
156
|
+
var _a;
|
|
157
|
+
this.cliOutput.writeLine("Session:");
|
|
158
|
+
this.cliOutput.writeLine(" /help show this message");
|
|
159
|
+
this.cliOutput.writeLine(" /clear clear the screen");
|
|
160
|
+
this.cliOutput.writeLine(" /exit leave the console");
|
|
161
|
+
this.cliOutput.writeLine("");
|
|
162
|
+
this.cliOutput.writeLine("Commands (also runnable as `pristine <name>`):");
|
|
163
|
+
const sorted = [...this.commands].sort((a, b) => a.name.localeCompare(b.name));
|
|
164
|
+
const longest = sorted.reduce((max, command) => Math.max(max, command.name.length), 0);
|
|
165
|
+
for (const command of sorted) {
|
|
166
|
+
const padded = `/${command.name}`.padEnd(longest + 3, " ");
|
|
167
|
+
this.cliOutput.writeLine(` ${padded}${(_a = command.description) !== null && _a !== void 0 ? _a : ""}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
shutdown(kernel) {
|
|
171
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
172
|
+
try {
|
|
173
|
+
yield kernel.stop();
|
|
174
|
+
}
|
|
175
|
+
catch (_a) {
|
|
176
|
+
// Best-effort — we're leaving the process anyway.
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Enumerates every registered command.
|
|
182
|
+
*
|
|
183
|
+
* Resolved from a dedicated child container with the `CurrentChildContainer` token
|
|
184
|
+
* registered — some commands (`HelpCommand`, `ListCommand`) inject that token, which
|
|
185
|
+
* only the kernel's per-event child containers carry. The one-shot path gets it for
|
|
186
|
+
* free because `CliEventHandler` runs inside such a child container; the REPL builds an
|
|
187
|
+
* equivalent one once for the whole session.
|
|
188
|
+
*
|
|
189
|
+
* `resolveAll`, justified: this is framework REPL infrastructure resolved at session
|
|
190
|
+
* start, mirroring `Cli.warnOnCommandCollisions`. Enumerating every `Command`-tagged
|
|
191
|
+
* service is inherently a container-introspection operation with no constructor seam.
|
|
192
|
+
*/
|
|
193
|
+
resolveCommands(kernel) {
|
|
194
|
+
try {
|
|
195
|
+
const childContainer = kernel.container.createChildContainer();
|
|
196
|
+
childContainer.registerInstance(ServiceDefinitionTagEnum.CurrentChildContainer, childContainer);
|
|
197
|
+
return childContainer.resolveAll(ServiceDefinitionTagEnum.Command);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
process.stderr.write(`[repl] could not load commands: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
201
|
+
return [];
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
ReplSession.PROMPT = "pristine ❯ ";
|
|
206
|
+
ReplSession.SESSION_VERBS = ["/help", "/clear", "/exit"];
|
|
207
|
+
ReplSession.TRACE_ID_COMPLETION_LIMIT = 25;
|
|
208
|
+
ReplSession = ReplSession_1 = __decorate([
|
|
209
|
+
injectable(),
|
|
210
|
+
moduleScoped(CliModuleKeyname),
|
|
211
|
+
__metadata("design:paramtypes", [CliOutput,
|
|
212
|
+
ObservabilityStoreReader])
|
|
213
|
+
], ReplSession);
|
|
214
|
+
export { ReplSession };
|
|
215
|
+
//# sourceMappingURL=repl-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-session.js","sourceRoot":"","sources":["../../../../src/managers/repl-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { injectable } from "tsyringe";
|
|
8
|
+
import { moduleScoped } from "@pristine-ts/common";
|
|
9
|
+
import { CliModuleKeyname } from "../cli.module.keyname";
|
|
10
|
+
import { TerminalKeyName } from "../enums/terminal-key-name.enum";
|
|
11
|
+
import { TerminalKeyDecoder } from "../utils/terminal-key-decoder";
|
|
12
|
+
import { PromptCancelledError } from "../errors/prompt-cancelled.error";
|
|
13
|
+
/**
|
|
14
|
+
* Owns the raw-mode keystroke reading the interactive prompts need (arrow-key `select`,
|
|
15
|
+
* masked `readSecret`) — the one place in the CLI that flips stdin into raw mode. Node's
|
|
16
|
+
* stock `readline` is line-buffered and echoes input, so it can't drive an arrow-key menu
|
|
17
|
+
* or suppress a password's characters; this reads keys one at a time instead.
|
|
18
|
+
*
|
|
19
|
+
* Two responsibilities are handled centrally so callers don't each reimplement them:
|
|
20
|
+
* - **Cancellation:** `Ctrl+C` rejects the read with {@link PromptCancelledError}.
|
|
21
|
+
* - **Terminal restore:** raw mode is entered on start and restored in every exit path,
|
|
22
|
+
* so a thrown handler or a cancellation never leaves the terminal in raw mode.
|
|
23
|
+
*
|
|
24
|
+
* The `input`/`output` fields default to the process streams and exist as a seam so tests
|
|
25
|
+
* can drive synthetic keystrokes without a real TTY.
|
|
26
|
+
*/
|
|
27
|
+
let TerminalKeyReader = class TerminalKeyReader {
|
|
28
|
+
constructor() {
|
|
29
|
+
this.input = process.stdin;
|
|
30
|
+
this.output = process.stdout;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Whether both stdin and stdout are interactive terminals. Raw-mode reading is only
|
|
34
|
+
* meaningful on a real TTY; callers fall back (or skip prompting) when this is false.
|
|
35
|
+
*/
|
|
36
|
+
isInteractive() {
|
|
37
|
+
return Boolean(this.input.isTTY) && Boolean(this.output.isTTY);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Reads keystrokes in raw mode, handing each decoded {@link TerminalKey} to `onKey` until
|
|
41
|
+
* `onKey` ends the read by invoking its `resolve` callback with the result. Resolves to
|
|
42
|
+
* that value; rejects with {@link PromptCancelledError} on `Ctrl+C`. Raw mode is entered
|
|
43
|
+
* on start and restored to its prior state in every exit path.
|
|
44
|
+
*/
|
|
45
|
+
read(onKey) {
|
|
46
|
+
const input = this.input;
|
|
47
|
+
const wasRaw = input.isRaw === true;
|
|
48
|
+
return new Promise((resolve, reject) => {
|
|
49
|
+
let settled = false;
|
|
50
|
+
const cleanup = () => {
|
|
51
|
+
input.removeListener("data", onData);
|
|
52
|
+
if (input.isTTY && typeof input.setRawMode === "function") {
|
|
53
|
+
input.setRawMode(wasRaw);
|
|
54
|
+
}
|
|
55
|
+
input.pause();
|
|
56
|
+
};
|
|
57
|
+
const settle = (run) => {
|
|
58
|
+
if (settled) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
settled = true;
|
|
62
|
+
cleanup();
|
|
63
|
+
run();
|
|
64
|
+
};
|
|
65
|
+
const onData = (data) => {
|
|
66
|
+
for (const key of TerminalKeyDecoder.decode(data.toString())) {
|
|
67
|
+
if (key.name === TerminalKeyName.CtrlC) {
|
|
68
|
+
settle(() => reject(new PromptCancelledError()));
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
onKey(key, (value) => settle(() => resolve(value)));
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
settle(() => reject(error));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (settled) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
if (input.isTTY && typeof input.setRawMode === "function") {
|
|
84
|
+
input.setRawMode(true);
|
|
85
|
+
}
|
|
86
|
+
input.resume();
|
|
87
|
+
input.on("data", onData);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
TerminalKeyReader = __decorate([
|
|
92
|
+
injectable(),
|
|
93
|
+
moduleScoped(CliModuleKeyname)
|
|
94
|
+
], TerminalKeyReader);
|
|
95
|
+
export { TerminalKeyReader };
|
|
96
|
+
//# 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":"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"}
|
|
@@ -4,15 +4,38 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
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;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Event, EventIdManager, ExecutionContextKeynameEnum } from "@pristine-ts/core";
|
|
8
11
|
import { injectable } from "tsyringe";
|
|
9
12
|
import { CommandEventPayload } from "../event-payloads/command.event-payload";
|
|
10
13
|
import { moduleScoped, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common";
|
|
11
14
|
import { CliModuleKeyname } from "../cli.module.keyname";
|
|
12
|
-
import {
|
|
15
|
+
import { PristineArgv } from "../utils/pristine-argv";
|
|
13
16
|
let CommandEventMapper = class CommandEventMapper {
|
|
17
|
+
constructor(eventIdManager) {
|
|
18
|
+
this.eventIdManager = eventIdManager;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Matches argv that names an explicit command. The no-command shape and the bare
|
|
22
|
+
* `pristine repl` form are deliberately rejected here; `ReplStartEventMapper` claims
|
|
23
|
+
* those. Commands typed inside the interactive session are also re-dispatched under
|
|
24
|
+
* `Cli`, so this mapper handles them too. Argv parsing is delegated to `PristineArgv`,
|
|
25
|
+
* which scans for the bin token rather than relying on positional indexing.
|
|
26
|
+
*/
|
|
14
27
|
supportsMapping(rawEvent, executionContext) {
|
|
15
|
-
|
|
28
|
+
if (executionContext.keyname !== ExecutionContextKeynameEnum.Cli) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
if (Array.isArray(rawEvent) === false) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const argv = new PristineArgv(rawEvent);
|
|
35
|
+
if (argv.isValid === false) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return argv.userArgs.length >= 1 && argv.userArgs[0] !== "repl";
|
|
16
39
|
}
|
|
17
40
|
/**
|
|
18
41
|
* Inspired from: https://github.com/eveningkid/args-parser
|
|
@@ -20,21 +43,31 @@ let CommandEventMapper = class CommandEventMapper {
|
|
|
20
43
|
* @param executionContext
|
|
21
44
|
*/
|
|
22
45
|
map(rawEvent, executionContext) {
|
|
46
|
+
// `supportsMapping` already filters out the unsupported shapes — these guards stay only
|
|
47
|
+
// as a defence in case the pipeline ever invokes `map` without consulting `supportsMapping`.
|
|
23
48
|
if (Array.isArray(rawEvent) === false) {
|
|
24
49
|
throw new Error("If using the 'CLI', process.argv should be passed as the event.");
|
|
25
50
|
}
|
|
26
|
-
|
|
51
|
+
const argv = new PristineArgv(rawEvent);
|
|
52
|
+
if (argv.isValid === false || argv.userArgs.length === 0) {
|
|
27
53
|
throw new Error("If using the 'CLI', there must be at least one command passed");
|
|
28
54
|
}
|
|
29
|
-
const command = new CommandEventPayload(
|
|
55
|
+
const command = new CommandEventPayload(argv.userArgs[0], argv.scriptPath);
|
|
30
56
|
// 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
|
|
31
57
|
// 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.
|
|
32
58
|
// If the argument doesn't start with --, then it's value is simply the true boolean
|
|
33
|
-
const passedArguments =
|
|
59
|
+
const passedArguments = argv.userArgs.slice(1);
|
|
34
60
|
for (let i = 0; i < passedArguments.length; i++) {
|
|
35
61
|
const arg = passedArguments[i];
|
|
36
62
|
if (arg.startsWith("-") === false) {
|
|
63
|
+
// Bare (non-dashed) tokens are positionals. Kept as `arguments[arg] = true` for
|
|
64
|
+
// backward compatibility, and additionally collected in order under the reserved
|
|
65
|
+
// `_` key so commands like `trace <id>` / `logs <id>` can read a real positional.
|
|
37
66
|
command.arguments[arg] = true;
|
|
67
|
+
if (Array.isArray(command.arguments._) === false) {
|
|
68
|
+
command.arguments._ = [];
|
|
69
|
+
}
|
|
70
|
+
command.arguments._.push(arg);
|
|
38
71
|
continue;
|
|
39
72
|
}
|
|
40
73
|
const numberOfStartingDashes = arg.startsWith("--") ? 2 : 1;
|
|
@@ -87,12 +120,18 @@ let CommandEventMapper = class CommandEventMapper {
|
|
|
87
120
|
command.arguments[argumentName] = argumentValue;
|
|
88
121
|
}
|
|
89
122
|
return {
|
|
90
|
-
events: [new Event("command", command,
|
|
123
|
+
events: [new Event("command", command, this.eventIdManager.generateEventId())],
|
|
91
124
|
executionOrder: "sequential",
|
|
92
125
|
};
|
|
93
126
|
}
|
|
94
127
|
supportsReverseMapping(eventResponse, response, executionContext) {
|
|
95
|
-
|
|
128
|
+
var _a;
|
|
129
|
+
if (executionContext.keyname !== ExecutionContextKeynameEnum.Cli) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
// Reverse-map only the command responses this mapper owns — the REPL-start payload
|
|
133
|
+
// flows through `ReplStartEventMapper` and would otherwise be silently clobbered here.
|
|
134
|
+
return ((_a = eventResponse.event) === null || _a === void 0 ? void 0 : _a.payload) instanceof CommandEventPayload;
|
|
96
135
|
}
|
|
97
136
|
/**
|
|
98
137
|
* We want to support returning an exit code directly. This means that in the cli.ts file of the customers, they can directly do:
|
|
@@ -108,7 +147,8 @@ let CommandEventMapper = class CommandEventMapper {
|
|
|
108
147
|
CommandEventMapper = __decorate([
|
|
109
148
|
tag(ServiceDefinitionTagEnum.EventMapper),
|
|
110
149
|
moduleScoped(CliModuleKeyname),
|
|
111
|
-
injectable()
|
|
150
|
+
injectable(),
|
|
151
|
+
__metadata("design:paramtypes", [EventIdManager])
|
|
112
152
|
], CommandEventMapper);
|
|
113
153
|
export { CommandEventMapper };
|
|
114
154
|
//# 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../../src/mappers/mappers.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../../../src/mappers/mappers.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { Event, EventIdManager, ExecutionContextKeynameEnum, } from "@pristine-ts/core";
|
|
11
|
+
import { injectable } from "tsyringe";
|
|
12
|
+
import { moduleScoped, ServiceDefinitionTagEnum, tag } from "@pristine-ts/common";
|
|
13
|
+
import { StartReplEventPayload } from "../event-payloads/start-repl.event-payload";
|
|
14
|
+
import { CliModuleKeyname } from "../cli.module.keyname";
|
|
15
|
+
import { PristineArgv } from "../utils/pristine-argv";
|
|
16
|
+
/**
|
|
17
|
+
* Maps the "no command" / `repl` argv shapes onto a `StartReplEventPayload` so the kernel
|
|
18
|
+
* can dispatch the REPL launch through the normal event pipeline — `cli.ts` just calls
|
|
19
|
+
* `kernel.handle(process.argv, {keyname: Cli})` regardless of whether the user invoked
|
|
20
|
+
* `pristine`, `pristine repl`, or `pristine <some-command>`.
|
|
21
|
+
*
|
|
22
|
+
* Argv parsing is delegated to `PristineArgv`, which scans for the bin token rather than
|
|
23
|
+
* assuming positional layout — so the rule is runtime-agnostic and survives launchers
|
|
24
|
+
* that shape argv differently.
|
|
25
|
+
*
|
|
26
|
+
* `CommandEventMapper` explicitly excludes these same shapes from its own
|
|
27
|
+
* `supportsMapping` so the two mappers partition argv space cleanly — no shape is claimed
|
|
28
|
+
* by both.
|
|
29
|
+
*/
|
|
30
|
+
let ReplStartEventMapper = class ReplStartEventMapper {
|
|
31
|
+
constructor(eventIdManager) {
|
|
32
|
+
this.eventIdManager = eventIdManager;
|
|
33
|
+
}
|
|
34
|
+
supportsMapping(rawEvent, executionContext) {
|
|
35
|
+
if (executionContext.keyname !== ExecutionContextKeynameEnum.Cli) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (Array.isArray(rawEvent) === false) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const argv = new PristineArgv(rawEvent);
|
|
42
|
+
if (argv.isValid === false) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
// No user args → REPL. First user arg is `repl` → REPL (any tokens after `repl` are
|
|
46
|
+
// ignored at routing time, by design).
|
|
47
|
+
return argv.userArgs.length === 0 || argv.userArgs[0] === "repl";
|
|
48
|
+
}
|
|
49
|
+
map(rawEvent, executionContext) {
|
|
50
|
+
const argv = new PristineArgv(Array.isArray(rawEvent) ? rawEvent : []);
|
|
51
|
+
const payload = new StartReplEventPayload(argv.scriptPath);
|
|
52
|
+
return {
|
|
53
|
+
events: [new Event("start-repl", payload, this.eventIdManager.generateEventId())],
|
|
54
|
+
executionOrder: "sequential",
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
supportsReverseMapping(eventResponse, response, executionContext) {
|
|
58
|
+
var _a;
|
|
59
|
+
return executionContext.keyname === ExecutionContextKeynameEnum.Cli
|
|
60
|
+
&& ((_a = eventResponse.event) === null || _a === void 0 ? void 0 : _a.payload) instanceof StartReplEventPayload;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The REPL handler resolves with the session's exit code; surface it as-is so
|
|
64
|
+
* `Cli.bootstrap()` can return it to the bin (which calls `process.exit`).
|
|
65
|
+
*/
|
|
66
|
+
reverseMap(eventResponse, response, executionContext) {
|
|
67
|
+
return eventResponse.response;
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
ReplStartEventMapper = __decorate([
|
|
71
|
+
tag(ServiceDefinitionTagEnum.EventMapper),
|
|
72
|
+
moduleScoped(CliModuleKeyname),
|
|
73
|
+
injectable(),
|
|
74
|
+
__metadata("design:paramtypes", [EventIdManager])
|
|
75
|
+
], ReplStartEventMapper);
|
|
76
|
+
export { ReplStartEventMapper };
|
|
77
|
+
//# sourceMappingURL=repl-start-event.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-start-event.mapper.js","sourceRoot":"","sources":["../../../../src/mappers/repl-start-event.mapper.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,KAAK,EACL,cAAc,EAKd,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,YAAY,EAAE,wBAAwB,EAAE,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAC,qBAAqB,EAAC,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAEpD;;;;;;;;;;;;;GAaG;AAII,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAA6B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAC3D,CAAC;IAED,eAAe,CAAC,QAAa,EAAE,gBAAgD;QAC7E,IAAI,gBAAgB,CAAC,OAAO,KAAK,2BAA2B,CAAC,GAAG,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,oFAAoF;QACpF,uCAAuC;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;IACnE,CAAC;IAED,GAAG,CAAC,QAAa,EAAE,gBAAgD;QACjE,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,OAAO;YACL,MAAM,EAAE,CAAC,IAAI,KAAK,CAAwB,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC;YACxG,cAAc,EAAE,YAAY;SAC7B,CAAC;IACJ,CAAC;IAED,sBAAsB,CAAC,aAA2D,EAAE,QAAa,EAAE,gBAAgD;;QACjJ,OAAO,gBAAgB,CAAC,OAAO,KAAK,2BAA2B,CAAC,GAAG;eAC9D,CAAA,MAAA,aAAa,CAAC,KAAK,0CAAE,OAAO,aAAY,qBAAqB,CAAC;IACrE,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,aAA2D,EAAE,QAAa,EAAE,gBAAgD;QACrI,OAAO,aAAa,CAAC,QAAQ,CAAC;IAChC,CAAC;CACF,CAAA;AAzCY,oBAAoB;IAHhC,GAAG,CAAC,wBAAwB,CAAC,WAAW,CAAC;IACzC,YAAY,CAAC,gBAAgB,CAAC;IAC9B,UAAU,EAAE;qCAEkC,cAAc;GADhD,oBAAoB,CAyChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-parameter.options.js","sourceRoot":"","sources":["../../../../src/options/command-parameter.options.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../src/options/options.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../../src/options/options.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
import { injectable } from "tsyringe";
|
|
20
|
+
import { moduleScoped } from "@pristine-ts/common";
|
|
21
|
+
import { CliModuleKeyname } from "../cli.module.keyname";
|
|
22
|
+
import { CommandOptionsResolver } from "./command-options-resolver";
|
|
23
|
+
/**
|
|
24
|
+
* Maps a command's raw parsed arguments onto a typed, validated instance of its
|
|
25
|
+
* `optionsType`. Used by both the one-shot dispatch path (`CliEventHandler.resolveArgs`)
|
|
26
|
+
* and the interactive REPL (which dispatches via that same handler), so command
|
|
27
|
+
* arguments are resolved through identical logic everywhere.
|
|
28
|
+
*
|
|
29
|
+
* Thin wrapper over `CommandOptionsResolver`: it passes the raw argv straight through for
|
|
30
|
+
* commands that opt out of typed options (`optionsType === null`) and otherwise delegates
|
|
31
|
+
* the prompt → map → validate pipeline. Commands (or dynamic flows) that need to fill an
|
|
32
|
+
* options class directly can inject `CommandOptionsResolver` instead.
|
|
33
|
+
*/
|
|
34
|
+
let CommandArgumentResolver = class CommandArgumentResolver {
|
|
35
|
+
constructor(commandOptionsResolver) {
|
|
36
|
+
this.commandOptionsResolver = commandOptionsResolver;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* For commands that opt out of typed options (`optionsType === null`), passes the raw
|
|
40
|
+
* args through unchanged. Otherwise delegates to `CommandOptionsResolver`, which fills any
|
|
41
|
+
* missing `@commandParameter` values by prompting, maps the result onto `optionsType`, and
|
|
42
|
+
* validates it.
|
|
43
|
+
*/
|
|
44
|
+
resolve(command, rawArgs) {
|
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
+
if (command.optionsType === null) {
|
|
47
|
+
return rawArgs;
|
|
48
|
+
}
|
|
49
|
+
return this.commandOptionsResolver.resolve(command.optionsType, rawArgs);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
CommandArgumentResolver = __decorate([
|
|
54
|
+
injectable(),
|
|
55
|
+
moduleScoped(CliModuleKeyname),
|
|
56
|
+
__metadata("design:paramtypes", [CommandOptionsResolver])
|
|
57
|
+
], CommandArgumentResolver);
|
|
58
|
+
export { CommandArgumentResolver };
|
|
59
|
+
//# sourceMappingURL=command-argument-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-argument-resolver.js","sourceRoot":"","sources":["../../../../src/services/command-argument-resolver.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,YAAY,EAAC,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAElE;;;;;;;;;;GAUG;AAGI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YACmB,sBAA8C;QAA9C,2BAAsB,GAAtB,sBAAsB,CAAwB;IAEjE,CAAC;IAED;;;;;OAKG;IACG,OAAO,CAAC,OAA8B,EAAE,OAAY;;YACxD,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;KAAA;CACF,CAAA;AAlBY,uBAAuB;IAFnC,UAAU,EAAE;IACZ,YAAY,CAAC,gBAAgB,CAAC;qCAGc,sBAAsB;GAFtD,uBAAuB,CAkBnC"}
|