@dreamkit/app 0.0.7-next.0 → 0.0.7-next.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/lib/App.d.ts +17 -4
- package/lib/App.d.ts.map +1 -1
- package/lib/App.js +131 -8
- package/lib/builders/RouteBuilder.d.ts +3 -1
- package/lib/builders/RouteBuilder.d.ts.map +1 -1
- package/lib/builders/SettingsBuilder.d.ts +61 -0
- package/lib/builders/SettingsBuilder.d.ts.map +1 -0
- package/lib/builders/SettingsBuilder.js +92 -0
- package/lib/contexts/AppContext.d.ts +4 -0
- package/lib/contexts/AppContext.d.ts.map +1 -0
- package/lib/contexts/AppContext.js +7 -0
- package/lib/contexts/RequestContext.d.ts +4 -0
- package/lib/contexts/RequestContext.d.ts.map +1 -0
- package/lib/contexts/RequestContext.js +7 -0
- package/lib/handlers/SettingsHandler.d.ts +36 -0
- package/lib/handlers/SettingsHandler.d.ts.map +1 -0
- package/lib/handlers/SettingsHandler.js +59 -0
- package/lib/index.d.ts +7 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +9 -2
- package/lib/objects/$settings.d.ts +6 -0
- package/lib/objects/$settings.d.ts.map +1 -0
- package/lib/objects/$settings.js +2 -0
- package/lib/objects/middleware.d.ts +1 -1
- package/lib/objects/middleware.d.ts.map +1 -1
- package/lib/objects/service.d.ts +1 -1
- package/lib/objects/service.d.ts.map +1 -1
- package/package.json +5 -5
package/lib/App.d.ts
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import { Route } from "./builders/RouteBuilder.js";
|
|
2
|
+
import { SettingsConstructor } from "./builders/SettingsBuilder.js";
|
|
3
|
+
import { AppContext } from "./contexts/AppContext.js";
|
|
4
|
+
import { RequestContext } from "./contexts/RequestContext.js";
|
|
5
|
+
import { SettingsHandler, SettingsHandlerConstructor } from "./handlers/SettingsHandler.js";
|
|
2
6
|
import { MiddlewareConstructor } from "./objects/middleware.js";
|
|
3
7
|
import { AppService, ServiceConstructor } from "./objects/service.js";
|
|
4
|
-
import { IocContext } from "@dreamkit/ioc";
|
|
5
8
|
export declare class App {
|
|
6
9
|
static instanceKey: string;
|
|
7
10
|
readonly started = false;
|
|
8
|
-
readonly context:
|
|
11
|
+
readonly context: AppContext;
|
|
9
12
|
readonly objects: Map<string, any>;
|
|
10
13
|
readonly routes: Set<Route>;
|
|
11
14
|
readonly services: Set<AppService>;
|
|
12
15
|
readonly middlewares: Set<MiddlewareConstructor>;
|
|
16
|
+
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
|
+
settingsHandler: SettingsHandlerConstructor | undefined;
|
|
13
18
|
protected listeners: {
|
|
14
19
|
add: Set<(data: {
|
|
15
20
|
id: string;
|
|
@@ -28,6 +33,7 @@ export declare class App {
|
|
|
28
33
|
constructor();
|
|
29
34
|
static instance(): App;
|
|
30
35
|
static saveInstance(instance: App): void;
|
|
36
|
+
static createGlobalInstance(): App;
|
|
31
37
|
on(event: "add" | "remove", cb: (data: {
|
|
32
38
|
id: string;
|
|
33
39
|
value: unknown;
|
|
@@ -43,9 +49,16 @@ export declare class App {
|
|
|
43
49
|
protected addService(service: ServiceConstructor): AppService;
|
|
44
50
|
protected startService(item: AppService): Promise<void>;
|
|
45
51
|
protected stopService(item: AppService): Promise<void>;
|
|
46
|
-
add(
|
|
47
|
-
createRequestContext(request: Request):
|
|
52
|
+
add(input: Record<string, any> | any[]): Promise<void>;
|
|
53
|
+
createRequestContext(request: Request): RequestContext;
|
|
48
54
|
request(request: Request): Promise<Response | undefined>;
|
|
55
|
+
protected initSettingsValue(constructor: SettingsConstructor): Promise<{
|
|
56
|
+
[x: string]: any;
|
|
57
|
+
} | undefined>;
|
|
58
|
+
protected registerAllSettings(): Promise<import("./handlers/SettingsHandler.js").SettingsHandlerSaveResult | undefined>;
|
|
59
|
+
protected registerSettings(constructor: SettingsConstructor): Promise<void>;
|
|
60
|
+
protected removeSettings(constructor: SettingsConstructor): void;
|
|
61
|
+
protected seettingsHandler(): SettingsHandler | undefined;
|
|
49
62
|
start(): Promise<void>;
|
|
50
63
|
stop(): Promise<void>;
|
|
51
64
|
}
|
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,10 +1,20 @@
|
|
|
1
1
|
import { RequestUrl } from "./RequestUrl.js";
|
|
2
|
+
import { isApi } from "./builders/ApiBuilder.js";
|
|
3
|
+
import { isSettings } from "./builders/SettingsBuilder.js";
|
|
4
|
+
import { AppContext } from "./contexts/AppContext.js";
|
|
5
|
+
import { RequestContext } from "./contexts/RequestContext.js";
|
|
6
|
+
import { isSettingsHandler, SettingsHandler, } from "./handlers/SettingsHandler.js";
|
|
2
7
|
import { isMiddleware } from "./objects/middleware.js";
|
|
3
8
|
import { isService, } from "./objects/service.js";
|
|
4
|
-
import { isRoute } from "./utils/kind.js";
|
|
9
|
+
import { isRoute, kindApp } from "./utils/kind.js";
|
|
5
10
|
import { log } from "./utils/log.js";
|
|
6
|
-
import {
|
|
11
|
+
import { IocBaseClass, normalizeIocParams, } from "@dreamkit/ioc";
|
|
12
|
+
import { getKinds, is } from "@dreamkit/kind";
|
|
13
|
+
import { merge } from "@dreamkit/utils/object.js";
|
|
7
14
|
export class App {
|
|
15
|
+
static {
|
|
16
|
+
kindApp(this);
|
|
17
|
+
}
|
|
8
18
|
static instanceKey = "dk:app";
|
|
9
19
|
started = false;
|
|
10
20
|
context;
|
|
@@ -12,15 +22,18 @@ export class App {
|
|
|
12
22
|
routes = new Set();
|
|
13
23
|
services = new Set();
|
|
14
24
|
middlewares = new Set();
|
|
25
|
+
settings = new Set();
|
|
26
|
+
settingsHandler;
|
|
15
27
|
listeners = {
|
|
16
28
|
add: new Set(),
|
|
17
29
|
remove: new Set(),
|
|
18
30
|
change: new Set(),
|
|
19
31
|
};
|
|
20
32
|
constructor() {
|
|
21
|
-
this.context =
|
|
33
|
+
this.context = new AppContext().register(App, {
|
|
22
34
|
value: this,
|
|
23
35
|
});
|
|
36
|
+
this.context.register(AppContext, { value: this.context });
|
|
24
37
|
}
|
|
25
38
|
static instance() {
|
|
26
39
|
const value = globalThis[App.instanceKey];
|
|
@@ -31,6 +44,11 @@ export class App {
|
|
|
31
44
|
static saveInstance(instance) {
|
|
32
45
|
globalThis[App.instanceKey] = instance;
|
|
33
46
|
}
|
|
47
|
+
static createGlobalInstance() {
|
|
48
|
+
const app = new App();
|
|
49
|
+
this.saveInstance(app);
|
|
50
|
+
return app;
|
|
51
|
+
}
|
|
34
52
|
on(event, cb) {
|
|
35
53
|
this.listeners[event].add(cb);
|
|
36
54
|
return this;
|
|
@@ -63,6 +81,13 @@ export class App {
|
|
|
63
81
|
else if (isMiddleware(value)) {
|
|
64
82
|
this.middlewares.delete(value);
|
|
65
83
|
}
|
|
84
|
+
else if (isSettings(value)) {
|
|
85
|
+
this.removeSettings(value);
|
|
86
|
+
}
|
|
87
|
+
else if (isSettingsHandler(value)) {
|
|
88
|
+
this.context.unregister(SettingsHandler);
|
|
89
|
+
this.settingsHandler = undefined;
|
|
90
|
+
}
|
|
66
91
|
for (const cb of this.listeners.remove)
|
|
67
92
|
await cb({ id, value });
|
|
68
93
|
for (const cb of this.listeners.change)
|
|
@@ -76,6 +101,14 @@ export class App {
|
|
|
76
101
|
service,
|
|
77
102
|
started: false,
|
|
78
103
|
};
|
|
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
|
+
}
|
|
79
112
|
this.services.add(item);
|
|
80
113
|
return item;
|
|
81
114
|
}
|
|
@@ -96,8 +129,16 @@ export class App {
|
|
|
96
129
|
item.started = false;
|
|
97
130
|
log("service stopped", { name });
|
|
98
131
|
}
|
|
99
|
-
async add(
|
|
132
|
+
async add(input) {
|
|
133
|
+
let loadSettingsHandler = false;
|
|
100
134
|
const services = [];
|
|
135
|
+
const settings = [];
|
|
136
|
+
const objects = Array.isArray(input)
|
|
137
|
+
? input.reduce((result, value, index) => {
|
|
138
|
+
result[index] = value;
|
|
139
|
+
return result;
|
|
140
|
+
}, {})
|
|
141
|
+
: input;
|
|
101
142
|
for (const [id, value] of Object.entries(objects)) {
|
|
102
143
|
if (isRoute(value)) {
|
|
103
144
|
this.routes.add(value);
|
|
@@ -110,6 +151,29 @@ export class App {
|
|
|
110
151
|
else if (isMiddleware(value)) {
|
|
111
152
|
this.middlewares.add(value);
|
|
112
153
|
}
|
|
154
|
+
else if (isSettings(value)) {
|
|
155
|
+
this.settings.add(value);
|
|
156
|
+
settings.push(value);
|
|
157
|
+
}
|
|
158
|
+
else if (isSettingsHandler(value)) {
|
|
159
|
+
loadSettingsHandler = true;
|
|
160
|
+
this.settingsHandler = value;
|
|
161
|
+
this.context.register(SettingsHandler, {
|
|
162
|
+
singleton: true,
|
|
163
|
+
useFactory: (context) => {
|
|
164
|
+
const handler = context.resolve(value);
|
|
165
|
+
handler["settings"] = this.settings;
|
|
166
|
+
return handler;
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
else if (isApi(value)) {
|
|
171
|
+
// Not implemented (using solid start actions)
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
console.warn("Unknown object", { id, value, kinds: getKinds(value) });
|
|
176
|
+
}
|
|
113
177
|
this.objects.set(id, value);
|
|
114
178
|
for (const cb of this.listeners.add)
|
|
115
179
|
await cb({ id, value });
|
|
@@ -117,17 +181,25 @@ export class App {
|
|
|
117
181
|
await cb({ id, value, action: "add" });
|
|
118
182
|
}
|
|
119
183
|
if (this.started) {
|
|
184
|
+
if (loadSettingsHandler)
|
|
185
|
+
await this.context.resolve(SettingsHandler).load();
|
|
186
|
+
for (const setting of settings)
|
|
187
|
+
await this.registerSettings(setting);
|
|
120
188
|
for (const service of services)
|
|
121
189
|
await this.startService(service);
|
|
122
190
|
}
|
|
123
191
|
}
|
|
124
192
|
createRequestContext(request) {
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
193
|
+
const context = new RequestContext({
|
|
194
|
+
parentContainer: this.context,
|
|
195
|
+
});
|
|
196
|
+
return context
|
|
197
|
+
.register(RequestContext, { value: context })
|
|
128
198
|
.register(Request, { value: request })
|
|
129
199
|
.register(Headers, { value: request.headers })
|
|
130
|
-
.register(RequestUrl, {
|
|
200
|
+
.register(RequestUrl, {
|
|
201
|
+
value: new RequestUrl(request.url, "http://localhost"),
|
|
202
|
+
});
|
|
131
203
|
}
|
|
132
204
|
async request(request) {
|
|
133
205
|
const context = this.createRequestContext(request);
|
|
@@ -139,9 +211,58 @@ export class App {
|
|
|
139
211
|
return response;
|
|
140
212
|
}
|
|
141
213
|
}
|
|
214
|
+
async initSettingsValue(constructor) {
|
|
215
|
+
const handler = this.context.resolve(SettingsHandler, {
|
|
216
|
+
optional: true,
|
|
217
|
+
});
|
|
218
|
+
if (!handler)
|
|
219
|
+
return;
|
|
220
|
+
const options = constructor.options;
|
|
221
|
+
let value = await handler.get(constructor);
|
|
222
|
+
if (options.optional && !options.generate && !value)
|
|
223
|
+
return;
|
|
224
|
+
const generated = options.generate?.(value || {}) || {};
|
|
225
|
+
if (Object.keys(generated).length) {
|
|
226
|
+
value = merge({ ...value }, generated);
|
|
227
|
+
await handler.set(constructor, value);
|
|
228
|
+
}
|
|
229
|
+
return value;
|
|
230
|
+
}
|
|
231
|
+
async registerAllSettings() {
|
|
232
|
+
const settingsHandler = this.seettingsHandler();
|
|
233
|
+
if (settingsHandler) {
|
|
234
|
+
settingsHandler.autoSave = false;
|
|
235
|
+
await settingsHandler.load();
|
|
236
|
+
}
|
|
237
|
+
try {
|
|
238
|
+
for (const st of this.settings)
|
|
239
|
+
await this.registerSettings(st);
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
return await settingsHandler?.save();
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
async registerSettings(constructor) {
|
|
246
|
+
const options = constructor.options;
|
|
247
|
+
const value = await this.initSettingsValue(constructor);
|
|
248
|
+
if (options.optional && !value)
|
|
249
|
+
return;
|
|
250
|
+
log("registering settings", { name: options.name });
|
|
251
|
+
this.context.register(constructor, {
|
|
252
|
+
value: new constructor(value),
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
removeSettings(constructor) {
|
|
256
|
+
this.settings.delete(constructor);
|
|
257
|
+
this.context.unregister(constructor);
|
|
258
|
+
}
|
|
259
|
+
seettingsHandler() {
|
|
260
|
+
return this.context.resolve(SettingsHandler, { optional: true });
|
|
261
|
+
}
|
|
142
262
|
async start() {
|
|
143
263
|
log("starting app");
|
|
144
264
|
this.started = true;
|
|
265
|
+
await this.registerAllSettings();
|
|
145
266
|
for (const item of this.services)
|
|
146
267
|
await this.startService(item);
|
|
147
268
|
}
|
|
@@ -158,6 +279,8 @@ export class App {
|
|
|
158
279
|
errors.push(error);
|
|
159
280
|
}
|
|
160
281
|
}
|
|
282
|
+
for (const settings of this.settings)
|
|
283
|
+
this.removeSettings(settings);
|
|
161
284
|
if (errors.length)
|
|
162
285
|
throw new AggregateError(errors, "App stop failed");
|
|
163
286
|
this.started = false;
|
|
@@ -9,7 +9,9 @@ export type RouteApi = {
|
|
|
9
9
|
[key: string]: (...args: any[]) => any;
|
|
10
10
|
};
|
|
11
11
|
export type ResolveRouteApi<T extends RouteData> = keyof T["api"] extends never ? never : {
|
|
12
|
-
[K in keyof T["api"]]: T["api"][K] extends Func<infer TData, infer TResult> ? Func<
|
|
12
|
+
[K in keyof T["api"]]: T["api"][K] extends Func<infer TData, infer TResult> ? Func<{
|
|
13
|
+
[K in keyof TData as K extends "self" ? never : K]: TData[K];
|
|
14
|
+
}, Promise<Awaited<TResult>>> : never;
|
|
13
15
|
};
|
|
14
16
|
export type RoutePreloadData<T extends RouteData> = {
|
|
15
17
|
intent: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/RouteBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,eAAe,EAGhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAAI;KAC/D,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK;CAC7C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAAC;AACxD,MAAM,MAAM,QAAQ,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,SAAS,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,GAC3E,KAAK,GACL;KACG,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAC7C,MAAM,KAAK,EACX,MAAM,OAAO,CACd,GACG,IAAI,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"RouteBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/RouteBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { InferType, MinimalObjectType, ObjectType, ObjectTypeProps } from "@dreamkit/schema";
|
|
2
|
+
import type { Merge, throwError } from "@dreamkit/utils/ts.js";
|
|
3
|
+
export declare const kindSettings: (input: object, name?: string) => void, isSettings: (input: unknown) => input is SettingsConstructor<SettingsData<SettingsName, SettingsParams, SettingsDefaults<SettingsParams>>>;
|
|
4
|
+
export type SettingsName = string | undefined;
|
|
5
|
+
export type SettingsParams = MinimalObjectType | undefined;
|
|
6
|
+
export type InferSettingsParams<T extends {
|
|
7
|
+
params?: SettingsParams;
|
|
8
|
+
}> = InferType<T["params"] & {}>;
|
|
9
|
+
export type SettingsDefaults<TParams extends SettingsParams = SettingsParams> = ((input: InferSettingsParams<{
|
|
10
|
+
params: NoInfer<TParams>;
|
|
11
|
+
}>) => any) | undefined;
|
|
12
|
+
export type SettingsData<TName extends SettingsName = SettingsName, TParams extends SettingsParams = SettingsParams, TDefaults extends SettingsDefaults = SettingsDefaults> = {
|
|
13
|
+
name?: TName;
|
|
14
|
+
params?: TParams;
|
|
15
|
+
defaults?: TDefaults;
|
|
16
|
+
};
|
|
17
|
+
export type SettingsOptions<T extends SettingsData = SettingsData> = T & {
|
|
18
|
+
generate?: (input: Record<string, unknown>) => InferType<T["params"] & {}>;
|
|
19
|
+
optional?: boolean;
|
|
20
|
+
};
|
|
21
|
+
export type MergeSettingsData<D1 extends SettingsData, D2 extends Partial<SettingsData>> = Merge<SettingsData, D1, D2>;
|
|
22
|
+
export declare abstract class Settings<T extends SettingsData = SettingsData> {
|
|
23
|
+
static get options(): SettingsOptions;
|
|
24
|
+
static get params(): void;
|
|
25
|
+
readonly options: SettingsOptions<T>;
|
|
26
|
+
readonly params: [undefined] extends [T["defaults"]] ? InferSettingsParams<T> : ReturnType<T["defaults"] & {}>;
|
|
27
|
+
constructor(params: InferSettingsParams<T>);
|
|
28
|
+
update(params: InferSettingsParams<T>): void;
|
|
29
|
+
}
|
|
30
|
+
export interface SettingsConstructor<T extends SettingsData = SettingsData> {
|
|
31
|
+
options: SettingsOptions<T>;
|
|
32
|
+
params: T["params"];
|
|
33
|
+
new (params: InferSettingsParams<T>): Settings<T>;
|
|
34
|
+
}
|
|
35
|
+
export declare class SettingsBuilder<T extends SettingsData = {
|
|
36
|
+
name: undefined;
|
|
37
|
+
params: undefined;
|
|
38
|
+
}> {
|
|
39
|
+
readonly data: T;
|
|
40
|
+
readonly options: SettingsOptions<T>;
|
|
41
|
+
constructor(options?: SettingsOptions<T>);
|
|
42
|
+
protected clone(next: Partial<SettingsOptions>): this;
|
|
43
|
+
name<TName extends SettingsName>(value: TName): SettingsBuilder<MergeSettingsData<T, {
|
|
44
|
+
name: TName;
|
|
45
|
+
}>>;
|
|
46
|
+
optional(value?: boolean): this;
|
|
47
|
+
defaults<D>(value: (input: InferSettingsParams<T>) => D): SettingsBuilder<MergeSettingsData<T, {
|
|
48
|
+
defaults: () => D;
|
|
49
|
+
}>>;
|
|
50
|
+
generate(value: (input: {
|
|
51
|
+
[K in keyof InferSettingsParams<T>]?: any;
|
|
52
|
+
}) => Partial<InferSettingsParams<T>> | undefined): this;
|
|
53
|
+
params<TParams extends SettingsParams>(type: TParams): SettingsBuilder<MergeSettingsData<T, {
|
|
54
|
+
params: TParams;
|
|
55
|
+
}>>;
|
|
56
|
+
params<TProps extends ObjectTypeProps>(props: TProps): SettingsBuilder<MergeSettingsData<T, {
|
|
57
|
+
params: ObjectType<TProps>;
|
|
58
|
+
}>>;
|
|
59
|
+
create: [undefined] extends [T["name"]] ? throwError<"Name is required"> : [undefined] extends [T["params"]] ? throwError<"Params is required"> : () => SettingsConstructor<T>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=SettingsBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/SettingsBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { createKind, kindOf } from "@dreamkit/kind";
|
|
2
|
+
import { ObjectType, s, } from "@dreamkit/schema";
|
|
3
|
+
export const [kindSettings, isSettings] = createKind("@dreamkit/app/settings");
|
|
4
|
+
export class Settings {
|
|
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
|
+
kindSettings(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
|
+
const error = new Error(`Invalid '${options.name}' settings`, {
|
|
24
|
+
cause: errors,
|
|
25
|
+
});
|
|
26
|
+
console.error(error);
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
this.params = options.defaults
|
|
30
|
+
? options.defaults(params)
|
|
31
|
+
: params;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class SettingsBuilder {
|
|
35
|
+
data;
|
|
36
|
+
options;
|
|
37
|
+
constructor(options = {}) {
|
|
38
|
+
this.options = options;
|
|
39
|
+
this.data = {
|
|
40
|
+
params: options.params,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
clone(next) {
|
|
44
|
+
const prev = this.options;
|
|
45
|
+
return new SettingsBuilder({
|
|
46
|
+
...prev,
|
|
47
|
+
...next,
|
|
48
|
+
params: "params" in next
|
|
49
|
+
? next.params === undefined || kindOf(next.params, ObjectType)
|
|
50
|
+
? next.params
|
|
51
|
+
: s.object(next.params)
|
|
52
|
+
: prev.params,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
name(value) {
|
|
56
|
+
return this.clone({ name: value });
|
|
57
|
+
}
|
|
58
|
+
optional(value = true) {
|
|
59
|
+
return this.clone({ optional: value });
|
|
60
|
+
}
|
|
61
|
+
defaults(value) {
|
|
62
|
+
return this.clone({ defaults: value });
|
|
63
|
+
}
|
|
64
|
+
generate(value) {
|
|
65
|
+
return this.clone({ generate: value });
|
|
66
|
+
}
|
|
67
|
+
params(params) {
|
|
68
|
+
return this.clone({ params });
|
|
69
|
+
}
|
|
70
|
+
create = function () {
|
|
71
|
+
if (!this.options.name)
|
|
72
|
+
throw new Error("Name is required");
|
|
73
|
+
if (!this.options.params)
|
|
74
|
+
throw new Error("Params is required");
|
|
75
|
+
const self = this;
|
|
76
|
+
class CustomSettings extends Settings {
|
|
77
|
+
static {
|
|
78
|
+
kindSettings(this, self.options.name);
|
|
79
|
+
}
|
|
80
|
+
static get options() {
|
|
81
|
+
return self.options;
|
|
82
|
+
}
|
|
83
|
+
static get params() {
|
|
84
|
+
return self.options.params;
|
|
85
|
+
}
|
|
86
|
+
constructor(params) {
|
|
87
|
+
super(params);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return CustomSettings;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppContext.d.ts","sourceRoot":"","sources":["../../src/contexts/AppContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,qBAAa,UAAW,SAAQ,UAAU;CAIzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestContext.d.ts","sourceRoot":"","sources":["../../src/contexts/RequestContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,qBAAa,cAAe,SAAQ,UAAU;CAI7C"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { InferSettingsParams, SettingsConstructor, SettingsData } from "../builders/SettingsBuilder.js";
|
|
2
|
+
import { AppContext } from "../contexts/AppContext.js";
|
|
3
|
+
import { IocClass } from "@dreamkit/ioc";
|
|
4
|
+
import { Constructor } from "@dreamkit/utils/ts.js";
|
|
5
|
+
export declare const kindSettingsHandler: (input: object, name?: string) => void, isSettingsHandler: (input: unknown) => input is SettingsHandlerConstructor;
|
|
6
|
+
export type SettingsHandlerConstructor = Constructor<SettingsHandler> & {
|
|
7
|
+
$ioc: any;
|
|
8
|
+
};
|
|
9
|
+
export type SettingsHandlerSaveResult = Record<string, {
|
|
10
|
+
path: string;
|
|
11
|
+
changed: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
declare const SettingsHandler_base: IocClass<{
|
|
14
|
+
AppContext: typeof AppContext;
|
|
15
|
+
}, import("@dreamkit/ioc").IocBaseClass<import("@dreamkit/ioc").IocParamsUserConfig>, never, import("@dreamkit/ioc").IocParams<{
|
|
16
|
+
AppContext: typeof AppContext;
|
|
17
|
+
}>>;
|
|
18
|
+
export declare abstract class SettingsHandler extends SettingsHandler_base {
|
|
19
|
+
autoSave: boolean;
|
|
20
|
+
protected data: Record<string, any>;
|
|
21
|
+
protected settings: Set<SettingsConstructor>;
|
|
22
|
+
protected pending: string[];
|
|
23
|
+
protected abstract onLoad(): Promise<Record<string, any>>;
|
|
24
|
+
protected abstract onSave(): Promise<SettingsHandlerSaveResult>;
|
|
25
|
+
load(): Promise<void>;
|
|
26
|
+
get<T extends SettingsData>(constructor: SettingsConstructor<T>): Promise<InferSettingsParams<T>>;
|
|
27
|
+
set<T extends SettingsData>(constructor: SettingsConstructor<T>, data: InferSettingsParams<T>): Promise<void>;
|
|
28
|
+
save(): Promise<SettingsHandlerSaveResult>;
|
|
29
|
+
protected getData(): Promise<{
|
|
30
|
+
prev: Record<string, any> | undefined;
|
|
31
|
+
next: Record<string, any> | undefined;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export declare const SettingsHandlerClass: <P extends import("@dreamkit/ioc").IocParamsUserConfig = {}>(params: P) => IocClass<P & {}, SettingsHandler, never, import("@dreamkit/ioc").IocParams<P & {}>>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=SettingsHandler.d.ts.map
|
|
@@ -0,0 +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;IAOJ,GAAG,CAAC,CAAC,SAAS,YAAY,EAC9B,WAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAClC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAG5B,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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AppContext } from "../contexts/AppContext.js";
|
|
2
|
+
import { createIocClass, IocClass } from "@dreamkit/ioc";
|
|
3
|
+
import { createKind } from "@dreamkit/kind";
|
|
4
|
+
export const [kindSettingsHandler, isSettingsHandler] = createKind("@dreamkit/app/SettingsHandler");
|
|
5
|
+
export class SettingsHandler extends IocClass({ AppContext }) {
|
|
6
|
+
static {
|
|
7
|
+
kindSettingsHandler(this);
|
|
8
|
+
}
|
|
9
|
+
autoSave = true;
|
|
10
|
+
data = {};
|
|
11
|
+
settings = new Set();
|
|
12
|
+
pending = [];
|
|
13
|
+
async load() {
|
|
14
|
+
this.data = await this.onLoad();
|
|
15
|
+
for (const settings of this.settings) {
|
|
16
|
+
const data = this.data[settings.options.name];
|
|
17
|
+
this.appContext.resolve(settings, { optional: true })?.update(data);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
async get(constructor) {
|
|
21
|
+
return this.data[constructor.options.name];
|
|
22
|
+
}
|
|
23
|
+
async set(constructor, data) {
|
|
24
|
+
const settingsInstance = this.appContext.resolve(constructor, {
|
|
25
|
+
optional: true,
|
|
26
|
+
});
|
|
27
|
+
if (settingsInstance) {
|
|
28
|
+
settingsInstance.update(data);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
this.appContext.register(constructor, {
|
|
32
|
+
value: new constructor(data),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const name = constructor.options.name;
|
|
36
|
+
this.data[name] = data;
|
|
37
|
+
this.pending.push(name);
|
|
38
|
+
if (this.autoSave)
|
|
39
|
+
await this.onSave();
|
|
40
|
+
}
|
|
41
|
+
async save() {
|
|
42
|
+
this.autoSave = true;
|
|
43
|
+
const result = await this.onSave();
|
|
44
|
+
this.pending.splice(0, this.pending.length);
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
async getData() {
|
|
48
|
+
if (!this.pending.length)
|
|
49
|
+
return { prev: undefined, next: undefined };
|
|
50
|
+
const prev = await this.onLoad();
|
|
51
|
+
const patch = Object.fromEntries(Object.entries(this.data).filter(([name]) => this.pending.includes(name)));
|
|
52
|
+
const next = Object.fromEntries(Object.entries(prev).map(([name, value]) => [name, patch[name] ?? value]));
|
|
53
|
+
for (const name in patch)
|
|
54
|
+
if (!(name in next))
|
|
55
|
+
next[name] = patch[name];
|
|
56
|
+
return { prev, next };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export const SettingsHandlerClass = createIocClass(SettingsHandler);
|
package/lib/index.d.ts
CHANGED
|
@@ -2,10 +2,15 @@ export { RequestUrl } from "./RequestUrl.js";
|
|
|
2
2
|
export { isRoute, isApp } from "./utils/kind.js";
|
|
3
3
|
export { isApi } from "./builders/ApiBuilder.js";
|
|
4
4
|
export { App } from "./App.js";
|
|
5
|
-
export { RouteBuilder, type RouteOptions, type Route, type RouteData, type RouteProps, } from "./builders/RouteBuilder.js";
|
|
6
5
|
export { defineRoutePath, routePath } from "./routePath.js";
|
|
7
|
-
export {
|
|
6
|
+
export { AppContext } from "./contexts/AppContext.js";
|
|
7
|
+
export { RequestContext } from "./contexts/RequestContext.js";
|
|
8
8
|
export { $api } from "./objects/$api.js";
|
|
9
|
+
export { $route } from "./objects/$route.js";
|
|
10
|
+
export { RouteBuilder, type RouteOptions, type Route, type RouteData, type RouteProps, } from "./builders/RouteBuilder.js";
|
|
11
|
+
export { $settings } from "./objects/$settings.js";
|
|
12
|
+
export { Settings, SettingsBuilder, type SettingsConstructor, type SettingsData, isSettings, } from "./builders/SettingsBuilder.js";
|
|
9
13
|
export { Middleware, MiddlewareClass, isMiddleware, } from "./objects/middleware.js";
|
|
10
14
|
export { Service, ServiceClass, type ServiceStop, isService, } from "./objects/service.js";
|
|
15
|
+
export { SettingsHandler, SettingsHandlerClass, type SettingsHandlerSaveResult, } from "./handlers/SettingsHandler.js";
|
|
11
16
|
//# 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,EACL,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,UAAU,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,
|
|
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,eAAe,EACf,YAAY,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,OAAO,EACP,YAAY,EACZ,KAAK,WAAW,EAChB,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,yBAAyB,GAC/B,MAAM,+BAA+B,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -2,10 +2,17 @@ export { RequestUrl } from "./RequestUrl.js";
|
|
|
2
2
|
export { isRoute, isApp } from "./utils/kind.js";
|
|
3
3
|
export { isApi } from "./builders/ApiBuilder.js";
|
|
4
4
|
export { App } from "./App.js";
|
|
5
|
-
export { RouteBuilder, } from "./builders/RouteBuilder.js";
|
|
6
5
|
export { defineRoutePath, routePath } from "./routePath.js";
|
|
6
|
+
// contexts
|
|
7
|
+
export { AppContext } from "./contexts/AppContext.js";
|
|
8
|
+
export { RequestContext } from "./contexts/RequestContext.js";
|
|
7
9
|
// objects
|
|
8
|
-
export { $route } from "./objects/$route.js";
|
|
9
10
|
export { $api } from "./objects/$api.js";
|
|
11
|
+
export { $route } from "./objects/$route.js";
|
|
12
|
+
export { RouteBuilder, } from "./builders/RouteBuilder.js";
|
|
13
|
+
export { $settings } from "./objects/$settings.js";
|
|
14
|
+
export { Settings, SettingsBuilder, isSettings, } from "./builders/SettingsBuilder.js";
|
|
10
15
|
export { Middleware, MiddlewareClass, isMiddleware, } from "./objects/middleware.js";
|
|
11
16
|
export { Service, ServiceClass, isService, } from "./objects/service.js";
|
|
17
|
+
// handlers
|
|
18
|
+
export { SettingsHandler, SettingsHandlerClass, } from "./handlers/SettingsHandler.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"$settings.d.ts","sourceRoot":"","sources":["../../src/objects/$settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,eAAO,MAAM,SAAS;;;EAAsC,CAAC"}
|
|
@@ -4,5 +4,5 @@ export type MiddlewareConstructor = Constructor<Middleware>;
|
|
|
4
4
|
export declare abstract class Middleware {
|
|
5
5
|
abstract onRequest(): any;
|
|
6
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>>;
|
|
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
8
|
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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"}
|
package/lib/objects/service.d.ts
CHANGED
|
@@ -15,6 +15,6 @@ export declare abstract class Service {
|
|
|
15
15
|
abstract onStart(): ServiceStop;
|
|
16
16
|
onStop(): any;
|
|
17
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>>;
|
|
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
19
|
export {};
|
|
20
20
|
//# sourceMappingURL=service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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/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.2",
|
|
4
4
|
"description": "Set of utils to create applications.",
|
|
5
5
|
"homepage": "https://dreamkit.dev",
|
|
6
6
|
"repository": {
|
|
@@ -27,11 +27,11 @@
|
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"debug": "^4.3.7",
|
|
30
|
-
"@dreamkit/func": "0.0.3-next.
|
|
31
|
-
"@dreamkit/ioc": "0.0.1",
|
|
30
|
+
"@dreamkit/func": "0.0.3-next.2",
|
|
31
|
+
"@dreamkit/ioc": "0.0.2-next.1",
|
|
32
32
|
"@dreamkit/kind": "0.0.2",
|
|
33
|
-
"@dreamkit/schema": "0.0.
|
|
34
|
-
"@dreamkit/utils": "0.0.
|
|
33
|
+
"@dreamkit/schema": "0.0.5-next.0",
|
|
34
|
+
"@dreamkit/utils": "0.0.5-next.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/debug": "^4.1.12",
|