@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,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
45
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
46
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
47
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
48
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
49
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
50
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
var CliPrompt_1;
|
|
54
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
exports.CliPrompt = void 0;
|
|
56
|
+
const tsyringe_1 = require("tsyringe");
|
|
57
|
+
const common_1 = require("@pristine-ts/common");
|
|
58
|
+
const cli_module_keyname_1 = require("../cli.module.keyname");
|
|
59
|
+
const readline = __importStar(require("node:readline/promises"));
|
|
60
|
+
const node_readline_1 = require("node:readline");
|
|
61
|
+
const node_process_1 = require("node:process");
|
|
62
|
+
const console_readline_options_1 = require("../options/console-readline.options");
|
|
63
|
+
const terminal_key_reader_manager_1 = require("./terminal-key-reader.manager");
|
|
64
|
+
const terminal_key_name_enum_1 = require("../enums/terminal-key-name.enum");
|
|
65
|
+
const boolean_answer_parser_1 = require("../utils/boolean-answer-parser");
|
|
66
|
+
const prompt_cancelled_error_1 = require("../errors/prompt-cancelled.error");
|
|
67
|
+
/**
|
|
68
|
+
* Interactive terminal prompts for CLI commands, implemented entirely on Node's `readline`
|
|
69
|
+
* and raw-mode stdin — no third-party prompt library. Line-based prompts (`readLine`,
|
|
70
|
+
* `input`, `confirm`) go through `readline/promises`; the keystroke-level prompts (`select`
|
|
71
|
+
* arrow menu, masked `readSecret`) go through {@link TerminalKeyReader}.
|
|
72
|
+
*
|
|
73
|
+
* `Ctrl+C` rejects with {@link PromptCancelledError} across all of them — the line prompts
|
|
74
|
+
* via a `readline` SIGINT handler, the raw-mode prompts via the key reader — so callers get
|
|
75
|
+
* one consistent cancellation signal.
|
|
76
|
+
*/
|
|
77
|
+
let CliPrompt = CliPrompt_1 = class CliPrompt {
|
|
78
|
+
constructor(terminalKeyReader) {
|
|
79
|
+
this.terminalKeyReader = terminalKeyReader;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Reads a string from stdin synchronously. Returns whatever `process.stdin.read()`
|
|
83
|
+
* gives back (which may be `null` when no data is buffered).
|
|
84
|
+
*/
|
|
85
|
+
read() {
|
|
86
|
+
return process.stdin.read();
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Reads a line from stdin after displaying a prompt. When
|
|
90
|
+
* `options.showCharactersOnTyping` is false, the answered line is cleared and replaced
|
|
91
|
+
* with a masked echo so the typed value isn't left visible on screen (a post-input clear,
|
|
92
|
+
* not true keystroke suppression — use {@link readSecret} for real masking).
|
|
93
|
+
*
|
|
94
|
+
* `Ctrl+C` rejects with {@link PromptCancelledError}: registering a `SIGINT` listener on
|
|
95
|
+
* the readline interface overrides Node's default interrupt handling, turning it into a
|
|
96
|
+
* clean rejection rather than a hung promise.
|
|
97
|
+
*/
|
|
98
|
+
readLine(question_1) {
|
|
99
|
+
return __awaiter(this, arguments, void 0, function* (question, options = new console_readline_options_1.ConsoleReadlineOptions()) {
|
|
100
|
+
const rl = readline.createInterface({ input: node_process_1.stdin, output: node_process_1.stdout });
|
|
101
|
+
try {
|
|
102
|
+
const answer = yield new Promise((resolve, reject) => {
|
|
103
|
+
rl.on("SIGINT", () => reject(new prompt_cancelled_error_1.PromptCancelledError()));
|
|
104
|
+
rl.question(question).then(resolve, reject);
|
|
105
|
+
});
|
|
106
|
+
if (!options.showCharactersOnTyping) {
|
|
107
|
+
(0, node_readline_1.moveCursor)(node_process_1.stdout, 0, -1);
|
|
108
|
+
(0, node_readline_1.clearLine)(node_process_1.stdout, 0);
|
|
109
|
+
process.stdout.write(`${question} [******]\n`);
|
|
110
|
+
}
|
|
111
|
+
return answer;
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
rl.close();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Asks a free-text question, optionally with a default. The default is shown as a hint and
|
|
120
|
+
* returned verbatim when the user submits an empty line. The answer is trimmed.
|
|
121
|
+
*/
|
|
122
|
+
input(message, defaultValue) {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
const suffix = defaultValue !== undefined && defaultValue !== ""
|
|
125
|
+
? ` ${CliPrompt_1.DIM}(${defaultValue})${CliPrompt_1.RESET}`
|
|
126
|
+
: "";
|
|
127
|
+
const answer = (yield this.readLine(`${message}${suffix} `)).trim();
|
|
128
|
+
if (answer.length === 0 && defaultValue !== undefined) {
|
|
129
|
+
return defaultValue;
|
|
130
|
+
}
|
|
131
|
+
return answer;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Asks a yes/no question. An empty answer takes the default; anything `BooleanAnswerParser`
|
|
136
|
+
* understands (`y`/`yes`/`true`/`1`, `n`/`no`/`false`/`0`) is accepted; anything else is
|
|
137
|
+
* re-asked. The default is shown capitalized in the `(Y/n)` / `(y/N)` hint.
|
|
138
|
+
*/
|
|
139
|
+
confirm(message_1) {
|
|
140
|
+
return __awaiter(this, arguments, void 0, function* (message, defaultValue = true) {
|
|
141
|
+
const hint = defaultValue ? "(Y/n)" : "(y/N)";
|
|
142
|
+
for (;;) {
|
|
143
|
+
const raw = (yield this.readLine(`${message} ${hint} `)).trim();
|
|
144
|
+
if (raw.length === 0) {
|
|
145
|
+
return defaultValue;
|
|
146
|
+
}
|
|
147
|
+
const parsed = boolean_answer_parser_1.BooleanAnswerParser.parse(raw);
|
|
148
|
+
if (parsed !== undefined) {
|
|
149
|
+
return parsed;
|
|
150
|
+
}
|
|
151
|
+
process.stdout.write("Please answer yes (y) or no (n).\n");
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Presents an arrow-key menu and returns the chosen choice's `value`. `↑`/`↓` move the
|
|
157
|
+
* highlight (wrapping at the ends), `Enter` selects, `Ctrl+C` cancels. When `defaultValue`
|
|
158
|
+
* matches a choice, the menu starts on it. The cursor is hidden while the menu is active
|
|
159
|
+
* and restored afterward.
|
|
160
|
+
*/
|
|
161
|
+
select(message, choices, defaultValue) {
|
|
162
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
163
|
+
if (choices.length === 0) {
|
|
164
|
+
throw new Error("CliPrompt.select requires at least one choice.");
|
|
165
|
+
}
|
|
166
|
+
const defaultIndex = choices.findIndex((choice) => choice.value === defaultValue);
|
|
167
|
+
let active = defaultIndex >= 0 ? defaultIndex : 0;
|
|
168
|
+
process.stdout.write(CliPrompt_1.HIDE_CURSOR);
|
|
169
|
+
process.stdout.write(`${CliPrompt_1.CYAN}?${CliPrompt_1.RESET} ${message}\n`);
|
|
170
|
+
this.renderChoices(choices, active);
|
|
171
|
+
try {
|
|
172
|
+
return yield this.terminalKeyReader.read((key, resolve) => {
|
|
173
|
+
if (key.name === terminal_key_name_enum_1.TerminalKeyName.Up) {
|
|
174
|
+
active = (active - 1 + choices.length) % choices.length;
|
|
175
|
+
this.repaintChoices(choices, active);
|
|
176
|
+
}
|
|
177
|
+
else if (key.name === terminal_key_name_enum_1.TerminalKeyName.Down) {
|
|
178
|
+
active = (active + 1) % choices.length;
|
|
179
|
+
this.repaintChoices(choices, active);
|
|
180
|
+
}
|
|
181
|
+
else if (key.name === terminal_key_name_enum_1.TerminalKeyName.Enter) {
|
|
182
|
+
resolve(choices[active].value);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
process.stdout.write(CliPrompt_1.SHOW_CURSOR);
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Reads a secret (password, token, …) from stdin with the typed characters masked as `*`.
|
|
193
|
+
* Real keystroke suppression via raw mode (unlike {@link readLine}'s post-input clear):
|
|
194
|
+
* each character echoes a `*`, `Backspace` erases one, `Enter` submits, `Ctrl+C` cancels.
|
|
195
|
+
* The value is returned untrimmed — a secret may legitimately contain surrounding
|
|
196
|
+
* whitespace.
|
|
197
|
+
*/
|
|
198
|
+
readSecret(question) {
|
|
199
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
200
|
+
process.stdout.write(question);
|
|
201
|
+
let value = "";
|
|
202
|
+
try {
|
|
203
|
+
yield this.terminalKeyReader.read((key, resolve) => {
|
|
204
|
+
if (key.name === terminal_key_name_enum_1.TerminalKeyName.Enter) {
|
|
205
|
+
resolve(undefined);
|
|
206
|
+
}
|
|
207
|
+
else if (key.name === terminal_key_name_enum_1.TerminalKeyName.Backspace) {
|
|
208
|
+
if (value.length > 0) {
|
|
209
|
+
value = value.slice(0, -1);
|
|
210
|
+
process.stdout.write("\b \b");
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else if (key.name === terminal_key_name_enum_1.TerminalKeyName.Character) {
|
|
214
|
+
value += key.sequence;
|
|
215
|
+
process.stdout.write("*");
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
process.stdout.write("\n");
|
|
221
|
+
}
|
|
222
|
+
return value;
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Writes the choice rows, highlighting the active one with a colored pointer. Each row is
|
|
227
|
+
* cleared before it's written so a repaint never leaves a longer previous label behind.
|
|
228
|
+
* @private
|
|
229
|
+
*/
|
|
230
|
+
renderChoices(choices, active) {
|
|
231
|
+
choices.forEach((choice, index) => {
|
|
232
|
+
(0, node_readline_1.clearLine)(process.stdout, 0);
|
|
233
|
+
(0, node_readline_1.cursorTo)(process.stdout, 0);
|
|
234
|
+
if (index === active) {
|
|
235
|
+
process.stdout.write(`${CliPrompt_1.CYAN}${CliPrompt_1.POINTER} ${choice.name}${CliPrompt_1.RESET}\n`);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
process.stdout.write(` ${choice.name}\n`);
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Moves the cursor back up over the previously-rendered choice rows and rewrites them, so
|
|
244
|
+
* the menu updates in place as the selection moves.
|
|
245
|
+
* @private
|
|
246
|
+
*/
|
|
247
|
+
repaintChoices(choices, active) {
|
|
248
|
+
(0, node_readline_1.moveCursor)(process.stdout, 0, -choices.length);
|
|
249
|
+
this.renderChoices(choices, active);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
exports.CliPrompt = CliPrompt;
|
|
253
|
+
// ANSI constants, matching the conventions used by CliSpinner / CliProgressBar.
|
|
254
|
+
CliPrompt.CYAN = "\x1b[36m";
|
|
255
|
+
CliPrompt.DIM = "\x1b[2m";
|
|
256
|
+
CliPrompt.RESET = "\x1b[0m";
|
|
257
|
+
CliPrompt.HIDE_CURSOR = "\x1B[?25l";
|
|
258
|
+
CliPrompt.SHOW_CURSOR = "\x1B[?25h";
|
|
259
|
+
CliPrompt.POINTER = "❯";
|
|
260
|
+
exports.CliPrompt = CliPrompt = CliPrompt_1 = __decorate([
|
|
261
|
+
(0, tsyringe_1.injectable)(),
|
|
262
|
+
(0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
|
|
263
|
+
__metadata("design:paramtypes", [terminal_key_reader_manager_1.TerminalKeyReader])
|
|
264
|
+
], CliPrompt);
|
|
265
|
+
//# sourceMappingURL=cli-prompt.manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-prompt.manager.js","sourceRoot":"","sources":["../../../../src/managers/cli-prompt.manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var CliSpinner_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.CliSpinner = void 0;
|
|
17
|
+
const tsyringe_1 = require("tsyringe");
|
|
18
|
+
const common_1 = require("@pristine-ts/common");
|
|
19
|
+
const cli_module_keyname_1 = require("../cli.module.keyname");
|
|
20
|
+
const node_readline_1 = require("node:readline");
|
|
21
|
+
/**
|
|
22
|
+
* Animated spinner for indicating long-running work in a TTY. Hides the cursor while
|
|
23
|
+
* spinning, redraws the current line every 80ms, and routes the completion message
|
|
24
|
+
* through the injected `LogHandler` so success/failure rendering matches the rest of
|
|
25
|
+
* the framework.
|
|
26
|
+
*
|
|
27
|
+
* Avoid emitting other output (especially LogHandler narration) while the spinner is
|
|
28
|
+
* active — concurrent writes will fight the spinner's line clearing and produce visual
|
|
29
|
+
* artifacts.
|
|
30
|
+
*/
|
|
31
|
+
let CliSpinner = CliSpinner_1 = class CliSpinner {
|
|
32
|
+
constructor(logHandler) {
|
|
33
|
+
this.logHandler = logHandler;
|
|
34
|
+
this.spinnerInterval = null;
|
|
35
|
+
this.isSpinning = false;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Starts the spinner with the given label. Subsequent calls are no-ops until `stop()`
|
|
39
|
+
* is invoked.
|
|
40
|
+
*/
|
|
41
|
+
start(message) {
|
|
42
|
+
if (this.isSpinning)
|
|
43
|
+
return;
|
|
44
|
+
this.isSpinning = true;
|
|
45
|
+
let i = 0;
|
|
46
|
+
process.stdout.write(CliSpinner_1.HIDE_CURSOR);
|
|
47
|
+
this.spinnerInterval = setInterval(() => {
|
|
48
|
+
(0, node_readline_1.clearLine)(process.stdout, 0);
|
|
49
|
+
(0, node_readline_1.cursorTo)(process.stdout, 0);
|
|
50
|
+
const frame = CliSpinner_1.FRAMES[i = (i + 1) % CliSpinner_1.FRAMES.length];
|
|
51
|
+
process.stdout.write(`${CliSpinner_1.CYAN}${frame}${CliSpinner_1.RESET} ${message}`);
|
|
52
|
+
}, CliSpinner_1.FRAME_INTERVAL_MS);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Stops the spinner, restores the cursor, and optionally emits a final completion
|
|
56
|
+
* message. `success` controls whether the message is rendered as a success log
|
|
57
|
+
* (`logHandler.success`) or an error log (`logHandler.error`).
|
|
58
|
+
*/
|
|
59
|
+
stop(message, success = true) {
|
|
60
|
+
if (!this.isSpinning)
|
|
61
|
+
return;
|
|
62
|
+
if (this.spinnerInterval) {
|
|
63
|
+
clearInterval(this.spinnerInterval);
|
|
64
|
+
this.spinnerInterval = null;
|
|
65
|
+
}
|
|
66
|
+
this.isSpinning = false;
|
|
67
|
+
(0, node_readline_1.clearLine)(process.stdout, 0);
|
|
68
|
+
(0, node_readline_1.cursorTo)(process.stdout, 0);
|
|
69
|
+
process.stdout.write(CliSpinner_1.SHOW_CURSOR);
|
|
70
|
+
if (message) {
|
|
71
|
+
if (success) {
|
|
72
|
+
this.logHandler.success(message);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.logHandler.error(message);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
exports.CliSpinner = CliSpinner;
|
|
81
|
+
CliSpinner.FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
82
|
+
CliSpinner.FRAME_INTERVAL_MS = 80;
|
|
83
|
+
CliSpinner.CYAN = "\x1b[36m";
|
|
84
|
+
CliSpinner.RESET = "\x1b[0m";
|
|
85
|
+
CliSpinner.HIDE_CURSOR = "\x1B[?25l";
|
|
86
|
+
CliSpinner.SHOW_CURSOR = "\x1B[?25h";
|
|
87
|
+
exports.CliSpinner = CliSpinner = CliSpinner_1 = __decorate([
|
|
88
|
+
(0, tsyringe_1.injectable)(),
|
|
89
|
+
(0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
|
|
90
|
+
__param(0, (0, tsyringe_1.inject)("LogHandlerInterface")),
|
|
91
|
+
__metadata("design:paramtypes", [Object])
|
|
92
|
+
], CliSpinner);
|
|
93
|
+
//# 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":";;;;;;;;;;;;;;;;AAAA,uCAA4C;AAC5C,gDAAiD;AAEjD,8DAAuD;AACvD,iDAAkD;AAElD;;;;;;;;;GASG;AAGI,IAAM,UAAU,kBAAhB,MAAM,UAAU;IAWrB,YAA2C,UAAgD;QAA/B,eAAU,GAAV,UAAU,CAAqB;QAVnF,oBAAe,GAA0B,IAAI,CAAC;QAC9C,eAAU,GAAG,KAAK,CAAC;IAU3B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAe;QACnB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAU,CAAC,WAAW,CAAC,CAAC;QAE7C,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAA,yBAAS,EAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7B,IAAA,wBAAQ,EAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,YAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,YAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAU,CAAC,IAAI,GAAG,KAAK,GAAG,YAAU,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC,EAAE,YAAU,CAAC,iBAAiB,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,OAAgB,EAAE,UAAmB,IAAI;QAC5C,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAA,yBAAS,EAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAA,wBAAQ,EAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAU,CAAC,WAAW,CAAC,CAAC;QAE7C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;;AAxDU,gCAAU;AAIG,iBAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,AAArD,CAAsD;AAC5D,4BAAiB,GAAG,EAAE,AAAL,CAAM;AACvB,eAAI,GAAG,UAAU,AAAb,CAAc;AAClB,gBAAK,GAAG,SAAS,AAAZ,CAAa;AAClB,sBAAW,GAAG,WAAW,AAAd,CAAe;AAC1B,sBAAW,GAAG,WAAW,AAAd,CAAe;qBATvC,UAAU;IAFtB,IAAA,qBAAU,GAAE;IACZ,IAAA,qBAAY,EAAC,qCAAgB,CAAC;IAYhB,WAAA,IAAA,iBAAM,EAAC,qBAAqB,CAAC,CAAA;;GAX/B,UAAU,CAyDtB"}
|
|
@@ -14,6 +14,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./
|
|
17
|
+
__exportStar(require("./cli-output.manager"), exports);
|
|
18
|
+
__exportStar(require("./cli-progress-bar.manager"), exports);
|
|
19
|
+
__exportStar(require("./cli-prompt.manager"), exports);
|
|
20
|
+
__exportStar(require("./cli-spinner.manager"), exports);
|
|
21
|
+
__exportStar(require("./terminal-key-reader.manager"), exports);
|
|
18
22
|
__exportStar(require("./shell.manager"), exports);
|
|
19
23
|
//# sourceMappingURL=managers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"managers.js","sourceRoot":"","sources":["../../../../src/managers/managers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,6DAA2C;AAC3C,uDAAqC;AACrC,wDAAsC;AACtC,gEAA8C;AAC9C,kDAAgC"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
45
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
46
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
47
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
48
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
49
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
50
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
var ReplSession_1;
|
|
54
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
55
|
+
exports.ReplSession = void 0;
|
|
56
|
+
const readline = __importStar(require("node:readline"));
|
|
57
|
+
const tsyringe_1 = require("tsyringe");
|
|
58
|
+
const common_1 = require("@pristine-ts/common");
|
|
59
|
+
const core_1 = require("@pristine-ts/core");
|
|
60
|
+
const observability_1 = require("@pristine-ts/observability");
|
|
61
|
+
const cli_output_manager_1 = require("./cli-output.manager");
|
|
62
|
+
const cli_module_keyname_1 = require("../cli.module.keyname");
|
|
63
|
+
/**
|
|
64
|
+
* The interactive `pristine` console — launched when the bin is invoked with no command
|
|
65
|
+
* (or `pristine repl`). It keeps the kernel booted for the whole session, so every
|
|
66
|
+
* command runs instantly with no per-invocation boot cost.
|
|
67
|
+
*
|
|
68
|
+
* Slash-prefixed commands dispatch through the *same* path as a one-shot
|
|
69
|
+
* `pristine <command>` invocation — `kernel.handle(argv, {keyname: Cli})` — so the REPL
|
|
70
|
+
* and the command line resolve, validate and run commands identically. (This works
|
|
71
|
+
* because `CliEventHandler` returns the exit code instead of calling `process.exit`.)
|
|
72
|
+
* Plus the session verbs `/help`, `/clear`, `/exit`. Tab-completion is driven by the live
|
|
73
|
+
* command registry and by recent trace ids for `/trace` / `/logs`.
|
|
74
|
+
*
|
|
75
|
+
* The kernel is **not** a constructor dependency — `ReplSession` is a driver *of* the
|
|
76
|
+
* kernel, so the running kernel is handed to `start()` by whoever owns it (`Cli`). Only
|
|
77
|
+
* genuine collaborator services are injected.
|
|
78
|
+
*/
|
|
79
|
+
let ReplSession = ReplSession_1 = class ReplSession {
|
|
80
|
+
constructor(cliOutput, storeReader) {
|
|
81
|
+
this.cliOutput = cliOutput;
|
|
82
|
+
this.storeReader = storeReader;
|
|
83
|
+
this.commands = [];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Runs the read-eval-print loop until `/exit` or EOF (Ctrl-D). Resolves with the exit
|
|
87
|
+
* code the bin should return.
|
|
88
|
+
*
|
|
89
|
+
* @param kernel The already-started kernel this session drives — passed in by the
|
|
90
|
+
* caller that owns it, rather than injected.
|
|
91
|
+
*/
|
|
92
|
+
start(kernel) {
|
|
93
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
this.commands = this.resolveCommands(kernel);
|
|
95
|
+
this.printBanner();
|
|
96
|
+
const rl = readline.createInterface({
|
|
97
|
+
input: process.stdin,
|
|
98
|
+
output: process.stdout,
|
|
99
|
+
prompt: ReplSession_1.PROMPT,
|
|
100
|
+
completer: (line) => this.complete(line),
|
|
101
|
+
});
|
|
102
|
+
return new Promise((resolve) => {
|
|
103
|
+
rl.prompt();
|
|
104
|
+
rl.on("line", (line) => {
|
|
105
|
+
const trimmed = line.trim();
|
|
106
|
+
if (trimmed.length === 0) {
|
|
107
|
+
rl.prompt();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Pause input while a command runs so its own SIGINT handling (e.g. `logs -f`)
|
|
111
|
+
// owns Ctrl-C, and so a second line can't interleave mid-dispatch.
|
|
112
|
+
rl.pause();
|
|
113
|
+
void this.handleLine(trimmed, kernel).then((shouldExit) => {
|
|
114
|
+
if (shouldExit) {
|
|
115
|
+
rl.close();
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
rl.resume();
|
|
119
|
+
rl.prompt();
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
// Ctrl-C at an idle prompt clears the line rather than killing the session.
|
|
123
|
+
rl.on("SIGINT", () => {
|
|
124
|
+
this.cliOutput.writeLine("(type /exit to quit)");
|
|
125
|
+
rl.prompt();
|
|
126
|
+
});
|
|
127
|
+
rl.on("close", () => {
|
|
128
|
+
void this.shutdown(kernel).then(() => resolve(common_1.ExitCode.Success));
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Handles one input line. Returns true when the session should end.
|
|
135
|
+
*/
|
|
136
|
+
handleLine(input, kernel) {
|
|
137
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
138
|
+
const withoutSlash = input.startsWith("/") ? input.slice(1) : input;
|
|
139
|
+
const tokens = withoutSlash.split(/\s+/).filter(token => token.length > 0);
|
|
140
|
+
const name = tokens[0];
|
|
141
|
+
const rest = tokens.slice(1);
|
|
142
|
+
if (name === "exit" || name === "quit") {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
if (name === "clear") {
|
|
146
|
+
console.clear();
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
if (name === "help") {
|
|
150
|
+
this.printHelp();
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
// Dispatch through the exact same path as a one-shot `pristine <command>`: a
|
|
155
|
+
// synthetic argv handed to `kernel.handle` with the `Cli` execution context. The
|
|
156
|
+
// kernel maps it, `CliEventHandler` resolves + validates + runs it and returns the
|
|
157
|
+
// exit code (no `process.exit`), so the loop survives. An unknown command throws
|
|
158
|
+
// `CommandNotFoundError`, caught below.
|
|
159
|
+
yield kernel.handle(["node", "repl", name, ...rest], { keyname: core_1.ExecutionContextKeynameEnum.Cli, context: null });
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
this.cliOutput.writeLine(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
163
|
+
}
|
|
164
|
+
return false;
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Readline completer. Completes `/`-prefixed command names and session verbs; for
|
|
169
|
+
* `/trace` and `/logs` it completes the trailing token with recent trace ids.
|
|
170
|
+
*/
|
|
171
|
+
complete(line) {
|
|
172
|
+
const traceIdMatch = /^\/(trace|logs)\s+(\S*)$/.exec(line);
|
|
173
|
+
if (traceIdMatch !== null) {
|
|
174
|
+
const partial = traceIdMatch[2];
|
|
175
|
+
const hits = this.storeReader.recentTraceIds(ReplSession_1.TRACE_ID_COMPLETION_LIMIT)
|
|
176
|
+
.filter(id => id.startsWith(partial));
|
|
177
|
+
return [hits, partial];
|
|
178
|
+
}
|
|
179
|
+
const candidates = [
|
|
180
|
+
...this.commands.map(command => `/${command.name}`),
|
|
181
|
+
...ReplSession_1.SESSION_VERBS,
|
|
182
|
+
];
|
|
183
|
+
const hits = candidates.filter(candidate => candidate.startsWith(line));
|
|
184
|
+
return [hits.length > 0 ? hits : candidates, line];
|
|
185
|
+
}
|
|
186
|
+
printBanner() {
|
|
187
|
+
this.cliOutput.writeLine("Pristine — interactive console");
|
|
188
|
+
this.cliOutput.writeLine("Type /help for commands, /exit to quit.");
|
|
189
|
+
this.cliOutput.writeLine("");
|
|
190
|
+
}
|
|
191
|
+
printHelp() {
|
|
192
|
+
var _a;
|
|
193
|
+
this.cliOutput.writeLine("Session:");
|
|
194
|
+
this.cliOutput.writeLine(" /help show this message");
|
|
195
|
+
this.cliOutput.writeLine(" /clear clear the screen");
|
|
196
|
+
this.cliOutput.writeLine(" /exit leave the console");
|
|
197
|
+
this.cliOutput.writeLine("");
|
|
198
|
+
this.cliOutput.writeLine("Commands (also runnable as `pristine <name>`):");
|
|
199
|
+
const sorted = [...this.commands].sort((a, b) => a.name.localeCompare(b.name));
|
|
200
|
+
const longest = sorted.reduce((max, command) => Math.max(max, command.name.length), 0);
|
|
201
|
+
for (const command of sorted) {
|
|
202
|
+
const padded = `/${command.name}`.padEnd(longest + 3, " ");
|
|
203
|
+
this.cliOutput.writeLine(` ${padded}${(_a = command.description) !== null && _a !== void 0 ? _a : ""}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
shutdown(kernel) {
|
|
207
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
208
|
+
try {
|
|
209
|
+
yield kernel.stop();
|
|
210
|
+
}
|
|
211
|
+
catch (_a) {
|
|
212
|
+
// Best-effort — we're leaving the process anyway.
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Enumerates every registered command.
|
|
218
|
+
*
|
|
219
|
+
* Resolved from a dedicated child container with the `CurrentChildContainer` token
|
|
220
|
+
* registered — some commands (`HelpCommand`, `ListCommand`) inject that token, which
|
|
221
|
+
* only the kernel's per-event child containers carry. The one-shot path gets it for
|
|
222
|
+
* free because `CliEventHandler` runs inside such a child container; the REPL builds an
|
|
223
|
+
* equivalent one once for the whole session.
|
|
224
|
+
*
|
|
225
|
+
* `resolveAll`, justified: this is framework REPL infrastructure resolved at session
|
|
226
|
+
* start, mirroring `Cli.warnOnCommandCollisions`. Enumerating every `Command`-tagged
|
|
227
|
+
* service is inherently a container-introspection operation with no constructor seam.
|
|
228
|
+
*/
|
|
229
|
+
resolveCommands(kernel) {
|
|
230
|
+
try {
|
|
231
|
+
const childContainer = kernel.container.createChildContainer();
|
|
232
|
+
childContainer.registerInstance(common_1.ServiceDefinitionTagEnum.CurrentChildContainer, childContainer);
|
|
233
|
+
return childContainer.resolveAll(common_1.ServiceDefinitionTagEnum.Command);
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
process.stderr.write(`[repl] could not load commands: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
237
|
+
return [];
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
exports.ReplSession = ReplSession;
|
|
242
|
+
ReplSession.PROMPT = "pristine ❯ ";
|
|
243
|
+
ReplSession.SESSION_VERBS = ["/help", "/clear", "/exit"];
|
|
244
|
+
ReplSession.TRACE_ID_COMPLETION_LIMIT = 25;
|
|
245
|
+
exports.ReplSession = ReplSession = ReplSession_1 = __decorate([
|
|
246
|
+
(0, tsyringe_1.injectable)(),
|
|
247
|
+
(0, common_1.moduleScoped)(cli_module_keyname_1.CliModuleKeyname),
|
|
248
|
+
__metadata("design:paramtypes", [cli_output_manager_1.CliOutput,
|
|
249
|
+
observability_1.ObservabilityStoreReader])
|
|
250
|
+
], ReplSession);
|
|
251
|
+
//# sourceMappingURL=repl-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repl-session.js","sourceRoot":"","sources":["../../../../src/managers/repl-session.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wDAA0C;AAC1C,uCAAoC;AACpC,gDAAqF;AACrF,4CAAsE;AACtE,8DAAoE;AAEpE,6DAA+C;AAC/C,8DAAuD;AAEvD;;;;;;;;;;;;;;;GAeG;AAGI,IAAM,WAAW,mBAAjB,MAAM,WAAW;IAOtB,YACmB,SAAoB,EACpB,WAAqC;QADrC,cAAS,GAAT,SAAS,CAAW;QACpB,gBAAW,GAAX,WAAW,CAA0B;QAJhD,aAAQ,GAA4B,EAAE,CAAC;IAM/C,CAAC;IAED;;;;;;OAMG;IACG,KAAK,CAAC,MAAc;;YACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;YAEnB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,aAAW,CAAC,MAAM;gBAC1B,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;aACjD,CAAC,CAAC;YAEH,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;gBACrC,EAAE,CAAC,MAAM,EAAE,CAAC;gBAEZ,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;oBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,EAAE,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO;oBACT,CAAC;oBAED,+EAA+E;oBAC/E,mEAAmE;oBACnE,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;wBACxD,IAAI,UAAU,EAAE,CAAC;4BACf,EAAE,CAAC,KAAK,EAAE,CAAC;4BACX,OAAO;wBACT,CAAC;wBACD,EAAE,CAAC,MAAM,EAAE,CAAC;wBACZ,EAAE,CAAC,MAAM,EAAE,CAAC;oBACd,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,4EAA4E;gBAC5E,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;oBACnB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;oBACjD,EAAE,CAAC,MAAM,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBAClB,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnE,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAED;;OAEG;IACW,UAAU,CAAC,KAAa,EAAE,MAAc;;YACpD,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACpE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE7B,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACvC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC;gBACH,6EAA6E;gBAC7E,iFAAiF;gBACjF,mFAAmF;gBACnF,iFAAiF;gBACjF,wCAAwC;gBACxC,MAAM,MAAM,CAAC,MAAM,CACjB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,EAC/B,EAAC,OAAO,EAAE,kCAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAC,CAC1D,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/F,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KAAA;IAED;;;OAGG;IACK,QAAQ,CAAC,IAAY;QAC3B,MAAM,YAAY,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAW,CAAC,yBAAyB,CAAC;iBAChF,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,UAAU,GAAG;YACjB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACnD,GAAG,aAAW,CAAC,aAAa;SAC7B,CAAC;QACF,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QAC3D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAEO,SAAS;;QACf,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACvF,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,MAAM,GAAG,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAEa,QAAQ,CAAC,MAAc;;YACnC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAAC,WAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;QACH,CAAC;KAAA;IAED;;;;;;;;;;;;OAYG;IACK,eAAe,CAAC,MAAc;QACpC,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;YAC/D,cAAc,CAAC,gBAAgB,CAAC,iCAAwB,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;YAChG,OAAO,cAAc,CAAC,UAAU,CAAwB,iCAAwB,CAAC,OAAO,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpH,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;;AAhLU,kCAAW;AACE,kBAAM,GAAG,aAAa,AAAhB,CAAiB;AACvB,yBAAa,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,AAA/B,CAAgC;AAC7C,qCAAyB,GAAG,EAAE,AAAL,CAAM;sBAH5C,WAAW;IAFvB,IAAA,qBAAU,GAAE;IACZ,IAAA,qBAAY,EAAC,qCAAgB,CAAC;qCASC,8BAAS;QACP,wCAAwB;GAT7C,WAAW,CAiLvB"}
|