@mailwoman/core 2.0.6 → 2.2.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/out/api/APIClient.d.ts +57 -0
- package/out/api/APIClient.d.ts.map +1 -0
- package/out/api/APIClient.js +108 -0
- package/out/api/APIClient.js.map +1 -0
- package/out/api/headless.d.ts +17 -0
- package/out/api/headless.d.ts.map +1 -0
- package/out/api/headless.js +18 -0
- package/out/api/headless.js.map +1 -0
- package/out/api/index.d.ts +11 -0
- package/out/api/index.d.ts.map +1 -0
- package/out/api/index.js +11 -0
- package/out/api/index.js.map +1 -0
- package/out/api/responses.d.ts +48 -0
- package/out/api/responses.d.ts.map +1 -0
- package/out/api/responses.js +68 -0
- package/out/api/responses.js.map +1 -0
- package/out/collections.d.ts +66 -0
- package/out/collections.d.ts.map +1 -0
- package/out/collections.js +97 -0
- package/out/collections.js.map +1 -0
- package/out/db/schema.d.ts +21 -0
- package/out/db/schema.d.ts.map +1 -0
- package/out/db/schema.js +16 -0
- package/out/db/schema.js.map +1 -0
- package/out/decoder/build-tree.d.ts +14 -1
- package/out/decoder/build-tree.d.ts.map +1 -1
- package/out/decoder/build-tree.js +37 -9
- package/out/decoder/build-tree.js.map +1 -1
- package/out/decoder/proposals-to-tree.d.ts.map +1 -1
- package/out/decoder/proposals-to-tree.js +2 -0
- package/out/decoder/proposals-to-tree.js.map +1 -1
- package/out/decoder/serialize-xml.d.ts +22 -1
- package/out/decoder/serialize-xml.d.ts.map +1 -1
- package/out/decoder/serialize-xml.js +64 -4
- package/out/decoder/serialize-xml.js.map +1 -1
- package/out/decoder/types.d.ts +45 -0
- package/out/decoder/types.d.ts.map +1 -1
- package/out/decoder/types.js +6 -0
- package/out/decoder/types.js.map +1 -1
- package/out/errors/index.d.ts +9 -0
- package/out/errors/index.d.ts.map +1 -0
- package/out/errors/index.js +9 -0
- package/out/errors/index.js.map +1 -0
- package/out/errors/schema.d.ts +69 -0
- package/out/errors/schema.d.ts.map +1 -0
- package/out/errors/schema.js +102 -0
- package/out/errors/schema.js.map +1 -0
- package/out/identifiers.d.ts +18 -0
- package/out/identifiers.d.ts.map +1 -0
- package/out/identifiers.js +49 -0
- package/out/identifiers.js.map +1 -0
- package/out/index.d.ts +3 -0
- package/out/index.d.ts.map +1 -1
- package/out/index.js +3 -4
- package/out/index.js.map +1 -1
- package/out/kysley/adapter.d.ts +13 -0
- package/out/kysley/adapter.d.ts.map +1 -0
- package/out/kysley/adapter.js +25 -0
- package/out/kysley/adapter.js.map +1 -0
- package/out/kysley/client.d.ts +16 -0
- package/out/kysley/client.d.ts.map +1 -0
- package/out/kysley/client.js +22 -0
- package/out/kysley/client.js.map +1 -0
- package/out/kysley/dialect-config.d.ts +27 -0
- package/out/kysley/dialect-config.d.ts.map +1 -0
- package/out/kysley/dialect-config.js +7 -0
- package/out/kysley/dialect-config.js.map +1 -0
- package/out/kysley/dialect.d.ts +39 -0
- package/out/kysley/dialect.d.ts.map +1 -0
- package/out/kysley/dialect.js +49 -0
- package/out/kysley/dialect.js.map +1 -0
- package/out/kysley/driver.d.ts +22 -0
- package/out/kysley/driver.d.ts.map +1 -0
- package/out/kysley/driver.js +114 -0
- package/out/kysley/driver.js.map +1 -0
- package/out/lifecycle/ServiceSymbol.d.ts +59 -0
- package/out/lifecycle/ServiceSymbol.d.ts.map +1 -0
- package/out/lifecycle/ServiceSymbol.js +62 -0
- package/out/lifecycle/ServiceSymbol.js.map +1 -0
- package/out/lifecycle/index.d.ts +11 -0
- package/out/lifecycle/index.d.ts.map +1 -0
- package/out/lifecycle/index.js +11 -0
- package/out/lifecycle/index.js.map +1 -0
- package/out/lifecycle/lru-cache.d.ts +22 -0
- package/out/lifecycle/lru-cache.d.ts.map +1 -0
- package/out/lifecycle/lru-cache.js +31 -0
- package/out/lifecycle/lru-cache.js.map +1 -0
- package/out/lifecycle/services.d.ts +145 -0
- package/out/lifecycle/services.d.ts.map +1 -0
- package/out/lifecycle/services.js +190 -0
- package/out/lifecycle/services.js.map +1 -0
- package/out/logging/index.d.ts +7 -0
- package/out/logging/index.d.ts.map +1 -0
- package/out/logging/index.js +7 -0
- package/out/logging/index.js.map +1 -0
- package/out/logging/shared.d.ts +60 -0
- package/out/logging/shared.d.ts.map +1 -0
- package/out/logging/shared.js +100 -0
- package/out/logging/shared.js.map +1 -0
- package/out/logging/tables.d.ts +7 -0
- package/out/logging/tables.d.ts.map +1 -0
- package/out/logging/tables.js +75 -0
- package/out/logging/tables.js.map +1 -0
- package/out/objects.d.ts +96 -0
- package/out/objects.d.ts.map +1 -0
- package/out/objects.js +96 -0
- package/out/objects.js.map +1 -0
- package/out/parser/proposal-pipeline.d.ts.map +1 -1
- package/out/parser/proposal-pipeline.js +0 -1
- package/out/parser/proposal-pipeline.js.map +1 -1
- package/out/pipeline/index.d.ts +14 -0
- package/out/pipeline/index.d.ts.map +1 -0
- package/out/pipeline/index.js +11 -0
- package/out/pipeline/index.js.map +1 -0
- package/out/pipeline/reconcile.d.ts +135 -0
- package/out/pipeline/reconcile.d.ts.map +1 -0
- package/out/pipeline/reconcile.js +355 -0
- package/out/pipeline/reconcile.js.map +1 -0
- package/out/pipeline/runtime-pipeline.d.ts +29 -0
- package/out/pipeline/runtime-pipeline.d.ts.map +1 -0
- package/out/pipeline/runtime-pipeline.js +288 -0
- package/out/pipeline/runtime-pipeline.js.map +1 -0
- package/out/pipeline/span-logit-aggregation.d.ts +57 -0
- package/out/pipeline/span-logit-aggregation.d.ts.map +1 -0
- package/out/pipeline/span-logit-aggregation.js +105 -0
- package/out/pipeline/span-logit-aggregation.js.map +1 -0
- package/out/pipeline/types.d.ts +189 -0
- package/out/pipeline/types.d.ts.map +1 -0
- package/out/pipeline/types.js +16 -0
- package/out/pipeline/types.js.map +1 -0
- package/out/resolver/index.d.ts +9 -0
- package/out/resolver/index.d.ts.map +1 -0
- package/out/resolver/index.js +8 -0
- package/out/resolver/index.js.map +1 -0
- package/out/resolver/resolve.d.ts +21 -0
- package/out/resolver/resolve.d.ts.map +1 -0
- package/out/resolver/resolve.js +118 -0
- package/out/resolver/resolve.js.map +1 -0
- package/out/resolver/types.d.ts +118 -0
- package/out/resolver/types.d.ts.map +1 -0
- package/out/resolver/types.js +24 -0
- package/out/resolver/types.js.map +1 -0
- package/out/resources/git.d.ts +1 -1
- package/out/resources/index.d.ts +0 -1
- package/out/resources/index.d.ts.map +1 -1
- package/out/resources/index.js +0 -1
- package/out/resources/index.js.map +1 -1
- package/out/resources/whosonfirst/DataSourceCache.d.ts +0 -1
- package/out/resources/whosonfirst/DataSourceCache.d.ts.map +1 -1
- package/out/resources/whosonfirst/DataSourceCache.js +0 -1
- package/out/resources/whosonfirst/DataSourceCache.js.map +1 -1
- package/out/resources/whosonfirst/PlacetypeDataSource.d.ts +2 -2
- package/out/resources/whosonfirst/PlacetypeDataSource.d.ts.map +1 -1
- package/out/resources/whosonfirst/PlacetypeDataSource.js +9 -6
- package/out/resources/whosonfirst/PlacetypeDataSource.js.map +1 -1
- package/out/routing/index.d.ts +67 -0
- package/out/routing/index.d.ts.map +1 -0
- package/out/routing/index.js +114 -0
- package/out/routing/index.js.map +1 -0
- package/out/sets.d.ts +2 -0
- package/out/sets.d.ts.map +1 -0
- package/out/sets.js +2 -0
- package/out/sets.js.map +1 -0
- package/package.json +28 -2
- package/out/resources/db/index.d.ts +0 -57
- package/out/resources/db/index.d.ts.map +0 -1
- package/out/resources/db/index.js +0 -57
- package/out/resources/db/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lifecycle/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* LRU cache utilities.
|
|
7
|
+
*/
|
|
8
|
+
import { LRUCache } from "lru-cache";
|
|
9
|
+
export interface AsyncDisposableLRUCacheOptions {
|
|
10
|
+
max: number;
|
|
11
|
+
displayName?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* An LRU cache that automatically disposes of its values when they are evicted.
|
|
15
|
+
*/
|
|
16
|
+
export declare class AsyncDisposableLRUCache<K extends object, V extends AsyncDisposable> extends LRUCache<K, V> implements AsyncDisposable {
|
|
17
|
+
readonly displayName: string;
|
|
18
|
+
constructor({ max, displayName }: AsyncDisposableLRUCacheOptions);
|
|
19
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
20
|
+
toString(): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=lru-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-cache.d.ts","sourceRoot":"","sources":["../../lifecycle/lru-cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,WAAW,8BAA8B;IAC9C,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,qBAAa,uBAAuB,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,eAAe,CAC/E,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC,CACrB,YAAW,eAAe;IAE1B,SAAgB,WAAW,EAAE,MAAM,CAAA;gBAEvB,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,8BAA8B;IASnD,CAAC,MAAM,CAAC,YAAY,CAAC;IAOlB,QAAQ;CAGxB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* LRU cache utilities.
|
|
7
|
+
*/
|
|
8
|
+
import { LRUCache } from "lru-cache";
|
|
9
|
+
/**
|
|
10
|
+
* An LRU cache that automatically disposes of its values when they are evicted.
|
|
11
|
+
*/
|
|
12
|
+
export class AsyncDisposableLRUCache extends LRUCache {
|
|
13
|
+
displayName;
|
|
14
|
+
constructor({ max, displayName }) {
|
|
15
|
+
super({
|
|
16
|
+
max,
|
|
17
|
+
dispose: (value) => value[Symbol.asyncDispose](),
|
|
18
|
+
});
|
|
19
|
+
this.displayName = displayName ?? "cache";
|
|
20
|
+
}
|
|
21
|
+
async [Symbol.asyncDispose]() {
|
|
22
|
+
for (const [key, value] of this.entries()) {
|
|
23
|
+
await value[Symbol.asyncDispose]();
|
|
24
|
+
this.delete(key);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
toString() {
|
|
28
|
+
return `Async LRU ${this.displayName}`;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=lru-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lru-cache.js","sourceRoot":"","sources":["../../lifecycle/lru-cache.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAOpC;;GAEG;AACH,MAAM,OAAO,uBACZ,SAAQ,QAAc;IAGN,WAAW,CAAQ;IAEnC,YAAY,EAAE,GAAG,EAAE,WAAW,EAAkC;QAC/D,KAAK,CAAC;YACL,GAAG;YACH,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;SAChD,CAAC,CAAA;QAEF,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,OAAO,CAAA;IAC1C,CAAC;IAEM,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACjC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,MAAM,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAA;YAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC;IACF,CAAC;IAEe,QAAQ;QACvB,OAAO,aAAa,IAAI,CAAC,WAAW,EAAE,CAAA;IACvC,CAAC;CACD"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Utilities for creating branded nominal types.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Type definition for a class which implements the AsyncDisposable interface.
|
|
10
|
+
*
|
|
11
|
+
* @category Utilities
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export type ServiceConstructor<T> = new (...args: any[]) => T & AsyncDisposable;
|
|
15
|
+
/**
|
|
16
|
+
* Type-predicate to determine if a given input is a ServiceConstructor, i.e. a function which is a
|
|
17
|
+
* constructor for a class which implements the AsyncDisposable interface.
|
|
18
|
+
*/
|
|
19
|
+
export declare function isServiceConstructor<T>(input: unknown): input is ServiceConstructor<T>;
|
|
20
|
+
/**
|
|
21
|
+
* Stateful context for a service registry.
|
|
22
|
+
*
|
|
23
|
+
* This is used to provide a context for services during resolution.
|
|
24
|
+
*/
|
|
25
|
+
export interface ServiceRegistryContext {
|
|
26
|
+
abortController: AbortController;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Type definition for a function which returns an instance which implements the AsyncDisposable
|
|
30
|
+
* interface.
|
|
31
|
+
*
|
|
32
|
+
* @category Utilities
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
export type ServiceCallback<T extends AsyncDisposable> = {
|
|
36
|
+
(context: ServiceRegistryContext): Promise<T> | T;
|
|
37
|
+
};
|
|
38
|
+
export type ServiceResolver<T extends AsyncDisposable = AsyncDisposable> = T | ServiceCallback<T> | ServiceConstructor<T>;
|
|
39
|
+
declare const kInstance: unique symbol;
|
|
40
|
+
declare const kResolver: unique symbol;
|
|
41
|
+
declare const kRegistryMap: unique symbol;
|
|
42
|
+
/**
|
|
43
|
+
* Given a service which may not yet be resolved, intercept any method calls and resolve the service
|
|
44
|
+
* before invoking the method.
|
|
45
|
+
*
|
|
46
|
+
* @category Services
|
|
47
|
+
*/
|
|
48
|
+
export type ServiceMethodResolver<T> = {
|
|
49
|
+
[K in keyof T]: T[K] extends (...args: infer A) => infer R ? (...args: A) => Promise<Awaited<R>> : T[K];
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Promise-like wrapper for asynchronous services.
|
|
53
|
+
*
|
|
54
|
+
* @see {@linkcode ServiceRepository} for usage.
|
|
55
|
+
*/
|
|
56
|
+
export declare class Service<T extends AsyncDisposable = AsyncDisposable> implements PromiseLike<T>, AsyncDisposable {
|
|
57
|
+
/**
|
|
58
|
+
* Instance of the service.
|
|
59
|
+
*
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
[kInstance]: T | null;
|
|
63
|
+
/**
|
|
64
|
+
* Resolver for the service.
|
|
65
|
+
*
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
[kResolver]?: ServiceResolver<T>;
|
|
69
|
+
/**
|
|
70
|
+
* Context for the parent service registry.
|
|
71
|
+
*/
|
|
72
|
+
readonly context: ServiceRegistryContext;
|
|
73
|
+
protected constructor(resolver: ServiceResolver<T>);
|
|
74
|
+
/**
|
|
75
|
+
* Given an instance of a service, attach it to the resolver.
|
|
76
|
+
*
|
|
77
|
+
* This can be used to attach a service that was created outside of the resolver, such as when a
|
|
78
|
+
* resolver is defined from a TypeScript interface.
|
|
79
|
+
*
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
attach(service: T): void;
|
|
83
|
+
/**
|
|
84
|
+
* Resolve the service instance.
|
|
85
|
+
*
|
|
86
|
+
* This method is called implicitly when the service is awaited.
|
|
87
|
+
*/
|
|
88
|
+
protected resolve(): Promise<T>;
|
|
89
|
+
/**
|
|
90
|
+
* Resolve the service instance. Called implicitly when the service is awaited.
|
|
91
|
+
*/
|
|
92
|
+
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined): Promise<TResult1 | TResult2>;
|
|
93
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Service repository for managing asynchronous services.
|
|
97
|
+
*
|
|
98
|
+
* @singleton
|
|
99
|
+
*/
|
|
100
|
+
export declare class ServiceRepository extends Service<AsyncDisposable> {
|
|
101
|
+
static readonly [kRegistryMap]: Map<any, Service<any>>;
|
|
102
|
+
/**
|
|
103
|
+
* Abort controller for the service repository.
|
|
104
|
+
*/
|
|
105
|
+
static readonly abortController: AbortController;
|
|
106
|
+
/**
|
|
107
|
+
* Inspect the current state of the service registry.
|
|
108
|
+
*/
|
|
109
|
+
static inspect(): Service<any>[];
|
|
110
|
+
/**
|
|
111
|
+
* Dispose of all services in the registry.
|
|
112
|
+
*/
|
|
113
|
+
static [Symbol.asyncDispose](): Promise<void>;
|
|
114
|
+
/**
|
|
115
|
+
* Dispose of all services in the registry.
|
|
116
|
+
*/
|
|
117
|
+
static dispose(): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Register a pre-initialized service with the service repository.
|
|
120
|
+
*
|
|
121
|
+
* @param service - An instance of a service.
|
|
122
|
+
*/
|
|
123
|
+
static register<T extends AsyncDisposable>(service: T): Service<T> & ServiceMethodResolver<T>;
|
|
124
|
+
/**
|
|
125
|
+
* Register a service resolver with the service repository.
|
|
126
|
+
*
|
|
127
|
+
* @param serviceCallback - A callback which returns a service instance.
|
|
128
|
+
*/
|
|
129
|
+
static register<T extends AsyncDisposable>(serviceCallback: ServiceCallback<T>): Service<T> & ServiceMethodResolver<T>;
|
|
130
|
+
/**
|
|
131
|
+
* Register a service constructor with the service repository.
|
|
132
|
+
*
|
|
133
|
+
* @param ServiceConstructor - A constructor which returns a service instance.
|
|
134
|
+
*/
|
|
135
|
+
static register<T extends AsyncDisposable>(ServiceConstructor: ServiceConstructor<T>): Service<T> & ServiceMethodResolver<T>;
|
|
136
|
+
/**
|
|
137
|
+
* Register a service with the service repository.
|
|
138
|
+
*
|
|
139
|
+
* @param resolver - A service resolver, instance, or constructor.
|
|
140
|
+
*/
|
|
141
|
+
static register<T extends AsyncDisposable>(resolver: ServiceResolver<T>): Service<T> & ServiceMethodResolver<T>;
|
|
142
|
+
constructor();
|
|
143
|
+
}
|
|
144
|
+
export {};
|
|
145
|
+
//# sourceMappingURL=services.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../lifecycle/services.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* Utilities for creating branded nominal types.
|
|
7
|
+
*/
|
|
8
|
+
import { ResourceError } from "../errors/schema.js";
|
|
9
|
+
import { ConsoleLogger } from "../logging/index.js";
|
|
10
|
+
import { ServiceSymbol } from "./ServiceSymbol.js";
|
|
11
|
+
/**
|
|
12
|
+
* Type-predicate to determine if a given input is a ServiceConstructor, i.e. a function which is a
|
|
13
|
+
* constructor for a class which implements the AsyncDisposable interface.
|
|
14
|
+
*/
|
|
15
|
+
export function isServiceConstructor(input) {
|
|
16
|
+
if (typeof input !== "function")
|
|
17
|
+
return false;
|
|
18
|
+
if (!input.prototype || typeof input.prototype !== "object")
|
|
19
|
+
return false;
|
|
20
|
+
return Object.hasOwn(input.prototype, Symbol.asyncDispose) || Object.hasOwn(input.prototype, ServiceSymbol.asyncInit);
|
|
21
|
+
}
|
|
22
|
+
const kInstance = Symbol.for("ServiceInstance");
|
|
23
|
+
const kResolver = Symbol.for("ServiceResolver");
|
|
24
|
+
const kRegistryMap = Symbol.for("ServiceRepositoryMap");
|
|
25
|
+
/**
|
|
26
|
+
* Promise-like wrapper for asynchronous services.
|
|
27
|
+
*
|
|
28
|
+
* @see {@linkcode ServiceRepository} for usage.
|
|
29
|
+
*/
|
|
30
|
+
export class Service {
|
|
31
|
+
/**
|
|
32
|
+
* Instance of the service.
|
|
33
|
+
*
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
[kInstance] = null;
|
|
37
|
+
/**
|
|
38
|
+
* Resolver for the service.
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
[kResolver];
|
|
43
|
+
/**
|
|
44
|
+
* Context for the parent service registry.
|
|
45
|
+
*/
|
|
46
|
+
context;
|
|
47
|
+
constructor(resolver) {
|
|
48
|
+
this[kResolver] = resolver;
|
|
49
|
+
this.context = {
|
|
50
|
+
abortController: ServiceRepository.abortController,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Given an instance of a service, attach it to the resolver.
|
|
55
|
+
*
|
|
56
|
+
* This can be used to attach a service that was created outside of the resolver, such as when a
|
|
57
|
+
* resolver is defined from a TypeScript interface.
|
|
58
|
+
*
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
attach(service) {
|
|
62
|
+
this[kInstance] = service;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve the service instance.
|
|
66
|
+
*
|
|
67
|
+
* This method is called implicitly when the service is awaited.
|
|
68
|
+
*/
|
|
69
|
+
async resolve() {
|
|
70
|
+
if (this[kInstance])
|
|
71
|
+
return this[kInstance];
|
|
72
|
+
if (!this[kResolver])
|
|
73
|
+
throw ResourceError.from(500, "Cannot resolve service without a resolver. Did you mean to call `attach` before calling `resolve`?");
|
|
74
|
+
if (typeof this[kResolver] === "function") {
|
|
75
|
+
if (isServiceConstructor(this[kResolver])) {
|
|
76
|
+
this[kInstance] = new this[kResolver]();
|
|
77
|
+
return this[kInstance];
|
|
78
|
+
}
|
|
79
|
+
const nextInstance = await this[kResolver](this.context);
|
|
80
|
+
if (ServiceSymbol.isAsyncInitializable(nextInstance)) {
|
|
81
|
+
await nextInstance[ServiceSymbol.asyncInit]();
|
|
82
|
+
}
|
|
83
|
+
this[kInstance] = nextInstance;
|
|
84
|
+
return this[kInstance];
|
|
85
|
+
}
|
|
86
|
+
if (typeof this[kResolver] === "object") {
|
|
87
|
+
const nextInstance = this[kResolver];
|
|
88
|
+
if (ServiceSymbol.isAsyncInitializable(nextInstance)) {
|
|
89
|
+
await nextInstance[ServiceSymbol.asyncInit]();
|
|
90
|
+
}
|
|
91
|
+
this[kInstance] = nextInstance;
|
|
92
|
+
return this[kInstance];
|
|
93
|
+
}
|
|
94
|
+
throw ResourceError.from(500, `Invalid resolver type. ${this[kResolver]}`);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Resolve the service instance. Called implicitly when the service is awaited.
|
|
98
|
+
*/
|
|
99
|
+
then(onfulfilled, onrejected) {
|
|
100
|
+
return this.resolve()
|
|
101
|
+
.then((instance) => {
|
|
102
|
+
if (!this[kResolver]) {
|
|
103
|
+
throw ResourceError.from(500, "Service resolver was disposed before service was resolved.");
|
|
104
|
+
}
|
|
105
|
+
ServiceRepository[kRegistryMap].set(this[kResolver], this);
|
|
106
|
+
return instance;
|
|
107
|
+
})
|
|
108
|
+
.then(onfulfilled, onrejected);
|
|
109
|
+
}
|
|
110
|
+
async [Symbol.asyncDispose]() {
|
|
111
|
+
if (!this[kInstance]) {
|
|
112
|
+
ConsoleLogger.warn("Attempted to dispose a service resolver without a service!");
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (typeof this[kInstance][Symbol.asyncDispose] !== "function") {
|
|
116
|
+
ConsoleLogger.warn("Attempted to dispose a service resolver without a disposable service!");
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
await this[kInstance][Symbol.asyncDispose]();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Service repository for managing asynchronous services.
|
|
124
|
+
*
|
|
125
|
+
* @singleton
|
|
126
|
+
*/
|
|
127
|
+
export class ServiceRepository extends Service {
|
|
128
|
+
static [kRegistryMap] = new Map();
|
|
129
|
+
/**
|
|
130
|
+
* Abort controller for the service repository.
|
|
131
|
+
*/
|
|
132
|
+
static abortController = new AbortController();
|
|
133
|
+
/**
|
|
134
|
+
* Inspect the current state of the service registry.
|
|
135
|
+
*/
|
|
136
|
+
static inspect() {
|
|
137
|
+
const services = [...this[kRegistryMap].values()].reverse();
|
|
138
|
+
return services;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Dispose of all services in the registry.
|
|
142
|
+
*/
|
|
143
|
+
static async [Symbol.asyncDispose]() {
|
|
144
|
+
const services = ServiceRepository.inspect();
|
|
145
|
+
ConsoleLogger.debug(`🚮 Disposing ${services.length} services...`);
|
|
146
|
+
for (const service of services) {
|
|
147
|
+
const label = String(service[kInstance]);
|
|
148
|
+
ConsoleLogger.debug(`[${label}] Disposing...`);
|
|
149
|
+
const marked = ServiceSymbol.markAsDisposed(service[kInstance]);
|
|
150
|
+
if (!marked)
|
|
151
|
+
continue;
|
|
152
|
+
await service[Symbol.asyncDispose]();
|
|
153
|
+
}
|
|
154
|
+
this[kRegistryMap].clear();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Dispose of all services in the registry.
|
|
158
|
+
*/
|
|
159
|
+
static dispose() {
|
|
160
|
+
return this[Symbol.asyncDispose]();
|
|
161
|
+
}
|
|
162
|
+
static register(resolver) {
|
|
163
|
+
const service = new Service(resolver);
|
|
164
|
+
const serviceMethodResolver = new Proxy(service, {
|
|
165
|
+
get(target, prop) {
|
|
166
|
+
if (prop in target) {
|
|
167
|
+
return target[prop];
|
|
168
|
+
}
|
|
169
|
+
return async (...args) => {
|
|
170
|
+
const instance = (await target);
|
|
171
|
+
if (typeof instance[prop] === "function") {
|
|
172
|
+
return instance[prop](...args);
|
|
173
|
+
}
|
|
174
|
+
return instance[prop];
|
|
175
|
+
};
|
|
176
|
+
},
|
|
177
|
+
[Symbol.for("nodejs.util.inspect.custom")]() {
|
|
178
|
+
return "ServiceMethodResolver";
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
return serviceMethodResolver;
|
|
182
|
+
}
|
|
183
|
+
constructor() {
|
|
184
|
+
if (new.target === ServiceRepository) {
|
|
185
|
+
throw new TypeError("Cannot instantiate static class `ServiceRepository`.");
|
|
186
|
+
}
|
|
187
|
+
super(null);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=services.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../lifecycle/services.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../logging/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../logging/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,aAAa,CAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import type { BaseLogger as PinoBaseLogger, Level as PinoLevel, LogFn as PinoLogFn, Logger as PinoLogger } from "pino";
|
|
7
|
+
export type Logger = PinoLogger;
|
|
8
|
+
export type Level = PinoLevel;
|
|
9
|
+
export type LogFn = PinoLogFn;
|
|
10
|
+
export type BaseLogger = Pick<PinoBaseLogger, Exclude<Level, "fatal">>;
|
|
11
|
+
/**
|
|
12
|
+
* Labels log levels in the browser console.
|
|
13
|
+
*/
|
|
14
|
+
export declare const LogLevelLabel: {
|
|
15
|
+
readonly info: "[INFO]";
|
|
16
|
+
readonly warn: "[WARN]";
|
|
17
|
+
readonly error: "[ERROR]";
|
|
18
|
+
readonly debug: "[DEBUG]";
|
|
19
|
+
readonly trace: "[TRACE]";
|
|
20
|
+
readonly fatal: "[FATAL]";
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Predefined log levels.
|
|
24
|
+
*/
|
|
25
|
+
export declare const LogLevels: Level[];
|
|
26
|
+
type LoggerFactory = (prefix?: string | null, ...args: string[]) => Logger;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a logger with the given prefix.
|
|
29
|
+
*/
|
|
30
|
+
export declare const createConsoleLogger: LoggerFactory;
|
|
31
|
+
export type BaseConsoleLogger = Record<Level, LogFn>;
|
|
32
|
+
export type IRuntimeLogger = BaseConsoleLogger;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a logger with the given prefix.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createLogger(prefix?: string, ...args: string[][]): Logger;
|
|
37
|
+
/**
|
|
38
|
+
* A singleton logger instance for the browser.
|
|
39
|
+
*
|
|
40
|
+
* ```js
|
|
41
|
+
* import { ConsoleLogger } from "#logger/browser";
|
|
42
|
+
*
|
|
43
|
+
* ConsoleLogger.info("Hello, world!");
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @implements {IRuntimeLogger}
|
|
47
|
+
*/
|
|
48
|
+
export declare class ConsoleLogger {
|
|
49
|
+
static info: typeof console.info;
|
|
50
|
+
static warn: typeof console.warn;
|
|
51
|
+
static error: typeof console.error;
|
|
52
|
+
static debug: typeof console.debug;
|
|
53
|
+
static trace: typeof console.trace;
|
|
54
|
+
/**
|
|
55
|
+
* Creates a logger with the given prefix.
|
|
56
|
+
*/
|
|
57
|
+
static prefix(logPrefix: string): Logger;
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../logging/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAA;AAEtH,MAAM,MAAM,MAAM,GAAG,UAAU,CAAA;AAE/B,MAAM,MAAM,KAAK,GAAG,SAAS,CAAA;AAE7B,MAAM,MAAM,KAAK,GAAG,SAAS,CAAA;AAE7B,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;AAItE;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;CAOgB,CAAA;AAE1C;;GAEG;AACH,eAAO,MAAM,SAAS,EAAiC,KAAK,EAAE,CAAA;AAE9D,KAAK,aAAa,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAA;AAgB1E;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,aAkBjC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAEpD,MAAM,MAAM,cAAc,GAAG,iBAAiB,CAAA;AAM9C;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CA6BzE;AAED;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACzB,MAAM,CAAC,IAAI,EAAE,OAAO,OAAO,CAAC,IAAI,CAAA;IAChC,MAAM,CAAC,IAAI,EAAE,OAAO,OAAO,CAAC,IAAI,CAAA;IAChC,MAAM,CAAC,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,CAAA;IAClC,MAAM,CAAC,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,CAAA;IAClC,MAAM,CAAC,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,CAAA;IAElC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM;CAG/B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
//#region Constants
|
|
7
|
+
/**
|
|
8
|
+
* Labels log levels in the browser console.
|
|
9
|
+
*/
|
|
10
|
+
export const LogLevelLabel = {
|
|
11
|
+
info: "[INFO]",
|
|
12
|
+
warn: "[WARN]",
|
|
13
|
+
error: "[ERROR]",
|
|
14
|
+
debug: "[DEBUG]",
|
|
15
|
+
trace: "[TRACE]",
|
|
16
|
+
fatal: "[FATAL]",
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Predefined log levels.
|
|
20
|
+
*/
|
|
21
|
+
export const LogLevels = Object.keys(LogLevelLabel);
|
|
22
|
+
/**
|
|
23
|
+
* Colors for log levels in the browser console.
|
|
24
|
+
*/
|
|
25
|
+
const LogLevelColors = {
|
|
26
|
+
info: `light-dark(#0043CE, #4589FF)`,
|
|
27
|
+
warn: `light-dark(#F1C21B, #F1C21B)`,
|
|
28
|
+
error: `light-dark(#DA1E28, #FA4D56)`,
|
|
29
|
+
debug: `light-dark(#8A3FFC, #A56EFF)`,
|
|
30
|
+
trace: `light-dark(#8A3FFC, #A56EFF)`,
|
|
31
|
+
fatal: `light-dark(#DA1E28, #FA4D56)`,
|
|
32
|
+
};
|
|
33
|
+
//#region Functions
|
|
34
|
+
/**
|
|
35
|
+
* Creates a logger with the given prefix.
|
|
36
|
+
*/
|
|
37
|
+
export const createConsoleLogger = (prefix, ...args) => {
|
|
38
|
+
const msgPrefix = prefix ? `(${prefix}):` : ":";
|
|
39
|
+
const logger = {
|
|
40
|
+
msgPrefix,
|
|
41
|
+
};
|
|
42
|
+
for (const level of LogLevels) {
|
|
43
|
+
const label = LogLevelLabel[level];
|
|
44
|
+
// @ts-expect-error Alias the log method to the appropriate console method,
|
|
45
|
+
// defaulting to console.log if the level is not supported.
|
|
46
|
+
const method = level in console ? console[level] : console.log;
|
|
47
|
+
logger[level] = method.bind(console, `${label} ${msgPrefix}`, ...args);
|
|
48
|
+
}
|
|
49
|
+
return logger;
|
|
50
|
+
};
|
|
51
|
+
//#endregion
|
|
52
|
+
//#region Functions
|
|
53
|
+
/**
|
|
54
|
+
* Creates a logger with the given prefix.
|
|
55
|
+
*/
|
|
56
|
+
export function createLogger(prefix, ...args) {
|
|
57
|
+
const msgPrefix = prefix ? `(${prefix}):` : ":";
|
|
58
|
+
/**
|
|
59
|
+
* @type {Partial<Logger>}
|
|
60
|
+
*/
|
|
61
|
+
const logger = {
|
|
62
|
+
msgPrefix,
|
|
63
|
+
};
|
|
64
|
+
for (const level of LogLevels) {
|
|
65
|
+
const label = LogLevelLabel[level];
|
|
66
|
+
const color = LogLevelColors[level];
|
|
67
|
+
// @ts-expect-error Alias the log method to the appropriate console method,
|
|
68
|
+
// defaulting to console.log if the level is not supported.
|
|
69
|
+
const method = level in console ? console[level] : console.log;
|
|
70
|
+
logger[level] = method.bind(console, `%c${label}%c ${msgPrefix}%c`, `font-weight: 700; color: ${color};`, `font-weight: 600; color: CanvasText;`, "", ...args);
|
|
71
|
+
}
|
|
72
|
+
return logger;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A singleton logger instance for the browser.
|
|
76
|
+
*
|
|
77
|
+
* ```js
|
|
78
|
+
* import { ConsoleLogger } from "#logger/browser";
|
|
79
|
+
*
|
|
80
|
+
* ConsoleLogger.info("Hello, world!");
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @implements {IRuntimeLogger}
|
|
84
|
+
*/
|
|
85
|
+
export class ConsoleLogger {
|
|
86
|
+
static info;
|
|
87
|
+
static warn;
|
|
88
|
+
static error;
|
|
89
|
+
static debug;
|
|
90
|
+
static trace;
|
|
91
|
+
/**
|
|
92
|
+
* Creates a logger with the given prefix.
|
|
93
|
+
*/
|
|
94
|
+
static prefix(logPrefix) {
|
|
95
|
+
return createLogger(logPrefix);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
Object.assign(ConsoleLogger, createLogger());
|
|
99
|
+
//#endregion
|
|
100
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../logging/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../logging/tables.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|