@azure-net/kit 0.5.1 → 0.6.2
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/dist/core/appLayers/AppLayers.d.ts +6 -0
- package/dist/core/appLayers/AppLayers.js +7 -0
- package/dist/core/appLayers/index.d.ts +1 -0
- package/dist/core/appLayers/index.js +1 -0
- package/dist/core/{service/BaseService.d.ts → application/UseCasesHandler.d.ts} +1 -1
- package/dist/core/{service/BaseService.js → application/UseCasesHandler.js} +1 -1
- package/dist/core/application/index.d.ts +1 -0
- package/dist/core/application/index.js +1 -0
- package/dist/core/boundaryProvider/Provider.d.ts +19 -0
- package/dist/core/boundaryProvider/Provider.js +126 -0
- package/dist/core/boundaryProvider/index.d.ts +1 -0
- package/dist/core/boundaryProvider/index.js +1 -0
- package/dist/core/container/Container.d.ts +8 -0
- package/dist/core/container/Container.js +19 -0
- package/dist/core/container/index.d.ts +1 -0
- package/dist/core/container/index.js +1 -0
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.js +3 -1
- package/package.json +2 -1
- package/dist/core/service/index.d.ts +0 -1
- package/dist/core/service/index.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AppLayers.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './AppLayers.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HttpServiceResponse } from '../httpService/index.js';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class UseCasesHandler {
|
|
3
3
|
protected transformResponse<TData extends object, TResult = TData, TKey extends keyof TData | undefined = undefined>(requestPromise: Promise<HttpServiceResponse<TData>>, options?: {
|
|
4
4
|
responseModel?: {
|
|
5
5
|
new (response: HttpServiceResponse<TData>): {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './UseCasesHandler.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './UseCasesHandler.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type ServiceFactory<T> = () => T | Promise<T>;
|
|
2
|
+
type ServiceMap = Record<string, ServiceFactory<unknown>>;
|
|
3
|
+
type ResolvedServices<T extends ServiceMap> = {
|
|
4
|
+
[K in keyof T]: Awaited<ReturnType<T[K]>>;
|
|
5
|
+
};
|
|
6
|
+
type InferProviderType<T> = T extends ProviderWithType<infer S> ? ResolvedServices<S> : never;
|
|
7
|
+
export interface ProviderWithType<T extends ServiceMap> {
|
|
8
|
+
(): ResolvedServices<T>;
|
|
9
|
+
__types__: T;
|
|
10
|
+
}
|
|
11
|
+
type ProviderFactory<T extends ServiceMap, D extends Record<string, ProviderWithType<ServiceMap>>> = (context: {
|
|
12
|
+
[K in keyof D]: InferProviderType<D[K]>;
|
|
13
|
+
}) => T;
|
|
14
|
+
interface LayerProviderOptions<D> {
|
|
15
|
+
dependsOn?: D;
|
|
16
|
+
}
|
|
17
|
+
export declare const createBoundaryProvider: <T extends ServiceMap, D extends Record<string, ProviderWithType<ServiceMap>>>(name: string, services: ProviderFactory<T, D>, options?: LayerProviderOptions<D>) => ProviderWithType<T>;
|
|
18
|
+
export declare function cleanupProvider(name: string): void;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { RequestContext } from '../../edges/context/index.js';
|
|
2
|
+
import { browser } from '$app/environment';
|
|
3
|
+
const clientCache = new Map();
|
|
4
|
+
const factoriesCache = new WeakMap();
|
|
5
|
+
const providerProxyCache = new Map();
|
|
6
|
+
const getProviderCache = (providerName) => {
|
|
7
|
+
if (browser) {
|
|
8
|
+
if (!clientCache.has(providerName)) {
|
|
9
|
+
clientCache.set(providerName, new Map());
|
|
10
|
+
}
|
|
11
|
+
return clientCache.get(providerName);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
const context = RequestContext.current();
|
|
15
|
+
if (!context.data.providers) {
|
|
16
|
+
context.data.providers = new Map();
|
|
17
|
+
}
|
|
18
|
+
const providers = context.data.providers;
|
|
19
|
+
if (!providers.has(providerName)) {
|
|
20
|
+
providers.set(providerName, new Map());
|
|
21
|
+
}
|
|
22
|
+
if (!context.data.providersToCleanup) {
|
|
23
|
+
context.data.providersToCleanup = new Set();
|
|
24
|
+
}
|
|
25
|
+
context.data.providersToCleanup.add(providerName);
|
|
26
|
+
return providers.get(providerName);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
export const createBoundaryProvider = (name, services, options) => {
|
|
30
|
+
const { dependsOn = {} } = options ?? {};
|
|
31
|
+
const providerFn = () => {
|
|
32
|
+
if (browser && providerProxyCache.has(name)) {
|
|
33
|
+
return providerProxyCache.get(name);
|
|
34
|
+
}
|
|
35
|
+
const cache = getProviderCache(name);
|
|
36
|
+
let factories = null;
|
|
37
|
+
const getFactories = () => {
|
|
38
|
+
if (factories)
|
|
39
|
+
return factories;
|
|
40
|
+
if (factoriesCache.has(services)) {
|
|
41
|
+
factories = factoriesCache.get(services);
|
|
42
|
+
return factories;
|
|
43
|
+
}
|
|
44
|
+
const deps = {};
|
|
45
|
+
const depInstances = new Map();
|
|
46
|
+
for (const [depName, depProvider] of Object.entries(dependsOn)) {
|
|
47
|
+
deps[depName] = new Proxy({}, {
|
|
48
|
+
get(_, serviceKey) {
|
|
49
|
+
if (!depInstances.has(depName)) {
|
|
50
|
+
depInstances.set(depName, depProvider());
|
|
51
|
+
}
|
|
52
|
+
const dep = depInstances.get(depName);
|
|
53
|
+
return dep?.[serviceKey];
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
factories = services(deps);
|
|
58
|
+
if (browser) {
|
|
59
|
+
factoriesCache.set(services, factories);
|
|
60
|
+
}
|
|
61
|
+
return factories;
|
|
62
|
+
};
|
|
63
|
+
const providerProxy = new Proxy({}, {
|
|
64
|
+
get(_, key) {
|
|
65
|
+
if (cache.has(key)) {
|
|
66
|
+
return cache.get(key);
|
|
67
|
+
}
|
|
68
|
+
const factories = getFactories();
|
|
69
|
+
if (!(key in factories)) {
|
|
70
|
+
throw new Error(`Service '${key}' not found in provider '${name}'`);
|
|
71
|
+
}
|
|
72
|
+
const factory = factories[key];
|
|
73
|
+
const instance = factory();
|
|
74
|
+
cache.set(key, instance);
|
|
75
|
+
return instance;
|
|
76
|
+
},
|
|
77
|
+
has(_, key) {
|
|
78
|
+
if (cache.has(key))
|
|
79
|
+
return true;
|
|
80
|
+
const factories = getFactories();
|
|
81
|
+
return key in factories;
|
|
82
|
+
},
|
|
83
|
+
ownKeys() {
|
|
84
|
+
const factories = getFactories();
|
|
85
|
+
const cachedKeys = Array.from(cache.keys());
|
|
86
|
+
const factoryKeys = Object.keys(factories);
|
|
87
|
+
return [...new Set([...cachedKeys, ...factoryKeys])];
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
if (browser) {
|
|
91
|
+
providerProxyCache.set(name, providerProxy);
|
|
92
|
+
}
|
|
93
|
+
return providerProxy;
|
|
94
|
+
};
|
|
95
|
+
return providerFn;
|
|
96
|
+
};
|
|
97
|
+
export function cleanupProvider(name) {
|
|
98
|
+
const cleanupCache = async (cache) => {
|
|
99
|
+
const promises = [];
|
|
100
|
+
for (const [key, service] of cache.entries()) {
|
|
101
|
+
if (service && typeof service === 'object' && 'dispose' in service) {
|
|
102
|
+
const disposeResult = service.dispose();
|
|
103
|
+
if (disposeResult instanceof Promise) {
|
|
104
|
+
promises.push(disposeResult.catch((err) => console.error(`Error disposing ${name}.${key}:`, err)));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
await Promise.all(promises);
|
|
109
|
+
cache.clear();
|
|
110
|
+
};
|
|
111
|
+
if (browser) {
|
|
112
|
+
const cache = clientCache.get(name);
|
|
113
|
+
if (cache) {
|
|
114
|
+
void cleanupCache(cache);
|
|
115
|
+
}
|
|
116
|
+
providerProxyCache.delete(name);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
const context = RequestContext.current();
|
|
120
|
+
const providers = context.data.providers;
|
|
121
|
+
if (providers?.has(name)) {
|
|
122
|
+
const cache = providers.get(name);
|
|
123
|
+
void cleanupCache(cache);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Provider.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Provider.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export class DIContainer {
|
|
2
|
+
factories = new Map();
|
|
3
|
+
instances = new Map();
|
|
4
|
+
register(token, factory) {
|
|
5
|
+
this.factories.set(token, factory);
|
|
6
|
+
}
|
|
7
|
+
get(token) {
|
|
8
|
+
if (this.instances.has(token)) {
|
|
9
|
+
return this.instances.get(token);
|
|
10
|
+
}
|
|
11
|
+
const factory = this.factories.get(token);
|
|
12
|
+
if (!factory) {
|
|
13
|
+
throw new Error(`Factory for ${token.name} not registered`);
|
|
14
|
+
}
|
|
15
|
+
const instance = factory();
|
|
16
|
+
this.instances.set(token, instance);
|
|
17
|
+
return instance;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Container.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Container.js';
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './application/index.js';
|
|
2
2
|
export * from './response/index.js';
|
|
3
3
|
export * from './httpService/index.js';
|
|
4
4
|
export * from './datasource/index.js';
|
|
5
5
|
export * from './request/index.js';
|
|
6
6
|
export * from './query/index.js';
|
|
7
|
+
export * from './container/index.js';
|
|
8
|
+
export * from './boundaryProvider/index.js';
|
package/dist/core/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './application/index.js';
|
|
2
2
|
export * from './response/index.js';
|
|
3
3
|
export * from './httpService/index.js';
|
|
4
4
|
export * from './datasource/index.js';
|
|
5
5
|
export * from './request/index.js';
|
|
6
6
|
export * from './query/index.js';
|
|
7
|
+
export * from './container/index.js';
|
|
8
|
+
export * from './boundaryProvider/index.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azure-net/kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist",
|
|
6
6
|
"!dist/**/*.test.*",
|
|
@@ -129,6 +129,7 @@
|
|
|
129
129
|
"test": "npm run test:unit -- --run && npm run test:e2e",
|
|
130
130
|
"test:e2e": "playwright test",
|
|
131
131
|
"semantic-release": "env-cmd semantic-release",
|
|
132
|
+
"precommit": "pnpm lint && pnpm check",
|
|
132
133
|
"commit": "pnpm format && git add . && git-cz && git push",
|
|
133
134
|
"release": "pnpm commit && pnpm semantic-release"
|
|
134
135
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './BaseService.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './BaseService.js';
|