@pristine-ts/cli 2.0.6 → 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-runner.js +1 -1
- 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 +41 -8
- package/dist/lib/cjs/cli.module.js.map +1 -1
- package/dist/lib/cjs/commands/build.command.js +15 -14
- package/dist/lib/cjs/commands/build.command.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/config-print.command.js +16 -11
- package/dist/lib/cjs/commands/config-print.command.js.map +1 -1
- package/dist/lib/cjs/commands/help.command.js +17 -17
- package/dist/lib/cjs/commands/help.command.js.map +1 -1
- package/dist/lib/cjs/commands/info.command.js +26 -21
- package/dist/lib/cjs/commands/info.command.js.map +1 -1
- package/dist/lib/cjs/commands/init.command.js +22 -21
- package/dist/lib/cjs/commands/init.command.js.map +1 -1
- package/dist/lib/cjs/commands/list.command.js +6 -6
- package/dist/lib/cjs/commands/list.command.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/start.command.js +12 -13
- package/dist/lib/cjs/commands/start.command.js.map +1 -1
- 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 +28 -70
- 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-output.manager.js +45 -0
- package/dist/lib/cjs/managers/cli-output.manager.js.map +1 -0
- package/dist/lib/cjs/managers/cli-progress-bar.manager.js +49 -0
- package/dist/lib/cjs/managers/cli-progress-bar.manager.js.map +1 -0
- package/dist/lib/cjs/managers/cli-prompt.manager.js +265 -0
- package/dist/lib/cjs/managers/cli-prompt.manager.js.map +1 -0
- package/dist/lib/cjs/managers/cli-spinner.manager.js +93 -0
- package/dist/lib/cjs/managers/cli-spinner.manager.js.map +1 -0
- package/dist/lib/cjs/managers/managers.js +5 -1
- 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/shell.manager.js +25 -20
- package/dist/lib/cjs/managers/shell.manager.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/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-runner.js +1 -1
- 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 +41 -8
- package/dist/lib/esm/cli.module.js.map +1 -1
- package/dist/lib/esm/commands/build.command.js +16 -15
- package/dist/lib/esm/commands/build.command.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/config-print.command.js +16 -11
- package/dist/lib/esm/commands/config-print.command.js.map +1 -1
- package/dist/lib/esm/commands/help.command.js +17 -17
- package/dist/lib/esm/commands/help.command.js.map +1 -1
- package/dist/lib/esm/commands/info.command.js +27 -22
- package/dist/lib/esm/commands/info.command.js.map +1 -1
- package/dist/lib/esm/commands/init.command.js +23 -22
- package/dist/lib/esm/commands/init.command.js.map +1 -1
- package/dist/lib/esm/commands/list.command.js +6 -6
- package/dist/lib/esm/commands/list.command.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/start.command.js +13 -14
- package/dist/lib/esm/commands/start.command.js.map +1 -1
- 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 +29 -71
- 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-output.manager.js +42 -0
- package/dist/lib/esm/managers/cli-output.manager.js.map +1 -0
- package/dist/lib/esm/managers/cli-progress-bar.manager.js +46 -0
- package/dist/lib/esm/managers/cli-progress-bar.manager.js.map +1 -0
- package/dist/lib/esm/managers/cli-prompt.manager.js +229 -0
- package/dist/lib/esm/managers/cli-prompt.manager.js.map +1 -0
- package/dist/lib/esm/managers/cli-spinner.manager.js +90 -0
- package/dist/lib/esm/managers/cli-spinner.manager.js.map +1 -0
- package/dist/lib/esm/managers/managers.js +5 -1
- 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/shell.manager.js +26 -21
- package/dist/lib/esm/managers/shell.manager.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/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-runner.d.ts +1 -1
- 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/build.command.d.ts +3 -3
- package/dist/types/commands/commands.d.ts +6 -0
- package/dist/types/commands/config-init.command.d.ts +18 -0
- package/dist/types/commands/config-print.command.d.ts +8 -3
- package/dist/types/commands/help.command.d.ts +3 -3
- package/dist/types/commands/info.command.d.ts +5 -3
- package/dist/types/commands/init.command.d.ts +3 -3
- package/dist/types/commands/list.command.d.ts +3 -3
- 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/start.command.d.ts +3 -3
- 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 -15
- 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-output.manager.d.ts +21 -0
- package/dist/types/managers/cli-progress-bar.manager.d.ts +17 -0
- package/dist/types/managers/cli-prompt.manager.d.ts +79 -0
- package/dist/types/managers/cli-spinner.manager.d.ts +34 -0
- package/dist/types/managers/managers.d.ts +5 -1
- package/dist/types/managers/repl-session.d.ts +62 -0
- package/dist/types/managers/shell.manager.d.ts +3 -3
- 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,90 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
var CliSpinner_1;
|
|
14
|
+
import { inject, injectable } from "tsyringe";
|
|
15
|
+
import { moduleScoped } from "@pristine-ts/common";
|
|
16
|
+
import { CliModuleKeyname } from "../cli.module.keyname";
|
|
17
|
+
import { clearLine, cursorTo } from "node:readline";
|
|
18
|
+
/**
|
|
19
|
+
* Animated spinner for indicating long-running work in a TTY. Hides the cursor while
|
|
20
|
+
* spinning, redraws the current line every 80ms, and routes the completion message
|
|
21
|
+
* through the injected `LogHandler` so success/failure rendering matches the rest of
|
|
22
|
+
* the framework.
|
|
23
|
+
*
|
|
24
|
+
* Avoid emitting other output (especially LogHandler narration) while the spinner is
|
|
25
|
+
* active — concurrent writes will fight the spinner's line clearing and produce visual
|
|
26
|
+
* artifacts.
|
|
27
|
+
*/
|
|
28
|
+
let CliSpinner = CliSpinner_1 = class CliSpinner {
|
|
29
|
+
constructor(logHandler) {
|
|
30
|
+
this.logHandler = logHandler;
|
|
31
|
+
this.spinnerInterval = null;
|
|
32
|
+
this.isSpinning = false;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Starts the spinner with the given label. Subsequent calls are no-ops until `stop()`
|
|
36
|
+
* is invoked.
|
|
37
|
+
*/
|
|
38
|
+
start(message) {
|
|
39
|
+
if (this.isSpinning)
|
|
40
|
+
return;
|
|
41
|
+
this.isSpinning = true;
|
|
42
|
+
let i = 0;
|
|
43
|
+
process.stdout.write(CliSpinner_1.HIDE_CURSOR);
|
|
44
|
+
this.spinnerInterval = setInterval(() => {
|
|
45
|
+
clearLine(process.stdout, 0);
|
|
46
|
+
cursorTo(process.stdout, 0);
|
|
47
|
+
const frame = CliSpinner_1.FRAMES[i = (i + 1) % CliSpinner_1.FRAMES.length];
|
|
48
|
+
process.stdout.write(`${CliSpinner_1.CYAN}${frame}${CliSpinner_1.RESET} ${message}`);
|
|
49
|
+
}, CliSpinner_1.FRAME_INTERVAL_MS);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Stops the spinner, restores the cursor, and optionally emits a final completion
|
|
53
|
+
* message. `success` controls whether the message is rendered as a success log
|
|
54
|
+
* (`logHandler.success`) or an error log (`logHandler.error`).
|
|
55
|
+
*/
|
|
56
|
+
stop(message, success = true) {
|
|
57
|
+
if (!this.isSpinning)
|
|
58
|
+
return;
|
|
59
|
+
if (this.spinnerInterval) {
|
|
60
|
+
clearInterval(this.spinnerInterval);
|
|
61
|
+
this.spinnerInterval = null;
|
|
62
|
+
}
|
|
63
|
+
this.isSpinning = false;
|
|
64
|
+
clearLine(process.stdout, 0);
|
|
65
|
+
cursorTo(process.stdout, 0);
|
|
66
|
+
process.stdout.write(CliSpinner_1.SHOW_CURSOR);
|
|
67
|
+
if (message) {
|
|
68
|
+
if (success) {
|
|
69
|
+
this.logHandler.success(message);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
this.logHandler.error(message);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
CliSpinner.FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
78
|
+
CliSpinner.FRAME_INTERVAL_MS = 80;
|
|
79
|
+
CliSpinner.CYAN = "\x1b[36m";
|
|
80
|
+
CliSpinner.RESET = "\x1b[0m";
|
|
81
|
+
CliSpinner.HIDE_CURSOR = "\x1B[?25l";
|
|
82
|
+
CliSpinner.SHOW_CURSOR = "\x1B[?25h";
|
|
83
|
+
CliSpinner = CliSpinner_1 = __decorate([
|
|
84
|
+
injectable(),
|
|
85
|
+
moduleScoped(CliModuleKeyname),
|
|
86
|
+
__param(0, inject("LogHandlerInterface")),
|
|
87
|
+
__metadata("design:paramtypes", [Object])
|
|
88
|
+
], CliSpinner);
|
|
89
|
+
export { CliSpinner };
|
|
90
|
+
//# sourceMappingURL=cli-spinner.manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-spinner.manager.js","sourceRoot":"","sources":["../../../../src/managers/cli-spinner.manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
export * from "./
|
|
1
|
+
export * from "./cli-output.manager";
|
|
2
|
+
export * from "./cli-progress-bar.manager";
|
|
3
|
+
export * from "./cli-prompt.manager";
|
|
4
|
+
export * from "./cli-spinner.manager";
|
|
5
|
+
export * from "./terminal-key-reader.manager";
|
|
2
6
|
export * from "./shell.manager";
|
|
3
7
|
//# sourceMappingURL=managers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC"}
|
|
@@ -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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"}
|
|
@@ -7,14 +7,16 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
10
13
|
import { exec, spawn } from "child_process";
|
|
11
|
-
import {
|
|
12
|
-
import { injectable } from "tsyringe";
|
|
14
|
+
import { inject, injectable } from "tsyringe";
|
|
13
15
|
import { PathManager } from "@pristine-ts/core";
|
|
14
16
|
import { DateUtil } from "@pristine-ts/common";
|
|
15
17
|
let ShellManager = class ShellManager {
|
|
16
|
-
constructor(
|
|
17
|
-
this.
|
|
18
|
+
constructor(logHandler, pathManager, dateUtil) {
|
|
19
|
+
this.logHandler = logHandler;
|
|
18
20
|
this.pathManager = pathManager;
|
|
19
21
|
this.dateUtil = dateUtil;
|
|
20
22
|
}
|
|
@@ -34,42 +36,45 @@ let ShellManager = class ShellManager {
|
|
|
34
36
|
finalCommand = "cd " + absoluteDirectory + " && " + command;
|
|
35
37
|
}
|
|
36
38
|
const start = new Date();
|
|
39
|
+
// Pretty/Simple output modes already render a timestamp; pass the command alone and
|
|
40
|
+
// let the formatter handle the prefix. `outputTimeBeforeExecutingCommand` is now a
|
|
41
|
+
// pass/skip flag — when false we still emit the command if stdout is enabled.
|
|
37
42
|
if (outputTimeBeforeExecutingCommand) {
|
|
38
|
-
this.
|
|
43
|
+
this.logHandler.info(finalCommand);
|
|
39
44
|
}
|
|
40
|
-
else {
|
|
41
|
-
|
|
45
|
+
else if (outputStdout) {
|
|
46
|
+
this.logHandler.info(finalCommand);
|
|
42
47
|
}
|
|
43
48
|
if (streamStdout) {
|
|
44
49
|
const child = spawn(finalCommand, [], { shell: true, env });
|
|
45
50
|
child.stdout.on('data', (data) => {
|
|
46
|
-
outputStdout && this.
|
|
51
|
+
outputStdout && this.logHandler.info(`${data}`);
|
|
47
52
|
});
|
|
48
53
|
child.stderr.on('data', (data) => {
|
|
49
|
-
outputStderr && this.
|
|
54
|
+
outputStderr && this.logHandler.warning(`Stderr: ${data}`);
|
|
50
55
|
});
|
|
51
56
|
child.on("error", (error) => {
|
|
52
|
-
|
|
57
|
+
this.logHandler.error(`Error: ${error.message}`);
|
|
53
58
|
return reject(error);
|
|
54
59
|
});
|
|
55
60
|
child.on("exit", (code) => {
|
|
56
|
-
outputStdout && this.
|
|
61
|
+
outputStdout && this.logHandler.info(`Exit (code: ${code}).`);
|
|
57
62
|
if (code !== 0) {
|
|
58
63
|
return reject(code);
|
|
59
64
|
}
|
|
60
65
|
if (outputDuration) {
|
|
61
66
|
const end = new Date();
|
|
62
67
|
const duration = end.getTime() - start.getTime();
|
|
63
|
-
this.
|
|
68
|
+
this.logHandler.info(`Executed in: ${this.dateUtil.formatDuration(duration)}`);
|
|
64
69
|
}
|
|
65
70
|
return resolve(code + "");
|
|
66
71
|
});
|
|
67
72
|
child.on("disconnect", () => {
|
|
68
|
-
outputStdout && this.
|
|
73
|
+
outputStdout && this.logHandler.warning(`Disconnect.`);
|
|
69
74
|
return reject("Disconnected");
|
|
70
75
|
});
|
|
71
76
|
child.on('close', (code) => {
|
|
72
|
-
outputStdout && this.
|
|
77
|
+
outputStdout && this.logHandler.info(`Command exited with code ${code}`);
|
|
73
78
|
if (code !== 0) {
|
|
74
79
|
return reject(code);
|
|
75
80
|
}
|
|
@@ -77,7 +82,7 @@ let ShellManager = class ShellManager {
|
|
|
77
82
|
if (outputDuration) {
|
|
78
83
|
const end = new Date();
|
|
79
84
|
const duration = end.getTime() - start.getTime();
|
|
80
|
-
this.
|
|
85
|
+
this.logHandler.info(`Executed in: ${this.dateUtil.formatDuration(duration)}`);
|
|
81
86
|
}
|
|
82
87
|
return resolve(code + "");
|
|
83
88
|
});
|
|
@@ -86,17 +91,17 @@ let ShellManager = class ShellManager {
|
|
|
86
91
|
}
|
|
87
92
|
return exec(finalCommand, { env, maxBuffer: options === null || options === void 0 ? void 0 : options.maxBuffer }, (error, stdout, stderr) => {
|
|
88
93
|
if (error && error.code) {
|
|
89
|
-
outputStderr && this.
|
|
94
|
+
outputStderr && this.logHandler.error("Error: " + error.message);
|
|
90
95
|
}
|
|
91
96
|
if (stderr) {
|
|
92
|
-
outputStderr && this.
|
|
97
|
+
outputStderr && this.logHandler.warning("Stderr: " + stderr);
|
|
93
98
|
}
|
|
94
|
-
outputStdout && this.
|
|
99
|
+
outputStdout && this.logHandler.info(stdout);
|
|
95
100
|
// Output the duration in human readable format
|
|
96
101
|
if (outputDuration) {
|
|
97
102
|
const end = new Date();
|
|
98
103
|
const duration = end.getTime() - start.getTime();
|
|
99
|
-
this.
|
|
104
|
+
this.logHandler.info(`Executed in: ${this.dateUtil.formatDuration(duration)}`);
|
|
100
105
|
}
|
|
101
106
|
if (error && error.code) {
|
|
102
107
|
return reject(error);
|
|
@@ -111,8 +116,8 @@ let ShellManager = class ShellManager {
|
|
|
111
116
|
};
|
|
112
117
|
ShellManager = __decorate([
|
|
113
118
|
injectable(),
|
|
114
|
-
|
|
115
|
-
|
|
119
|
+
__param(0, inject("LogHandlerInterface")),
|
|
120
|
+
__metadata("design:paramtypes", [Object, PathManager,
|
|
116
121
|
DateUtil])
|
|
117
122
|
], ShellManager);
|
|
118
123
|
export { ShellManager };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.manager.js","sourceRoot":"","sources":["../../../../src/managers/shell.manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shell.manager.js","sourceRoot":"","sources":["../../../../src/managers/shell.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAiC,IAAI,EAAE,KAAK,EAAC,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAC,MAAM,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAC,QAAQ,EAAC,MAAM,qBAAqB,CAAC;AAItC,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,YAA4D,UAA+B,EAC9D,WAAwB,EACxB,QAAkB;QAFa,eAAU,GAAV,UAAU,CAAqB;QAC9D,gBAAW,GAAX,WAAW,CAAa;QACxB,aAAQ,GAAR,QAAQ,CAAU;IAC/C,CAAC;IAED,OAAO,CAAC,OAAe,EAAE,OASxB;QACC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;YAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;YACxB,IAAI,YAAY,GAAG,OAAO,CAAC;YAE3B,MAAM,YAAY,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,mCAAI,KAAK,CAAC;YACpD,MAAM,SAAS,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,CAAC;YAErC,MAAM,YAAY,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,mCAAI,IAAI,CAAC;YACnD,MAAM,YAAY,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,mCAAI,IAAI,CAAC;YACnD,MAAM,cAAc,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,cAAc,mCAAI,IAAI,CAAC;YACvD,MAAM,gCAAgC,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,gCAAgC,mCAAI,IAAI,CAAC;YAE3F,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,0CAA0C,CAAC,SAAS,CAAC,CAAC;gBACjG,YAAY,GAAG,KAAK,GAAG,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;YAC9D,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;YAEzB,oFAAoF;YACpF,mFAAmF;YACnF,8EAA8E;YAC9E,IAAI,gCAAgC,EAAE,CAAC;gBACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACrC,CAAC;YAGD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAC,CAAC,CAAC;gBAC1D,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC/B,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;gBAClD,CAAC,CAAC,CAAC;gBAEH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC/B,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;gBAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAEjD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAA;gBAEF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACxB,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC;oBAE9D,IAAG,IAAI,KAAK,CAAC,EAAE,CAAC;wBACd,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC;oBAED,IAAI,cAAc,EAAE,CAAC;wBACnB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;wBACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;wBACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACjF,CAAC;oBAED,OAAO,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAA;gBAEF,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;oBAC1B,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;oBAEvD,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAA;gBAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;oBACzB,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;oBAEzE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;wBACf,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC;oBAED,+CAA+C;oBAC/C,IAAI,cAAc,EAAE,CAAC;wBACnB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;wBACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;wBACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACjF,CAAC;oBAED,OAAO,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,0BAA0B,wDAAG,KAAK,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,OAAO,IAAI,CAAC,YAAY,EAAE,EAAC,GAAG,EAAE,SAAS,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;gBACxF,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACxB,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnE,CAAC;gBAED,IAAI,MAAM,EAAE,CAAC;oBACX,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC;gBAC/D,CAAC;gBAED,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE7C,+CAA+C;gBAC/C,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;oBACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACjF,CAAC;gBAED,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACxB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;qBAAM,IAAI,MAAM,EAAE,CAAC;oBAClB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzB,CAAC;gBAED,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AApIY,YAAY;IADxB,UAAU,EAAE;IAEE,WAAA,MAAM,CAAC,qBAAqB,CAAC,CAAA;6CACA,WAAW;QACd,QAAQ;GAHpC,YAAY,CAoIxB"}
|
|
@@ -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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"}
|