@flowscripter/dynamic-cli-framework 6.0.1 → 7.0.1
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/README.md +2 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/src/cli/BaseCLI.d.ts +8 -0
- package/dist/src/cli/BaseCLI.d.ts.map +1 -1
- package/dist/src/cli/BaseCLI.js +37 -4
- package/dist/src/launcher.d.ts +3 -3
- package/dist/src/launcher.d.ts.map +1 -1
- package/dist/src/launcher.js +6 -4
- package/dist/src/runtime/lifecycle/PriorityTaskList.d.ts +22 -0
- package/dist/src/runtime/lifecycle/PriorityTaskList.d.ts.map +1 -0
- package/dist/src/runtime/lifecycle/PriorityTaskList.js +23 -0
- package/dist/src/runtime/runner.d.ts +15 -7
- package/dist/src/runtime/runner.d.ts.map +1 -1
- package/dist/src/runtime/runner.js +82 -53
- package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts +26 -82
- package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts.map +1 -1
- package/dist/src/service/configuration/ConfigurationServiceProvider.js +68 -163
- package/dist/src/service/configuration/DefaultKeyValueService.d.ts +6 -3
- package/dist/src/service/configuration/DefaultKeyValueService.d.ts.map +1 -1
- package/dist/src/service/configuration/DefaultKeyValueService.js +7 -24
- package/dist/src/service/configuration/DefaultSecretService.d.ts +1 -3
- package/dist/src/service/configuration/DefaultSecretService.d.ts.map +1 -1
- package/dist/src/service/configuration/DefaultSecretService.js +2 -10
- package/dist/src/service/configuration/KeyValueServiceProvider.d.ts +112 -0
- package/dist/src/service/configuration/KeyValueServiceProvider.d.ts.map +1 -0
- package/dist/src/service/configuration/KeyValueServiceProvider.js +209 -0
- package/dist/src/service/configuration/command/ConfigCommand.d.ts +4 -5
- package/dist/src/service/configuration/command/ConfigCommand.d.ts.map +1 -1
- package/dist/src/service/configuration/command/ConfigCommand.js +7 -6
- package/dist/src/service/configuration/command/DumpConfigCommand.d.ts +7 -3
- package/dist/src/service/configuration/command/DumpConfigCommand.d.ts.map +1 -1
- package/dist/src/service/configuration/command/DumpConfigCommand.js +10 -5
- package/dist/src/service/fetch/DefaultFetchService.d.ts +2 -2
- package/dist/src/service/fetch/DefaultFetchService.d.ts.map +1 -1
- package/dist/src/service/fetch/DefaultFetchService.js +17 -12
- package/dist/src/service/fetch/FetchServiceProvider.d.ts.map +1 -1
- package/dist/src/service/fetch/FetchServiceProvider.js +2 -3
- package/dist/src/service/printer/PrinterServiceProvider.d.ts.map +1 -1
- package/dist/src/service/printer/PrinterServiceProvider.js +11 -7
- package/dist/src/service/printer/command/DarkModeCommand.d.ts +3 -5
- package/dist/src/service/printer/command/DarkModeCommand.d.ts.map +1 -1
- package/dist/src/service/printer/command/DarkModeCommand.js +6 -6
- package/dist/src/service/printer/command/LogLevelCommand.d.ts +3 -5
- package/dist/src/service/printer/command/LogLevelCommand.d.ts.map +1 -1
- package/dist/src/service/printer/command/LogLevelCommand.js +9 -9
- package/dist/src/service/printer/command/NoColorCommand.d.ts +3 -5
- package/dist/src/service/printer/command/NoColorCommand.d.ts.map +1 -1
- package/dist/src/service/printer/command/NoColorCommand.js +6 -6
- package/dist/src/service/printer/command/NoHyperlinksCommand.d.ts +2 -4
- package/dist/src/service/printer/command/NoHyperlinksCommand.d.ts.map +1 -1
- package/dist/src/service/printer/command/NoHyperlinksCommand.js +5 -5
- package/dist/src/service/prompter/PrompterServiceProvider.js +1 -1
- package/dist/src/service/prompter/command/NoPromptCommand.d.ts +2 -4
- package/dist/src/service/prompter/command/NoPromptCommand.d.ts.map +1 -1
- package/dist/src/service/prompter/command/NoPromptCommand.js +5 -5
- package/dist/src/service/shutdown/DefaultShutdownService.d.ts +4 -3
- package/dist/src/service/shutdown/DefaultShutdownService.d.ts.map +1 -1
- package/dist/src/service/shutdown/DefaultShutdownService.js +4 -3
- package/dist/src/service/shutdown/ShutdownServiceProvider.js +2 -2
- package/dist/src/service/spawn/DefaultSpawnService.d.ts +2 -2
- package/dist/src/service/spawn/DefaultSpawnService.d.ts.map +1 -1
- package/dist/src/service/spawn/DefaultSpawnService.js +17 -14
- package/dist/src/service/spawn/SpawnServiceProvider.d.ts.map +1 -1
- package/dist/src/service/spawn/SpawnServiceProvider.js +1 -4
- package/dist/src/service/startup/DefaultStartupService.d.ts +10 -0
- package/dist/src/service/startup/DefaultStartupService.d.ts.map +1 -0
- package/dist/src/service/startup/DefaultStartupService.js +13 -0
- package/dist/src/service/startup/StartupServiceProvider.d.ts +17 -0
- package/dist/src/service/startup/StartupServiceProvider.d.ts.map +1 -0
- package/dist/src/service/startup/StartupServiceProvider.js +26 -0
- package/dist/src/service/upgrade/DefaultUpgradeService.d.ts +10 -4
- package/dist/src/service/upgrade/DefaultUpgradeService.d.ts.map +1 -1
- package/dist/src/service/upgrade/DefaultUpgradeService.js +156 -37
- package/dist/src/service/upgrade/UpgradeServiceProvider.d.ts +10 -0
- package/dist/src/service/upgrade/UpgradeServiceProvider.d.ts.map +1 -1
- package/dist/src/service/upgrade/UpgradeServiceProvider.js +25 -6
- package/dist/src/service/upgrade/command/UpgradeSubCommand.d.ts +0 -3
- package/dist/src/service/upgrade/command/UpgradeSubCommand.d.ts.map +1 -1
- package/dist/src/service/upgrade/command/UpgradeSubCommand.js +5 -13
- package/dist/src/startup/banner/bannerStartupTask.d.ts +17 -0
- package/dist/src/startup/banner/bannerStartupTask.d.ts.map +1 -0
- package/dist/src/startup/banner/bannerStartupTask.js +66 -0
- package/dist/src/{service → startup}/banner/command/NoBannerCommand.d.ts +8 -2
- package/dist/src/startup/banner/command/NoBannerCommand.d.ts.map +1 -0
- package/dist/src/{service → startup}/banner/command/NoBannerCommand.js +4 -4
- package/index.ts +19 -3
- package/package.json +2 -2
- package/src/cli/BaseCLI.ts +49 -3
- package/src/launcher.ts +7 -2
- package/src/runtime/lifecycle/PriorityTaskList.ts +34 -0
- package/src/runtime/runner.ts +106 -67
- package/src/service/configuration/ConfigurationServiceProvider.ts +80 -180
- package/src/service/configuration/DefaultKeyValueService.ts +8 -27
- package/src/service/configuration/DefaultSecretService.ts +3 -13
- package/src/service/configuration/KeyValueServiceProvider.ts +256 -0
- package/src/service/configuration/command/ConfigCommand.ts +12 -11
- package/src/service/configuration/command/DumpConfigCommand.ts +10 -9
- package/src/service/fetch/DefaultFetchService.ts +18 -12
- package/src/service/fetch/FetchServiceProvider.ts +2 -4
- package/src/service/printer/PrinterServiceProvider.ts +11 -7
- package/src/service/printer/command/DarkModeCommand.ts +7 -8
- package/src/service/printer/command/LogLevelCommand.ts +10 -11
- package/src/service/printer/command/NoColorCommand.ts +7 -8
- package/src/service/printer/command/NoHyperlinksCommand.ts +6 -7
- package/src/service/prompter/PrompterServiceProvider.ts +1 -1
- package/src/service/prompter/command/NoPromptCommand.ts +6 -7
- package/src/service/shutdown/DefaultShutdownService.ts +5 -4
- package/src/service/shutdown/ShutdownServiceProvider.ts +2 -2
- package/src/service/spawn/DefaultSpawnService.ts +18 -14
- package/src/service/spawn/SpawnServiceProvider.ts +1 -5
- package/src/service/startup/DefaultStartupService.ts +17 -0
- package/src/service/startup/StartupServiceProvider.ts +36 -0
- package/src/service/upgrade/DefaultUpgradeService.ts +202 -42
- package/src/service/upgrade/UpgradeServiceProvider.ts +31 -8
- package/src/service/upgrade/command/UpgradeSubCommand.ts +5 -15
- package/src/startup/banner/bannerStartupTask.ts +96 -0
- package/src/{service → startup}/banner/command/NoBannerCommand.ts +12 -5
- package/dist/src/service/banner/BannerServiceProvider.d.ts +0 -29
- package/dist/src/service/banner/BannerServiceProvider.d.ts.map +0 -1
- package/dist/src/service/banner/BannerServiceProvider.js +0 -69
- package/dist/src/service/banner/command/NoBannerCommand.d.ts.map +0 -1
- package/src/service/banner/BannerServiceProvider.ts +0 -89
package/README.md
CHANGED
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
- Core (but optional) services for color output (foreground and background),
|
|
39
39
|
syntax highlighting, pretty printing, table and tree structure rendering,
|
|
40
40
|
configuration management, and user input prompting.
|
|
41
|
+
- Support for blocking and non-blocking startup tasks.
|
|
41
42
|
- Graceful signal handling (SIGINT/SIGTERM) with shutdown hooks, cooperative
|
|
42
43
|
cancellation for long-running commands, and triple-interrupt force exit.
|
|
43
44
|
- Graceful degradation when piped or run non-interactively: color,
|
|
@@ -70,6 +71,7 @@ The following example projects are available:
|
|
|
70
71
|
- [Core Service Providers](./README/core-service-providers.md)
|
|
71
72
|
- [Core Commands](./README/core-commands.md)
|
|
72
73
|
- [Plugins](./README/plugins.md)
|
|
74
|
+
- [Startup Tasks](./README/startup-tasks.md)
|
|
73
75
|
- [Development](./README/development.md)
|
|
74
76
|
- [API Documentation](https://flowscripter.github.io/dynamic-cli-framework/index.html)
|
|
75
77
|
|
package/dist/index.d.ts
CHANGED
|
@@ -24,7 +24,9 @@ export { default as DefaultAsciiBannerGeneratorService } from "./src/service/asc
|
|
|
24
24
|
export { default as AsciiBannerGeneratorServiceProvider } from "./src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.ts";
|
|
25
25
|
export { default as ChiselFontAsciiBannerGeneratorService } from "./src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.ts";
|
|
26
26
|
export type { ChiselBannerColors, ChiselBannerGenerateOptions, } from "./src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.ts";
|
|
27
|
-
export { default as
|
|
27
|
+
export { default as createBannerStartupTask } from "./src/startup/banner/bannerStartupTask.ts";
|
|
28
|
+
export { CONFIGURATION_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
29
|
+
export type { ConfigurationService } from "@flowscripter/dynamic-cli-framework-api";
|
|
28
30
|
export { KEY_VALUE_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
29
31
|
export { SECRET_SENTINEL_PREFIX } from "@flowscripter/dynamic-cli-framework-api";
|
|
30
32
|
export type { KeyValueService } from "@flowscripter/dynamic-cli-framework-api";
|
|
@@ -33,16 +35,21 @@ export { default as DefaultKeyValueService } from "./src/service/configuration/D
|
|
|
33
35
|
export { default as DefaultSecretService } from "./src/service/configuration/DefaultSecretService.ts";
|
|
34
36
|
export type { SecretsApi } from "./src/service/configuration/DefaultSecretService.ts";
|
|
35
37
|
export { default as ConfigCommand } from "./src/service/configuration/command/ConfigCommand.ts";
|
|
36
|
-
export { default as ConfigurationServiceProvider } from "./src/service/configuration/ConfigurationServiceProvider.ts";
|
|
38
|
+
export { default as ConfigurationServiceProvider, type KeyValueServiceScopeType, } from "./src/service/configuration/ConfigurationServiceProvider.ts";
|
|
39
|
+
export { default as KeyValueServiceProvider } from "./src/service/configuration/KeyValueServiceProvider.ts";
|
|
37
40
|
export { PRINTER_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
38
41
|
export type { PrinterService } from "@flowscripter/dynamic-cli-framework-api";
|
|
39
42
|
export { Icon, Level, ProgressStyle, SpinnerStyle } from "@flowscripter/dynamic-cli-framework-api";
|
|
40
43
|
export { default as DefaultPrinterService } from "./src/service/printer/DefaultPrinterService.ts";
|
|
41
44
|
export { default as PrinterServiceProvider } from "./src/service/printer/PrinterServiceProvider.ts";
|
|
42
45
|
export { SHUTDOWN_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
43
|
-
export type { ShutdownService } from "@flowscripter/dynamic-cli-framework-api";
|
|
46
|
+
export type { ShutdownService, ShutdownTask } from "@flowscripter/dynamic-cli-framework-api";
|
|
44
47
|
export { default as DefaultShutdownService } from "./src/service/shutdown/DefaultShutdownService.ts";
|
|
45
48
|
export { default as ShutdownServiceProvider } from "./src/service/shutdown/ShutdownServiceProvider.ts";
|
|
49
|
+
export { STARTUP_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
50
|
+
export type { StartupService, StartupTask, StartupTaskContext, StartupTaskMode, } from "@flowscripter/dynamic-cli-framework-api";
|
|
51
|
+
export { default as DefaultStartupService } from "./src/service/startup/DefaultStartupService.ts";
|
|
52
|
+
export { default as StartupServiceProvider } from "./src/service/startup/StartupServiceProvider.ts";
|
|
46
53
|
export { FETCH_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
47
54
|
export type { FetchOptions, FetchService } from "@flowscripter/dynamic-cli-framework-api";
|
|
48
55
|
export { default as DefaultFetchService } from "./src/service/fetch/DefaultFetchService.ts";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAC;AACxE,YAAY,EACV,eAAe,EACf,MAAM,EACN,SAAS,EACT,wBAAwB,EACxB,eAAe,EACf,kBAAkB,GACnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC9F,YAAY,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,oCAAoC,EAAE,MAAM,yCAAyC,CAAC;AAC/F,YAAY,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,YAAY,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AACrF,YAAY,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAG1E,YAAY,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AACvE,YAAY,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAC7E,YAAY,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AACrF,YAAY,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAC5E,YAAY,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAG5E,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAG5F,YAAY,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,YAAY,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAGvF,OAAO,EAAE,iCAAiC,EAAE,MAAM,yCAAyC,CAAC;AAC5F,YAAY,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AAC3F,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,kCAAkC,EAAE,MAAM,0EAA0E,CAAC;AACzI,OAAO,EAAE,OAAO,IAAI,mCAAmC,EAAE,MAAM,2EAA2E,CAAC;AAC3I,OAAO,EAAE,OAAO,IAAI,qCAAqC,EAAE,MAAM,mFAAmF,CAAC;AACrJ,YAAY,EACV,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,mFAAmF,CAAC;AAE3F,OAAO,EAAE,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -6,13 +6,15 @@ export { ASCII_BANNER_GENERATOR_SERVICE_ID } from "@flowscripter/dynamic-cli-fra
|
|
|
6
6
|
export { default as DefaultAsciiBannerGeneratorService } from "./src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.js";
|
|
7
7
|
export { default as AsciiBannerGeneratorServiceProvider } from "./src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.js";
|
|
8
8
|
export { default as ChiselFontAsciiBannerGeneratorService } from "./src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.js";
|
|
9
|
-
export { default as
|
|
9
|
+
export { default as createBannerStartupTask } from "./src/startup/banner/bannerStartupTask.js";
|
|
10
|
+
export { CONFIGURATION_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
10
11
|
export { KEY_VALUE_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
11
12
|
export { SECRET_SENTINEL_PREFIX } from "@flowscripter/dynamic-cli-framework-api";
|
|
12
13
|
export { default as DefaultKeyValueService } from "./src/service/configuration/DefaultKeyValueService.js";
|
|
13
14
|
export { default as DefaultSecretService } from "./src/service/configuration/DefaultSecretService.js";
|
|
14
15
|
export { default as ConfigCommand } from "./src/service/configuration/command/ConfigCommand.js";
|
|
15
|
-
export { default as ConfigurationServiceProvider } from "./src/service/configuration/ConfigurationServiceProvider.js";
|
|
16
|
+
export { default as ConfigurationServiceProvider, } from "./src/service/configuration/ConfigurationServiceProvider.js";
|
|
17
|
+
export { default as KeyValueServiceProvider } from "./src/service/configuration/KeyValueServiceProvider.js";
|
|
16
18
|
export { PRINTER_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
17
19
|
export { Icon, Level, ProgressStyle, SpinnerStyle } from "@flowscripter/dynamic-cli-framework-api";
|
|
18
20
|
export { default as DefaultPrinterService } from "./src/service/printer/DefaultPrinterService.js";
|
|
@@ -20,6 +22,9 @@ export { default as PrinterServiceProvider } from "./src/service/printer/Printer
|
|
|
20
22
|
export { SHUTDOWN_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
21
23
|
export { default as DefaultShutdownService } from "./src/service/shutdown/DefaultShutdownService.js";
|
|
22
24
|
export { default as ShutdownServiceProvider } from "./src/service/shutdown/ShutdownServiceProvider.js";
|
|
25
|
+
export { STARTUP_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
26
|
+
export { default as DefaultStartupService } from "./src/service/startup/DefaultStartupService.js";
|
|
27
|
+
export { default as StartupServiceProvider } from "./src/service/startup/StartupServiceProvider.js";
|
|
23
28
|
export { FETCH_SERVICE_ID } from "@flowscripter/dynamic-cli-framework-api";
|
|
24
29
|
export { default as DefaultFetchService } from "./src/service/fetch/DefaultFetchService.js";
|
|
25
30
|
export { default as FetchServiceProvider } from "./src/service/fetch/FetchServiceProvider.js";
|
|
@@ -3,6 +3,7 @@ import type { RunResult } from "@flowscripter/dynamic-cli-framework-api";
|
|
|
3
3
|
import type { Command } from "@flowscripter/dynamic-cli-framework-api";
|
|
4
4
|
import type { ServiceProvider } from "@flowscripter/dynamic-cli-framework-api";
|
|
5
5
|
import type { CLIConfig } from "@flowscripter/dynamic-cli-framework-api";
|
|
6
|
+
import type { StartupTask } from "@flowscripter/dynamic-cli-framework-api";
|
|
6
7
|
import { WritableStream } from "node:stream/web";
|
|
7
8
|
import type Terminal from "../terminal/Terminal.ts";
|
|
8
9
|
import type Styler from "../terminal/Styler.ts";
|
|
@@ -64,6 +65,13 @@ export default class BaseCLI implements CLI {
|
|
|
64
65
|
*
|
|
65
66
|
* @param command the {@link Command} to add.
|
|
66
67
|
*/
|
|
68
|
+
/**
|
|
69
|
+
* Register a {@link StartupTask} to run once during CLI startup, in priority order alongside
|
|
70
|
+
* every registered {@link ServiceProvider}'s `initService()` call.
|
|
71
|
+
*
|
|
72
|
+
* @param task the {@link StartupTask} to register.
|
|
73
|
+
*/
|
|
74
|
+
addStartupTask(task: StartupTask): void;
|
|
67
75
|
addCommand(command: Command): void;
|
|
68
76
|
run(args: ReadonlyArray<string>): Promise<RunResult>;
|
|
69
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseCLI.d.ts","sourceRoot":"","sources":["../../../src/cli/BaseCLI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yCAAyC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseCLI.d.ts","sourceRoot":"","sources":["../../../src/cli/BaseCLI.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,yCAAyC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAGvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsBzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAS3E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAGpD,OAAO,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,qBAAqB,MAAM,4BAA4B,CAAC;AAkBpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,YAAW,GAAG;;IAazC,YACE,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,cAAc,EACpC,oBAAoB,EAAE,cAAc,EACpC,aAAa,EAAE,OAAO,EACtB,aAAa,EAAE,OAAO,EACtB,cAAc,EAAE,QAAQ,EACxB,cAAc,EAAE,QAAQ,EACxB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE,qBAAqB,EAoEhC;IAED;;;;;;;OAOG;IACI,kBAAkB,CAAC,eAAe,EAAE,eAAe,QAEzD;IAED;;;;;;;;OAQG;IACH;;;;;OAKG;IACI,cAAc,CAAC,IAAI,EAAE,WAAW,QAEtC;IAEM,UAAU,CAAC,OAAO,EAAE,OAAO,QAQjC;IAEK,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAsOzD;CACF"}
|
package/dist/src/cli/BaseCLI.js
CHANGED
|
@@ -10,8 +10,10 @@ import UsageCommand from "../command/UsageCommand.js";
|
|
|
10
10
|
import { isGlobalCommand, isGlobalModifierCommand, isGroupCommand, isSubCommand, } from "../runtime/command/CommandTypeGuards.js";
|
|
11
11
|
import CommandValidator from "../runtime/command/CommandValidator.js";
|
|
12
12
|
import ShutdownServiceProvider from "../service/shutdown/ShutdownServiceProvider.js";
|
|
13
|
+
import StartupServiceProvider from "../service/startup/StartupServiceProvider.js";
|
|
13
14
|
import { shutdownState } from "../service/shutdown/ShutdownState.js";
|
|
14
15
|
import ConfigurationServiceProvider from "../service/configuration/ConfigurationServiceProvider.js";
|
|
16
|
+
import KeyValueServiceProvider from "../service/configuration/KeyValueServiceProvider.js";
|
|
15
17
|
import PrinterServiceProvider from "../service/printer/PrinterServiceProvider.js";
|
|
16
18
|
import TableGeneratorServiceProvider from "../service/tableGenerator/TableGeneratorServiceProvider.js";
|
|
17
19
|
import { run } from "../runtime/runner.js";
|
|
@@ -27,7 +29,7 @@ import CompletionServiceProvider from "../service/completion/CompletionServicePr
|
|
|
27
29
|
import ImagePrinterServiceProvider from "../service/imagePrinter/ImagePrinterServiceProvider.js";
|
|
28
30
|
import SpawnServiceProvider from "../service/spawn/SpawnServiceProvider.js";
|
|
29
31
|
import FetchServiceProvider from "../service/fetch/FetchServiceProvider.js";
|
|
30
|
-
import UpgradeServiceProvider from "../service/upgrade/UpgradeServiceProvider.js";
|
|
32
|
+
import UpgradeServiceProvider, { createUpgradeCheckStartupTask, } from "../service/upgrade/UpgradeServiceProvider.js";
|
|
31
33
|
import PluginServiceProvider from "../service/plugin/PluginServiceProvider.js";
|
|
32
34
|
const logger = getLogger("BaseCLI");
|
|
33
35
|
/**
|
|
@@ -76,6 +78,7 @@ export default class BaseCLI {
|
|
|
76
78
|
#context;
|
|
77
79
|
#printerService;
|
|
78
80
|
#stdoutTerminal;
|
|
81
|
+
#startupServiceProvider;
|
|
79
82
|
constructor(cliConfig, stdoutWritableStream, stderrWritableStream, stdoutIsColor, stderrIsColor, stdoutTerminal, stderrTerminal, styler, keyReader, options) {
|
|
80
83
|
if (cliConfig.name.length === 0) {
|
|
81
84
|
throw new Error("Invalid empty CLI name provided");
|
|
@@ -122,6 +125,9 @@ export default class BaseCLI {
|
|
|
122
125
|
this.#commandRegistry = new DefaultCommandRegistry([], commandValidator);
|
|
123
126
|
// create a context
|
|
124
127
|
this.#context = new DefaultContext(this.#cliConfig);
|
|
128
|
+
// priority 95 sits between shutdown (100) and configuration (90) - it has no ordering
|
|
129
|
+
// dependency on anything since its own initService() is a no-op.
|
|
130
|
+
this.#startupServiceProvider = new StartupServiceProvider(95);
|
|
125
131
|
this.#stdoutTerminal = stdoutTerminal;
|
|
126
132
|
this.#printerService = new DefaultPrinterService(stdoutWritableStream, stderrWritableStream, stdoutIsColor, stderrIsColor, stdoutTerminal, stderrTerminal, styler);
|
|
127
133
|
}
|
|
@@ -145,6 +151,15 @@ export default class BaseCLI {
|
|
|
145
151
|
*
|
|
146
152
|
* @param command the {@link Command} to add.
|
|
147
153
|
*/
|
|
154
|
+
/**
|
|
155
|
+
* Register a {@link StartupTask} to run once during CLI startup, in priority order alongside
|
|
156
|
+
* every registered {@link ServiceProvider}'s `initService()` call.
|
|
157
|
+
*
|
|
158
|
+
* @param task the {@link StartupTask} to register.
|
|
159
|
+
*/
|
|
160
|
+
addStartupTask(task) {
|
|
161
|
+
this.#startupServiceProvider.startupService.registerTask(task);
|
|
162
|
+
}
|
|
148
163
|
addCommand(command) {
|
|
149
164
|
if (!isGlobalModifierCommand(command)) {
|
|
150
165
|
// store the command locally to help determine if this CLI will be a single or multi-command CLI
|
|
@@ -165,6 +180,7 @@ export default class BaseCLI {
|
|
|
165
180
|
}
|
|
166
181
|
// create and add core services
|
|
167
182
|
this.addServiceProvider(new ShutdownServiceProvider(100));
|
|
183
|
+
this.addServiceProvider(this.#startupServiceProvider);
|
|
168
184
|
this.addServiceProvider(new PrinterServiceProvider(80, this.#printerService));
|
|
169
185
|
this.addServiceProvider(new TableGeneratorServiceProvider(70));
|
|
170
186
|
const canPrompt = this.#keyReader !== undefined && this.#stderrTerminal.isTty();
|
|
@@ -207,16 +223,22 @@ export default class BaseCLI {
|
|
|
207
223
|
const completionService = new DefaultCompletionService();
|
|
208
224
|
this.addServiceProvider(new CompletionServiceProvider(5, completionService, this.#commandRegistry));
|
|
209
225
|
}
|
|
226
|
+
let upgradeServiceProvider;
|
|
210
227
|
if (this.#options.upgradeServiceEnabled) {
|
|
211
228
|
// 56 runs after Spawn(58)/Fetch(57) - whose dependencies it needs
|
|
212
229
|
// but before the consumer-configured Banner/Plugin(50) priority band.
|
|
213
|
-
|
|
230
|
+
upgradeServiceProvider = new UpgradeServiceProvider(56, this.#options.upgradeLocationsConfig);
|
|
231
|
+
this.addServiceProvider(upgradeServiceProvider);
|
|
214
232
|
}
|
|
215
233
|
if (this.#options.pluginServiceEnabled) {
|
|
216
234
|
this.addServiceProvider(new PluginServiceProvider(50, this.#options.pluginServiceRemoteConfig, this.#options.pluginServiceLocalConfig, this.#commandRegistry, this.#serviceProviderRegistry));
|
|
217
235
|
}
|
|
218
|
-
const configurationServiceProvider = new ConfigurationServiceProvider(90, this.#options.envVarsSupportEnabled, this.#options.configFileSupportEnabled, this.#options.
|
|
236
|
+
const configurationServiceProvider = new ConfigurationServiceProvider(90, this.#options.envVarsSupportEnabled, this.#options.configFileSupportEnabled, this.#options.secretServiceEnabled);
|
|
219
237
|
this.addServiceProvider(configurationServiceProvider);
|
|
238
|
+
// priority 89 sits just below ConfigurationServiceProvider's 90 - its config-file read
|
|
239
|
+
// happens in its own initService(), before KeyValueServiceProvider's initService() runs.
|
|
240
|
+
const keyValueServiceProvider = new KeyValueServiceProvider(89, configurationServiceProvider, this.#options.keyValueServiceEnabled, this.#options.secretServiceEnabled);
|
|
241
|
+
this.addServiceProvider(keyValueServiceProvider);
|
|
220
242
|
for (const serviceProvider of this.#serviceProviderRegistry.getServiceProviders()) {
|
|
221
243
|
const serviceInfo = await serviceProvider.getServiceInfo(this.#cliConfig);
|
|
222
244
|
if (serviceInfo.service) {
|
|
@@ -226,6 +248,17 @@ export default class BaseCLI {
|
|
|
226
248
|
this.#commandRegistry.addCommand(command, serviceProvider.serviceId);
|
|
227
249
|
});
|
|
228
250
|
}
|
|
251
|
+
if (upgradeServiceProvider?.upgradeService) {
|
|
252
|
+
this.addStartupTask(createUpgradeCheckStartupTask(upgradeServiceProvider.upgradeService, 56));
|
|
253
|
+
}
|
|
254
|
+
// directly-registered StartupTasks (e.g. the banner task) aren't backed by a ServiceProvider,
|
|
255
|
+
// so their modifierCommands need to be added to the command registry here instead, keyed by
|
|
256
|
+
// the task's own ID.
|
|
257
|
+
for (const task of this.#startupServiceProvider.startupService.getTasks()) {
|
|
258
|
+
(task.modifierCommands ?? []).forEach((command) => {
|
|
259
|
+
this.#commandRegistry.addCommand(command, task.id);
|
|
260
|
+
});
|
|
261
|
+
}
|
|
229
262
|
logger.debug(() => `Running with args: ${args.join(" ")}`);
|
|
230
263
|
let helpSubCommand;
|
|
231
264
|
let helpGlobalCommand;
|
|
@@ -250,7 +283,7 @@ export default class BaseCLI {
|
|
|
250
283
|
// register the version command
|
|
251
284
|
this.#commandRegistry.addCommand(new VersionCommand());
|
|
252
285
|
// run...
|
|
253
|
-
const runResult = await run(args, this.#commandRegistry, this.#serviceProviderRegistry, configurationServiceProvider, this.#context, defaultCommand);
|
|
286
|
+
const runResult = await run(args, this.#commandRegistry, this.#serviceProviderRegistry, configurationServiceProvider, keyValueServiceProvider, this.#context, defaultCommand, this.#startupServiceProvider.startupService);
|
|
254
287
|
// then handle the result...
|
|
255
288
|
if (runResult.runState === RunState.NO_COMMAND) {
|
|
256
289
|
// print usage
|
package/dist/src/launcher.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { SubCommand, Command, RunResult, ServiceProvider } from "@flowscripter/dynamic-cli-framework-api";
|
|
1
|
+
import type { SubCommand, Command, RunResult, ServiceProvider, StartupTask } from "@flowscripter/dynamic-cli-framework-api";
|
|
2
2
|
import type BaseCLIFeatureOptions from "./cli/BaseCLIFeatureOptions.ts";
|
|
3
|
-
export declare function launchSingleCommandCLI(command: SubCommand, description?: string, name?: string, version?: string, serviceProviders?: ReadonlyArray<ServiceProvider>, options?: BaseCLIFeatureOptions): Promise<RunResult>;
|
|
4
|
-
export declare function launchMultiCommandCLI(commands: ReadonlyArray<Command>, description?: string, name?: string, version?: string, serviceProviders?: ReadonlyArray<ServiceProvider>, options?: BaseCLIFeatureOptions): Promise<RunResult>;
|
|
3
|
+
export declare function launchSingleCommandCLI(command: SubCommand, description?: string, name?: string, version?: string, serviceProviders?: ReadonlyArray<ServiceProvider>, options?: BaseCLIFeatureOptions, startupTasks?: ReadonlyArray<StartupTask>): Promise<RunResult>;
|
|
4
|
+
export declare function launchMultiCommandCLI(commands: ReadonlyArray<Command>, description?: string, name?: string, version?: string, serviceProviders?: ReadonlyArray<ServiceProvider>, options?: BaseCLIFeatureOptions, startupTasks?: ReadonlyArray<StartupTask>): Promise<RunResult>;
|
|
5
5
|
//# sourceMappingURL=launcher.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/launcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,UAAU,EACV,OAAO,EACP,SAAS,EACT,eAAe,
|
|
1
|
+
{"version":3,"file":"launcher.d.ts","sourceRoot":"","sources":["../../src/launcher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,UAAU,EACV,OAAO,EACP,SAAS,EACT,eAAe,EACf,WAAW,EACZ,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,qBAAqB,MAAM,gCAAgC,CAAC;AAGxE,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,UAAU,EACnB,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,EACjD,OAAO,CAAC,EAAE,qBAAqB,EAC/B,YAAY,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GACxC,OAAO,CAAC,SAAS,CAAC,CAwBpB;AAED,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,EAChB,gBAAgB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,EACjD,OAAO,CAAC,EAAE,qBAAqB,EAC/B,YAAY,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,GACxC,OAAO,CAAC,SAAS,CAAC,CAwBpB"}
|
package/dist/src/launcher.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import process from "node:process";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import DefaultRuntimeCLI from "./cli/DefaultRuntimeCLI.js";
|
|
4
|
-
export async function launchSingleCommandCLI(command, description, name, version, serviceProviders, options) {
|
|
4
|
+
export async function launchSingleCommandCLI(command, description, name, version, serviceProviders, options, startupTasks) {
|
|
5
5
|
if (!name) {
|
|
6
6
|
name = path.basename(process.execPath);
|
|
7
7
|
}
|
|
@@ -17,10 +17,11 @@ export async function launchSingleCommandCLI(command, description, name, version
|
|
|
17
17
|
};
|
|
18
18
|
const cli = new DefaultRuntimeCLI(cliConfig, mergedOptions);
|
|
19
19
|
cli.addCommand(command);
|
|
20
|
-
serviceProviders?.forEach((
|
|
20
|
+
serviceProviders?.forEach((serviceProvider) => cli.addServiceProvider(serviceProvider));
|
|
21
|
+
startupTasks?.forEach((startupTask) => cli.addStartupTask(startupTask));
|
|
21
22
|
return await cli.run();
|
|
22
23
|
}
|
|
23
|
-
export async function launchMultiCommandCLI(commands, description, name, version, serviceProviders, options) {
|
|
24
|
+
export async function launchMultiCommandCLI(commands, description, name, version, serviceProviders, options, startupTasks) {
|
|
24
25
|
if (!name) {
|
|
25
26
|
name = path.basename(process.execPath);
|
|
26
27
|
}
|
|
@@ -36,6 +37,7 @@ export async function launchMultiCommandCLI(commands, description, name, version
|
|
|
36
37
|
};
|
|
37
38
|
const cli = new DefaultRuntimeCLI(cliConfig, mergedOptions);
|
|
38
39
|
commands.forEach((command) => cli.addCommand(command));
|
|
39
|
-
serviceProviders?.forEach((
|
|
40
|
+
serviceProviders?.forEach((serviceProvider) => cli.addServiceProvider(serviceProvider));
|
|
41
|
+
startupTasks?.forEach((startupTask) => cli.addStartupTask(startupTask));
|
|
40
42
|
return await cli.run();
|
|
41
43
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common shape shared by {@link StartupTask} and {@link ShutdownTask}: a task with an optional
|
|
3
|
+
* priority, used to order execution. Higher values run earlier. Undefined is treated as `0`.
|
|
4
|
+
*/
|
|
5
|
+
export interface PriorityTask {
|
|
6
|
+
readonly priority?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Stably sort tasks by descending priority (default `0`). Tasks with the same priority keep
|
|
10
|
+
* their relative order in the input array.
|
|
11
|
+
*/
|
|
12
|
+
export declare function sortByPriority<T extends PriorityTask>(tasks: ReadonlyArray<T>): Array<T>;
|
|
13
|
+
/**
|
|
14
|
+
* Internal helper shared by {@link DefaultStartupService} and {@link DefaultShutdownService}:
|
|
15
|
+
* accumulates registered tasks and returns them in priority order on demand.
|
|
16
|
+
*/
|
|
17
|
+
export default class PriorityTaskList<T extends PriorityTask> {
|
|
18
|
+
#private;
|
|
19
|
+
add(task: T): void;
|
|
20
|
+
sorted(): ReadonlyArray<T>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=PriorityTaskList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PriorityTaskList.d.ts","sourceRoot":"","sources":["../../../../src/runtime/lifecycle/PriorityTaskList.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAKxF;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB,CAAC,CAAC,SAAS,YAAY;;IAGnD,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAExB;IAEM,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,CAEhC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stably sort tasks by descending priority (default `0`). Tasks with the same priority keep
|
|
3
|
+
* their relative order in the input array.
|
|
4
|
+
*/
|
|
5
|
+
export function sortByPriority(tasks) {
|
|
6
|
+
return tasks
|
|
7
|
+
.map((task, index) => ({ task, index }))
|
|
8
|
+
.sort((a, b) => (b.task.priority ?? 0) - (a.task.priority ?? 0) || a.index - b.index)
|
|
9
|
+
.map((entry) => entry.task);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Internal helper shared by {@link DefaultStartupService} and {@link DefaultShutdownService}:
|
|
13
|
+
* accumulates registered tasks and returns them in priority order on demand.
|
|
14
|
+
*/
|
|
15
|
+
export default class PriorityTaskList {
|
|
16
|
+
#tasks = [];
|
|
17
|
+
add(task) {
|
|
18
|
+
this.#tasks.push(task);
|
|
19
|
+
}
|
|
20
|
+
sorted() {
|
|
21
|
+
return sortByPriority(this.#tasks);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -3,21 +3,24 @@ import type { RunResult } from "@flowscripter/dynamic-cli-framework-api";
|
|
|
3
3
|
import type { CommandRegistry } from "@flowscripter/dynamic-cli-framework-api";
|
|
4
4
|
import type { ServiceProviderRegistry } from "@flowscripter/dynamic-cli-framework-api";
|
|
5
5
|
import type ConfigurationServiceProvider from "../service/configuration/ConfigurationServiceProvider.ts";
|
|
6
|
+
import type KeyValueServiceProvider from "../service/configuration/KeyValueServiceProvider.ts";
|
|
6
7
|
import type { Command } from "@flowscripter/dynamic-cli-framework-api";
|
|
8
|
+
import DefaultStartupService from "../service/startup/DefaultStartupService.ts";
|
|
7
9
|
/**
|
|
8
10
|
* Scan arguments and execute the parsed {@link Command} clauses with provided argument values
|
|
9
11
|
* using the provided {@link Context}.
|
|
10
12
|
*
|
|
11
13
|
* An overview of the logic (assuming the optional ConfigurationServiceProvider is provided):
|
|
12
14
|
*
|
|
13
|
-
* 1. For each
|
|
14
|
-
*
|
|
15
|
+
* 1. For each StartupTask in priority order (whether backed by a ServiceProvider's
|
|
16
|
+
* initService() or registered directly, e.g. the banner task):
|
|
17
|
+
* - Scan arguments for GlobalModifierCommand clauses provided by the task
|
|
15
18
|
* - For each discovered clause:
|
|
16
19
|
* - Set any argument defaults from ConfigurationServiceProvider
|
|
17
20
|
* - Parse the arguments for the GlobalModifierCommand
|
|
18
21
|
* - Return on error
|
|
19
22
|
* - Add to list of GlobalModifierCommands to execute
|
|
20
|
-
* - Scan ConfigurationServiceProvider for GlobalModifierCommand clauses provided by the
|
|
23
|
+
* - Scan ConfigurationServiceProvider for GlobalModifierCommand clauses provided by the task not already found in arguments
|
|
21
24
|
* - For each configured clause:
|
|
22
25
|
* - Parse the arguments for the GlobalModifierCommand
|
|
23
26
|
* - Return on error
|
|
@@ -26,14 +29,18 @@ import type { Command } from "@flowscripter/dynamic-cli-framework-api";
|
|
|
26
29
|
* - For each GlobalModifierCommand clause:
|
|
27
30
|
* - Execute the GlobalModifierCommand
|
|
28
31
|
* - Return on error
|
|
29
|
-
* -
|
|
30
|
-
*
|
|
32
|
+
* - Give the task a Context whose KeyValueService is bound permanently to its own scope
|
|
33
|
+
* (keyed by task.id), via KeyValueServiceProvider if provided.
|
|
34
|
+
* - Run the task: awaited before continuing if its mode is "blocking" (the default, and how
|
|
35
|
+
* every ServiceProvider's initService() behaves); fired without awaiting if "background"
|
|
36
|
+
* (errors logged, not propagated).
|
|
37
|
+
* 2. Scan arguments for any GlobalModifierCommand clauses not provided by a StartupTask
|
|
31
38
|
* - For each discovered clause:
|
|
32
39
|
* - Set any argument defaults from ConfigurationServiceProvider
|
|
33
40
|
* - Parse the arguments for the GlobalModifierCommand
|
|
34
41
|
* - Return on error
|
|
35
42
|
* - Add to list of GlobalModifierCommands to execute
|
|
36
|
-
* 3. Scan ConfigurationServiceProvider for GlobalModifierCommand clauses not provided by
|
|
43
|
+
* 3. Scan ConfigurationServiceProvider for GlobalModifierCommand clauses not provided by a StartupTask and not already found in arguments
|
|
37
44
|
* - For each discovered clause:
|
|
38
45
|
* - Parse the arguments for the GlobalModifierCommand
|
|
39
46
|
* - Return on error
|
|
@@ -68,9 +75,10 @@ import type { Command } from "@flowscripter/dynamic-cli-framework-api";
|
|
|
68
75
|
* @param commandRegistry the {@link CommandRegistry} to use when scanning and parsing.
|
|
69
76
|
* @param serviceProviderRegistry the {@link ServiceProviderRegistry} to use when scanning and parsing.
|
|
70
77
|
* @param configurationServiceProvider optional {@link ConfigurationServiceProvider} to use for accessing argument defaults.
|
|
78
|
+
* @param keyValueServiceProvider optional {@link KeyValueServiceProvider} to use to get a scope-decorated {@link Context}.
|
|
71
79
|
* @param context the {@link Context} in which to execute specified {@link Command} instances.
|
|
72
80
|
* @param defaultCommand optional {@link SubCommand} or {@link GlobalCommand} implementation to attempt to parse arguments for and execute if
|
|
73
81
|
* no non-modifier {@link Command} name is identified in the provided arguments.
|
|
74
82
|
*/
|
|
75
|
-
export declare function run(args: ReadonlyArray<string>, commandRegistry: CommandRegistry, serviceProviderRegistry: ServiceProviderRegistry, configurationServiceProvider: ConfigurationServiceProvider | undefined, context: Context, defaultCommand?: Command): Promise<RunResult>;
|
|
83
|
+
export declare function run(args: ReadonlyArray<string>, commandRegistry: CommandRegistry, serviceProviderRegistry: ServiceProviderRegistry, configurationServiceProvider: ConfigurationServiceProvider | undefined, keyValueServiceProvider: KeyValueServiceProvider | undefined, context: Context, defaultCommand?: Command, startupService?: DefaultStartupService): Promise<RunResult>;
|
|
76
84
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/runtime/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAiB/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEvF,OAAO,KAAK,4BAA4B,MAAM,0DAA0D,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/runtime/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAiB/E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAEvF,OAAO,KAAK,4BAA4B,MAAM,0DAA0D,CAAC;AACzG,OAAO,KAAK,uBAAuB,MAAM,qDAAqD,CAAC;AAK/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAKvE,OAAO,qBAAqB,MAAM,6CAA6C,CAAC;AAqfhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,wBAAsB,GAAG,CACvB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,eAAe,EAAE,eAAe,EAChC,uBAAuB,EAAE,uBAAuB,EAChD,4BAA4B,EAAE,4BAA4B,GAAG,SAAS,EACtE,uBAAuB,EAAE,uBAAuB,GAAG,SAAS,EAC5D,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,OAAO,EACxB,cAAc,CAAC,EAAE,qBAAqB,GACrC,OAAO,CAAC,SAAS,CAAC,CA6JpB"}
|