@bluelibs/runner 5.3.0 → 5.4.0

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.
Files changed (60) hide show
  1. package/dist/browser/index.cjs +829 -742
  2. package/dist/browser/index.cjs.map +1 -1
  3. package/dist/browser/index.mjs +828 -743
  4. package/dist/browser/index.mjs.map +1 -1
  5. package/dist/edge/index.cjs +829 -742
  6. package/dist/edge/index.cjs.map +1 -1
  7. package/dist/edge/index.mjs +828 -743
  8. package/dist/edge/index.mjs.map +1 -1
  9. package/dist/node/node.cjs +1462 -1706
  10. package/dist/node/node.cjs.map +1 -1
  11. package/dist/node/node.mjs +1459 -1659
  12. package/dist/node/node.mjs.map +1 -1
  13. package/dist/types/definers/builders/event/utils.d.ts +1 -4
  14. package/dist/types/definers/builders/hook/utils.d.ts +1 -4
  15. package/dist/types/definers/builders/middleware/utils.d.ts +1 -4
  16. package/dist/types/definers/builders/resource/utils.d.ts +1 -4
  17. package/dist/types/definers/builders/shared/mergeUtils.d.ts +5 -0
  18. package/dist/types/definers/builders/task/utils.d.ts +1 -4
  19. package/dist/types/definers/builders/utils.d.ts +1 -1
  20. package/dist/types/errors.d.ts +20 -21
  21. package/dist/types/models/DependencyProcessor.d.ts +1 -1
  22. package/dist/types/models/MiddlewareManager.d.ts +2 -2
  23. package/dist/types/models/RunResult.d.ts +1 -1
  24. package/dist/types/models/Store.d.ts +10 -10
  25. package/dist/types/models/StoreRegistry.d.ts +14 -13
  26. package/dist/types/models/middleware/ResourceMiddlewareComposer.d.ts +2 -2
  27. package/dist/types/models/utils/buildDependencyGraph.d.ts +12 -0
  28. package/dist/types/models/utils/dependencyStrategies.d.ts +15 -0
  29. package/dist/types/models/utils/disposeOrder.d.ts +7 -0
  30. package/dist/types/node/durable/core/DurableResource.d.ts +1 -0
  31. package/dist/types/node/durable/core/resource.d.ts +5 -5
  32. package/dist/types/node/durable/resources/memoryDurableResource.d.ts +5 -5
  33. package/dist/types/node/durable/resources/redisDurableResource.d.ts +5 -5
  34. package/dist/types/node/durable/tags/durableWorkflow.tag.d.ts +6 -1
  35. package/dist/types/node/exposure/requestContext.d.ts +1 -1
  36. package/dist/types/node/exposure/resource.d.ts +7 -7
  37. package/dist/types/node/http/http-mixed-client.factory.resource.d.ts +1 -1
  38. package/dist/types/node/http/http-smart-client.factory.resource.d.ts +1 -1
  39. package/dist/types/node/node.d.ts +1 -184
  40. package/dist/types/platform/adapters/edge.d.ts +17 -0
  41. package/dist/types/platform/adapters/universal-generic.d.ts +3 -0
  42. package/dist/types/platform/index.d.ts +1 -0
  43. package/dist/types/platform/types.d.ts +7 -1
  44. package/dist/types/public.d.ts +2 -0
  45. package/dist/types/tools/LockableMap.d.ts +20 -0
  46. package/dist/types/types/symbols.d.ts +1 -1
  47. package/dist/types/types/task.d.ts +1 -1
  48. package/dist/ui/assets/index-Bo7Gi6Vq.js +141 -0
  49. package/dist/ui/assets/index-Y_9aLumt.css +1 -0
  50. package/dist/ui/index.html +2 -3
  51. package/dist/universal/index.cjs +829 -742
  52. package/dist/universal/index.cjs.map +1 -1
  53. package/dist/universal/index.mjs +828 -743
  54. package/dist/universal/index.mjs.map +1 -1
  55. package/package.json +1 -2
  56. package/readmes/AI.md +34 -3
  57. package/dist/ui/assets/index-2cb8f39f.js +0 -141
  58. package/dist/ui/assets/index-b1f988bf.css +0 -1
  59. /package/dist/types/{tunnels → tools}/buildUniversalManifest.d.ts +0 -0
  60. /package/dist/types/{processHooks.d.ts → tools/processShutdownHooks.d.ts} +0 -0
