@dreamkit/app 0.0.7-next.2 → 0.0.7-next.4
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/lib/App.d.ts +4 -2
- package/lib/App.d.ts.map +1 -1
- package/lib/App.js +36 -20
- package/lib/Response.d.ts +6 -0
- package/lib/Response.d.ts.map +1 -0
- package/lib/Response.js +9 -0
- package/lib/ResponseHeaders.d.ts +3 -0
- package/lib/ResponseHeaders.d.ts.map +1 -0
- package/lib/ResponseHeaders.js +6 -0
- package/lib/builders/ApiBuilder.d.ts +0 -1
- package/lib/builders/ApiBuilder.d.ts.map +1 -1
- package/lib/builders/ApiBuilder.js +0 -4
- package/lib/builders/MiddlewareBuilder.d.ts +24 -0
- package/lib/builders/MiddlewareBuilder.d.ts.map +1 -0
- package/lib/builders/MiddlewareBuilder.js +35 -0
- package/lib/builders/ServiceBuilder.d.ts +33 -0
- package/lib/builders/ServiceBuilder.d.ts.map +1 -0
- package/lib/builders/ServiceBuilder.js +35 -0
- package/lib/builders/SessionBuilder.d.ts +56 -0
- package/lib/builders/SessionBuilder.d.ts.map +1 -0
- package/lib/builders/SessionBuilder.js +79 -0
- package/lib/builders/SettingsBuilder.d.ts.map +1 -1
- package/lib/builders/SettingsBuilder.js +2 -7
- package/lib/handlers/SessionHandler.d.ts +15 -0
- package/lib/handlers/SessionHandler.d.ts.map +1 -0
- package/lib/handlers/SessionHandler.js +18 -0
- package/lib/handlers/SettingsHandler.d.ts +1 -1
- package/lib/handlers/SettingsHandler.d.ts.map +1 -1
- package/lib/handlers/SettingsHandler.js +5 -2
- package/lib/index.d.ts +12 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +12 -2
- package/lib/objects/$api.d.ts.map +1 -1
- package/lib/objects/$api.js +7 -2
- package/lib/objects/$middleware.d.ts +3 -0
- package/lib/objects/$middleware.d.ts.map +1 -0
- package/lib/objects/$middleware.js +2 -0
- package/lib/objects/$schema.d.ts +2 -0
- package/lib/objects/$schema.d.ts.map +1 -0
- package/lib/objects/$schema.js +2 -0
- package/lib/objects/$service.d.ts +3 -0
- package/lib/objects/$service.d.ts.map +1 -0
- package/lib/objects/$service.js +2 -0
- package/lib/objects/$session.d.ts +6 -0
- package/lib/objects/$session.d.ts.map +1 -0
- package/lib/objects/$session.js +2 -0
- package/lib/presets/ClientSessionHandler.d.ts +30 -0
- package/lib/presets/ClientSessionHandler.d.ts.map +1 -0
- package/lib/presets/ClientSessionHandler.js +80 -0
- package/lib/presets/ClientSessionSettings.d.ts +17 -0
- package/lib/presets/ClientSessionSettings.d.ts.map +1 -0
- package/lib/presets/ClientSessionSettings.js +21 -0
- package/lib/utils/buffer.d.ts +3 -0
- package/lib/utils/buffer.d.ts.map +1 -0
- package/lib/utils/buffer.js +6 -0
- package/lib/utils/cookies.d.ts +18 -0
- package/lib/utils/cookies.d.ts.map +1 -0
- package/lib/utils/cookies.js +40 -0
- package/lib/utils/crypto.d.ts +11 -0
- package/lib/utils/crypto.d.ts.map +1 -0
- package/lib/utils/crypto.js +31 -0
- package/package.json +4 -4
- package/lib/objects/middleware.d.ts +0 -8
- package/lib/objects/middleware.d.ts.map +0 -1
- package/lib/objects/middleware.js +0 -9
- package/lib/objects/service.d.ts +0 -20
- package/lib/objects/service.d.ts.map +0 -1
- package/lib/objects/service.js +0 -13
package/lib/App.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { MiddlewareConstructor } from "./builders/MiddlewareBuilder.js";
|
|
1
2
|
import { Route } from "./builders/RouteBuilder.js";
|
|
3
|
+
import { AppService, ServiceConstructor } from "./builders/ServiceBuilder.js";
|
|
2
4
|
import { SettingsConstructor } from "./builders/SettingsBuilder.js";
|
|
3
5
|
import { AppContext } from "./contexts/AppContext.js";
|
|
4
6
|
import { RequestContext } from "./contexts/RequestContext.js";
|
|
7
|
+
import { SessionHandlerConstructor } from "./handlers/SessionHandler.js";
|
|
5
8
|
import { SettingsHandler, SettingsHandlerConstructor } from "./handlers/SettingsHandler.js";
|
|
6
|
-
import { MiddlewareConstructor } from "./objects/middleware.js";
|
|
7
|
-
import { AppService, ServiceConstructor } from "./objects/service.js";
|
|
8
9
|
export declare class App {
|
|
9
10
|
static instanceKey: string;
|
|
10
11
|
readonly started = false;
|
|
@@ -15,6 +16,7 @@ export declare class App {
|
|
|
15
16
|
readonly middlewares: Set<MiddlewareConstructor>;
|
|
16
17
|
readonly settings: Set<SettingsConstructor<import("./builders/SettingsBuilder.js").SettingsData<import("./builders/SettingsBuilder.js").SettingsName, import("./builders/SettingsBuilder.js").SettingsParams, import("./builders/SettingsBuilder.js").SettingsDefaults<import("./builders/SettingsBuilder.js").SettingsParams>>>>;
|
|
17
18
|
settingsHandler: SettingsHandlerConstructor | undefined;
|
|
19
|
+
sessionHandler: SessionHandlerConstructor | undefined;
|
|
18
20
|
protected listeners: {
|
|
19
21
|
add: Set<(data: {
|
|
20
22
|
id: string;
|
package/lib/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"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"}
|
package/lib/App.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { RequestUrl } from "./RequestUrl.js";
|
|
2
|
+
import { ResponseHeaders } from "./ResponseHeaders.js";
|
|
2
3
|
import { isApi } from "./builders/ApiBuilder.js";
|
|
4
|
+
import { isMiddleware, } from "./builders/MiddlewareBuilder.js";
|
|
5
|
+
import { isService, } from "./builders/ServiceBuilder.js";
|
|
3
6
|
import { isSettings } from "./builders/SettingsBuilder.js";
|
|
4
7
|
import { AppContext } from "./contexts/AppContext.js";
|
|
5
8
|
import { RequestContext } from "./contexts/RequestContext.js";
|
|
9
|
+
import { isSessionHandler, SessionHandler, } from "./handlers/SessionHandler.js";
|
|
6
10
|
import { isSettingsHandler, SettingsHandler, } from "./handlers/SettingsHandler.js";
|
|
7
|
-
import { isMiddleware } from "./objects/middleware.js";
|
|
8
|
-
import { isService, } from "./objects/service.js";
|
|
9
11
|
import { isRoute, kindApp } from "./utils/kind.js";
|
|
10
12
|
import { log } from "./utils/log.js";
|
|
11
|
-
import {
|
|
12
|
-
import { getKinds, is } from "@dreamkit/kind";
|
|
13
|
+
import { getKinds } from "@dreamkit/kind";
|
|
13
14
|
import { merge } from "@dreamkit/utils/object.js";
|
|
14
15
|
export class App {
|
|
15
16
|
static {
|
|
@@ -24,6 +25,7 @@ export class App {
|
|
|
24
25
|
middlewares = new Set();
|
|
25
26
|
settings = new Set();
|
|
26
27
|
settingsHandler;
|
|
28
|
+
sessionHandler;
|
|
27
29
|
listeners = {
|
|
28
30
|
add: new Set(),
|
|
29
31
|
remove: new Set(),
|
|
@@ -88,6 +90,9 @@ export class App {
|
|
|
88
90
|
this.context.unregister(SettingsHandler);
|
|
89
91
|
this.settingsHandler = undefined;
|
|
90
92
|
}
|
|
93
|
+
else if (isSessionHandler(value)) {
|
|
94
|
+
this.sessionHandler = undefined;
|
|
95
|
+
}
|
|
91
96
|
for (const cb of this.listeners.remove)
|
|
92
97
|
await cb({ id, value });
|
|
93
98
|
for (const cb of this.listeners.change)
|
|
@@ -101,14 +106,6 @@ export class App {
|
|
|
101
106
|
service,
|
|
102
107
|
started: false,
|
|
103
108
|
};
|
|
104
|
-
if (is(service, IocBaseClass)) {
|
|
105
|
-
const params = normalizeIocParams(service.$ioc.params);
|
|
106
|
-
for (const key in params) {
|
|
107
|
-
const { value } = params[key].options;
|
|
108
|
-
if (isSettings(value))
|
|
109
|
-
this.settings.add(value);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
109
|
this.services.add(item);
|
|
113
110
|
return item;
|
|
114
111
|
}
|
|
@@ -167,6 +164,9 @@ export class App {
|
|
|
167
164
|
},
|
|
168
165
|
});
|
|
169
166
|
}
|
|
167
|
+
else if (isSessionHandler(value)) {
|
|
168
|
+
this.sessionHandler = value;
|
|
169
|
+
}
|
|
170
170
|
else if (isApi(value)) {
|
|
171
171
|
// Not implemented (using solid start actions)
|
|
172
172
|
continue;
|
|
@@ -174,6 +174,19 @@ export class App {
|
|
|
174
174
|
else {
|
|
175
175
|
console.warn("Unknown object", { id, value, kinds: getKinds(value) });
|
|
176
176
|
}
|
|
177
|
+
/*
|
|
178
|
+
// [review] require create a dependency for removing
|
|
179
|
+
|
|
180
|
+
if (is(value, IocBaseClass)) {
|
|
181
|
+
const params = normalizeIocParams(value.$ioc.params);
|
|
182
|
+
for (const key in params) {
|
|
183
|
+
const { value } = params[key].options;
|
|
184
|
+
if (isSettings(value)) {
|
|
185
|
+
this.settings.add(value);
|
|
186
|
+
settings.push(value);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}*/
|
|
177
190
|
this.objects.set(id, value);
|
|
178
191
|
for (const cb of this.listeners.add)
|
|
179
192
|
await cb({ id, value });
|
|
@@ -193,13 +206,20 @@ export class App {
|
|
|
193
206
|
const context = new RequestContext({
|
|
194
207
|
parentContainer: this.context,
|
|
195
208
|
});
|
|
196
|
-
|
|
209
|
+
const requestContext = context
|
|
197
210
|
.register(RequestContext, { value: context })
|
|
198
211
|
.register(Request, { value: request })
|
|
199
212
|
.register(Headers, { value: request.headers })
|
|
213
|
+
.register(ResponseHeaders, { value: new ResponseHeaders() })
|
|
200
214
|
.register(RequestUrl, {
|
|
201
215
|
value: new RequestUrl(request.url, "http://localhost"),
|
|
202
216
|
});
|
|
217
|
+
if (this.sessionHandler)
|
|
218
|
+
requestContext.register(SessionHandler, {
|
|
219
|
+
singleton: true,
|
|
220
|
+
useClass: this.sessionHandler,
|
|
221
|
+
});
|
|
222
|
+
return requestContext;
|
|
203
223
|
}
|
|
204
224
|
async request(request) {
|
|
205
225
|
const context = this.createRequestContext(request);
|
|
@@ -234,13 +254,9 @@ export class App {
|
|
|
234
254
|
settingsHandler.autoSave = false;
|
|
235
255
|
await settingsHandler.load();
|
|
236
256
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
finally {
|
|
242
|
-
return await settingsHandler?.save();
|
|
243
|
-
}
|
|
257
|
+
for (const st of this.settings)
|
|
258
|
+
await this.registerSettings(st);
|
|
259
|
+
return await settingsHandler?.save();
|
|
244
260
|
}
|
|
245
261
|
async registerSettings(constructor) {
|
|
246
262
|
const options = constructor.options;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Response.d.ts","sourceRoot":"","sources":["../src/Response.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAQ;IAInB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAiB;CAClC"}
|
package/lib/Response.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResponseHeaders.d.ts","sourceRoot":"","sources":["../src/ResponseHeaders.ts"],"names":[],"mappings":"AAEA,qBAAa,eAAgB,SAAQ,OAAO;CAI3C"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Func, FuncBuilder, FuncData } from "@dreamkit/func";
|
|
2
2
|
export declare const kindApi: (input: object, name?: string) => void, isApi: (input: unknown) => input is Func;
|
|
3
3
|
export declare class ApiBuilder<T extends FuncData> extends FuncBuilder<T> {
|
|
4
|
-
protected onCreate(func: Func): Func;
|
|
5
4
|
}
|
|
6
5
|
//# sourceMappingURL=ApiBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/ApiBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG7D,eAAO,MAAO,OAAO,0CAAE,KAAK,mCAAyC,CAAC;AAEtE,qBAAa,UAAU,CAAC,CAAC,SAAS,QAAQ,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ApiBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/ApiBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG7D,eAAO,MAAO,OAAO,0CAAE,KAAK,mCAAyC,CAAC;AAEtE,qBAAa,UAAU,CAAC,CAAC,SAAS,QAAQ,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;CAAG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IocClass, IocParamsUserConfig } from "@dreamkit/ioc";
|
|
2
|
+
import type { Constructor, Merge } from "@dreamkit/utils/ts.js";
|
|
3
|
+
export declare const kindMiddleware: (input: object, name?: string) => void, isMiddleware: (input: unknown) => input is MiddlewareConstructor;
|
|
4
|
+
export type MiddlewareSelf = IocParamsUserConfig | undefined;
|
|
5
|
+
export type MiddlewareData<TSelf extends MiddlewareSelf = MiddlewareSelf> = {
|
|
6
|
+
self?: TSelf;
|
|
7
|
+
};
|
|
8
|
+
export type MiddlewareOptions<T extends MiddlewareData = MiddlewareData> = T & {};
|
|
9
|
+
export type MergeMiddlewareData<D1 extends MiddlewareData, D2 extends Partial<MiddlewareData>> = Merge<MiddlewareData, D1, D2>;
|
|
10
|
+
export declare abstract class Middleware {
|
|
11
|
+
abstract onRequest(): any;
|
|
12
|
+
}
|
|
13
|
+
export type MiddlewareConstructor = Constructor<Middleware>;
|
|
14
|
+
export declare class MiddlewareBuilder<T extends MiddlewareData = {}> {
|
|
15
|
+
readonly data: T;
|
|
16
|
+
readonly options: MiddlewareOptions<T>;
|
|
17
|
+
constructor(options?: MiddlewareOptions<T>);
|
|
18
|
+
protected clone(next: Partial<MiddlewareOptions>): this;
|
|
19
|
+
self<TSelf extends MiddlewareSelf>(value: TSelf): MiddlewareBuilder<MergeMiddlewareData<T, {
|
|
20
|
+
self: TSelf;
|
|
21
|
+
}>>;
|
|
22
|
+
create(): IocClass<T["self"] & {}, Middleware>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=MiddlewareBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MiddlewareBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/MiddlewareBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAER,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEhE,eAAO,MAAO,cAAc,0CAAE,YAAY,oDAEzC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAC7D,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,IAAI;IAC1E,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IACrE,CAAC,GAAG,EAAE,CAAC;AAET,MAAM,MAAM,mBAAmB,CAC7B,EAAE,SAAS,cAAc,EACzB,EAAE,SAAS,OAAO,CAAC,cAAc,CAAC,IAChC,KAAK,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAElC,8BAAsB,UAAU;IAI9B,QAAQ,CAAC,SAAS,IAAI,GAAG;CAC1B;AAED,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAI5D,qBAAa,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,EAAE;IAC1D,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAC3B,OAAO,GAAE,iBAAiB,CAAC,CAAC,CAAa;IASrD,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAOvD,IAAI,CAAC,KAAK,SAAS,cAAc,EAC/B,KAAK,EAAE,KAAK,GACX,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;IAG7D,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC;CAG/C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createIocClass, } from "@dreamkit/ioc";
|
|
2
|
+
import { createKind } from "@dreamkit/kind";
|
|
3
|
+
export const [kindMiddleware, isMiddleware] = createKind("@dreamkit/app/middleware");
|
|
4
|
+
export class Middleware {
|
|
5
|
+
static {
|
|
6
|
+
kindMiddleware(this);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
const MiddlewareClass = createIocClass(Middleware);
|
|
10
|
+
export class MiddlewareBuilder {
|
|
11
|
+
data;
|
|
12
|
+
options;
|
|
13
|
+
constructor(options = {}) {
|
|
14
|
+
const $this = this;
|
|
15
|
+
this.options = options;
|
|
16
|
+
this.data = {
|
|
17
|
+
get self() {
|
|
18
|
+
return $this.options.self;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
clone(next) {
|
|
23
|
+
const prev = this.options;
|
|
24
|
+
return new MiddlewareBuilder({
|
|
25
|
+
...prev,
|
|
26
|
+
...next,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
self(value) {
|
|
30
|
+
return this.clone({ self: value });
|
|
31
|
+
}
|
|
32
|
+
create() {
|
|
33
|
+
return MiddlewareClass(this.options.self || {});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { IocClass, IocParamsUserConfig } from "@dreamkit/ioc";
|
|
2
|
+
import type { Constructor, Merge } from "@dreamkit/utils/ts.js";
|
|
3
|
+
export declare const kindService: (input: object, name?: string) => void, isService: (input: unknown) => input is ServiceConstructor;
|
|
4
|
+
export type ServiceSelf = IocParamsUserConfig | undefined;
|
|
5
|
+
export type ServiceData<TSelf extends ServiceSelf = ServiceSelf> = {
|
|
6
|
+
self?: TSelf;
|
|
7
|
+
};
|
|
8
|
+
export type ServiceOptions<T extends ServiceData = ServiceData> = T & {};
|
|
9
|
+
export type MergeServiceData<D1 extends ServiceData, D2 extends Partial<ServiceData>> = Merge<ServiceData, D1, D2>;
|
|
10
|
+
type SyncOrAsync<T> = T | Promise<T>;
|
|
11
|
+
export type Shutdown = () => SyncOrAsync<void>;
|
|
12
|
+
export type AppService = {
|
|
13
|
+
name: string;
|
|
14
|
+
service: ServiceConstructor;
|
|
15
|
+
started: boolean;
|
|
16
|
+
shutdown?: Shutdown;
|
|
17
|
+
};
|
|
18
|
+
export declare abstract class Service {
|
|
19
|
+
abstract onStart(): any;
|
|
20
|
+
}
|
|
21
|
+
export type ServiceConstructor = Constructor<Service>;
|
|
22
|
+
export declare class ServiceBuilder<T extends ServiceData = {}> {
|
|
23
|
+
readonly data: T;
|
|
24
|
+
readonly options: ServiceOptions<T>;
|
|
25
|
+
constructor(options?: ServiceOptions<T>);
|
|
26
|
+
protected clone(next: Partial<ServiceOptions>): this;
|
|
27
|
+
self<TSelf extends ServiceSelf>(value: TSelf): ServiceBuilder<MergeServiceData<T, {
|
|
28
|
+
self: TSelf;
|
|
29
|
+
}>>;
|
|
30
|
+
create(): IocClass<T["self"] & {}, Service>;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=ServiceBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/ServiceBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEhE,eAAO,MAAO,WAAW,0CAAE,SAAS,iDAEnC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,SAAS,CAAC;AAC1D,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,WAAW,GAAG,WAAW,IAAI;IACjE,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,CAAC;AAEzE,MAAM,MAAM,gBAAgB,CAC1B,EAAE,SAAS,WAAW,EACtB,EAAE,SAAS,OAAO,CAAC,WAAW,CAAC,IAC7B,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAE/B,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,8BAAsB,OAAO;IAI3B,QAAQ,CAAC,OAAO,IAAI,GAAG;CACxB;AAED,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAItD,qBAAa,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,EAAE;IACpD,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,GAAE,cAAc,CAAC,CAAC,CAAa;IASlD,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAOpD,IAAI,CAAC,KAAK,SAAS,WAAW,EAC5B,KAAK,EAAE,KAAK,GACX,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;IAGvD,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC;CAG5C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createIocClass } from "@dreamkit/ioc";
|
|
2
|
+
import { createKind } from "@dreamkit/kind";
|
|
3
|
+
export const [kindService, isService] = createKind("@dreamkit/app/service");
|
|
4
|
+
export class Service {
|
|
5
|
+
static {
|
|
6
|
+
kindService(this);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
const ServiceClass = createIocClass(Service);
|
|
10
|
+
export class ServiceBuilder {
|
|
11
|
+
data;
|
|
12
|
+
options;
|
|
13
|
+
constructor(options = {}) {
|
|
14
|
+
const $this = this;
|
|
15
|
+
this.options = options;
|
|
16
|
+
this.data = {
|
|
17
|
+
get self() {
|
|
18
|
+
return $this.options.self;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
clone(next) {
|
|
23
|
+
const prev = this.options;
|
|
24
|
+
return new ServiceBuilder({
|
|
25
|
+
...prev,
|
|
26
|
+
...next,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
self(value) {
|
|
30
|
+
return this.clone({ self: value });
|
|
31
|
+
}
|
|
32
|
+
create() {
|
|
33
|
+
return ServiceClass(this.options.self || {});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { InferType, MinimalObjectType, ObjectType, ObjectTypeProps } from "@dreamkit/schema";
|
|
2
|
+
import type { Merge, throwError } from "@dreamkit/utils/ts.js";
|
|
3
|
+
export declare const kindSession: (input: object, name?: string) => void, isSession: (input: unknown) => input is SessionConstructor<SessionData<SessionName, SessionParams>>;
|
|
4
|
+
export type SessionName = string | undefined;
|
|
5
|
+
export type SessionParams = MinimalObjectType | undefined;
|
|
6
|
+
export type InferSessionParams<T extends {
|
|
7
|
+
params?: SessionParams;
|
|
8
|
+
}> = InferType<T["params"] & {}>;
|
|
9
|
+
export type SessionData<TName extends SessionName = SessionName, TParams extends SessionParams = SessionParams> = {
|
|
10
|
+
name?: TName;
|
|
11
|
+
params?: TParams;
|
|
12
|
+
};
|
|
13
|
+
export type SessionTimeLife = {
|
|
14
|
+
seconds?: number;
|
|
15
|
+
minutes?: number;
|
|
16
|
+
hours?: number;
|
|
17
|
+
days?: number;
|
|
18
|
+
};
|
|
19
|
+
export type SessionOptions<T extends SessionData = SessionData> = T & {
|
|
20
|
+
timelife?: SessionTimeLife;
|
|
21
|
+
};
|
|
22
|
+
export type MergeSessionData<D1 extends SessionData, D2 extends Partial<SessionData>> = Merge<SessionData, D1, D2>;
|
|
23
|
+
export declare abstract class Session<T extends SessionData = SessionData> {
|
|
24
|
+
static get options(): SessionOptions;
|
|
25
|
+
static get params(): void;
|
|
26
|
+
readonly options: SessionOptions<T>;
|
|
27
|
+
readonly params: InferSessionParams<T>;
|
|
28
|
+
constructor(params: InferSessionParams<T>);
|
|
29
|
+
update(params: InferSessionParams<T>): void;
|
|
30
|
+
}
|
|
31
|
+
export interface SessionConstructor<T extends SessionData = SessionData> {
|
|
32
|
+
options: SessionOptions<T>;
|
|
33
|
+
params: T["params"];
|
|
34
|
+
new (params: InferSessionParams<T>): Session<T>;
|
|
35
|
+
}
|
|
36
|
+
export declare class SessionBuilder<T extends SessionData = {
|
|
37
|
+
name: undefined;
|
|
38
|
+
params: undefined;
|
|
39
|
+
}> {
|
|
40
|
+
readonly data: T;
|
|
41
|
+
readonly options: SessionOptions<T>;
|
|
42
|
+
constructor(options?: SessionOptions<T>);
|
|
43
|
+
protected clone(next: Partial<SessionOptions>): this;
|
|
44
|
+
name<TName extends SessionName>(value: TName): SessionBuilder<MergeSessionData<T, {
|
|
45
|
+
name: TName;
|
|
46
|
+
}>>;
|
|
47
|
+
params<TParams extends SessionParams>(type: TParams): SessionBuilder<MergeSessionData<T, {
|
|
48
|
+
params: TParams;
|
|
49
|
+
}>>;
|
|
50
|
+
params<TProps extends ObjectTypeProps>(props: TProps): SessionBuilder<MergeSessionData<T, {
|
|
51
|
+
params: ObjectType<TProps>;
|
|
52
|
+
}>>;
|
|
53
|
+
timelife(input: SessionTimeLife): this;
|
|
54
|
+
create: [undefined] extends [T["name"]] ? throwError<"Name is required"> : [undefined] extends [T["params"]] ? throwError<"Params is required"> : () => SessionConstructor<T>;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=SessionBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/SessionBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE/D,eAAO,MAAO,WAAW,0CAAE,SAAS,0FAEnC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAC7C,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAC1D,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS;IAAE,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,IACjE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;AAE9B,MAAM,MAAM,WAAW,CACrB,KAAK,SAAS,WAAW,GAAG,WAAW,EACvC,OAAO,SAAS,aAAa,GAAG,aAAa,IAC3C;IACF,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,IAAI,CAAC,GAAG;IACpE,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAC1B,EAAE,SAAS,WAAW,EACtB,EAAE,SAAS,OAAO,CAAC,WAAW,CAAC,IAC7B,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAE/B,8BAAsB,OAAO,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IAC/D,MAAM,KAAK,OAAO,IAAI,cAAc,CAEnC;IACD,MAAM,KAAK,MAAM,SAEhB;IAID,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAqC;IACxE,QAAQ,CAAC,MAAM,EAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBAC5B,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAGzC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;CASrC;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACrE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpB,KAAK,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjD;AAED,qBAAa,cAAc,CACzB,CAAC,SAAS,WAAW,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE;IAE9D,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;gBACxB,OAAO,GAAE,cAAc,CAAC,CAAC,CAAa;IAMlD,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAapD,IAAI,CAAC,KAAK,SAAS,WAAW,EAC5B,KAAK,EAAE,KAAK,GACX,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,KAAK,CAAA;KAAE,CAAC,CAAC;IAGvD,MAAM,CAAC,OAAO,SAAS,aAAa,EAClC,IAAI,EAAE,OAAO,GACZ,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAM,SAAS,eAAe,EACnC,KAAK,EAAE,MAAM,GACZ,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE;QAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IAItE,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAGtC,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GACnC,UAAU,CAAC,kBAAkB,CAAC,GAC9B,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAC/B,UAAU,CAAC,oBAAoB,CAAC,GAChC,MAAM,kBAAkB,CAAC,CAAC,CAAC,CAmBxB;CACV"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { createKind, kindOf } from "@dreamkit/kind";
|
|
2
|
+
import { ObjectType, s, } from "@dreamkit/schema";
|
|
3
|
+
export const [kindSession, isSession] = createKind("@dreamkit/app/session");
|
|
4
|
+
export class Session {
|
|
5
|
+
static get options() {
|
|
6
|
+
throw new Error("Not implemented");
|
|
7
|
+
}
|
|
8
|
+
static get params() {
|
|
9
|
+
throw new Error("Not implemented");
|
|
10
|
+
}
|
|
11
|
+
static {
|
|
12
|
+
kindSession(this);
|
|
13
|
+
}
|
|
14
|
+
options = this.constructor.options;
|
|
15
|
+
params;
|
|
16
|
+
constructor(params) {
|
|
17
|
+
this.update(params);
|
|
18
|
+
}
|
|
19
|
+
update(params) {
|
|
20
|
+
const options = this.constructor.options;
|
|
21
|
+
const errors = options.params.validate(params);
|
|
22
|
+
if (errors.length)
|
|
23
|
+
throw new Error(`Invalid '${options.name}' session: ${JSON.stringify(errors, null, 2)}`);
|
|
24
|
+
this.params = params;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class SessionBuilder {
|
|
28
|
+
data;
|
|
29
|
+
options;
|
|
30
|
+
constructor(options = {}) {
|
|
31
|
+
this.options = options;
|
|
32
|
+
this.data = {
|
|
33
|
+
params: options.params,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
clone(next) {
|
|
37
|
+
const prev = this.options;
|
|
38
|
+
return new SessionBuilder({
|
|
39
|
+
...prev,
|
|
40
|
+
...next,
|
|
41
|
+
params: "params" in next
|
|
42
|
+
? next.params === undefined || kindOf(next.params, ObjectType)
|
|
43
|
+
? next.params
|
|
44
|
+
: s.object(next.params)
|
|
45
|
+
: prev.params,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
name(value) {
|
|
49
|
+
return this.clone({ name: value });
|
|
50
|
+
}
|
|
51
|
+
params(params) {
|
|
52
|
+
return this.clone({ params });
|
|
53
|
+
}
|
|
54
|
+
timelife(input) {
|
|
55
|
+
return this.clone({ timelife: input });
|
|
56
|
+
}
|
|
57
|
+
create = function () {
|
|
58
|
+
if (!this.options.name)
|
|
59
|
+
throw new Error("Name is required");
|
|
60
|
+
if (!this.options.params)
|
|
61
|
+
throw new Error("Params is required");
|
|
62
|
+
const self = this;
|
|
63
|
+
class CustomSession extends Session {
|
|
64
|
+
static {
|
|
65
|
+
kindSession(this, self.options.name);
|
|
66
|
+
}
|
|
67
|
+
static get options() {
|
|
68
|
+
return self.options;
|
|
69
|
+
}
|
|
70
|
+
static get params() {
|
|
71
|
+
return self.options.params;
|
|
72
|
+
}
|
|
73
|
+
constructor(params) {
|
|
74
|
+
super(params);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return CustomSession;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/SettingsBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE/D,eAAO,MAAO,YAAY,0CAAE,UAAU,gIAErC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;AAC9C,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG,SAAS,CAAC;AAC3D,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS;IAAE,MAAM,CAAC,EAAE,cAAc,CAAA;CAAE,IACnE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9B,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,cAAc,GAAG,cAAc,IACxE,CAAC,CAAC,KAAK,EAAE,mBAAmB,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,CAAC,KAAK,GAAG,CAAC,GACnE,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,CACtB,KAAK,SAAS,YAAY,GAAG,YAAY,EACzC,OAAO,SAAS,cAAc,GAAG,cAAc,EAC/C,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,IACnD;IACF,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,CAAC,GAAG;IACvE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAC3B,EAAE,SAAS,YAAY,EACvB,EAAE,SAAS,OAAO,CAAC,YAAY,CAAC,IAC9B,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAEhC,8BAAsB,QAAQ,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY;IAClE,MAAM,KAAK,OAAO,IAAI,eAAe,CAEpC;IACD,MAAM,KAAK,MAAM,SAEhB;IAID,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,CAAqC;IACzE,QAAQ,CAAC,MAAM,EAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GACjD,mBAAmB,CAAC,CAAC,CAAC,GACtB,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;gBACvB,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAG1C,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"SettingsBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/SettingsBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,13 +19,8 @@ export class Settings {
|
|
|
19
19
|
update(params) {
|
|
20
20
|
const options = this.constructor.options;
|
|
21
21
|
const errors = options.params.validate(params);
|
|
22
|
-
if (errors.length)
|
|
23
|
-
|
|
24
|
-
cause: errors,
|
|
25
|
-
});
|
|
26
|
-
console.error(error);
|
|
27
|
-
throw error;
|
|
28
|
-
}
|
|
22
|
+
if (errors.length)
|
|
23
|
+
throw new Error(`Invalid '${options.name}' settings: ${JSON.stringify(errors, null, 2)}`);
|
|
29
24
|
this.params = options.defaults
|
|
30
25
|
? options.defaults(params)
|
|
31
26
|
: params;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { InferSessionParams, SessionConstructor, SessionData } from "../builders/SessionBuilder.js";
|
|
2
|
+
import { Constructor } from "@dreamkit/utils/ts.js";
|
|
3
|
+
export declare const kindSessionHandler: (input: object, name?: string) => void, isSessionHandler: (input: unknown) => input is SessionHandlerConstructor;
|
|
4
|
+
export type SessionHandlerConstructor = Constructor<SessionHandler> & {
|
|
5
|
+
$ioc: any;
|
|
6
|
+
};
|
|
7
|
+
export declare abstract class SessionHandler {
|
|
8
|
+
get<T extends SessionData>(constructor: SessionConstructor<T>): Promise<InferSessionParams<T> | undefined>;
|
|
9
|
+
unset(constructor: SessionConstructor<any>): Promise<void>;
|
|
10
|
+
set<T extends SessionData>(constructor: SessionConstructor<T>, value: InferSessionParams<T> | null | undefined): Promise<void>;
|
|
11
|
+
protected abstract onGet(constructor: SessionConstructor<any>): Promise<any>;
|
|
12
|
+
protected abstract onSet(constructor: SessionConstructor<any>, params: any): Promise<unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare const SessionHandlerClass: <P extends import("@dreamkit/ioc").IocParamsUserConfig = {}>(params: P) => import("@dreamkit/ioc").IocClass<P & {}, SessionHandler, never, import("@dreamkit/ioc").IocParams<P & {}>>;
|
|
15
|
+
//# sourceMappingURL=SessionHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/SessionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACZ,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,eAAO,MAAO,kBAAkB,0CAAE,gBAAgB,wDACqB,CAAC;AAExE,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,cAAc,CAAC,GAAG;IACpE,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,8BAAsB,cAAc;IAI5B,GAAG,CAAC,CAAC,SAAS,WAAW,EAC7B,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAGvC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAG1D,GAAG,CAAC,CAAC,SAAS,WAAW,EAC7B,WAAW,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAClC,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAC9C,OAAO,CAAC,IAAI,CAAC;IAGhB,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAC5E,SAAS,CAAC,QAAQ,CAAC,KAAK,CACtB,WAAW,EAAE,kBAAkB,CAAC,GAAG,CAAC,EACpC,MAAM,EAAE,GAAG,GACV,OAAO,CAAC,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,mBAAmB,uLAAiC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createIocClass } from "@dreamkit/ioc";
|
|
2
|
+
import { createKind } from "@dreamkit/kind";
|
|
3
|
+
export const [kindSessionHandler, isSessionHandler] = createKind("@dreamkit/app/SessionHandler");
|
|
4
|
+
export class SessionHandler {
|
|
5
|
+
static {
|
|
6
|
+
kindSessionHandler(this);
|
|
7
|
+
}
|
|
8
|
+
async get(constructor) {
|
|
9
|
+
return await this.onGet(constructor);
|
|
10
|
+
}
|
|
11
|
+
async unset(constructor) {
|
|
12
|
+
await this.onSet(constructor, undefined);
|
|
13
|
+
}
|
|
14
|
+
async set(constructor, value) {
|
|
15
|
+
await this.onSet(constructor, value);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export const SessionHandlerClass = createIocClass(SessionHandler);
|
|
@@ -23,7 +23,7 @@ export declare abstract class SettingsHandler extends SettingsHandler_base {
|
|
|
23
23
|
protected abstract onLoad(): Promise<Record<string, any>>;
|
|
24
24
|
protected abstract onSave(): Promise<SettingsHandlerSaveResult>;
|
|
25
25
|
load(): Promise<void>;
|
|
26
|
-
get<T extends SettingsData>(constructor: SettingsConstructor<T>):
|
|
26
|
+
get<T extends SettingsData>(constructor: SettingsConstructor<T>): InferSettingsParams<T> | undefined;
|
|
27
27
|
set<T extends SettingsData>(constructor: SettingsConstructor<T>, data: InferSettingsParams<T>): Promise<void>;
|
|
28
28
|
save(): Promise<SettingsHandlerSaveResult>;
|
|
29
29
|
protected getData(): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/SettingsHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAkB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,eAAO,MAAO,mBAAmB,0CAAE,iBAAiB,yDACqB,CAAC;AAE1E,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG;IACtE,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAC5C,MAAM,EACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CACnC,CAAC;;;;;;AAEF,8BAAsB,eAAgB,SAAQ,oBAAwB;IAIpE,QAAQ,UAAQ;IAChB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IACzC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAa;IACzD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IACjC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,yBAAyB,CAAC;IACzD,IAAI;
|
|
1
|
+
{"version":3,"file":"SettingsHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/SettingsHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACb,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAkB,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,eAAO,MAAO,mBAAmB,0CAAE,iBAAiB,yDACqB,CAAC;AAE1E,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC,eAAe,CAAC,GAAG;IACtE,IAAI,EAAE,GAAG,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,MAAM,CAC5C,MAAM,EACN;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CACnC,CAAC;;;;;;AAEF,8BAAsB,eAAgB,SAAQ,oBAAwB;IAIpE,QAAQ,UAAQ;IAChB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IACzC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAa;IACzD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IACjC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,yBAAyB,CAAC;IACzD,IAAI;IASV,GAAG,CAAC,CAAC,SAAS,YAAY,EACxB,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAClC,mBAAmB,CAAC,CAAC,CAAC,GAAG,SAAS;IAG/B,GAAG,CAAC,CAAC,SAAS,YAAY,EAC9B,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,EACnC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC;IAgBV,IAAI,IAAI,OAAO,CAAC,yBAAyB,CAAC;cAMhC,OAAO,IAAI,OAAO,CAAC;QACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;QACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;KACvC,CAAC;CAYH;AAED,eAAO,MAAM,oBAAoB,gKAAkC,CAAC"}
|
|
@@ -14,10 +14,13 @@ export class SettingsHandler extends IocClass({ AppContext }) {
|
|
|
14
14
|
this.data = await this.onLoad();
|
|
15
15
|
for (const settings of this.settings) {
|
|
16
16
|
const data = this.data[settings.options.name];
|
|
17
|
-
|
|
17
|
+
try {
|
|
18
|
+
this.appContext.resolve(settings, { optional: true })?.update(data);
|
|
19
|
+
}
|
|
20
|
+
catch (_) { }
|
|
18
21
|
}
|
|
19
22
|
}
|
|
20
|
-
|
|
23
|
+
get(constructor) {
|
|
21
24
|
return this.data[constructor.options.name];
|
|
22
25
|
}
|
|
23
26
|
async set(constructor, data) {
|
package/lib/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { RequestUrl } from "./RequestUrl.js";
|
|
2
|
+
export { ResponseHeaders } from "./ResponseHeaders.js";
|
|
2
3
|
export { isRoute, isApp } from "./utils/kind.js";
|
|
3
4
|
export { isApi } from "./builders/ApiBuilder.js";
|
|
4
5
|
export { App } from "./App.js";
|
|
@@ -7,10 +8,18 @@ export { AppContext } from "./contexts/AppContext.js";
|
|
|
7
8
|
export { RequestContext } from "./contexts/RequestContext.js";
|
|
8
9
|
export { $api } from "./objects/$api.js";
|
|
9
10
|
export { $route } from "./objects/$route.js";
|
|
11
|
+
export { $middleware } from "./objects/$middleware.js";
|
|
12
|
+
export { $service } from "./objects/$service.js";
|
|
13
|
+
export { $session } from "./objects/$session.js";
|
|
14
|
+
export { $schema } from "./objects/$schema.js";
|
|
10
15
|
export { RouteBuilder, type RouteOptions, type Route, type RouteData, type RouteProps, } from "./builders/RouteBuilder.js";
|
|
11
16
|
export { $settings } from "./objects/$settings.js";
|
|
12
17
|
export { Settings, SettingsBuilder, type SettingsConstructor, type SettingsData, isSettings, } from "./builders/SettingsBuilder.js";
|
|
13
|
-
export { Middleware,
|
|
14
|
-
export { Service,
|
|
15
|
-
export {
|
|
18
|
+
export { Middleware, isMiddleware, type MiddlewareConstructor, type MiddlewareOptions, type MiddlewareData, } from "./builders/MiddlewareBuilder.js";
|
|
19
|
+
export { Service, type ServiceConstructor, type ServiceOptions, type ServiceData, isService, } from "./builders/ServiceBuilder.js";
|
|
20
|
+
export { Session, type SessionConstructor, type SessionOptions, type SessionData, isSession, } from "./builders/SessionBuilder.js";
|
|
21
|
+
export { SettingsHandler, SettingsHandlerClass, type SettingsHandlerConstructor, type SettingsHandlerSaveResult, } from "./handlers/SettingsHandler.js";
|
|
22
|
+
export { SessionHandler, SessionHandlerClass, type SessionHandlerConstructor, } from "./handlers/SessionHandler.js";
|
|
23
|
+
export { ClientSessionHandler } from "./presets/ClientSessionHandler.js";
|
|
24
|
+
export { ClientSessionSettings } from "./presets/ClientSessionSettings.js";
|
|
16
25
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,UAAU,GACX,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,QAAQ,EACR,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,UAAU,GACX,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,OAAO,EACP,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,SAAS,GACV,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,OAAO,EACP,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,SAAS,GACV,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,KAAK,yBAAyB,GAC/B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { RequestUrl } from "./RequestUrl.js";
|
|
2
|
+
export { ResponseHeaders } from "./ResponseHeaders.js";
|
|
2
3
|
export { isRoute, isApp } from "./utils/kind.js";
|
|
3
4
|
export { isApi } from "./builders/ApiBuilder.js";
|
|
4
5
|
export { App } from "./App.js";
|
|
@@ -9,10 +10,19 @@ export { RequestContext } from "./contexts/RequestContext.js";
|
|
|
9
10
|
// objects
|
|
10
11
|
export { $api } from "./objects/$api.js";
|
|
11
12
|
export { $route } from "./objects/$route.js";
|
|
13
|
+
export { $middleware } from "./objects/$middleware.js";
|
|
14
|
+
export { $service } from "./objects/$service.js";
|
|
15
|
+
export { $session } from "./objects/$session.js";
|
|
16
|
+
export { $schema } from "./objects/$schema.js";
|
|
12
17
|
export { RouteBuilder, } from "./builders/RouteBuilder.js";
|
|
13
18
|
export { $settings } from "./objects/$settings.js";
|
|
14
19
|
export { Settings, SettingsBuilder, isSettings, } from "./builders/SettingsBuilder.js";
|
|
15
|
-
export { Middleware,
|
|
16
|
-
export { Service,
|
|
20
|
+
export { Middleware, isMiddleware, } from "./builders/MiddlewareBuilder.js";
|
|
21
|
+
export { Service, isService, } from "./builders/ServiceBuilder.js";
|
|
22
|
+
export { Session, isSession, } from "./builders/SessionBuilder.js";
|
|
17
23
|
// handlers
|
|
18
24
|
export { SettingsHandler, SettingsHandlerClass, } from "./handlers/SettingsHandler.js";
|
|
25
|
+
export { SessionHandler, SessionHandlerClass, } from "./handlers/SessionHandler.js";
|
|
26
|
+
// presets
|
|
27
|
+
export { ClientSessionHandler } from "./presets/ClientSessionHandler.js";
|
|
28
|
+
export { ClientSessionSettings } from "./presets/ClientSessionSettings.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"$api.d.ts","sourceRoot":"","sources":["../../src/objects/$api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"$api.d.ts","sourceRoot":"","sources":["../../src/objects/$api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAW,MAAM,2BAA2B,CAAC;AAEhE,eAAO,MAAM,IAAI,gBAKf,CAAC"}
|
package/lib/objects/$api.js
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
import { ApiBuilder } from "../builders/ApiBuilder.js";
|
|
2
|
-
export const $api = /*#__PURE__*/ new ApiBuilder({})
|
|
1
|
+
import { ApiBuilder, kindApi } from "../builders/ApiBuilder.js";
|
|
2
|
+
export const $api = /*#__PURE__*/ new ApiBuilder({})["clone"]({
|
|
3
|
+
onCreate: (func) => {
|
|
4
|
+
kindApi(func);
|
|
5
|
+
return func;
|
|
6
|
+
},
|
|
7
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"$middleware.d.ts","sourceRoot":"","sources":["../../src/objects/$middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,eAAO,MAAM,WAAW,uBAA0C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"$schema.d.ts","sourceRoot":"","sources":["../../src/objects/$schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,6CAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"$service.d.ts","sourceRoot":"","sources":["../../src/objects/$service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,eAAO,MAAM,QAAQ,oBAAuC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"$session.d.ts","sourceRoot":"","sources":["../../src/objects/$session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,eAAO,MAAM,QAAQ;;;EAAqC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ResponseHeaders } from "../ResponseHeaders.js";
|
|
2
|
+
import type { InferSessionParams, SessionConstructor } from "../builders/SessionBuilder.js";
|
|
3
|
+
import { InferSettingsParams } from "../builders/SettingsBuilder.js";
|
|
4
|
+
import { SettingsHandler } from "../handlers/SettingsHandler.js";
|
|
5
|
+
import { ClientSessionSettings } from "./ClientSessionSettings.js";
|
|
6
|
+
declare const ClientSessionHandler_base: import("@dreamkit/ioc").IocClass<{
|
|
7
|
+
Headers: {
|
|
8
|
+
new (init?: HeadersInit): Headers;
|
|
9
|
+
prototype: Headers;
|
|
10
|
+
};
|
|
11
|
+
ResponseHeaders: typeof ResponseHeaders;
|
|
12
|
+
SettingsHandler: typeof SettingsHandler;
|
|
13
|
+
}, import("../handlers/SessionHandler.js").SessionHandler, never, import("@dreamkit/ioc").IocParams<{
|
|
14
|
+
Headers: {
|
|
15
|
+
new (init?: HeadersInit): Headers;
|
|
16
|
+
prototype: Headers;
|
|
17
|
+
};
|
|
18
|
+
ResponseHeaders: typeof ResponseHeaders;
|
|
19
|
+
SettingsHandler: typeof SettingsHandler;
|
|
20
|
+
}>>;
|
|
21
|
+
export declare class ClientSessionHandler extends ClientSessionHandler_base {
|
|
22
|
+
protected cookies: Map<string, string> | undefined;
|
|
23
|
+
protected decryptedCookies: Map<string, any>;
|
|
24
|
+
protected nextCookies: Map<string, any>;
|
|
25
|
+
settings(): Promise<InferSettingsParams<typeof ClientSessionSettings>>;
|
|
26
|
+
protected onGet<T extends SessionConstructor>(input: SessionConstructor): Promise<InferSessionParams<T> | undefined>;
|
|
27
|
+
protected onSet(input: SessionConstructor, value: any): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=ClientSessionHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientSessionHandler.d.ts","sourceRoot":"","sources":["../../src/presets/ClientSessionHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAGjE,OAAO,EAAE,qBAAqB,EAAY,MAAM,4BAA4B,CAAC;;;;;;;;;;;;;;;;AAE7E,qBAAa,oBAAqB,SAAQ,yBAIxC;IACA,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACnD,SAAS,CAAC,gBAAgB,mBAA0B;IACpD,SAAS,CAAC,WAAW,mBAA0B;IACzC,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC,OAAO,qBAAqB,CAAC,CAAC;cAO5D,KAAK,CAAC,CAAC,SAAS,kBAAkB,EAChD,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;cAsB7B,KAAK,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG;CA+B5D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ResponseHeaders } from "../ResponseHeaders.js";
|
|
2
|
+
import { SessionHandlerClass } from "../handlers/SessionHandler.js";
|
|
3
|
+
import { SettingsHandler } from "../handlers/SettingsHandler.js";
|
|
4
|
+
import { decodeCookies, encodeCookie } from "../utils/cookies.js";
|
|
5
|
+
import { decrypt, encrypt } from "../utils/crypto.js";
|
|
6
|
+
import { ClientSessionSettings, generate } from "./ClientSessionSettings.js";
|
|
7
|
+
export class ClientSessionHandler extends SessionHandlerClass({
|
|
8
|
+
Headers,
|
|
9
|
+
ResponseHeaders,
|
|
10
|
+
SettingsHandler,
|
|
11
|
+
}) {
|
|
12
|
+
cookies;
|
|
13
|
+
decryptedCookies = new Map();
|
|
14
|
+
nextCookies = new Map();
|
|
15
|
+
async settings() {
|
|
16
|
+
const settings = this.settingsHandler.get(ClientSessionSettings);
|
|
17
|
+
if (settings)
|
|
18
|
+
return settings;
|
|
19
|
+
const params = generate();
|
|
20
|
+
await this.settingsHandler.set(ClientSessionSettings, params);
|
|
21
|
+
return params;
|
|
22
|
+
}
|
|
23
|
+
async onGet(input) {
|
|
24
|
+
const name = input.options.name;
|
|
25
|
+
if (this.nextCookies.has(name))
|
|
26
|
+
return this.nextCookies.get(name);
|
|
27
|
+
if (this.decryptedCookies.has(name))
|
|
28
|
+
return this.decryptedCookies.get(name);
|
|
29
|
+
if (!this.cookies) {
|
|
30
|
+
const cookie = this.headers.get("cookie");
|
|
31
|
+
this.cookies = decodeCookies(cookie ?? "");
|
|
32
|
+
}
|
|
33
|
+
const value = this.cookies.get(name);
|
|
34
|
+
if (!value)
|
|
35
|
+
return;
|
|
36
|
+
try {
|
|
37
|
+
const settings = await this.settings();
|
|
38
|
+
const { iv, key } = settings;
|
|
39
|
+
const decryptedJson = await decrypt(value, iv, key);
|
|
40
|
+
const decryptedValue = JSON.parse(decryptedJson);
|
|
41
|
+
this.decryptedCookies.set(name, decryptedValue);
|
|
42
|
+
return decryptedValue;
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.warn(error);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async onSet(input, value) {
|
|
50
|
+
const name = input.options.name;
|
|
51
|
+
if (value === undefined || value === null) {
|
|
52
|
+
const cookie = encodeCookie({
|
|
53
|
+
name,
|
|
54
|
+
value: "",
|
|
55
|
+
path: "/",
|
|
56
|
+
expires: new Date("Thu Jan 01 1970 00:00:00 UTC"),
|
|
57
|
+
});
|
|
58
|
+
this.nextCookies.set(name, undefined);
|
|
59
|
+
this.responseHeaders.set("Set-Cookie", cookie);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const settings = await this.settings();
|
|
63
|
+
const { iv, key } = settings;
|
|
64
|
+
const jsonValue = JSON.stringify(value);
|
|
65
|
+
const cookie = encodeCookie({
|
|
66
|
+
name,
|
|
67
|
+
path: "/",
|
|
68
|
+
...(input.options.timelife && {
|
|
69
|
+
maxAge: (input.options.timelife.days || 0 * 24 * 60 * 60) +
|
|
70
|
+
(input.options.timelife.hours || 0 * 60 * 60) +
|
|
71
|
+
(input.options.timelife.minutes || 0 * 60) +
|
|
72
|
+
(input.options.timelife.seconds || 0),
|
|
73
|
+
}),
|
|
74
|
+
value: await encrypt(jsonValue, iv, key),
|
|
75
|
+
});
|
|
76
|
+
this.nextCookies.set(name, value);
|
|
77
|
+
this.responseHeaders.set("Set-Cookie", cookie);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InferObjectProps } from "@dreamkit/schema";
|
|
2
|
+
declare const params: {
|
|
3
|
+
key: import("@dreamkit/schema").StringType<{}>;
|
|
4
|
+
iv: import("@dreamkit/schema").StringType<{}>;
|
|
5
|
+
};
|
|
6
|
+
declare const ClientSessionSettings_base: import("../index.js").SettingsConstructor<{
|
|
7
|
+
name: "clientSession";
|
|
8
|
+
params: import("@dreamkit/schema").ObjectType<{
|
|
9
|
+
key: import("@dreamkit/schema").StringType<{}>;
|
|
10
|
+
iv: import("@dreamkit/schema").StringType<{}>;
|
|
11
|
+
}, {}>;
|
|
12
|
+
}>;
|
|
13
|
+
export declare class ClientSessionSettings extends ClientSessionSettings_base {
|
|
14
|
+
}
|
|
15
|
+
export declare function generate(): InferObjectProps<typeof params>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=ClientSessionSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientSessionSettings.d.ts","sourceRoot":"","sources":["../../src/presets/ClientSessionSettings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAK,MAAM,kBAAkB,CAAC;AAEvD,QAAA,MAAM,MAAM;;;CAGX,CAAC;;;;;;;;AAEF,qBAAa,qBAAsB,SAAQ,0BAMhC;CAAG;AAEd,wBAAgB,QAAQ,IAAI,gBAAgB,CAAC,OAAO,MAAM,CAAC,CAK1D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { $settings } from "../objects/$settings.js";
|
|
2
|
+
import { generateIv, generateKey } from "../utils/crypto.js";
|
|
3
|
+
import { s } from "@dreamkit/schema";
|
|
4
|
+
const params = {
|
|
5
|
+
key: s.string(),
|
|
6
|
+
iv: s.string(),
|
|
7
|
+
};
|
|
8
|
+
export class ClientSessionSettings extends $settings
|
|
9
|
+
.name("clientSession")
|
|
10
|
+
.params(params)
|
|
11
|
+
.optional()
|
|
12
|
+
// generated on demand in ClientSessionHandler
|
|
13
|
+
//.generate(generate)
|
|
14
|
+
.create() {
|
|
15
|
+
}
|
|
16
|
+
export function generate() {
|
|
17
|
+
return {
|
|
18
|
+
iv: generateIv(),
|
|
19
|
+
key: generateKey(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAEnD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAEpD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type Cookie = {
|
|
2
|
+
name: string;
|
|
3
|
+
value?: string;
|
|
4
|
+
expires?: Date;
|
|
5
|
+
maxAge?: number;
|
|
6
|
+
domain?: string;
|
|
7
|
+
path?: string;
|
|
8
|
+
secure?: boolean;
|
|
9
|
+
httpOnly?: boolean;
|
|
10
|
+
sameSite?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function encodeCookie(cookie: Cookie): string;
|
|
13
|
+
export declare function decodeCookie(cookie: string): {
|
|
14
|
+
name: string;
|
|
15
|
+
value: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function decodeCookies(cookies: string): Map<string, string>;
|
|
18
|
+
//# sourceMappingURL=cookies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/utils/cookies.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,UAa1C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM;;;EAiB1C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,uBAO5C"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export function encodeCookie(cookie) {
|
|
2
|
+
return (`${cookie.name || ""}=${cookie.value || ""}` +
|
|
3
|
+
(cookie.expires != null
|
|
4
|
+
? `; Expires=${cookie.expires.toUTCString()}`
|
|
5
|
+
: "") +
|
|
6
|
+
((cookie.maxAge ?? null != null) ? `; Max-Age=${cookie.maxAge}` : "") +
|
|
7
|
+
((cookie.domain ?? null != null) ? `; Domain=${cookie.domain}` : "") +
|
|
8
|
+
((cookie.path ?? null != null) ? `; Path=${cookie.path}` : "") +
|
|
9
|
+
(cookie.secure ? "; Secure" : "") +
|
|
10
|
+
(cookie.httpOnly ? "; HttpOnly" : "") +
|
|
11
|
+
((cookie.sameSite ?? null != null) ? `; SameSite=${cookie.sameSite}` : ""));
|
|
12
|
+
}
|
|
13
|
+
export function decodeCookie(cookie) {
|
|
14
|
+
const indexOfEquals = cookie.indexOf("=");
|
|
15
|
+
let name;
|
|
16
|
+
let value;
|
|
17
|
+
if (indexOfEquals === -1) {
|
|
18
|
+
name = "";
|
|
19
|
+
value = cookie.trim();
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
name = cookie.slice(0, indexOfEquals).trim();
|
|
23
|
+
value = cookie.slice(indexOfEquals + 1).trim();
|
|
24
|
+
}
|
|
25
|
+
const firstQuote = value.indexOf('"');
|
|
26
|
+
const lastQuote = value.lastIndexOf('"');
|
|
27
|
+
if (firstQuote !== -1 && lastQuote !== -1) {
|
|
28
|
+
value = value.substring(firstQuote + 1, lastQuote);
|
|
29
|
+
}
|
|
30
|
+
return { name, value };
|
|
31
|
+
}
|
|
32
|
+
export function decodeCookies(cookies) {
|
|
33
|
+
const object = new Map();
|
|
34
|
+
for (const cookie of cookies.split(";")) {
|
|
35
|
+
const { name, value } = decodeCookie(cookie);
|
|
36
|
+
if (name.length)
|
|
37
|
+
object.set(name, value);
|
|
38
|
+
}
|
|
39
|
+
return object;
|
|
40
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const algorithm: {
|
|
2
|
+
name: string;
|
|
3
|
+
length: number;
|
|
4
|
+
};
|
|
5
|
+
export declare function random(length: number): string;
|
|
6
|
+
export declare function generateIv(): string;
|
|
7
|
+
export declare function generateKey(): string;
|
|
8
|
+
export declare function parseSecrets(...input: (string | ArrayBuffer)[]): ArrayBuffer[];
|
|
9
|
+
export declare function encrypt(input: string, iv: string | ArrayBuffer, key: string | ArrayBuffer): Promise<string>;
|
|
10
|
+
export declare function decrypt(input: string | ArrayBuffer, iv: string | ArrayBuffer, key: string | ArrayBuffer): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS;;;CAGrB,CAAC;AAEF,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,YAAY,CAC1B,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,GACjC,WAAW,EAAE,CAEf;AAED,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GAAG,WAAW,EACxB,GAAG,EAAE,MAAM,GAAG,WAAW,mBAmB1B;AAED,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,GAAG,WAAW,EAC3B,EAAE,EAAE,MAAM,GAAG,WAAW,EACxB,GAAG,EAAE,MAAM,GAAG,WAAW,mBAiB1B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// https://medium.com/@tony.infisical/guide-to-web-crypto-api-for-encryption-decryption-1a2c698ebc25
|
|
2
|
+
import { fromBase64, toBase64 } from "./buffer.js";
|
|
3
|
+
export const algorithm = {
|
|
4
|
+
name: "AES-GCM",
|
|
5
|
+
length: 256,
|
|
6
|
+
};
|
|
7
|
+
export function random(length) {
|
|
8
|
+
return toBase64(crypto.getRandomValues(new Uint8Array(length)));
|
|
9
|
+
}
|
|
10
|
+
export function generateIv() {
|
|
11
|
+
return random(16);
|
|
12
|
+
}
|
|
13
|
+
export function generateKey() {
|
|
14
|
+
return random(32);
|
|
15
|
+
}
|
|
16
|
+
export function parseSecrets(...input) {
|
|
17
|
+
return input.map((v) => (typeof v === "string" ? fromBase64(v) : v));
|
|
18
|
+
}
|
|
19
|
+
export async function encrypt(input, iv, key) {
|
|
20
|
+
const [ivBuffer, keyBuffer] = parseSecrets(iv, key);
|
|
21
|
+
const encodedPlaintext = new TextEncoder().encode(input);
|
|
22
|
+
const secretKey = await crypto.subtle.importKey("raw", keyBuffer, { name: algorithm.name, length: algorithm.length }, true, ["encrypt", "decrypt"]);
|
|
23
|
+
const result = await crypto.subtle.encrypt({ name: algorithm.name, iv: ivBuffer }, secretKey, encodedPlaintext);
|
|
24
|
+
return toBase64(result);
|
|
25
|
+
}
|
|
26
|
+
export async function decrypt(input, iv, key) {
|
|
27
|
+
const [inputBuffer, ivBuffer, keyBuffer] = parseSecrets(input, iv, key);
|
|
28
|
+
const secretKey = await crypto.subtle.importKey("raw", keyBuffer, { name: algorithm.name, length: algorithm.length }, true, ["encrypt", "decrypt"]);
|
|
29
|
+
const textBuffer = await crypto.subtle.decrypt({ name: algorithm.name, iv: ivBuffer }, secretKey, inputBuffer);
|
|
30
|
+
return new TextDecoder().decode(textBuffer);
|
|
31
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dreamkit/app",
|
|
3
|
-
"version": "0.0.7-next.
|
|
3
|
+
"version": "0.0.7-next.4",
|
|
4
4
|
"description": "Set of utils to create applications.",
|
|
5
5
|
"homepage": "https://dreamkit.dev",
|
|
6
6
|
"repository": {
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"debug": "^4.3.7",
|
|
30
|
-
"@dreamkit/func": "0.0.3-next.
|
|
31
|
-
"@dreamkit/ioc": "0.0.2-next.
|
|
30
|
+
"@dreamkit/func": "0.0.3-next.4",
|
|
31
|
+
"@dreamkit/ioc": "0.0.2-next.2",
|
|
32
32
|
"@dreamkit/kind": "0.0.2",
|
|
33
|
-
"@dreamkit/schema": "0.0.5-next.
|
|
33
|
+
"@dreamkit/schema": "0.0.5-next.2",
|
|
34
34
|
"@dreamkit/utils": "0.0.5-next.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Constructor } from "@dreamkit/utils/ts.js";
|
|
2
|
-
export declare const kindMiddleware: (input: object, name?: string) => void, isMiddleware: (input: unknown) => input is MiddlewareConstructor;
|
|
3
|
-
export type MiddlewareConstructor = Constructor<Middleware>;
|
|
4
|
-
export declare abstract class Middleware {
|
|
5
|
-
abstract onRequest(): any;
|
|
6
|
-
}
|
|
7
|
-
export declare const MiddlewareClass: <P extends import("@dreamkit/ioc").IocParamsUserConfig = {}>(params: P) => import("@dreamkit/ioc").IocClass<P & {}, Middleware, never, import("@dreamkit/ioc").IocParams<P & {}>>;
|
|
8
|
-
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/objects/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,eAAO,MAAO,cAAc,0CAAE,YAAY,oDAEzC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;AAC5D,8BAAsB,UAAU;IAI9B,QAAQ,CAAC,SAAS,IAAI,GAAG;CAC1B;AAED,eAAO,MAAM,eAAe,mLAA6B,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { createIocClass } from "@dreamkit/ioc";
|
|
2
|
-
import { createKind } from "@dreamkit/kind";
|
|
3
|
-
export const [kindMiddleware, isMiddleware] = createKind("@dreamkit/app/middleware");
|
|
4
|
-
export class Middleware {
|
|
5
|
-
static {
|
|
6
|
-
kindMiddleware(this);
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
export const MiddlewareClass = createIocClass(Middleware);
|
package/lib/objects/service.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { Constructor } from "@dreamkit/utils/ts.js";
|
|
2
|
-
export declare const kindService: (input: object, name?: string) => void, isService: (input: unknown) => input is ServiceConstructor;
|
|
3
|
-
type SyncOrAsync<T> = T | Promise<T>;
|
|
4
|
-
export type Shutdown = () => SyncOrAsync<void>;
|
|
5
|
-
export type AppService = {
|
|
6
|
-
name: string;
|
|
7
|
-
service: ServiceConstructor;
|
|
8
|
-
started: boolean;
|
|
9
|
-
shutdown?: Shutdown;
|
|
10
|
-
};
|
|
11
|
-
export type ServiceStop = SyncOrAsync<void> | Shutdown;
|
|
12
|
-
export type ServiceConstructor = Constructor<Service>;
|
|
13
|
-
export declare abstract class Service {
|
|
14
|
-
get name(): string | undefined;
|
|
15
|
-
abstract onStart(): ServiceStop;
|
|
16
|
-
onStop(): any;
|
|
17
|
-
}
|
|
18
|
-
export declare const ServiceClass: <P extends import("@dreamkit/ioc").IocParamsUserConfig = {}>(params: P) => import("@dreamkit/ioc").IocClass<P & {}, Service, never, import("@dreamkit/ioc").IocParams<P & {}>>;
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/objects/service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,eAAO,MAAO,WAAW,0CAAE,SAAS,iDAEnC,CAAC;AAEF,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;AACvD,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AACtD,8BAAsB,OAAO;IAI3B,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAE7B;IACD,QAAQ,CAAC,OAAO,IAAI,WAAW;IAC/B,MAAM,IAAI,GAAG;CACd;AAED,eAAO,MAAM,YAAY,gLAA0B,CAAC"}
|
package/lib/objects/service.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { createIocClass } from "@dreamkit/ioc";
|
|
2
|
-
import { createKind } from "@dreamkit/kind";
|
|
3
|
-
export const [kindService, isService] = createKind("@dreamkit/app/service");
|
|
4
|
-
export class Service {
|
|
5
|
-
static {
|
|
6
|
-
kindService(this);
|
|
7
|
-
}
|
|
8
|
-
get name() {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
onStop() { }
|
|
12
|
-
}
|
|
13
|
-
export const ServiceClass = createIocClass(Service);
|