@bluelibs/runner 2.2.4 → 3.1.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.
- package/README.md +1409 -935
- package/dist/common.types.d.ts +20 -0
- package/dist/common.types.js +4 -0
- package/dist/common.types.js.map +1 -0
- package/dist/context.d.ts +34 -0
- package/dist/context.js +58 -0
- package/dist/context.js.map +1 -0
- package/dist/define.d.ts +24 -5
- package/dist/define.js +89 -20
- package/dist/define.js.map +1 -1
- package/dist/defs.d.ts +109 -73
- package/dist/defs.js +12 -2
- package/dist/defs.js.map +1 -1
- package/dist/errors.d.ts +5 -5
- package/dist/errors.js +6 -5
- package/dist/errors.js.map +1 -1
- package/dist/event.types.d.ts +18 -0
- package/dist/event.types.js +4 -0
- package/dist/event.types.js.map +1 -0
- package/dist/examples/registrator-example.d.ts +122 -0
- package/dist/examples/registrator-example.js +147 -0
- package/dist/examples/registrator-example.js.map +1 -0
- package/dist/globals/globalEvents.d.ts +41 -0
- package/dist/globals/globalEvents.js +94 -0
- package/dist/globals/globalEvents.js.map +1 -0
- package/dist/globals/globalMiddleware.d.ts +23 -0
- package/dist/globals/globalMiddleware.js +15 -0
- package/dist/globals/globalMiddleware.js.map +1 -0
- package/dist/globals/globalResources.d.ts +27 -0
- package/dist/globals/globalResources.js +47 -0
- package/dist/globals/globalResources.js.map +1 -0
- package/dist/globals/middleware/cache.middleware.d.ts +34 -0
- package/dist/globals/middleware/cache.middleware.js +85 -0
- package/dist/globals/middleware/cache.middleware.js.map +1 -0
- package/dist/globals/middleware/requireContext.middleware.d.ts +6 -0
- package/dist/globals/middleware/requireContext.middleware.js +25 -0
- package/dist/globals/middleware/requireContext.middleware.js.map +1 -0
- package/dist/globals/middleware/retry.middleware.d.ts +20 -0
- package/dist/globals/middleware/retry.middleware.js +34 -0
- package/dist/globals/middleware/retry.middleware.js.map +1 -0
- package/dist/globals/resources/queue.resource.d.ts +7 -0
- package/dist/globals/resources/queue.resource.js +31 -0
- package/dist/globals/resources/queue.resource.js.map +1 -0
- package/dist/index.d.ts +54 -18
- package/dist/index.js +14 -9
- package/dist/index.js.map +1 -1
- package/dist/middleware.types.d.ts +40 -0
- package/dist/middleware.types.js +4 -0
- package/dist/middleware.types.js.map +1 -0
- package/dist/models/DependencyProcessor.d.ts +6 -5
- package/dist/models/DependencyProcessor.js +13 -15
- package/dist/models/DependencyProcessor.js.map +1 -1
- package/dist/models/EventManager.d.ts +9 -4
- package/dist/models/EventManager.js +44 -2
- package/dist/models/EventManager.js.map +1 -1
- package/dist/models/Logger.d.ts +30 -13
- package/dist/models/Logger.js +132 -54
- package/dist/models/Logger.js.map +1 -1
- package/dist/models/OverrideManager.d.ts +13 -0
- package/dist/models/OverrideManager.js +70 -0
- package/dist/models/OverrideManager.js.map +1 -0
- package/dist/models/Queue.d.ts +25 -0
- package/dist/models/Queue.js +54 -0
- package/dist/models/Queue.js.map +1 -0
- package/dist/models/ResourceInitializer.d.ts +5 -2
- package/dist/models/ResourceInitializer.js +22 -14
- package/dist/models/ResourceInitializer.js.map +1 -1
- package/dist/models/Semaphore.d.ts +61 -0
- package/dist/models/Semaphore.js +166 -0
- package/dist/models/Semaphore.js.map +1 -0
- package/dist/models/Store.d.ts +18 -73
- package/dist/models/Store.js +71 -269
- package/dist/models/Store.js.map +1 -1
- package/dist/models/StoreConstants.d.ts +11 -0
- package/dist/models/StoreConstants.js +18 -0
- package/dist/models/StoreConstants.js.map +1 -0
- package/dist/models/StoreRegistry.d.ts +25 -0
- package/dist/models/StoreRegistry.js +171 -0
- package/dist/models/StoreRegistry.js.map +1 -0
- package/dist/models/StoreTypes.d.ts +21 -0
- package/dist/models/StoreTypes.js +3 -0
- package/dist/models/StoreTypes.js.map +1 -0
- package/dist/models/StoreValidator.d.ts +10 -0
- package/dist/models/StoreValidator.js +41 -0
- package/dist/models/StoreValidator.js.map +1 -0
- package/dist/models/TaskRunner.d.ts +1 -1
- package/dist/models/TaskRunner.js +39 -24
- package/dist/models/TaskRunner.js.map +1 -1
- package/dist/models/VarStore.d.ts +17 -0
- package/dist/models/VarStore.js +60 -0
- package/dist/models/VarStore.js.map +1 -0
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -1
- package/dist/resource.types.d.ts +31 -0
- package/dist/resource.types.js +3 -0
- package/dist/resource.types.js.map +1 -0
- package/dist/run.d.ts +4 -1
- package/dist/run.js +6 -3
- package/dist/run.js.map +1 -1
- package/dist/symbols.d.ts +24 -0
- package/dist/symbols.js +29 -0
- package/dist/symbols.js.map +1 -0
- package/dist/task.types.d.ts +55 -0
- package/dist/task.types.js +23 -0
- package/dist/task.types.js.map +1 -0
- package/dist/tools/getCallerFile.d.ts +9 -1
- package/dist/tools/getCallerFile.js +41 -0
- package/dist/tools/getCallerFile.js.map +1 -1
- package/dist/tools/registratorId.d.ts +4 -0
- package/dist/tools/registratorId.js +40 -0
- package/dist/tools/registratorId.js.map +1 -0
- package/dist/tools/simpleHash.d.ts +9 -0
- package/dist/tools/simpleHash.js +34 -0
- package/dist/tools/simpleHash.js.map +1 -0
- package/dist/types/base-interfaces.d.ts +18 -0
- package/dist/types/base-interfaces.js +6 -0
- package/dist/types/base-interfaces.js.map +1 -0
- package/dist/types/base.d.ts +13 -0
- package/dist/types/base.js +3 -0
- package/dist/types/base.js.map +1 -0
- package/dist/types/dependencies.d.ts +22 -0
- package/dist/types/dependencies.js +3 -0
- package/dist/types/dependencies.js.map +1 -0
- package/dist/types/dependency-core.d.ts +14 -0
- package/dist/types/dependency-core.js +5 -0
- package/dist/types/dependency-core.js.map +1 -0
- package/dist/types/events.d.ts +52 -0
- package/dist/types/events.js +6 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/hooks.d.ts +16 -0
- package/dist/types/hooks.js +5 -0
- package/dist/types/hooks.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.js +27 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/meta.d.ts +13 -0
- package/dist/types/meta.js +5 -0
- package/dist/types/meta.js.map +1 -0
- package/dist/types/middleware.d.ts +38 -0
- package/dist/types/middleware.js +6 -0
- package/dist/types/middleware.js.map +1 -0
- package/dist/types/registerable.d.ts +10 -0
- package/dist/types/registerable.js +5 -0
- package/dist/types/registerable.js.map +1 -0
- package/dist/types/resources.d.ts +44 -0
- package/dist/types/resources.js +5 -0
- package/dist/types/resources.js.map +1 -0
- package/dist/types/symbols.d.ts +24 -0
- package/dist/types/symbols.js +30 -0
- package/dist/types/symbols.js.map +1 -0
- package/dist/types/tasks.d.ts +41 -0
- package/dist/types/tasks.js +5 -0
- package/dist/types/tasks.js.map +1 -0
- package/dist/types/utilities.d.ts +7 -0
- package/dist/types/utilities.js +5 -0
- package/dist/types/utilities.js.map +1 -0
- package/package.json +10 -6
- package/src/__tests__/benchmark/benchmark.test.ts +1 -1
- package/src/__tests__/context.test.ts +91 -0
- package/src/__tests__/errors.test.ts +8 -5
- package/src/__tests__/globalEvents.test.ts +1 -1
- package/src/__tests__/globals/cache.middleware.test.ts +772 -0
- package/src/__tests__/globals/queue.resource.test.ts +141 -0
- package/src/__tests__/globals/requireContext.middleware.test.ts +98 -0
- package/src/__tests__/globals/retry.middleware.test.ts +157 -0
- package/src/__tests__/index.helper.test.ts +55 -0
- package/src/__tests__/models/EventManager.test.ts +157 -11
- package/src/__tests__/models/Logger.test.ts +291 -34
- package/src/__tests__/models/Queue.test.ts +189 -0
- package/src/__tests__/models/ResourceInitializer.test.ts +8 -6
- package/src/__tests__/models/Semaphore.test.ts +713 -0
- package/src/__tests__/models/Store.test.ts +40 -0
- package/src/__tests__/models/TaskRunner.test.ts +86 -5
- package/src/__tests__/run.anonymous.test.ts +679 -0
- package/src/__tests__/run.middleware.test.ts +312 -12
- package/src/__tests__/run.overrides.test.ts +13 -10
- package/src/__tests__/run.test.ts +364 -13
- package/src/__tests__/setOutput.test.ts +244 -0
- package/src/__tests__/tools/getCallerFile.test.ts +124 -9
- package/src/__tests__/typesafety.test.ts +71 -41
- package/src/context.ts +86 -0
- package/src/define.ts +129 -34
- package/src/defs.ts +156 -119
- package/src/errors.ts +15 -10
- package/src/{globalEvents.ts → globals/globalEvents.ts} +13 -12
- package/src/globals/globalMiddleware.ts +14 -0
- package/src/{globalResources.ts → globals/globalResources.ts} +14 -10
- package/src/globals/middleware/cache.middleware.ts +115 -0
- package/src/globals/middleware/requireContext.middleware.ts +36 -0
- package/src/globals/middleware/retry.middleware.ts +56 -0
- package/src/globals/resources/queue.resource.ts +34 -0
- package/src/index.ts +9 -5
- package/src/models/DependencyProcessor.ts +42 -49
- package/src/models/EventManager.ts +64 -13
- package/src/models/Logger.ts +181 -64
- package/src/models/OverrideManager.ts +84 -0
- package/src/models/Queue.ts +66 -0
- package/src/models/ResourceInitializer.ts +40 -20
- package/src/models/Semaphore.ts +208 -0
- package/src/models/Store.ts +94 -342
- package/src/models/StoreConstants.ts +17 -0
- package/src/models/StoreRegistry.ts +228 -0
- package/src/models/StoreTypes.ts +46 -0
- package/src/models/StoreValidator.ts +43 -0
- package/src/models/TaskRunner.ts +54 -41
- package/src/models/index.ts +3 -0
- package/src/run.ts +7 -4
- package/src/tools/getCallerFile.ts +54 -2
- package/src/__tests__/index.ts +0 -15
- package/src/examples/express-mongo/index.ts +0 -1
package/dist/defs.d.ts
CHANGED
|
@@ -1,18 +1,30 @@
|
|
|
1
|
+
import { MiddlewareEverywhereOptions } from "./define";
|
|
2
|
+
export { ICacheInstance } from "./globals/middleware/cache.middleware";
|
|
1
3
|
export declare const symbolTask: unique symbol;
|
|
2
4
|
export declare const symbolResource: unique symbol;
|
|
3
5
|
export declare const symbolResourceWithConfig: unique symbol;
|
|
4
6
|
export declare const symbolEvent: unique symbol;
|
|
5
7
|
export declare const symbolMiddleware: unique symbol;
|
|
8
|
+
export declare const symbolMiddlewareConfigured: unique symbol;
|
|
6
9
|
export declare const symbolMiddlewareGlobal: unique symbol;
|
|
10
|
+
export declare const symbolMiddlewareEverywhereTasks: unique symbol;
|
|
11
|
+
export declare const symbolMiddlewareEverywhereResources: unique symbol;
|
|
7
12
|
export declare const symbolFilePath: unique symbol;
|
|
13
|
+
export declare const symbolDispose: unique symbol;
|
|
14
|
+
export declare const symbolStore: unique symbol;
|
|
15
|
+
export declare const symbolIndexResource: unique symbol;
|
|
8
16
|
export declare const symbols: {
|
|
9
17
|
task: symbol;
|
|
10
18
|
resource: symbol;
|
|
11
19
|
resourceWithConfig: symbol;
|
|
20
|
+
indexResource: symbol;
|
|
12
21
|
event: symbol;
|
|
13
22
|
middleware: symbol;
|
|
14
|
-
|
|
23
|
+
middlewareEverywhereTasks: symbol;
|
|
24
|
+
middlewareEverywhereResources: symbol;
|
|
15
25
|
filePath: symbol;
|
|
26
|
+
dispose: symbol;
|
|
27
|
+
store: symbol;
|
|
16
28
|
};
|
|
17
29
|
export interface IMeta {
|
|
18
30
|
title?: string;
|
|
@@ -31,25 +43,33 @@ export type DependencyMapType = Record<string, ITask<any, any, any, any> | IReso
|
|
|
31
43
|
type ExtractTaskInput<T> = T extends ITask<infer I, any, infer D> ? I : never;
|
|
32
44
|
type ExtractTaskOutput<T> = T extends ITask<any, infer O, infer D> ? O : never;
|
|
33
45
|
type ExtractResourceValue<T> = T extends IResource<any, infer V, infer D> ? V : never;
|
|
34
|
-
type ExtractEventParams<T> = T extends
|
|
46
|
+
type ExtractEventParams<T> = T extends IEvent<infer P> ? P : never;
|
|
47
|
+
/**
|
|
48
|
+
* This represents a task dependency function that can be called with or without parameters.
|
|
49
|
+
*/
|
|
35
50
|
type TaskDependency<I, O> = (...args: I extends null | void ? [] : [I]) => O;
|
|
51
|
+
/**
|
|
52
|
+
* This represents the resource's value type.
|
|
53
|
+
*/
|
|
36
54
|
type ResourceDependency<V> = V;
|
|
37
|
-
|
|
55
|
+
/**
|
|
56
|
+
* This represents an event emission function that can be called with or without parameters.
|
|
57
|
+
*/
|
|
58
|
+
type EventDependency<P> = P extends void ? (() => Promise<void>) & ((input?: Record<string, never>) => Promise<void>) : (input: P) => Promise<void>;
|
|
38
59
|
export type DependencyValueType<T> = T extends ITask<any, any, any> ? TaskDependency<ExtractTaskInput<T>, ExtractTaskOutput<T>> : T extends IResource<any, any> ? ResourceDependency<ExtractResourceValue<T>> : T extends IEventDefinition<any> ? EventDependency<ExtractEventParams<T>> : never;
|
|
39
60
|
export type DependencyValuesType<T extends DependencyMapType> = {
|
|
40
61
|
[K in keyof T]: DependencyValueType<T[K]>;
|
|
41
62
|
};
|
|
42
|
-
type
|
|
43
|
-
[K in
|
|
44
|
-
}
|
|
45
|
-
type
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
export type RegisterableItems<T = any> = IResourceWithConfig<any> | IResource<OptionalOrVoidOrAnything<T>, any, any> | ITaskDefinition<any, any, any, any> | IMiddlewareDefinition<any> | IEventDefinition<any>;
|
|
63
|
+
export type RegisterableItems<T = any> = IResourceWithConfig<any> | IResource<void, any, any, any> | IResource<{
|
|
64
|
+
[K in any]?: any;
|
|
65
|
+
}, any, any, any> | ITask<any, any, any, any> | IMiddleware<any> | IEvent<any>;
|
|
66
|
+
export type MiddlewareAttachments = IMiddleware<void> | IMiddleware<{
|
|
67
|
+
[K in any]?: any;
|
|
68
|
+
}> | IMiddlewareConfigured<any>;
|
|
49
69
|
export interface ITaskDefinition<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TOn extends "*" | IEventDefinition<any> | undefined = undefined> {
|
|
50
|
-
id
|
|
70
|
+
id?: string | symbol;
|
|
51
71
|
dependencies?: TDependencies | (() => TDependencies);
|
|
52
|
-
middleware?:
|
|
72
|
+
middleware?: MiddlewareAttachments[];
|
|
53
73
|
/**
|
|
54
74
|
* Listen to events in a simple way
|
|
55
75
|
*/
|
|
@@ -60,14 +80,15 @@ export interface ITaskDefinition<TInput = any, TOutput extends Promise<any> = an
|
|
|
60
80
|
*/
|
|
61
81
|
listenerOrder?: number;
|
|
62
82
|
meta?: ITaskMeta;
|
|
63
|
-
run: (input: TOn extends undefined ? TInput :
|
|
83
|
+
run: (input: TOn extends undefined ? TInput : IEventEmission<TOn extends "*" ? any : ExtractEventParams<TOn>>, dependencies: DependencyValuesType<TDependencies>) => TOutput;
|
|
64
84
|
}
|
|
65
85
|
export type BeforeRunEventPayload<TInput> = {
|
|
66
86
|
input: TInput;
|
|
67
87
|
};
|
|
68
88
|
export type AfterRunEventPayload<TInput, TOutput> = {
|
|
69
89
|
input: TInput;
|
|
70
|
-
output: TOutput;
|
|
90
|
+
output: TOutput extends Promise<infer U> ? U : TOutput;
|
|
91
|
+
setOutput(newOutput: TOutput extends Promise<infer U> ? U : TOutput): void;
|
|
71
92
|
};
|
|
72
93
|
export type OnErrorEventPayload = {
|
|
73
94
|
error: any;
|
|
@@ -87,58 +108,87 @@ export type AfterInitEventPayload<TConfig, TValue> = {
|
|
|
87
108
|
* This is the response after the definition has been prepared. TODO: better naming?
|
|
88
109
|
*/
|
|
89
110
|
export interface ITask<TInput = any, TOutput extends Promise<any> = any, TDependencies extends DependencyMapType = {}, TOn extends "*" | IEventDefinition<any> | undefined = undefined> extends ITaskDefinition<TInput, TOutput, TDependencies, TOn> {
|
|
111
|
+
id: string | symbol;
|
|
90
112
|
dependencies: TDependencies | (() => TDependencies);
|
|
91
113
|
computedDependencies?: DependencyValuesType<TDependencies>;
|
|
92
|
-
middleware:
|
|
114
|
+
middleware: MiddlewareAttachments[];
|
|
93
115
|
/**
|
|
94
116
|
* These events are automatically populated after the task has been defined.
|
|
95
117
|
*/
|
|
96
118
|
events: {
|
|
97
|
-
beforeRun:
|
|
98
|
-
afterRun:
|
|
99
|
-
onError:
|
|
119
|
+
beforeRun: IEvent<BeforeRunEventPayload<TInput>>;
|
|
120
|
+
afterRun: IEvent<AfterRunEventPayload<TInput, TOutput>>;
|
|
121
|
+
onError: IEvent<OnErrorEventPayload>;
|
|
100
122
|
};
|
|
101
123
|
}
|
|
102
|
-
export interface IResourceDefinition<TConfig = any, TValue = unknown, TDependencies extends DependencyMapType = {}, TRegisterableItems = any> {
|
|
103
|
-
id
|
|
124
|
+
export interface IResourceDefinition<TConfig = any, TValue = unknown, TDependencies extends DependencyMapType = {}, TContext = any, THooks = any, TRegisterableItems = any> {
|
|
125
|
+
id?: string | symbol;
|
|
104
126
|
dependencies?: TDependencies | ((config: TConfig) => TDependencies);
|
|
105
127
|
register?: Array<RegisterableItems> | ((config: TConfig) => Array<RegisterableItems>);
|
|
106
|
-
init?: (config: TConfig, dependencies: DependencyValuesType<TDependencies
|
|
128
|
+
init?: (this: any, config: TConfig, dependencies: DependencyValuesType<TDependencies>, context: TContext) => Promise<TValue>;
|
|
107
129
|
/**
|
|
108
130
|
* Clean-up function for the resource. This is called when the resource is no longer needed.
|
|
109
131
|
*
|
|
110
|
-
* @param value The value of the resource
|
|
132
|
+
* @param value The value of the resource (undefined if no init method)
|
|
111
133
|
* @param config The configuration it received
|
|
112
134
|
* @param dependencies The dependencies it needed
|
|
113
|
-
* @returns
|
|
135
|
+
* @returns Promise<void>
|
|
114
136
|
*/
|
|
115
|
-
dispose?: (value: TValue, config: TConfig, dependencies: DependencyValuesType<TDependencies
|
|
137
|
+
dispose?: (this: any, value: TValue, config: TConfig, dependencies: DependencyValuesType<TDependencies>, context: TContext) => Promise<void>;
|
|
116
138
|
meta?: IResourceMeta;
|
|
117
139
|
overrides?: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
|
|
118
|
-
middleware?:
|
|
140
|
+
middleware?: MiddlewareAttachments[];
|
|
141
|
+
context?: () => TContext;
|
|
142
|
+
/**
|
|
143
|
+
* This is optional and used from an index resource to get the correct caller.
|
|
144
|
+
*/
|
|
145
|
+
[symbolFilePath]?: string;
|
|
146
|
+
/**
|
|
147
|
+
* This is used internally when creating index resources.
|
|
148
|
+
*/
|
|
149
|
+
[symbolIndexResource]?: boolean;
|
|
119
150
|
}
|
|
120
|
-
export interface IResource<TConfig = void, TValue = any, TDependencies extends DependencyMapType = any> extends IResourceDefinition<TConfig, TValue, TDependencies> {
|
|
121
|
-
|
|
151
|
+
export interface IResource<TConfig = void, TValue = any, TDependencies extends DependencyMapType = any, TContext = any> extends IResourceDefinition<TConfig, TValue, TDependencies, TContext> {
|
|
152
|
+
id: string | symbol;
|
|
122
153
|
with(config: TConfig): IResourceWithConfig<TConfig, TValue, TDependencies>;
|
|
123
154
|
register: Array<RegisterableItems> | ((config: TConfig) => Array<RegisterableItems>);
|
|
124
155
|
/**
|
|
125
156
|
* These events are automatically populated after the task has been defined.
|
|
126
157
|
*/
|
|
127
158
|
events: {
|
|
128
|
-
beforeInit:
|
|
129
|
-
afterInit:
|
|
130
|
-
onError:
|
|
159
|
+
beforeInit: IEvent<BeforeInitEventPayload<TConfig>>;
|
|
160
|
+
afterInit: IEvent<AfterInitEventPayload<TConfig, TValue>>;
|
|
161
|
+
onError: IEvent<OnErrorEventPayload>;
|
|
131
162
|
};
|
|
132
163
|
overrides: Array<IResource | ITask | IMiddleware | IResourceWithConfig>;
|
|
133
|
-
middleware:
|
|
164
|
+
middleware: MiddlewareAttachments[];
|
|
134
165
|
}
|
|
135
166
|
export interface IResourceWithConfig<TConfig = any, TValue = any, TDependencies extends DependencyMapType = any> {
|
|
136
167
|
id: string;
|
|
137
168
|
resource: IResource<TConfig, TValue, TDependencies>;
|
|
138
169
|
config: TConfig;
|
|
139
170
|
}
|
|
140
|
-
export
|
|
141
|
-
|
|
171
|
+
export type EventHandlerType<T = any> = (event: IEventEmission<T>) => any | Promise<any>;
|
|
172
|
+
export interface IEventDefinition<TPayload = void> {
|
|
173
|
+
id?: string | symbol;
|
|
174
|
+
meta?: IEventMeta;
|
|
175
|
+
}
|
|
176
|
+
export interface IEvent<TPayload = any> extends IEventDefinition<TPayload> {
|
|
177
|
+
id: string | symbol;
|
|
178
|
+
/**
|
|
179
|
+
* We use this event to discriminate between resources with just 'id' and 'events' as they collide. This is a workaround, should be redone using classes and instanceof.
|
|
180
|
+
*/
|
|
181
|
+
[symbolEvent]: true;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* This represents the object that is passed to event handlers
|
|
185
|
+
*/
|
|
186
|
+
export interface IEventEmission<TPayload = any> {
|
|
187
|
+
/**
|
|
188
|
+
* The ID of the event. This is the same as the event's ID.
|
|
189
|
+
* This is useful for global event listeners.
|
|
190
|
+
*/
|
|
191
|
+
id: string | symbol;
|
|
142
192
|
/**
|
|
143
193
|
* The data that the event carries. It can be anything.
|
|
144
194
|
*/
|
|
@@ -150,54 +200,40 @@ export interface IEvent<TPayload = any> {
|
|
|
150
200
|
/**
|
|
151
201
|
* The source of the event. This can be useful for debugging.
|
|
152
202
|
*/
|
|
153
|
-
source: string;
|
|
154
|
-
}
|
|
155
|
-
export type EventHandlerType<T = any> = (event: IEvent<T>) => any | Promise<any>;
|
|
156
|
-
export interface IEventDefinitionConfig<TPayload = void> {
|
|
157
|
-
id: string;
|
|
158
|
-
meta?: IEventMeta;
|
|
203
|
+
source: string | symbol;
|
|
159
204
|
}
|
|
160
|
-
export interface
|
|
161
|
-
id
|
|
162
|
-
/**
|
|
163
|
-
* We use this event to discriminate between resources with just 'id' and 'events' as they collide. This is a workaround, should be redone using classes and instanceof.
|
|
164
|
-
*/
|
|
165
|
-
[symbolEvent]: true;
|
|
166
|
-
meta?: IEventMeta;
|
|
167
|
-
}
|
|
168
|
-
export interface IMiddlewareDefinition<TDependencies extends DependencyMapType = any> {
|
|
169
|
-
id: string;
|
|
205
|
+
export interface IMiddlewareDefinition<TConfig = any, TDependencies extends DependencyMapType = any> {
|
|
206
|
+
id?: string | symbol;
|
|
170
207
|
dependencies?: TDependencies | (() => TDependencies);
|
|
171
|
-
run: (input: IMiddlewareExecutionInput, dependencies: DependencyValuesType<TDependencies
|
|
208
|
+
run: (input: IMiddlewareExecutionInput, dependencies: DependencyValuesType<TDependencies>, config: TConfig) => Promise<any>;
|
|
172
209
|
meta?: IMiddlewareMeta;
|
|
173
210
|
}
|
|
174
|
-
export interface IMiddleware<TDependencies extends DependencyMapType = any> extends IMiddlewareDefinition<TDependencies> {
|
|
211
|
+
export interface IMiddleware<TConfig = any, TDependencies extends DependencyMapType = any> extends IMiddlewareDefinition<TConfig, TDependencies> {
|
|
212
|
+
[symbolMiddleware]: true;
|
|
213
|
+
[symbolMiddlewareConfigured]?: boolean;
|
|
214
|
+
[symbolMiddlewareEverywhereTasks]?: boolean;
|
|
215
|
+
[symbolMiddlewareEverywhereResources]?: boolean;
|
|
216
|
+
id: string | symbol;
|
|
175
217
|
dependencies: TDependencies | (() => TDependencies);
|
|
176
|
-
|
|
218
|
+
everywhere(config?: MiddlewareEverywhereOptions): IMiddleware<TConfig, TDependencies>;
|
|
219
|
+
config: TConfig;
|
|
220
|
+
with: (config: TConfig) => IMiddlewareConfigured<TConfig, TDependencies>;
|
|
221
|
+
}
|
|
222
|
+
export interface IMiddlewareConfigured<TConfig = any, TDependencies extends DependencyMapType = any> extends IMiddleware<TConfig, TDependencies> {
|
|
223
|
+
[symbolMiddlewareConfigured]: true;
|
|
177
224
|
}
|
|
178
225
|
export interface IMiddlewareDefinitionConfigured<C extends Record<string, any> = {}> {
|
|
179
226
|
middleware: IMiddleware<C>;
|
|
180
227
|
config?: C;
|
|
181
228
|
}
|
|
182
|
-
export interface IMiddlewareExecutionInput {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
* The higher the number, the higher the priority.
|
|
193
|
-
* We recommend using numbers between -1000 and 1000.
|
|
194
|
-
*/
|
|
195
|
-
order?: number;
|
|
196
|
-
/**
|
|
197
|
-
* These are hooks that run before any resource instantiation.
|
|
198
|
-
* @param event
|
|
199
|
-
*/
|
|
200
|
-
early?: B;
|
|
201
|
-
run: (event: IEvent<T>, dependencies: T extends true ? void : DependencyValuesType<D>) => Promise<void> | void;
|
|
229
|
+
export interface IMiddlewareExecutionInput<TTaskInput = any, TResourceConfig = any> {
|
|
230
|
+
task?: {
|
|
231
|
+
definition: ITask<TTaskInput>;
|
|
232
|
+
input: TTaskInput;
|
|
233
|
+
};
|
|
234
|
+
resource?: {
|
|
235
|
+
definition: IResource<TResourceConfig>;
|
|
236
|
+
config: TResourceConfig;
|
|
237
|
+
};
|
|
238
|
+
next: (taskInputOrResourceConfig?: TTaskInput | TResourceConfig) => Promise<any>;
|
|
202
239
|
}
|
|
203
|
-
export {};
|
package/dist/defs.js
CHANGED
|
@@ -1,20 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.symbols = exports.symbolFilePath = exports.symbolMiddlewareGlobal = exports.symbolMiddleware = exports.symbolEvent = exports.symbolResourceWithConfig = exports.symbolResource = exports.symbolTask = void 0;
|
|
3
|
+
exports.symbols = exports.symbolIndexResource = exports.symbolStore = exports.symbolDispose = exports.symbolFilePath = exports.symbolMiddlewareEverywhereResources = exports.symbolMiddlewareEverywhereTasks = exports.symbolMiddlewareGlobal = exports.symbolMiddlewareConfigured = exports.symbolMiddleware = exports.symbolEvent = exports.symbolResourceWithConfig = exports.symbolResource = exports.symbolTask = void 0;
|
|
4
4
|
exports.symbolTask = Symbol("runner.task");
|
|
5
5
|
exports.symbolResource = Symbol("runner.resource");
|
|
6
6
|
exports.symbolResourceWithConfig = Symbol("runner.resourceWithConfig");
|
|
7
7
|
exports.symbolEvent = Symbol("runner.event");
|
|
8
8
|
exports.symbolMiddleware = Symbol("runner.middleware");
|
|
9
|
+
exports.symbolMiddlewareConfigured = Symbol("runner.middlewareConfigured");
|
|
9
10
|
exports.symbolMiddlewareGlobal = Symbol("runner.middlewareGlobal");
|
|
11
|
+
exports.symbolMiddlewareEverywhereTasks = Symbol("runner.middlewareGlobalTasks");
|
|
12
|
+
exports.symbolMiddlewareEverywhereResources = Symbol("runner.middlewareGlobalResources");
|
|
10
13
|
exports.symbolFilePath = Symbol("runner.filePath");
|
|
14
|
+
exports.symbolDispose = Symbol("runner.dispose");
|
|
15
|
+
exports.symbolStore = Symbol("runner.store");
|
|
16
|
+
exports.symbolIndexResource = Symbol("runner.indexResource");
|
|
11
17
|
exports.symbols = {
|
|
12
18
|
task: exports.symbolTask,
|
|
13
19
|
resource: exports.symbolResource,
|
|
14
20
|
resourceWithConfig: exports.symbolResourceWithConfig,
|
|
21
|
+
indexResource: exports.symbolIndexResource,
|
|
15
22
|
event: exports.symbolEvent,
|
|
16
23
|
middleware: exports.symbolMiddleware,
|
|
17
|
-
|
|
24
|
+
middlewareEverywhereTasks: exports.symbolMiddlewareEverywhereTasks,
|
|
25
|
+
middlewareEverywhereResources: exports.symbolMiddlewareEverywhereResources,
|
|
18
26
|
filePath: exports.symbolFilePath,
|
|
27
|
+
dispose: exports.symbolDispose,
|
|
28
|
+
store: exports.symbolStore,
|
|
19
29
|
};
|
|
20
30
|
//# sourceMappingURL=defs.js.map
|
package/dist/defs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":";;;AAKa,QAAA,UAAU,GAAkB,MAAM,CAAC,aAAa,CAAC,CAAC;AAClD,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1D,QAAA,wBAAwB,GAAkB,MAAM,CAC3D,2BAA2B,CAC5B,CAAC;AACW,QAAA,WAAW,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AACpD,QAAA,gBAAgB,GAAkB,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAC9D,QAAA,0BAA0B,GAAkB,MAAM,CAC7D,6BAA6B,CAC9B,CAAC;AACW,QAAA,sBAAsB,GAAkB,MAAM,CACzD,yBAAyB,CAC1B,CAAC;AACW,QAAA,+BAA+B,GAAkB,MAAM,CAClE,8BAA8B,CAC/B,CAAC;AACW,QAAA,mCAAmC,GAAkB,MAAM,CACtE,kCAAkC,CACnC,CAAC;AAEW,QAAA,cAAc,GAAkB,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1D,QAAA,aAAa,GAAkB,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACxD,QAAA,WAAW,GAAkB,MAAM,CAAC,cAAc,CAAC,CAAC;AAEpD,QAAA,mBAAmB,GAAkB,MAAM,CACtD,sBAAsB,CACvB,CAAC;AAEW,QAAA,OAAO,GAAG;IACrB,IAAI,EAAE,kBAAU;IAChB,QAAQ,EAAE,sBAAc;IACxB,kBAAkB,EAAE,gCAAwB;IAC5C,aAAa,EAAE,2BAAmB;IAClC,KAAK,EAAE,mBAAW;IAClB,UAAU,EAAE,wBAAgB;IAC5B,yBAAyB,EAAE,uCAA+B;IAC1D,6BAA6B,EAAE,2CAAmC;IAClE,QAAQ,EAAE,sBAAc;IACxB,OAAO,EAAE,qBAAa;IACtB,KAAK,EAAE,mBAAW;CACnB,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export declare const Errors: {
|
|
2
|
-
duplicateRegistration: (type: string, id: string) => Error;
|
|
3
|
-
dependencyNotFound: (key: string) => Error;
|
|
2
|
+
duplicateRegistration: (type: string, id: string | symbol) => Error;
|
|
3
|
+
dependencyNotFound: (key: string | symbol) => Error;
|
|
4
4
|
unknownItemType: (item: any) => Error;
|
|
5
5
|
circularDependencies: (cycles: string[]) => Error;
|
|
6
|
-
eventNotFound: (id: string) => Error;
|
|
7
|
-
middlewareAlreadyGlobal: (id: string) => Error;
|
|
8
|
-
locked: (what: string) => Error;
|
|
6
|
+
eventNotFound: (id: string | symbol) => Error;
|
|
7
|
+
middlewareAlreadyGlobal: (id: string | symbol) => Error;
|
|
8
|
+
locked: (what: string | symbol) => Error;
|
|
9
9
|
storeAlreadyInitialized: () => Error;
|
|
10
10
|
};
|
package/dist/errors.js
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Errors = void 0;
|
|
4
4
|
exports.Errors = {
|
|
5
|
-
duplicateRegistration: (type, id) => new Error(`${type} "${id}" already registered`),
|
|
6
|
-
dependencyNotFound: (key) => new Error(`Dependency ${key} not found. Did you forget to register it through a resource?`),
|
|
5
|
+
duplicateRegistration: (type, id) => new Error(`${type} "${id.toString()}" already registered`),
|
|
6
|
+
dependencyNotFound: (key) => new Error(`Dependency ${key.toString()} not found. Did you forget to register it through a resource?`),
|
|
7
7
|
unknownItemType: (item) => new Error(`Unknown item type: ${item}`),
|
|
8
8
|
circularDependencies: (cycles) => new Error(`Circular dependencies detected: ${cycles.join(", ")}`),
|
|
9
|
-
eventNotFound: (id) => new Error(`Event "${id}" not found. Did you forget to register it?`),
|
|
10
|
-
middlewareAlreadyGlobal: (id) => new Error("Cannot call
|
|
11
|
-
|
|
9
|
+
eventNotFound: (id) => new Error(`Event "${id.toString()}" not found. Did you forget to register it?`),
|
|
10
|
+
middlewareAlreadyGlobal: (id) => new Error("Cannot call .everywhere() on an already global middleware: " +
|
|
11
|
+
id.toString),
|
|
12
|
+
locked: (what) => new Error(`Cannot modify the ${what.toString()} when it is locked.`),
|
|
12
13
|
storeAlreadyInitialized: () => new Error("Store already initialized. Cannot reinitialize."),
|
|
13
14
|
};
|
|
14
15
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEa,QAAA,MAAM,GAAG;IACpB,qBAAqB,EAAE,CAAC,IAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAEa,QAAA,MAAM,GAAG;IACpB,qBAAqB,EAAE,CAAC,IAAY,EAAE,EAAmB,EAAE,EAAE,CAC3D,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAE5D,kBAAkB,EAAE,CAAC,GAAoB,EAAE,EAAE,CAC3C,IAAI,KAAK,CACP,cAAc,GAAG,CAAC,QAAQ,EAAE,+DAA+D,CAC5F;IAEH,eAAe,EAAE,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAEvE,oBAAoB,EAAE,CAAC,MAAgB,EAAE,EAAE,CACzC,IAAI,KAAK,CAAC,mCAAmC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAEnE,aAAa,EAAE,CAAC,EAAmB,EAAE,EAAE,CACrC,IAAI,KAAK,CACP,UAAU,EAAE,CAAC,QAAQ,EAAE,6CAA6C,CACrE;IAEH,uBAAuB,EAAE,CAAC,EAAmB,EAAE,EAAE,CAC/C,IAAI,KAAK,CACP,6DAA6D;QAC3D,EAAE,CAAC,QAAQ,CACd;IAEH,MAAM,EAAE,CAAC,IAAqB,EAAE,EAAE,CAChC,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IAEtE,uBAAuB,EAAE,GAAG,EAAE,CAC5B,IAAI,KAAK,CAAC,iDAAiD,CAAC;CAC/D,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IEventMeta } from "./common.types";
|
|
2
|
+
import { symbolEvent } from "./symbols";
|
|
3
|
+
export interface IEvent<TPayload = any> {
|
|
4
|
+
id: string;
|
|
5
|
+
data: TPayload;
|
|
6
|
+
timestamp: Date;
|
|
7
|
+
source: string;
|
|
8
|
+
}
|
|
9
|
+
export type EventHandlerType<T = any> = (event: IEvent<T>) => any | Promise<any>;
|
|
10
|
+
export interface IEventDefinitionConfig<TPayload = void> {
|
|
11
|
+
id: string;
|
|
12
|
+
meta?: IEventMeta;
|
|
13
|
+
}
|
|
14
|
+
export interface IEventDefinition<TPayload = void> {
|
|
15
|
+
id: string;
|
|
16
|
+
[symbolEvent]: true;
|
|
17
|
+
meta?: IEventMeta;
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.types.js","sourceRoot":"","sources":["../src/event.types.ts"],"names":[],"mappings":";;AACA,uCAAwC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
export declare const userPackage: import("../defs").IRegistrator<(import("../defs").IEventDefinition<{
|
|
2
|
+
userId: string;
|
|
3
|
+
email: string;
|
|
4
|
+
}> | import("../defs").IResource<void, {
|
|
5
|
+
createUser: (email: string) => Promise<{
|
|
6
|
+
id: string;
|
|
7
|
+
email: string;
|
|
8
|
+
}>;
|
|
9
|
+
getUser: (id: string) => Promise<{
|
|
10
|
+
id: string;
|
|
11
|
+
email: string;
|
|
12
|
+
}>;
|
|
13
|
+
}, {}> | import("../defs").ITask<string, Promise<{
|
|
14
|
+
id: string;
|
|
15
|
+
email: string;
|
|
16
|
+
}>, {
|
|
17
|
+
userService: import("../defs").IResource<void, {
|
|
18
|
+
createUser: (email: string) => Promise<{
|
|
19
|
+
id: string;
|
|
20
|
+
email: string;
|
|
21
|
+
}>;
|
|
22
|
+
getUser: (id: string) => Promise<{
|
|
23
|
+
id: string;
|
|
24
|
+
email: string;
|
|
25
|
+
}>;
|
|
26
|
+
}, {}>;
|
|
27
|
+
userCreatedEvent: import("../defs").IEventDefinition<{
|
|
28
|
+
userId: string;
|
|
29
|
+
email: string;
|
|
30
|
+
}>;
|
|
31
|
+
}, undefined>)[]> & import("../defs").IResource<void, {
|
|
32
|
+
items: ({
|
|
33
|
+
createUser: (email: string) => Promise<{
|
|
34
|
+
id: string;
|
|
35
|
+
email: string;
|
|
36
|
+
}>;
|
|
37
|
+
getUser: (id: string) => Promise<{
|
|
38
|
+
id: string;
|
|
39
|
+
email: string;
|
|
40
|
+
}>;
|
|
41
|
+
} | ((args_0: string) => Promise<{
|
|
42
|
+
id: string;
|
|
43
|
+
email: string;
|
|
44
|
+
}>) | ((input: {
|
|
45
|
+
userId: string;
|
|
46
|
+
email: string;
|
|
47
|
+
}) => Promise<void>))[];
|
|
48
|
+
}, any>;
|
|
49
|
+
export declare const loggingPackage: import("../defs").IRegistrator<(import("../defs").IEventDefinition<{
|
|
50
|
+
level: string;
|
|
51
|
+
message: string;
|
|
52
|
+
}> | import("../defs").IMiddleware<{
|
|
53
|
+
logEvent: import("../defs").IEventDefinition<{
|
|
54
|
+
level: string;
|
|
55
|
+
message: string;
|
|
56
|
+
}>;
|
|
57
|
+
}> | import("../defs").IResource<void, {
|
|
58
|
+
info: (message: string) => Promise<void>;
|
|
59
|
+
error: (message: string) => Promise<void>;
|
|
60
|
+
}, {
|
|
61
|
+
logEvent: import("../defs").IEventDefinition<{
|
|
62
|
+
level: string;
|
|
63
|
+
message: string;
|
|
64
|
+
}>;
|
|
65
|
+
}>)[]> & import("../defs").IResource<void, {
|
|
66
|
+
items: ({
|
|
67
|
+
info: (message: string) => Promise<void>;
|
|
68
|
+
error: (message: string) => Promise<void>;
|
|
69
|
+
} | ((input: {
|
|
70
|
+
level: string;
|
|
71
|
+
message: string;
|
|
72
|
+
}) => Promise<void>))[];
|
|
73
|
+
}, any>;
|
|
74
|
+
export declare const emailPackage: import("../defs").IRegistrator<(import("../defs").IEventDefinition<{
|
|
75
|
+
to: string;
|
|
76
|
+
subject: string;
|
|
77
|
+
}> | import("../defs").IResource<void, {
|
|
78
|
+
sendEmail: (to: string, subject: string, body: string) => Promise<{
|
|
79
|
+
messageId: string;
|
|
80
|
+
}>;
|
|
81
|
+
}, {
|
|
82
|
+
emailSentEvent: import("../defs").IEventDefinition<{
|
|
83
|
+
to: string;
|
|
84
|
+
subject: string;
|
|
85
|
+
}>;
|
|
86
|
+
}> | import("../defs").ITask<undefined, Promise<{
|
|
87
|
+
messageId: string;
|
|
88
|
+
}>, {
|
|
89
|
+
emailService: import("../defs").IResource<void, {
|
|
90
|
+
sendEmail: (to: string, subject: string, body: string) => Promise<{
|
|
91
|
+
messageId: string;
|
|
92
|
+
}>;
|
|
93
|
+
}, {
|
|
94
|
+
emailSentEvent: import("../defs").IEventDefinition<{
|
|
95
|
+
to: string;
|
|
96
|
+
subject: string;
|
|
97
|
+
}>;
|
|
98
|
+
}>;
|
|
99
|
+
}, import("../defs").IEventDefinition<{
|
|
100
|
+
userId: string;
|
|
101
|
+
email: string;
|
|
102
|
+
}>>)[]> & import("../defs").IResource<void, {
|
|
103
|
+
items: ({
|
|
104
|
+
sendEmail: (to: string, subject: string, body: string) => Promise<{
|
|
105
|
+
messageId: string;
|
|
106
|
+
}>;
|
|
107
|
+
} | ((input: {
|
|
108
|
+
to: string;
|
|
109
|
+
subject: string;
|
|
110
|
+
}) => Promise<void>))[];
|
|
111
|
+
}, any>;
|
|
112
|
+
declare function demonstrateRegistrators(): Promise<{
|
|
113
|
+
createUser: (args_0: string) => Promise<{
|
|
114
|
+
id: string;
|
|
115
|
+
email: string;
|
|
116
|
+
}>;
|
|
117
|
+
logger: {
|
|
118
|
+
info: (message: string) => Promise<void>;
|
|
119
|
+
error: (message: string) => Promise<void>;
|
|
120
|
+
};
|
|
121
|
+
}>;
|
|
122
|
+
export { demonstrateRegistrators };
|