@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,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StartReplEventResponse = void 0;
|
|
4
|
+
const core_1 = require("@pristine-ts/core");
|
|
5
|
+
/**
|
|
6
|
+
* The response shape produced by `ReplStartEventHandler` when the interactive session
|
|
7
|
+
* ends (`/exit` or EOF). Carries the exit code the bin should pass to `process.exit`,
|
|
8
|
+
* surfaced through `ReplStartEventMapper.reverseMap`.
|
|
9
|
+
*/
|
|
10
|
+
class StartReplEventResponse extends core_1.EventResponse {
|
|
11
|
+
}
|
|
12
|
+
exports.StartReplEventResponse = StartReplEventResponse;
|
|
13
|
+
//# sourceMappingURL=start-repl-event-response.type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-repl-event-response.type.js","sourceRoot":"","sources":["../../../../src/types/start-repl-event-response.type.ts"],"names":[],"mappings":";;;AAAA,4CAAgD;AAIhD;;;;GAIG;AACH,MAAa,sBAAuB,SAAQ,oBAAuD;CAClG;AADD,wDACC"}
|
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./command-event.type"), exports);
|
|
18
18
|
__exportStar(require("./command-event-response.type"), exports);
|
|
19
|
+
__exportStar(require("./start-repl-event-response.type"), exports);
|
|
19
20
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,gEAA8C"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/types/types.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,gEAA8C;AAC9C,mEAAiD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BooleanAnswerParser = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Interprets a free-text answer as a boolean the way traditional CLIs do — accepting
|
|
6
|
+
* `y`/`yes`/`true`/`1` and `n`/`no`/`false`/`0` (case-insensitive, surrounding whitespace
|
|
7
|
+
* ignored). Returns `undefined` for anything unrecognized so callers can re-ask.
|
|
8
|
+
*
|
|
9
|
+
* Shared by `CliPrompt.confirm` (yes/no prompts) and `CommandParameterPrompter` (typed
|
|
10
|
+
* boolean parameters) so both accept exactly the same set of answers.
|
|
11
|
+
*/
|
|
12
|
+
class BooleanAnswerParser {
|
|
13
|
+
static parse(raw) {
|
|
14
|
+
const normalized = raw.trim().toLowerCase();
|
|
15
|
+
if (normalized === "y" || normalized === "yes" || normalized === "true" || normalized === "1") {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
if (normalized === "n" || normalized === "no" || normalized === "false" || normalized === "0") {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.BooleanAnswerParser = BooleanAnswerParser;
|
|
25
|
+
//# sourceMappingURL=boolean-answer-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boolean-answer-parser.js","sourceRoot":"","sources":["../../../../src/utils/boolean-answer-parser.ts"],"names":[],"mappings":";;;AAAA;;;;;;;GAOG;AACH,MAAa,mBAAmB;IAC9B,MAAM,CAAC,KAAK,CAAC,GAAW;QACtB,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9F,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;YAC9F,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAXD,kDAWC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
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 __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.PristineArgv = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
/**
|
|
39
|
+
* Parses an argv array — typically `process.argv` — to locate the pristine bin and
|
|
40
|
+
* extract the user-typed arguments that follow it.
|
|
41
|
+
*
|
|
42
|
+
* Why scan rather than positional-index: argv shape is runtime-dependent. Node and Bun
|
|
43
|
+
* happen to put `[executable, scriptPath, ...userArgs]` today, but a different runtime
|
|
44
|
+
* (or a launcher that prepends flags before the script) can violate that. Locating the
|
|
45
|
+
* bin by name — an element whose basename (stripped of any extension like `.cjs` /
|
|
46
|
+
* `.js` / `.mjs`) is `pristine` — is robust across:
|
|
47
|
+
*
|
|
48
|
+
* - global installs (`pristine repl` → argv contains `/usr/local/.../pristine.cjs`)
|
|
49
|
+
* - local installs (`./node_modules/.bin/pristine`)
|
|
50
|
+
* - `npx pristine`
|
|
51
|
+
* - direct `node dist/bin/pristine.cjs`
|
|
52
|
+
* - alternative runtimes that may shape argv differently
|
|
53
|
+
* - the synthetic argv the REPL handler builds for each typed line
|
|
54
|
+
*
|
|
55
|
+
* Stateless after construction; instantiate per parse.
|
|
56
|
+
*/
|
|
57
|
+
class PristineArgv {
|
|
58
|
+
constructor(rawArgv) {
|
|
59
|
+
const binIndex = rawArgv.findIndex(arg => PristineArgv.isPristineBin(arg));
|
|
60
|
+
if (binIndex === -1) {
|
|
61
|
+
this.scriptPath = "";
|
|
62
|
+
this.userArgs = [];
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const scriptPath = rawArgv[binIndex];
|
|
66
|
+
this.scriptPath = typeof scriptPath === "string" ? scriptPath : "";
|
|
67
|
+
this.userArgs = rawArgv
|
|
68
|
+
.slice(binIndex + 1)
|
|
69
|
+
.filter((arg) => typeof arg === "string");
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* True when the argv was recognizable as a pristine invocation (the bin token was
|
|
73
|
+
* located). Mappers short-circuit `supportsMapping` on this.
|
|
74
|
+
*/
|
|
75
|
+
get isValid() {
|
|
76
|
+
return this.scriptPath !== "";
|
|
77
|
+
}
|
|
78
|
+
static isPristineBin(arg) {
|
|
79
|
+
if (typeof arg !== "string") {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return path.basename(arg, path.extname(arg)) === PristineArgv.BIN_NAME;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.PristineArgv = PristineArgv;
|
|
86
|
+
PristineArgv.BIN_NAME = "pristine";
|
|
87
|
+
//# sourceMappingURL=pristine-argv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pristine-argv.js","sourceRoot":"","sources":["../../../../src/utils/pristine-argv.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAa,YAAY;IASvB,YAAY,OAA2B;QACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3E,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,QAAQ,GAAG,OAAO;aACpB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;aACnB,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC;IAChC,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,GAAY;QACvC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,YAAY,CAAC,QAAQ,CAAC;IACzE,CAAC;;AApCH,oCAqCC;AApCyB,qBAAQ,GAAG,UAAU,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TerminalKeyDecoder = void 0;
|
|
4
|
+
const terminal_key_name_enum_1 = require("../enums/terminal-key-name.enum");
|
|
5
|
+
/**
|
|
6
|
+
* Translates the raw bytes Node delivers from a raw-mode stdin into structured
|
|
7
|
+
* {@link TerminalKey}s. Pure and static so it can be unit-tested without a real TTY.
|
|
8
|
+
*
|
|
9
|
+
* A single `data` chunk can carry more than one keystroke (notably a paste, or fast
|
|
10
|
+
* typing), so this returns an array. Control and escape sequences are recognized as one
|
|
11
|
+
* key each; a run of printable characters is split into one `Character` key per character
|
|
12
|
+
* so callers (masked input, menus) can echo and handle them uniformly.
|
|
13
|
+
*/
|
|
14
|
+
class TerminalKeyDecoder {
|
|
15
|
+
/**
|
|
16
|
+
* Decodes a raw stdin chunk into the keys it represents.
|
|
17
|
+
*
|
|
18
|
+
* - A recognized control byte / escape sequence that spans the whole chunk → one key.
|
|
19
|
+
* - An unrecognized escape sequence (starts with ESC) → a single `Other` key, rather
|
|
20
|
+
* than splitting it into bogus printable characters.
|
|
21
|
+
* - Anything else → one key per character, with non-printable control bytes mapped to
|
|
22
|
+
* `Other` so they're ignored rather than echoed.
|
|
23
|
+
*/
|
|
24
|
+
static decode(data) {
|
|
25
|
+
const whole = TerminalKeyDecoder.decodeControl(data);
|
|
26
|
+
if (whole !== undefined) {
|
|
27
|
+
return [whole];
|
|
28
|
+
}
|
|
29
|
+
if (data.charCodeAt(0) === 0x1b) {
|
|
30
|
+
return [{ name: terminal_key_name_enum_1.TerminalKeyName.Other, sequence: data }];
|
|
31
|
+
}
|
|
32
|
+
const keys = [];
|
|
33
|
+
for (const character of data) {
|
|
34
|
+
const control = TerminalKeyDecoder.decodeControl(character);
|
|
35
|
+
if (control !== undefined) {
|
|
36
|
+
keys.push(control);
|
|
37
|
+
}
|
|
38
|
+
else if (character.charCodeAt(0) < 0x20) {
|
|
39
|
+
keys.push({ name: terminal_key_name_enum_1.TerminalKeyName.Other, sequence: character });
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
keys.push({ name: terminal_key_name_enum_1.TerminalKeyName.Character, sequence: character });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return keys;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Maps a single recognized control byte or escape sequence to its key, or `undefined`
|
|
49
|
+
* when the input isn't one we handle.
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
static decodeControl(sequence) {
|
|
53
|
+
switch (sequence) {
|
|
54
|
+
case "\x1b[A":
|
|
55
|
+
return { name: terminal_key_name_enum_1.TerminalKeyName.Up, sequence };
|
|
56
|
+
case "\x1b[B":
|
|
57
|
+
return { name: terminal_key_name_enum_1.TerminalKeyName.Down, sequence };
|
|
58
|
+
case "\r":
|
|
59
|
+
case "\n":
|
|
60
|
+
return { name: terminal_key_name_enum_1.TerminalKeyName.Enter, sequence };
|
|
61
|
+
case "\x7f":
|
|
62
|
+
case "\b":
|
|
63
|
+
return { name: terminal_key_name_enum_1.TerminalKeyName.Backspace, sequence };
|
|
64
|
+
case "\x03":
|
|
65
|
+
return { name: terminal_key_name_enum_1.TerminalKeyName.CtrlC, sequence };
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.TerminalKeyDecoder = TerminalKeyDecoder;
|
|
71
|
+
//# sourceMappingURL=terminal-key-decoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-key-decoder.js","sourceRoot":"","sources":["../../../../src/utils/terminal-key-decoder.ts"],"names":[],"mappings":";;;AACA,4EAAgE;AAEhE;;;;;;;;GAQG;AACH,MAAa,kBAAkB;IAC7B;;;;;;;;OAQG;IACH,MAAM,CAAC,MAAM,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,EAAC,IAAI,EAAE,wCAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,IAAI,GAAkB,EAAE,CAAC;QAC/B,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;iBAAM,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,wCAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,wCAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,aAAa,CAAC,QAAgB;QAC3C,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,OAAO,EAAC,IAAI,EAAE,wCAAe,CAAC,EAAE,EAAE,QAAQ,EAAC,CAAC;YAC9C,KAAK,QAAQ;gBACX,OAAO,EAAC,IAAI,EAAE,wCAAe,CAAC,IAAI,EAAE,QAAQ,EAAC,CAAC;YAChD,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACP,OAAO,EAAC,IAAI,EAAE,wCAAe,CAAC,KAAK,EAAE,QAAQ,EAAC,CAAC;YACjD,KAAK,MAAM,CAAC;YACZ,KAAK,IAAI;gBACP,OAAO,EAAC,IAAI,EAAE,wCAAe,CAAC,SAAS,EAAE,QAAQ,EAAC,CAAC;YACrD,KAAK,MAAM;gBACT,OAAO,EAAC,IAAI,EAAE,wCAAe,CAAC,KAAK,EAAE,QAAQ,EAAC,CAAC;QACnD,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAxDD,gDAwDC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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 fs from "fs";
|
|
9
|
+
import path from "path";
|
|
10
|
+
/**
|
|
11
|
+
* Persists the user's selection from the disambiguation prompt so subsequent invocations of
|
|
12
|
+
* `pristine` in the same project skip the prompt. Stale entries (target file deleted since
|
|
13
|
+
* the cache was written) are auto-cleaned on read.
|
|
14
|
+
*
|
|
15
|
+
* Best-effort throughout — failures to read or write the cache file are swallowed because
|
|
16
|
+
* the cache is a UX optimization, not correctness-critical.
|
|
17
|
+
*/
|
|
18
|
+
let AppModuleCache = class AppModuleCache {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.cacheDirName = ".pristine";
|
|
21
|
+
this.cacheFileName = "last-app-module";
|
|
22
|
+
}
|
|
23
|
+
read(projectRoot) {
|
|
24
|
+
const cachePath = this.cachePath(projectRoot);
|
|
25
|
+
if (fs.existsSync(cachePath) === false) {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
let cached;
|
|
29
|
+
try {
|
|
30
|
+
cached = fs.readFileSync(cachePath, "utf8").trim();
|
|
31
|
+
}
|
|
32
|
+
catch (_a) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
if (cached.length === 0 || fs.existsSync(cached) === false) {
|
|
36
|
+
// Stale cache — the user must have deleted or moved the file. Drop it so it doesn't
|
|
37
|
+
// keep being suggested on every subsequent invocation.
|
|
38
|
+
try {
|
|
39
|
+
fs.unlinkSync(cachePath);
|
|
40
|
+
}
|
|
41
|
+
catch (_b) {
|
|
42
|
+
// Best-effort cleanup.
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
return cached;
|
|
47
|
+
}
|
|
48
|
+
write(projectRoot, absolutePath) {
|
|
49
|
+
try {
|
|
50
|
+
fs.mkdirSync(path.resolve(projectRoot, this.cacheDirName), { recursive: true });
|
|
51
|
+
fs.writeFileSync(this.cachePath(projectRoot), absolutePath, "utf8");
|
|
52
|
+
}
|
|
53
|
+
catch (_a) {
|
|
54
|
+
// Best-effort.
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
cachePath(projectRoot) {
|
|
58
|
+
return path.resolve(projectRoot, this.cacheDirName, this.cacheFileName);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
AppModuleCache = __decorate([
|
|
62
|
+
injectable()
|
|
63
|
+
], AppModuleCache);
|
|
64
|
+
export { AppModuleCache };
|
|
65
|
+
//# sourceMappingURL=app-module-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-module-cache.js","sourceRoot":"","sources":["../../../../src/bootstrap/app-module-cache.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;;;;GAOG;AAEI,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QACY,iBAAY,GAAW,WAAW,CAAC;QACnC,kBAAa,GAAW,iBAAiB,CAAC;IAyC7D,CAAC;IAvCC,IAAI,CAAC,WAAmB;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;YAC3D,oFAAoF;YACpF,uDAAuD;YACvD,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC;YAAC,WAAM,CAAC;gBACP,uBAAuB;YACzB,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,WAAmB,EAAE,YAAoB;QAC7C,IAAI,CAAC;YACH,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;YAC9E,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACtE,CAAC;QAAC,WAAM,CAAC;YACP,eAAe;QACjB,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,WAAmB;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1E,CAAC;CACF,CAAA;AA3CY,cAAc;IAD1B,UAAU,EAAE;GACA,cAAc,CA2C1B"}
|
|
@@ -0,0 +1,113 @@
|
|
|
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
8
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
9
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
10
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
11
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
12
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
13
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
import { injectable } from "tsyringe";
|
|
17
|
+
import fs from "fs";
|
|
18
|
+
import path from "path";
|
|
19
|
+
import { AppModuleDiscoveryCandidate } from "./app-module-discovery-candidate";
|
|
20
|
+
import { AppModuleDiscoveryReasonEnum } from "./app-module-discovery-reason.enum";
|
|
21
|
+
/**
|
|
22
|
+
* Scans well-known directories for files that look like AppModule definitions. Non-recursive
|
|
23
|
+
* (each search root is scanned at depth 1 only) so it stays fast on large repos and predictable
|
|
24
|
+
* when users have many nested module files.
|
|
25
|
+
*
|
|
26
|
+
* A file is a candidate when:
|
|
27
|
+
* - its filename matches `*.module.{js,mjs,cjs}` (and is not a test/spec file), AND
|
|
28
|
+
* - either the filename literally matches `app.module.{js,mjs,cjs}` (highest confidence,
|
|
29
|
+
* scored 0), OR the file's exports include a symbol named `AppModule` (scored 10).
|
|
30
|
+
*/
|
|
31
|
+
let AppModuleDiscoverer = class AppModuleDiscoverer {
|
|
32
|
+
constructor() {
|
|
33
|
+
/**
|
|
34
|
+
* Search roots scanned for candidates, relative to the project root. Order is intentional:
|
|
35
|
+
* compiled output first (most likely runtime entry), then build/, then the project root
|
|
36
|
+
* itself for trivial single-file demos.
|
|
37
|
+
*/
|
|
38
|
+
this.searchRoots = [
|
|
39
|
+
"dist",
|
|
40
|
+
"dist/lib/cjs",
|
|
41
|
+
"dist/lib/esm",
|
|
42
|
+
"build",
|
|
43
|
+
".",
|
|
44
|
+
];
|
|
45
|
+
this.moduleFileRegex = /^[A-Za-z0-9._-]+\.module\.(js|mjs|cjs)$/;
|
|
46
|
+
this.appModuleNameRegex = /^app\.module\.(js|mjs|cjs)$/i;
|
|
47
|
+
}
|
|
48
|
+
discover(projectRoot) {
|
|
49
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
+
const seen = new Set();
|
|
51
|
+
const candidates = [];
|
|
52
|
+
for (const root of this.searchRoots) {
|
|
53
|
+
const dir = path.resolve(projectRoot, root);
|
|
54
|
+
if (fs.existsSync(dir) === false || fs.statSync(dir).isDirectory() === false) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
58
|
+
for (const entry of entries) {
|
|
59
|
+
if (entry.isFile() === false)
|
|
60
|
+
continue;
|
|
61
|
+
if (this.moduleFileRegex.test(entry.name) === false)
|
|
62
|
+
continue;
|
|
63
|
+
if (entry.name.includes(".spec.") || entry.name.includes(".test."))
|
|
64
|
+
continue;
|
|
65
|
+
const absolutePath = path.resolve(dir, entry.name);
|
|
66
|
+
// Same physical file (e.g. dist/app.module.js and dist/lib/cjs/app.module.js pointing
|
|
67
|
+
// at duplicated builds) — keep the first occurrence (which respects searchRoots order).
|
|
68
|
+
if (seen.has(absolutePath))
|
|
69
|
+
continue;
|
|
70
|
+
seen.add(absolutePath);
|
|
71
|
+
const displayPath = path.relative(projectRoot, absolutePath);
|
|
72
|
+
if (this.appModuleNameRegex.test(entry.name)) {
|
|
73
|
+
candidates.push(new AppModuleDiscoveryCandidate(absolutePath, displayPath, 0, AppModuleDiscoveryReasonEnum.Named));
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (this.exportsAppModule(absolutePath)) {
|
|
77
|
+
candidates.push(new AppModuleDiscoveryCandidate(absolutePath, displayPath, 10, AppModuleDiscoveryReasonEnum.Exports));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
candidates.sort((a, b) => {
|
|
82
|
+
if (a.score !== b.score)
|
|
83
|
+
return a.score - b.score;
|
|
84
|
+
return a.displayPath.localeCompare(b.displayPath);
|
|
85
|
+
});
|
|
86
|
+
return candidates;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Synchronous probe: does this file's exports include an `AppModule` symbol? Uses
|
|
91
|
+
* `require()` rather than dynamic `import()` because (a) we only accept `.js/.mjs/.cjs`
|
|
92
|
+
* whose CJS variants load synchronously, and (b) discarded probes shouldn't hold open
|
|
93
|
+
* `import()` promises.
|
|
94
|
+
* @private
|
|
95
|
+
*/
|
|
96
|
+
exportsAppModule(absolutePath) {
|
|
97
|
+
try {
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
99
|
+
const loaded = require(absolutePath);
|
|
100
|
+
return loaded !== null && typeof loaded === "object" && "AppModule" in loaded;
|
|
101
|
+
}
|
|
102
|
+
catch (_a) {
|
|
103
|
+
// Treat unreadable / unloadable files as non-candidates — the loader couldn't open them
|
|
104
|
+
// either, so they cannot be the AppModule.
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
AppModuleDiscoverer = __decorate([
|
|
110
|
+
injectable()
|
|
111
|
+
], AppModuleDiscoverer);
|
|
112
|
+
export { AppModuleDiscoverer };
|
|
113
|
+
//# sourceMappingURL=app-module-discoverer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-module-discoverer.js","sourceRoot":"","sources":["../../../../src/bootstrap/app-module-discoverer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,4BAA4B,EAAC,MAAM,oCAAoC,CAAC;AAEhF;;;;;;;;;GASG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAAzB;QACL;;;;WAIG;QACc,gBAAW,GAA0B;YACpD,MAAM;YACN,cAAc;YACd,cAAc;YACd,OAAO;YACP,GAAG;SACJ,CAAC;QAEe,oBAAe,GAAG,yCAAyC,CAAC;QAC5D,uBAAkB,GAAG,8BAA8B,CAAC;IA+DvE,CAAC;IA7DO,QAAQ,CAAC,WAAmB;;YAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,MAAM,UAAU,GAAkC,EAAE,CAAC;YAErD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;oBAC7E,SAAS;gBACX,CAAC;gBAED,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAC,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC;gBAC3D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK;wBAAE,SAAS;oBACvC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK;wBAAE,SAAS;oBAC9D,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBAE7E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACnD,sFAAsF;oBACtF,wFAAwF;oBACxF,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;wBAAE,SAAS;oBACrC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;oBAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;oBAE7D,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC7C,UAAU,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,EAAE,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;wBACnH,SAAS;oBACX,CAAC;oBAED,IAAI,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC;wBACxC,UAAU,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC,CAAC;oBACxH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACvB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;oBAAE,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBAClD,OAAO,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC;QACpB,CAAC;KAAA;IAED;;;;;;OAMG;IACK,gBAAgB,CAAC,YAAoB;QAC3C,IAAI,CAAC;YACH,8DAA8D;YAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YACrC,OAAO,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,WAAW,IAAI,MAAM,CAAC;QAChF,CAAC;QAAC,WAAM,CAAC;YACP,wFAAwF;YACxF,2CAA2C;YAC3C,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAA;AA9EY,mBAAmB;IAD/B,UAAU,EAAE;GACA,mBAAmB,CA8E/B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A plausible AppModule found by the convention-based scan. Lower `score` beats higher;
|
|
3
|
+
* ties are ambiguous and trigger the disambiguation prompt.
|
|
4
|
+
*/
|
|
5
|
+
export class AppModuleDiscoveryCandidate {
|
|
6
|
+
constructor(absolutePath,
|
|
7
|
+
/** Path relative to the project root. Used purely for human-facing display. */
|
|
8
|
+
displayPath,
|
|
9
|
+
/** Lower = better. Files literally named `app.module.*` get 0; AppModule-exporting `*.module.*` files get 10. */
|
|
10
|
+
score, reason) {
|
|
11
|
+
this.absolutePath = absolutePath;
|
|
12
|
+
this.displayPath = displayPath;
|
|
13
|
+
this.score = score;
|
|
14
|
+
this.reason = reason;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=app-module-discovery-candidate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-module-discovery-candidate.js","sourceRoot":"","sources":["../../../../src/bootstrap/app-module-discovery-candidate.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,2BAA2B;IACtC,YACkB,YAAoB;IACpC,+EAA+E;IAC/D,WAAmB;IACnC,iHAAiH;IACjG,KAAa,EACb,MAAoC;QALpC,iBAAY,GAAZ,YAAY,CAAQ;QAEpB,gBAAW,GAAX,WAAW,CAAQ;QAEnB,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAA8B;IAEtD,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Why a candidate file was considered a possible AppModule. Used by the disambiguation prompt
|
|
3
|
+
* so the user sees "(matches app.module.*)" vs "(exports AppModule)" alongside each option.
|
|
4
|
+
*/
|
|
5
|
+
export var AppModuleDiscoveryReasonEnum;
|
|
6
|
+
(function (AppModuleDiscoveryReasonEnum) {
|
|
7
|
+
/** The filename matches `app.module.{js,mjs,cjs}`. Highest confidence. */
|
|
8
|
+
AppModuleDiscoveryReasonEnum["Named"] = "named";
|
|
9
|
+
/** The filename is `*.module.{js,mjs,cjs}` and the file's exports include an `AppModule` symbol. */
|
|
10
|
+
AppModuleDiscoveryReasonEnum["Exports"] = "exports";
|
|
11
|
+
})(AppModuleDiscoveryReasonEnum || (AppModuleDiscoveryReasonEnum = {}));
|
|
12
|
+
//# sourceMappingURL=app-module-discovery-reason.enum.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-module-discovery-reason.enum.js","sourceRoot":"","sources":["../../../../src/bootstrap/app-module-discovery-reason.enum.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAN,IAAY,4BAKX;AALD,WAAY,4BAA4B;IACtC,0EAA0E;IAC1E,+CAAe,CAAA;IACf,oGAAoG;IACpG,mDAAmB,CAAA;AACrB,CAAC,EALW,4BAA4B,KAA5B,4BAA4B,QAKvC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
import { injectable } from "tsyringe";
|
|
20
|
+
import { AppModuleDiscoveryReasonEnum } from "./app-module-discovery-reason.enum";
|
|
21
|
+
import { DynamicImporter } from "./dynamic-importer";
|
|
22
|
+
/**
|
|
23
|
+
* TTY disambiguation for the AppModule discovery cascade. When multiple equally-ranked
|
|
24
|
+
* candidates exist and stdin/stdout are both connected to a real terminal, ask the user
|
|
25
|
+
* to pick one. When non-interactive (CI, Docker, redirected stdin), the caller should
|
|
26
|
+
* fall back to throwing an actionable error rather than guessing.
|
|
27
|
+
*
|
|
28
|
+
* `@inquirer/prompts` is dynamic-imported through `DynamicImporter` so the prompt UI
|
|
29
|
+
* dependency only loads when actually prompting — keeps non-interactive startup fast and
|
|
30
|
+
* avoids paying for inquirer's TTY-detection overhead on every invocation.
|
|
31
|
+
*/
|
|
32
|
+
let AppModulePrompt = class AppModulePrompt {
|
|
33
|
+
constructor(dynamicImporter) {
|
|
34
|
+
this.dynamicImporter = dynamicImporter;
|
|
35
|
+
this.cancelLabel = "Cancel";
|
|
36
|
+
}
|
|
37
|
+
isInteractive() {
|
|
38
|
+
return Boolean(process.stdout.isTTY) && Boolean(process.stdin.isTTY);
|
|
39
|
+
}
|
|
40
|
+
prompt(candidates) {
|
|
41
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
42
|
+
const inquirer = yield this.dynamicImporter.import("@inquirer/prompts");
|
|
43
|
+
const select = inquirer.select;
|
|
44
|
+
try {
|
|
45
|
+
const choice = yield select({
|
|
46
|
+
message: "Multiple AppModule candidates were found. Which one should pristine load?",
|
|
47
|
+
choices: [
|
|
48
|
+
...candidates.map(c => ({
|
|
49
|
+
name: `${c.displayPath} ${this.reasonLabel(c.reason)}`,
|
|
50
|
+
value: c.absolutePath,
|
|
51
|
+
})),
|
|
52
|
+
{ name: this.cancelLabel, value: null },
|
|
53
|
+
],
|
|
54
|
+
});
|
|
55
|
+
return choice !== null && choice !== void 0 ? choice : undefined;
|
|
56
|
+
}
|
|
57
|
+
catch (_a) {
|
|
58
|
+
// @inquirer throws on Ctrl+C / SIGINT — treat as a clean abort, not a crash.
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
reasonLabel(reason) {
|
|
64
|
+
switch (reason) {
|
|
65
|
+
case AppModuleDiscoveryReasonEnum.Named: return "(matches app.module.*)";
|
|
66
|
+
case AppModuleDiscoveryReasonEnum.Exports: return "(exports AppModule)";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
AppModulePrompt = __decorate([
|
|
71
|
+
injectable(),
|
|
72
|
+
__metadata("design:paramtypes", [DynamicImporter])
|
|
73
|
+
], AppModulePrompt);
|
|
74
|
+
export { AppModulePrompt };
|
|
75
|
+
//# sourceMappingURL=app-module-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-module-prompt.js","sourceRoot":"","sources":["../../../../src/bootstrap/app-module-prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAC,4BAA4B,EAAC,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAEnD;;;;;;;;;GASG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAe;IAG1B,YAA6B,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;QAF5C,gBAAW,GAAW,QAAQ,CAAC;IAGhD,CAAC;IAED,aAAa;QACX,OAAO,OAAO,CAAE,OAAO,CAAC,MAAc,CAAC,KAAK,CAAC,IAAI,OAAO,CAAE,OAAO,CAAC,KAAa,CAAC,KAAK,CAAC,CAAC;IACzF,CAAC;IAEK,MAAM,CAAC,UAAyC;;YACpD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACxE,MAAM,MAAM,GAA4C,QAAQ,CAAC,MAAM,CAAC;YAExE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;oBAC1B,OAAO,EAAE,2EAA2E;oBACpF,OAAO,EAAE;wBACP,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACtB,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;4BACvD,KAAK,EAAE,CAAC,CAAC,YAAY;yBACtB,CAAC,CAAC;wBACH,EAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAC;qBACtC;iBACF,CAAC,CAAC;gBACH,OAAO,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,SAAS,CAAC;YAC7B,CAAC;YAAC,WAAM,CAAC;gBACP,6EAA6E;gBAC7E,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;KAAA;IAEO,WAAW,CAAC,MAAoC;QACtD,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,4BAA4B,CAAC,KAAK,CAAC,CAAC,OAAO,wBAAwB,CAAC;YACzE,KAAK,4BAA4B,CAAC,OAAO,CAAC,CAAC,OAAO,qBAAqB,CAAC;QAC1E,CAAC;IACH,CAAC;CACF,CAAA;AAtCY,eAAe;IAD3B,UAAU,EAAE;qCAImC,eAAe;GAHlD,eAAe,CAsC3B"}
|
|
@@ -12,7 +12,7 @@ import { spawnSync } from "child_process";
|
|
|
12
12
|
* inline avoids the awkward "exit, ask the user to type a command, re-enter" loop.
|
|
13
13
|
*
|
|
14
14
|
* Spawning rather than dispatching to `BuildCommand` directly keeps `AppModuleLoader` free
|
|
15
|
-
* of the build pipeline's dependency graph (
|
|
15
|
+
* of the build pipeline's dependency graph (LogHandler, ShellManager, CliOutput, etc.) which only
|
|
16
16
|
* exists in the kernel container — and the kernel hasn't booted yet at the point this is
|
|
17
17
|
* called. The subprocess re-bootstraps the kernel cleanly with all of those services.
|
|
18
18
|
*
|
|
@@ -18,7 +18,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
18
18
|
};
|
|
19
19
|
import { injectable } from "tsyringe";
|
|
20
20
|
import { BuildManifestStalenessEnum } from "./build-manifest-staleness.enum";
|
|
21
|
-
import {
|
|
21
|
+
import { CliPrompt } from "../managers/cli-prompt.manager";
|
|
22
|
+
import { PromptCancelledError } from "../errors/prompt-cancelled.error";
|
|
22
23
|
/**
|
|
23
24
|
* When the build manifest is stale (source edited, output missing, etc.), `AppModuleLoader`
|
|
24
25
|
* stops the load and consults this prompt. In a TTY, asks the user whether to run
|
|
@@ -29,8 +30,8 @@ import { DynamicImporter } from "./dynamic-importer";
|
|
|
29
30
|
* this class stays small and testable.
|
|
30
31
|
*/
|
|
31
32
|
let BuildStalenessPrompt = class BuildStalenessPrompt {
|
|
32
|
-
constructor(
|
|
33
|
-
this.
|
|
33
|
+
constructor(cliPrompt) {
|
|
34
|
+
this.cliPrompt = cliPrompt;
|
|
34
35
|
this.promptMessage = "Run `pristine build` now to refresh?";
|
|
35
36
|
}
|
|
36
37
|
isInteractive() {
|
|
@@ -64,24 +65,22 @@ let BuildStalenessPrompt = class BuildStalenessPrompt {
|
|
|
64
65
|
*/
|
|
65
66
|
prompt(reason) {
|
|
66
67
|
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
-
const inquirer = yield this.dynamicImporter.import("@inquirer/prompts");
|
|
68
|
-
const confirm = inquirer.confirm;
|
|
69
68
|
try {
|
|
70
|
-
return yield confirm({
|
|
71
|
-
message: `${this.describe(reason)}\n ${this.promptMessage}`,
|
|
72
|
-
default: true,
|
|
73
|
-
});
|
|
69
|
+
return yield this.cliPrompt.confirm(`${this.describe(reason)}\n ${this.promptMessage}`, true);
|
|
74
70
|
}
|
|
75
|
-
catch (
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error instanceof PromptCancelledError) {
|
|
73
|
+
// Ctrl+C — treat as a clean cancellation so the caller can exit with the explanation.
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
throw error;
|
|
78
77
|
}
|
|
79
78
|
});
|
|
80
79
|
}
|
|
81
80
|
};
|
|
82
81
|
BuildStalenessPrompt = __decorate([
|
|
83
82
|
injectable(),
|
|
84
|
-
__metadata("design:paramtypes", [
|
|
83
|
+
__metadata("design:paramtypes", [CliPrompt])
|
|
85
84
|
], BuildStalenessPrompt);
|
|
86
85
|
export { BuildStalenessPrompt };
|
|
87
86
|
//# sourceMappingURL=build-staleness-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-staleness-prompt.js","sourceRoot":"","sources":["../../../../src/bootstrap/build-staleness-prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,0BAA0B,EAAC,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"build-staleness-prompt.js","sourceRoot":"","sources":["../../../../src/bootstrap/build-staleness-prompt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACpC,OAAO,EAAC,0BAA0B,EAAC,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAC,SAAS,EAAC,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAC;AAEtE;;;;;;;;GAQG;AAEI,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAG/B,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;QAFhC,kBAAa,GAAW,sCAAsC,CAAC;IAGhF,CAAC;IAED,aAAa;QACX,OAAO,OAAO,CAAE,OAAO,CAAC,MAAc,CAAC,KAAK,CAAC,IAAI,OAAO,CAAE,OAAO,CAAC,KAAa,CAAC,KAAK,CAAC,CAAC;IACzF,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,MAAkC;QACzC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,0BAA0B,CAAC,OAAO;gBACrC,OAAO,6EAA6E,CAAC;YACvF,KAAK,0BAA0B,CAAC,iBAAiB;gBAC/C,OAAO,gIAAgI,CAAC;YAC1I,KAAK,0BAA0B,CAAC,iBAAiB;gBAC/C,OAAO,qIAAqI,CAAC;YAC/I,KAAK,0BAA0B,CAAC,oBAAoB;gBAClD,OAAO,4FAA4F,CAAC;YACtG,KAAK,0BAA0B,CAAC,aAAa;gBAC3C,OAAO,uFAAuF,CAAC;YACjG,KAAK,0BAA0B,CAAC,KAAK;gBACnC,oFAAoF;gBACpF,iBAAiB;gBACjB,OAAO,+BAA+B,CAAC;QAC3C,CAAC;IACH,CAAC;IAED;;;OAGG;IACG,MAAM,CAAC,MAAkC;;YAC7C,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC;YACjG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;oBAC1C,sFAAsF;oBACtF,OAAO,SAAS,CAAC;gBACnB,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;CACF,CAAA;AAhDY,oBAAoB;IADhC,UAAU,EAAE;qCAI6B,SAAS;GAHtC,oBAAoB,CAgDhC"}
|