@flowscripter/dynamic-cli-framework-api 3.0.1 → 4.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 CHANGED
@@ -27,7 +27,8 @@ Key exports:
27
27
  - `CommandFactory`, `ServiceProviderFactory` - extension interfaces implemented by a plugin.
28
28
  - `Command`, `SubCommand`, `GlobalCommand`, `GroupCommand` - command types.
29
29
  - `Context`, `CLIConfig` - runtime context passed to commands.
30
- - Core service interfaces and their `*_SERVICE_ID` identifiers (`PrinterService`, `TableGeneratorService`, `SyntaxHighlighterService`, etc.) used to look up services via `Context`.
30
+ - Core service interfaces and their `*_SERVICE_ID` identifiers (`PrinterService`, `TableGeneratorService`, `SyntaxHighlighterService`, `ConfigurationService`, etc.) used to look up services via `Context`.
31
+ - `StartupService`/`StartupTask`, `ShutdownService`/`ShutdownTask` - priority-ordered registration of work to run once during CLI startup/shutdown, via `registerTask({id, priority, run})` on either.
31
32
 
32
33
  See [dynamic-cli-framework](https://github.com/flowscripter/dynamic-cli-framework)
33
34
  for the runnable framework and its concrete service implementations.
package/dist/index.d.ts CHANGED
@@ -20,6 +20,8 @@ export type { default as ServiceProviderRegistry } from "./src/registry/ServiceP
20
20
  export { ASCII_BANNER_GENERATOR_SERVICE_ID } from "./src/service/core/AsciiBannerGeneratorService.ts";
21
21
  export type { default as AsciiBannerGeneratorService } from "./src/service/core/AsciiBannerGeneratorService.ts";
22
22
  export type { BannerColorEffects, BannerGenerateOptions, ColorEffect, ColorEffectDirection, FixedColorEffect, GradientColorEffect, RainbowColorEffect, } from "./src/service/core/AsciiBannerGeneratorService.ts";
23
+ export { CONFIGURATION_SERVICE_ID } from "./src/service/core/ConfigurationService.ts";
24
+ export type { default as ConfigurationService } from "./src/service/core/ConfigurationService.ts";
23
25
  export { KEY_VALUE_SERVICE_ID } from "./src/service/core/KeyValueService.ts";
24
26
  export { SECRET_SENTINEL_PREFIX } from "./src/service/core/KeyValueService.ts";
25
27
  export { Secret } from "./src/service/core/KeyValueService.ts";
@@ -33,7 +35,9 @@ export type { default as PrinterService } from "./src/service/core/PrinterServic
33
35
  export { Icon, Level, ProgressStyle, SpinnerStyle } from "./src/service/core/PrinterService.ts";
34
36
  export type { ProgressBarOptions } from "./src/service/core/PrinterService.ts";
35
37
  export { SHUTDOWN_SERVICE_ID } from "./src/service/core/ShutdownService.ts";
36
- export type { default as ShutdownService } from "./src/service/core/ShutdownService.ts";
38
+ export type { default as ShutdownService, ShutdownTask, } from "./src/service/core/ShutdownService.ts";
39
+ export { STARTUP_SERVICE_ID } from "./src/service/core/StartupService.ts";
40
+ export type { default as StartupService, StartupTask, StartupTaskContext, StartupTaskMode, } from "./src/service/core/StartupService.ts";
37
41
  export { SPAWN_SERVICE_ID } from "./src/service/core/SpawnService.ts";
38
42
  export type { default as SpawnService } from "./src/service/core/SpawnService.ts";
39
43
  export type { SpawnOptions, SpawnResult } from "./src/service/core/SpawnService.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ export { MAXIMUM_COMPLEX_OPTION_NESTING_DEPTH } from "./src/argument/ComplexOpti
3
3
  export { MAXIMUM_ARGUMENT_ARRAY_SIZE } from "./src/argument/SubCommandArgument.js";
4
4
  // Core Service IDs and types
5
5
  export { ASCII_BANNER_GENERATOR_SERVICE_ID } from "./src/service/core/AsciiBannerGeneratorService.js";
6
+ export { CONFIGURATION_SERVICE_ID } from "./src/service/core/ConfigurationService.js";
6
7
  export { KEY_VALUE_SERVICE_ID } from "./src/service/core/KeyValueService.js";
7
8
  export { SECRET_SENTINEL_PREFIX } from "./src/service/core/KeyValueService.js";
8
9
  export { Secret } from "./src/service/core/KeyValueService.js";
@@ -10,6 +11,7 @@ export { FETCH_SERVICE_ID } from "./src/service/core/FetchService.js";
10
11
  export { PRINTER_SERVICE_ID } from "./src/service/core/PrinterService.js";
11
12
  export { Icon, Level, ProgressStyle, SpinnerStyle } from "./src/service/core/PrinterService.js";
12
13
  export { SHUTDOWN_SERVICE_ID } from "./src/service/core/ShutdownService.js";
14
+ export { STARTUP_SERVICE_ID } from "./src/service/core/StartupService.js";
13
15
  export { SPAWN_SERVICE_ID } from "./src/service/core/SpawnService.js";
14
16
  export { SYNTAX_HIGHLIGHTER_SERVICE_ID } from "./src/service/core/SyntaxHighlighterService.js";
15
17
  export { PRETTY_PRINTER_SERVICE_ID } from "./src/service/core/PrettyPrinterService.js";
@@ -0,0 +1,10 @@
1
+ export declare const CONFIGURATION_SERVICE_ID = "@flowscripter/dynamic-cli-framework/configuration-service";
2
+ /**
3
+ * Minimal, read/write view of a configuration provider's config file *location*, registered under
4
+ * {@link CONFIGURATION_SERVICE_ID}.
5
+ */
6
+ export default interface ConfigurationService {
7
+ readonly configLocation: string | undefined;
8
+ setConfigLocation(location: string): void;
9
+ }
10
+ //# sourceMappingURL=ConfigurationService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfigurationService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/ConfigurationService.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB,8DAA8D,CAAC;AAEpG;;;GAGG;AACH,MAAM,CAAC,OAAO,WAAW,oBAAoB;IAC3C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5C,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C"}
@@ -0,0 +1 @@
1
+ export const CONFIGURATION_SERVICE_ID = "@flowscripter/dynamic-cli-framework/configuration-service";
@@ -1,12 +1,31 @@
1
1
  export declare const SHUTDOWN_SERVICE_ID = "@flowscripter/dynamic-cli-framework/shutdown-service";
2
2
  /**
3
- * Service allowing registration of callbacks for CLI shutdown.
3
+ * A unit of work to run once during CLI shutdown, in {@link ShutdownTask.priority} order.
4
+ */
5
+ export interface ShutdownTask {
6
+ /**
7
+ * Identifies this task, e.g. for debug logging when a shutdown task is slow or hangs.
8
+ */
9
+ readonly id: string;
10
+ /**
11
+ * Used to determine the order in which tasks run during shutdown. Higher values run
12
+ * earlier. Defaults to `0` if not specified; tasks with the same
13
+ * priority run in registration order.
14
+ */
15
+ readonly priority?: number;
16
+ /**
17
+ * Perform this task's shutdown work.
18
+ */
19
+ run(): Promise<void>;
20
+ }
21
+ /**
22
+ * Service allowing registration of prioritised tasks to run during CLI shutdown.
4
23
  */
5
24
  export default interface ShutdownService {
6
25
  /**
7
- * Register a callback to be invoked during graceful shutdown.
26
+ * Register a {@link ShutdownTask} to run during graceful shutdown.
8
27
  */
9
- addShutdownListener(callback: () => Promise<void>): void;
28
+ registerTask(task: ShutdownTask): void;
10
29
  /**
11
30
  * Enter long-running mode where the first Ctrl-C sets a cooperative flag
12
31
  * instead of exiting, and a third Ctrl-C forces exit.
@@ -1 +1 @@
1
- {"version":3,"file":"ShutdownService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/ShutdownService.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,yDAAyD,CAAC;AAE1F;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,eAAe;IACtC;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAEzD;;;OAGG;IACH,oBAAoB,IAAI,IAAI,CAAC;IAE7B;;OAEG;IACH,oBAAoB,IAAI,IAAI,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC"}
1
+ {"version":3,"file":"ShutdownService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/ShutdownService.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,yDAAyD,CAAC;AAE1F;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,eAAe;IACtC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAEvC;;;OAGG;IACH,oBAAoB,IAAI,IAAI,CAAC;IAE7B;;OAEG;IACH,oBAAoB,IAAI,IAAI,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC"}
@@ -0,0 +1,55 @@
1
+ import type GlobalModifierCommand from "../../command/GlobalModifierCommand.ts";
2
+ import type CLIConfig from "../../CLIConfig.ts";
3
+ export declare const STARTUP_SERVICE_ID = "@flowscripter/dynamic-cli-framework/startup-service";
4
+ /**
5
+ * Minimal, read-only view of the CLI's {@link Context} passed to a {@link StartupTask}.
6
+ */
7
+ export interface StartupTaskContext {
8
+ readonly cliConfig: CLIConfig;
9
+ getServiceById(id: string): unknown;
10
+ doesServiceExist(id: string): boolean;
11
+ }
12
+ /**
13
+ * A `"blocking"` task is awaited before the next lower-priority task runs.
14
+ * A `"background"` task is started but not awaited before startup proceeds.
15
+ */
16
+ export type StartupTaskMode = "blocking" | "background";
17
+ /**
18
+ * A unit of work to run once during CLI startup, in {@link StartupTask.priority} order.
19
+ */
20
+ export interface StartupTask {
21
+ /**
22
+ * Identifies this task, e.g. for debug logging.
23
+ */
24
+ readonly id: string;
25
+ /**
26
+ * Used to determine the order in which tasks run. Higher values run earlier.
27
+ */
28
+ readonly priority: number;
29
+ /**
30
+ * Defaults to `"blocking"` if not specified.
31
+ */
32
+ readonly mode?: StartupTaskMode;
33
+ /**
34
+ * Zero or more {@link GlobalModifierCommand} instances which should be scanned for and
35
+ * executed (if specified as CLI arguments or CLI configuration) before this task's
36
+ * {@link run} is invoked.
37
+ */
38
+ readonly modifierCommands?: ReadonlyArray<GlobalModifierCommand>;
39
+ /**
40
+ * Perform this task's startup work.
41
+ *
42
+ * @param context a {@link StartupTaskContext} view of the CLI's {@link Context}.
43
+ */
44
+ run(context: StartupTaskContext): Promise<void>;
45
+ }
46
+ /**
47
+ * Service allowing registration of prioritised tasks to run once during CLI startup.
48
+ */
49
+ export default interface StartupService {
50
+ /**
51
+ * Register a {@link StartupTask} to run during CLI startup.
52
+ */
53
+ registerTask(task: StartupTask): void;
54
+ }
55
+ //# sourceMappingURL=StartupService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StartupService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/StartupService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,qBAAqB,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAEhD,eAAO,MAAM,kBAAkB,wDAAwD,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAE9B,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IAEpC,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC;IAEhC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAEjE;;;;OAIG;IACH,GAAG,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,cAAc;IACrC;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;CACvC"}
@@ -0,0 +1 @@
1
+ export const STARTUP_SERVICE_ID = "@flowscripter/dynamic-cli-framework/startup-service";
@@ -24,10 +24,7 @@ export declare enum InstallMethod {
24
24
  GITHUB_RELEASE = "github-release"
25
25
  }
26
26
  /**
27
- * Outcome of an {@link UpgradeService.checkForUpgrade} or {@link UpgradeService.getUpgradeCheckResult}
28
- * call. The `"pending"` status can only be produced by {@link UpgradeService.getUpgradeCheckResult}'s
29
- * non-blocking bounded wait - `checkForUpgrade()` and a `getUpgradeCheckResult(true)` call always
30
- * run to completion and so never resolve to it.
27
+ * Outcome of an {@link UpgradeService.checkForUpgrade} or {@link UpgradeService.getUpgradeCheckResult} call.
31
28
  */
32
29
  export type UpgradeCheckResult = {
33
30
  readonly status: "checked";
@@ -44,9 +41,6 @@ export type UpgradeCheckResult = {
44
41
  /** A supported/configured combination was found, but determining the latest version failed. */
45
42
  readonly status: "failed";
46
43
  readonly error: Error;
47
- } | {
48
- /** The non-blocking bounded wait elapsed before the check completed. */
49
- readonly status: "pending";
50
44
  };
51
45
  /**
52
46
  * Outcome of an {@link UpgradeService.upgrade} call.
@@ -88,8 +82,7 @@ export default interface UpgradeService {
88
82
  * @param arch optional {@link SupportedArch} override, defaults to the detected value.
89
83
  * @param installMethod optional {@link InstallMethod} override, defaults to the detected value.
90
84
  *
91
- * @return the {@link UpgradeCheckResult}. Runs to completion, so never resolves to the
92
- * `"pending"` status. Never rejects.
85
+ * @return the {@link UpgradeCheckResult}. Runs to completion. Never rejects.
93
86
  */
94
87
  checkForUpgrade(os?: SupportedOs, arch?: SupportedArch, installMethod?: InstallMethod): Promise<UpgradeCheckResult>;
95
88
  /**
@@ -105,15 +98,10 @@ export default interface UpgradeService {
105
98
  /**
106
99
  * Returns the result of the version check that was started eagerly once this service's
107
100
  * dependencies were set (or starts one now, with default/no-override detection, if none has
108
- * started yet). Every call is backed by the same cached promise.
109
- *
110
- * @param waitForResult if `true`, waits for the check to fully resolve, so the result never has
111
- * status `"pending"`. If `false` (default), gives up and resolves to a `"pending"` result after
112
- * an internal bounded delay, so callers on a startup/opportunistic path are never blocked by a
113
- * slow network/spawn call.
101
+ * started yet).
114
102
  *
115
103
  * @return the {@link UpgradeCheckResult}. Never rejects.
116
104
  */
117
- getUpgradeCheckResult(waitForResult?: boolean): Promise<UpgradeCheckResult>;
105
+ getUpgradeCheckResult(): Promise<UpgradeCheckResult>;
118
106
  }
119
107
  //# sourceMappingURL=UpgradeService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/UpgradeService.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,wDAAwD,CAAC;AAExF;;GAEG;AACH,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,cAAc,mBAAmB;CAClC;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC,GACD;IACE,yGAAyG;IACzG,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC,GACD;IACE,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,GACD;IACE,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;CAC5B,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,cAAc;IACrC;;;;OAIG;IACH,QAAQ,IAAI,WAAW,GAAG,SAAS,CAAC;IAEpC;;;;OAIG;IACH,UAAU,IAAI,aAAa,GAAG,SAAS,CAAC;IAExC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAEzE;;;;;;;;;OASG;IACH,eAAe,CACb,EAAE,CAAC,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE,aAAa,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;;;;;;;OAQG;IACH,OAAO,CACL,EAAE,CAAC,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE,aAAa,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1B;;;;;;;;;;;OAWG;IACH,qBAAqB,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC7E"}
1
+ {"version":3,"file":"UpgradeService.d.ts","sourceRoot":"","sources":["../../../../src/service/core/UpgradeService.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,wDAAwD,CAAC;AAExF;;GAEG;AACH,oBAAY,WAAW;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,cAAc,mBAAmB;CAClC;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC,GACD;IACE,yGAAyG;IACzG,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC,GACD;IACE,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,cAAc;IACrC;;;;OAIG;IACH,QAAQ,IAAI,WAAW,GAAG,SAAS,CAAC;IAEpC;;;;OAIG;IACH,UAAU,IAAI,aAAa,GAAG,SAAS,CAAC;IAExC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAEzE;;;;;;;;OAQG;IACH,eAAe,CACb,EAAE,CAAC,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE,aAAa,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAE/B;;;;;;;;OAQG;IACH,OAAO,CACL,EAAE,CAAC,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE,aAAa,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,aAAa,CAAC,CAAC;IAE1B;;;;;;OAMG;IACH,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACtD"}
package/index.ts CHANGED
@@ -46,6 +46,9 @@ export type {
46
46
  RainbowColorEffect,
47
47
  } from "./src/service/core/AsciiBannerGeneratorService.ts";
48
48
 
49
+ export { CONFIGURATION_SERVICE_ID } from "./src/service/core/ConfigurationService.ts";
50
+ export type { default as ConfigurationService } from "./src/service/core/ConfigurationService.ts";
51
+
49
52
  export { KEY_VALUE_SERVICE_ID } from "./src/service/core/KeyValueService.ts";
50
53
  export { SECRET_SENTINEL_PREFIX } from "./src/service/core/KeyValueService.ts";
51
54
  export { Secret } from "./src/service/core/KeyValueService.ts";
@@ -65,7 +68,18 @@ export { Icon, Level, ProgressStyle, SpinnerStyle } from "./src/service/core/Pri
65
68
  export type { ProgressBarOptions } from "./src/service/core/PrinterService.ts";
66
69
 
67
70
  export { SHUTDOWN_SERVICE_ID } from "./src/service/core/ShutdownService.ts";
68
- export type { default as ShutdownService } from "./src/service/core/ShutdownService.ts";
71
+ export type {
72
+ default as ShutdownService,
73
+ ShutdownTask,
74
+ } from "./src/service/core/ShutdownService.ts";
75
+
76
+ export { STARTUP_SERVICE_ID } from "./src/service/core/StartupService.ts";
77
+ export type {
78
+ default as StartupService,
79
+ StartupTask,
80
+ StartupTaskContext,
81
+ StartupTaskMode,
82
+ } from "./src/service/core/StartupService.ts";
69
83
 
70
84
  export { SPAWN_SERVICE_ID } from "./src/service/core/SpawnService.ts";
71
85
  export type { default as SpawnService } from "./src/service/core/SpawnService.ts";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowscripter/dynamic-cli-framework-api",
3
- "version": "3.0.1",
3
+ "version": "4.0.1",
4
4
  "description": "API for https://github.com/flowscripter/dynamic-cli-framework",
5
5
  "keywords": [
6
6
  "bun",
@@ -0,0 +1,11 @@
1
+ export const CONFIGURATION_SERVICE_ID = "@flowscripter/dynamic-cli-framework/configuration-service";
2
+
3
+ /**
4
+ * Minimal, read/write view of a configuration provider's config file *location*, registered under
5
+ * {@link CONFIGURATION_SERVICE_ID}.
6
+ */
7
+ export default interface ConfigurationService {
8
+ readonly configLocation: string | undefined;
9
+
10
+ setConfigLocation(location: string): void;
11
+ }
@@ -1,13 +1,35 @@
1
1
  export const SHUTDOWN_SERVICE_ID = "@flowscripter/dynamic-cli-framework/shutdown-service";
2
2
 
3
3
  /**
4
- * Service allowing registration of callbacks for CLI shutdown.
4
+ * A unit of work to run once during CLI shutdown, in {@link ShutdownTask.priority} order.
5
+ */
6
+ export interface ShutdownTask {
7
+ /**
8
+ * Identifies this task, e.g. for debug logging when a shutdown task is slow or hangs.
9
+ */
10
+ readonly id: string;
11
+
12
+ /**
13
+ * Used to determine the order in which tasks run during shutdown. Higher values run
14
+ * earlier. Defaults to `0` if not specified; tasks with the same
15
+ * priority run in registration order.
16
+ */
17
+ readonly priority?: number;
18
+
19
+ /**
20
+ * Perform this task's shutdown work.
21
+ */
22
+ run(): Promise<void>;
23
+ }
24
+
25
+ /**
26
+ * Service allowing registration of prioritised tasks to run during CLI shutdown.
5
27
  */
6
28
  export default interface ShutdownService {
7
29
  /**
8
- * Register a callback to be invoked during graceful shutdown.
30
+ * Register a {@link ShutdownTask} to run during graceful shutdown.
9
31
  */
10
- addShutdownListener(callback: () => Promise<void>): void;
32
+ registerTask(task: ShutdownTask): void;
11
33
 
12
34
  /**
13
35
  * Enter long-running mode where the first Ctrl-C sets a cooperative flag
@@ -0,0 +1,65 @@
1
+ import type GlobalModifierCommand from "../../command/GlobalModifierCommand.ts";
2
+ import type CLIConfig from "../../CLIConfig.ts";
3
+
4
+ export const STARTUP_SERVICE_ID = "@flowscripter/dynamic-cli-framework/startup-service";
5
+
6
+ /**
7
+ * Minimal, read-only view of the CLI's {@link Context} passed to a {@link StartupTask}.
8
+ */
9
+ export interface StartupTaskContext {
10
+ readonly cliConfig: CLIConfig;
11
+
12
+ getServiceById(id: string): unknown;
13
+
14
+ doesServiceExist(id: string): boolean;
15
+ }
16
+
17
+ /**
18
+ * A `"blocking"` task is awaited before the next lower-priority task runs.
19
+ * A `"background"` task is started but not awaited before startup proceeds.
20
+ */
21
+ export type StartupTaskMode = "blocking" | "background";
22
+
23
+ /**
24
+ * A unit of work to run once during CLI startup, in {@link StartupTask.priority} order.
25
+ */
26
+ export interface StartupTask {
27
+ /**
28
+ * Identifies this task, e.g. for debug logging.
29
+ */
30
+ readonly id: string;
31
+
32
+ /**
33
+ * Used to determine the order in which tasks run. Higher values run earlier.
34
+ */
35
+ readonly priority: number;
36
+
37
+ /**
38
+ * Defaults to `"blocking"` if not specified.
39
+ */
40
+ readonly mode?: StartupTaskMode;
41
+
42
+ /**
43
+ * Zero or more {@link GlobalModifierCommand} instances which should be scanned for and
44
+ * executed (if specified as CLI arguments or CLI configuration) before this task's
45
+ * {@link run} is invoked.
46
+ */
47
+ readonly modifierCommands?: ReadonlyArray<GlobalModifierCommand>;
48
+
49
+ /**
50
+ * Perform this task's startup work.
51
+ *
52
+ * @param context a {@link StartupTaskContext} view of the CLI's {@link Context}.
53
+ */
54
+ run(context: StartupTaskContext): Promise<void>;
55
+ }
56
+
57
+ /**
58
+ * Service allowing registration of prioritised tasks to run once during CLI startup.
59
+ */
60
+ export default interface StartupService {
61
+ /**
62
+ * Register a {@link StartupTask} to run during CLI startup.
63
+ */
64
+ registerTask(task: StartupTask): void;
65
+ }
@@ -28,10 +28,7 @@ export enum InstallMethod {
28
28
  }
29
29
 
30
30
  /**
31
- * Outcome of an {@link UpgradeService.checkForUpgrade} or {@link UpgradeService.getUpgradeCheckResult}
32
- * call. The `"pending"` status can only be produced by {@link UpgradeService.getUpgradeCheckResult}'s
33
- * non-blocking bounded wait - `checkForUpgrade()` and a `getUpgradeCheckResult(true)` call always
34
- * run to completion and so never resolve to it.
31
+ * Outcome of an {@link UpgradeService.checkForUpgrade} or {@link UpgradeService.getUpgradeCheckResult} call.
35
32
  */
36
33
  export type UpgradeCheckResult =
37
34
  | {
@@ -51,10 +48,6 @@ export type UpgradeCheckResult =
51
48
  /** A supported/configured combination was found, but determining the latest version failed. */
52
49
  readonly status: "failed";
53
50
  readonly error: Error;
54
- }
55
- | {
56
- /** The non-blocking bounded wait elapsed before the check completed. */
57
- readonly status: "pending";
58
51
  };
59
52
 
60
53
  /**
@@ -101,8 +94,7 @@ export default interface UpgradeService {
101
94
  * @param arch optional {@link SupportedArch} override, defaults to the detected value.
102
95
  * @param installMethod optional {@link InstallMethod} override, defaults to the detected value.
103
96
  *
104
- * @return the {@link UpgradeCheckResult}. Runs to completion, so never resolves to the
105
- * `"pending"` status. Never rejects.
97
+ * @return the {@link UpgradeCheckResult}. Runs to completion. Never rejects.
106
98
  */
107
99
  checkForUpgrade(
108
100
  os?: SupportedOs,
@@ -128,14 +120,9 @@ export default interface UpgradeService {
128
120
  /**
129
121
  * Returns the result of the version check that was started eagerly once this service's
130
122
  * dependencies were set (or starts one now, with default/no-override detection, if none has
131
- * started yet). Every call is backed by the same cached promise.
132
- *
133
- * @param waitForResult if `true`, waits for the check to fully resolve, so the result never has
134
- * status `"pending"`. If `false` (default), gives up and resolves to a `"pending"` result after
135
- * an internal bounded delay, so callers on a startup/opportunistic path are never blocked by a
136
- * slow network/spawn call.
123
+ * started yet).
137
124
  *
138
125
  * @return the {@link UpgradeCheckResult}. Never rejects.
139
126
  */
140
- getUpgradeCheckResult(waitForResult?: boolean): Promise<UpgradeCheckResult>;
127
+ getUpgradeCheckResult(): Promise<UpgradeCheckResult>;
141
128
  }