@@ -1,6 +1,4 @@
1
- export * from "../index";
2
- import type { RunResult } from "../models/RunResult";
3
- import type { SerializerLike } from "../serializer";
1
+ export { run, globals } from "../public";
4
2
  export { nodeExposure } from "./exposure";
5
3
  export { hasExposureContext, useExposureContext, } from "./exposure/requestContext";
6
4
  export type * from "./exposure/resourceTypes";
@@ -10,184 +8,3 @@ export { readInputFileToBuffer, writeInputFileToPath } from "./files";
10
8
  export { createHttpSmartClient, createHttpMixedClient } from "./http";
11
9
  export type { HttpSmartClient, HttpSmartClientAuthConfig, HttpSmartClientConfig, MixedHttpClient, MixedHttpClientAuthConfig, MixedHttpClientConfig, Readable, } from "./http";
12
10
  export * from "./durable";
13
- export declare const globals: {
14
- resources: {
15
- httpSmartClientFactory: import("./node").IResource<void, Promise<import("./http").HttpSmartClientFactory>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
16
- httpMixedClientFactory: import("./node").IResource<void, Promise<import("./http").HttpMixedClientFactory>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
17
- store: import("./node").IResource<void, Promise<import("./node").Store>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
18
- middlewareManager: import("./node").IResource<void, Promise<import("./node").MiddlewareManager>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
19
- eventManager: import("./node").IResource<void, Promise<import("./node").EventManager>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
20
- taskRunner: import("./node").IResource<void, Promise<import("./node").TaskRunner>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
21
- logger: import("./node").IResource<void, Promise<import("./node").Logger>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
22
- serializer: import("./node").IResource<void, Promise<SerializerLike>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
23
- cache: import("./node").IResource<import("./node").CacheResourceConfig, Promise<{
24
- map: Map<string, import("./node").ICacheInstance>;
25
- cacheFactoryTask: import("./node").TaskDependencyWithIntercept<import("lru-cache").LRUCache.Options<any, any, any>, Promise<import("./node").ICacheInstance>>;
26
- defaultOptions: any;
27
- }>, {
28
- cacheFactoryTask: import("./node").ITask<import("lru-cache").LRUCache.Options<any, any, any>, Promise<import("./node").ICacheInstance>, any, any, import("./node").TagType[], import("./node").TaskMiddlewareAttachmentType[]>;
29
- }, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
30
- queue: import("./node").IResource<void, Promise<{
31
- map: Map<string, import("./node").Queue>;
32
- run: <T>(id: string, task: (signal: AbortSignal) => Promise<T>) => Promise<T>;
33
- }>, {}, {
34
- map: Map<string, import("./node").Queue>;
35
- }, {
36
- title: string;
37
- description: string;
38
- }, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
39
- httpClientFactory: import("./node").IResource<void, Promise<import("./node").HttpClientFactory>, {
40
- serializer: import("./node").IResource<void, Promise<SerializerLike>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
41
- store: import("./node").IResource<void, Promise<import("./node").Store>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
42
- }, any, {
43
- title: string;
44
- description: string;
45
- }, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
46
- rateLimit: import("./node").IResource<void, Promise<{
47
- states: WeakMap<import("./node").RateLimitMiddlewareConfig, import("./node").RateLimitState>;
48
- }>, {}, any, any, import("./node").ITag<{
49
- metadata?: Record<string, any>;
50
- }, void, void>[], import("./node").ResourceMiddlewareAttachmentType[]>;
51
- circuitBreaker: import("./node").IResource<void, Promise<{
52
- statusMap: Map<string, import("./node").CircuitBreakerStatus>;
53
- }>, {}, any, any, import("./node").ITag<{
54
- metadata?: Record<string, any>;
55
- }, void, void>[], import("./node").ResourceMiddlewareAttachmentType[]>;
56
- temporal: import("./node").IResource<void, Promise<{
57
- debounceStates: WeakMap<import("./node").TemporalMiddlewareConfig, import("./node").DebounceState>;
58
- throttleStates: WeakMap<import("./node").TemporalMiddlewareConfig, import("./node").ThrottleState>;
59
- }>, {}, any, any, import("./node").ITag<{
60
- metadata?: Record<string, any>;
61
- }, void, void>[], import("./node").ResourceMiddlewareAttachmentType[]>;
62
- concurrency: import("./node").IResource<void, Promise<{
63
- semaphoresByConfig: WeakMap<import("./node").ConcurrencyMiddlewareConfig, import("./node").Semaphore>;
64
- semaphoresByKey: Map<string, {
65
- semaphore: import("./node").Semaphore;
66
- limit: number;
67
- }>;
68
- }>, {}, any, any, import("./node").ITag<{
69
- metadata?: Record<string, any>;
70
- }, void, void>[], import("./node").ResourceMiddlewareAttachmentType[]>;
71
- };
72
- events: {
73
- readonly ready: import("./node").IEvent<void>;
74
- };
75
- middleware: {
76
- requireContext: import("./node").ITaskMiddleware<import("./node").RequireContextMiddlewareConfig, void, void, any>;
77
- task: {
78
- requireContext: import("./node").ITaskMiddleware<import("./node").RequireContextMiddlewareConfig, void, void, any>;
79
- cache: import("./node").ITaskMiddleware<any, void, void, {
80
- cache: import("./node").IResource<import("./node").CacheResourceConfig, Promise<{
81
- map: Map<string, import("./node").ICacheInstance>;
82
- cacheFactoryTask: import("./node").TaskDependencyWithIntercept<import("lru-cache").LRUCache.Options<any, any, any>, Promise<import("./node").ICacheInstance>>;
83
- defaultOptions: any;
84
- }>, {
85
- cacheFactoryTask: import("./node").ITask<import("lru-cache").LRUCache.Options<any, any, any>, Promise<import("./node").ICacheInstance>, any, any, import("./node").TagType[], import("./node").TaskMiddlewareAttachmentType[]>;
86
- }, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
87
- }> & {
88
- journalKeys: {
89
- readonly hit: import("./node").JournalKey<boolean>;
90
- };
91
- };
92
- concurrency: import("./node").ITaskMiddleware<import("./node").ConcurrencyMiddlewareConfig, void, void, {
93
- state: import("./node").IResource<void, Promise<{
94
- semaphoresByConfig: WeakMap<import("./node").ConcurrencyMiddlewareConfig, import("./node").Semaphore>;
95
- semaphoresByKey: Map<string, {
96
- semaphore: import("./node").Semaphore;
97
- limit: number;
98
- }>;
99
- }>, {}, any, any, import("./node").ITag<{
100
- metadata?: Record<string, any>;
101
- }, void, void>[], import("./node").ResourceMiddlewareAttachmentType[]>;
102
- }>;
103
- debounce: import("./node").ITaskMiddleware<import("./node").TemporalMiddlewareConfig, void, void, {
104
- state: import("./node").IResource<void, Promise<{
105
- debounceStates: WeakMap<import("./node").TemporalMiddlewareConfig, import("./node").DebounceState>;
106
- throttleStates: WeakMap<import("./node").TemporalMiddlewareConfig, import("./node").ThrottleState>;
107
- }>, {}, any, any, import("./node").ITag<{
108
- metadata?: Record<string, any>;
109
- }, void, void>[], import("./node").ResourceMiddlewareAttachmentType[]>;
110
- }>;
111
- throttle: import("./node").ITaskMiddleware<import("./node").TemporalMiddlewareConfig, void, void, {
112
- state: import("./node").IResource<void, Promise<{
113
- debounceStates: WeakMap<import("./node").TemporalMiddlewareConfig, import("./node").DebounceState>;
114
- throttleStates: WeakMap<import("./node").TemporalMiddlewareConfig, import("./node").ThrottleState>;
115
- }>, {}, any, any, import("./node").ITag<{
116
- metadata?: Record<string, any>;
117
- }, void, void>[], import("./node").ResourceMiddlewareAttachmentType[]>;
118
- }>;
119
- fallback: import("./node").ITaskMiddleware<import("./node").FallbackMiddlewareConfig, void, void, {
120
- taskRunner: import("./node").IResource<void, Promise<import("./node").TaskRunner>, {}, any, any, import("./node").TagType[], import("./node").ResourceMiddlewareAttachmentType[]>;
121
- }> & {
122
- journalKeys: {
123
- readonly active: import("./node").JournalKey<boolean>;
124
- readonly error: import("./node").JournalKey<Error>;
125
- };
126
- };
127
- rateLimit: import("./node").ITaskMiddleware<import("./node").RateLimitMiddlewareConfig, void, void, {
128
- state: import("./node").IResource<void, Promise<{
129
- states: WeakMap<import("./node").RateLimitMiddlewareConfig, import("./node").RateLimitState>;
130
- }>, {}, any, any, import("./node").ITag<{
131
- metadata?: Record<string, any>;
132
- }, void, void>[], import("./node").ResourceMiddlewareAttachmentType[]>;
133
- }> & {
134
- journalKeys: {
135
- readonly remaining: import("./node").JournalKey<number>;
136
- readonly resetTime: import("./node").JournalKey<number>;
137
- readonly limit: import("./node").JournalKey<number>;
138
- };
139
- };
140
- retry: import("./node").ITaskMiddleware<import("./node").RetryMiddlewareConfig, void, void, any> & {
141
- journalKeys: {
142
- readonly attempt: import("./node").JournalKey<number>;
143
- readonly lastError: import("./node").JournalKey<Error>;
144
- };
145
- };
146
- timeout: import("./node").ITaskMiddleware<import("./node").TimeoutMiddlewareConfig, void, void, any> & {
147
- journalKeys: {
148
- readonly abortController: import("./node").JournalKey<AbortController>;
149
- };
150
- };
151
- circuitBreaker: import("./node").ITaskMiddleware<import("./node").CircuitBreakerMiddlewareConfig, void, void, {
152
- state: import("./node").IResource<void, Promise<{
153
- statusMap: Map<string, import("./node").CircuitBreakerStatus>;
154
- }>, {}, any, any, import("./node").ITag<{
155
- metadata?: Record<string, any>;
156
- }, void, void>[], import("./node").ResourceMiddlewareAttachmentType[]>;
157
- }> & {
158
- journalKeys: {
159
- readonly state: import("./node").JournalKey<import("./node").CircuitBreakerState>;
160
- readonly failures: import("./node").JournalKey<number>;
161
- };
162
- };
163
- };
164
- resource: {
165
- retry: import("./node").IResourceMiddleware<import("./node").RetryMiddlewareConfig, void, void, any>;
166
- timeout: import("./node").IResourceMiddleware<import("./node").TimeoutMiddlewareConfig, void, void, any>;
167
- };
168
- };
169
- tags: {
170
- system: import("./node").ITag<{
171
- metadata?: Record<string, any>;
172
- }, void, void>;
173
- excludeFromGlobalHooks: import("./node").ITag<{
174
- metadata?: Record<string, any>;
175
- }, void, void>;
176
- debug: import("./node").ITag<import("./node").DebugFriendlyConfig, void, void>;
177
- tunnel: import("./node").ITag<void, void, import("./node").TunnelRunner>;
178
- tunnelPolicy: import("./node").ITag<import("./node").TunnelTaskMiddlewarePolicyConfig, void, void>;
179
- authValidator: import("./node").ITag<void, void, void>;
180
- };
181
- tunnels: Readonly<{
182
- http: Readonly<{
183
- createClient(cfg: import("./node").HttpCreateClientConfig): import("./node").ExposureFetchClient;
184
- }>;
185
- }>;
186
- debug: {
187
- levels: {
188
- normal: import("./node").DebugConfig;
189
- verbose: import("./node").DebugConfig;
190
- };
191
- };
192
- };
193
- export declare function run(root: any, config?: any): Promise<RunResult<any>>;
@@ -1,5 +1,22 @@
1
+ import type { IAsyncLocalStorage } from "../types";
1
2
  import { BrowserPlatformAdapter } from "./browser";
3
+ /**
4
+ * Edge runtimes (workers) are closer to browsers but may support
5
+ * AsyncLocalStorage via the `node:async_hooks` compat layer
6
+ * (e.g. Cloudflare Workers, Vercel Edge).
7
+ */
2
8
  export declare class EdgePlatformAdapter extends BrowserPlatformAdapter {
3
9
  readonly id: "edge";
10
+ private alsClass;
11
+ private alsProbed;
12
+ init(): Promise<void>;
13
+ /**
14
+ * Attempt to discover AsyncLocalStorage from the runtime.
15
+ * Checks globalThis first, then tries `import("node:async_hooks")`.
16
+ */
17
+ private probeGlobalAsyncLocalStorage;
18
+ private probeAsyncLocalStorage;
4
19
  onShutdownSignal(_handler: () => void): () => void;
20
+ hasAsyncLocalStorage(): boolean;
21
+ createAsyncLocalStorage<T>(): IAsyncLocalStorage<T>;
5
22
  }
@@ -1,7 +1,10 @@
1
1
  import type { IAsyncLocalStorage, IPlatformAdapter } from "../types";
2
2
  export declare class GenericUniversalPlatformAdapter implements IPlatformAdapter {
3
3
  readonly id: "universal";
4
+ private alsClass;
5
+ private alsProbed;
4
6
  init(): Promise<void>;
7
+ private probeAsyncLocalStorage;
5
8
  onUncaughtException(handler: (error: any) => void): () => any;
6
9
  onUnhandledRejection(handler: (reason: any) => void): () => any;
7
10
  onShutdownSignal(handler: () => void): () => void;
@@ -8,6 +8,7 @@ export declare function getDetectedEnvironment(): PlatformId;
8
8
  export declare function isNode(): boolean;
9
9
  export declare function isBrowser(): boolean;
10
10
  export declare function isUniversal(): boolean;
11
+ export declare function isEdge(): boolean;
11
12
  export type { IPlatformAdapter, IAsyncLocalStorage, PlatformId, PlatformSetTimeout, PlatformClearTimeout, } from "./types";
12
13
  export declare class PlatformAdapter implements IPlatformAdapter {
13
14
  private inner;
@@ -23,9 +23,15 @@ export interface IAsyncLocalStorage<T> {
23
23
  run<R>(store: T, callback: () => R): R;
24
24
  }
25
25
  /**
26
- * Utility functions for environment detection
26
+ * Backward-compatible utility functions retained for consumers
27
+ * importing environment guards from `platform/types`.
27
28
  */
28
29
  export declare function isNode(): boolean;
29
30
  export declare function isBrowser(): boolean;
31
+ /**
32
+ * Legacy alias kept for compatibility.
33
+ * Worker-like runtimes are now modeled under the "edge" platform id.
34
+ */
30
35
  export declare function isWebWorker(): boolean;
36
+ export declare function isEdge(): boolean;
31
37
  export declare function isUniversal(): boolean;
@@ -205,8 +205,10 @@ export * as definitions from "./defs";
205
205
  export * from "./models";
206
206
  export * from "./globals/types";
207
207
  export * as Errors from "./errors";
208
+ export { cancellationError } from "./errors";
208
209
  export { PlatformAdapter, setPlatform } from "./platform";
209
210
  export { RunnerError } from "./definers/defineError";
211
+ export { LockableMap } from "./tools/LockableMap";
210
212
  export * from "./http-client";
211
213
  export * from "./http-fetch-tunnel.resource";
212
214
  export { Serializer, SymbolPolicy, SymbolPolicyErrorMessage, } from "./serializer";
@@ -0,0 +1,20 @@
1
+ /**
2
+ * A Map that can be permanently locked to prevent further mutations.
3
+ *
4
+ * Before locking it behaves exactly like a regular `Map`.
5
+ * After `lock()` is called, any call to `set`, `delete` or `clear`
6
+ * throws immediately — enforcing immutability at the data-structure level.
7
+ */
8
+ export declare class LockableMap<K, V> extends Map<K, V> {
9
+ #private;
10
+ constructor(name?: string);
11
+ /** Whether the map is currently locked. */
12
+ get locked(): boolean;
13
+ /** Permanently lock the map — no further mutations allowed. */
14
+ lock(): void;
15
+ /** @throws if the map is locked */
16
+ private throwIfLocked;
17
+ set(key: K, value: V): this;
18
+ delete(key: K): boolean;
19
+ clear(): void;
20
+ }
@@ -5,7 +5,7 @@
5
5
  * @internal
6
6
  */
7
7
  export declare const symbolTask: unique symbol;
8
- /** Marks a task as a phantom task (no-op run; meant to be tunneled/routed). */
8
+ /** Marks a task as a phantom task (throws when unrouted; meant to be tunneled/routed). */
9
9
  export declare const symbolPhantomTask: unique symbol;
10
10
  export declare const symbolResource: unique symbol;
11
11
  /** @internal Generic fork provenance metadata for definitions that support `.fork()` */
@@ -70,7 +70,7 @@ export interface ITask<TInput = any, TOutput extends Promise<any> = any, TDepend
70
70
  tags: TTags;
71
71
  }
72
72
  export type AnyTask = ITask<any, any, any, any, any, any>;
73
- /** Narrowed type for phantom tasks (no-op run by default). */
73
+ /** Narrowed type for phantom tasks (throws unless routed through a tunnel). */
74
74
  export type IPhantomTask<TInput = any, TResolved = any, TDependencies extends DependencyMapType = {}, TMeta extends ITaskMeta = any, TTags extends TagType[] = TagType[], TMiddleware extends TaskMiddlewareAttachmentType[] = TaskMiddlewareAttachmentType[]> = ITask<TInput, Promise<TResolved>, TDependencies, TMeta, TTags, TMiddleware> & {
75
75
  [symbolPhantomTask]: true;
76
76
  };