@dreamkit/app 0.0.26 → 0.0.28

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 CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type MiddlewareConstructor } from "./builders/MiddlewareBuilder.js";
2
- import { Route } from "./builders/RouteBuilder.js";
2
+ import { type Route } from "./builders/RouteBuilder.js";
3
3
  import { type AppService, type ServiceConstructor } from "./builders/ServiceBuilder.js";
4
4
  import { type SettingsConstructor } from "./builders/SettingsBuilder.js";
5
5
  import { AppContext } from "./contexts/AppContext.js";
@@ -17,6 +17,7 @@ export declare class App {
17
17
  readonly routes: Set<Route>;
18
18
  readonly services: Set<AppService>;
19
19
  readonly middlewares: Set<MiddlewareConstructor>;
20
+ protected sortedMiddlewares: MiddlewareConstructor[] | undefined;
20
21
  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>>>>;
21
22
  readonly api: Map<string, Func>;
22
23
  settingsHandler: SettingsHandlerConstructor | undefined;
@@ -36,7 +37,7 @@ export declare class App {
36
37
  action: "add" | "remove";
37
38
  }) => any>;
38
39
  };
39
- constructor();
40
+ constructor(input?: Record<string, any> | any[]);
40
41
  static instance(): App;
41
42
  static saveInstance(instance: App): void;
42
43
  static createGlobalInstance(): App;
@@ -51,7 +52,7 @@ export declare class App {
51
52
  }) => any): this;
52
53
  off(event: "add" | "remove" | "change", cb: any): this;
53
54
  getObjectId(value: unknown): string;
54
- remove(ids: string[]): Promise<void>;
55
+ remove(items: any[]): Promise<void>;
55
56
  removeAll(): Promise<void>;
56
57
  protected addService(service: ServiceConstructor): AppService;
57
58
  protected startService(item: AppService): Promise<void>;
@@ -60,8 +61,10 @@ export declare class App {
60
61
  protected resolveEntry(input: Record<string, any> | any[]): {
61
62
  [k: string]: any;
62
63
  };
64
+ private addSync;
63
65
  add(input: Record<string, any> | any[]): Promise<void>;
64
66
  createRequestContext(request: Request): RequestContext;
67
+ private getSortedMiddlewares;
65
68
  request(request: Request, context?: RequestContext): Promise<any>;
66
69
  protected initSettingsValue(constructor: SettingsConstructor): Promise<any>;
67
70
  protected registerAllSettings(): Promise<void>;
package/lib/App.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"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"}
package/lib/App.js CHANGED
@@ -28,6 +28,7 @@ export class App {
28
28
  routes = new Set();
29
29
  services = new Set();
30
30
  middlewares = new Set();
31
+ sortedMiddlewares;
31
32
  settings = new Set();
32
33
  api = new Map();
33
34
  settingsHandler;
@@ -37,11 +38,13 @@ export class App {
37
38
  remove: new Set(),
38
39
  change: new Set(),
39
40
  };
40
- constructor() {
41
+ constructor(input) {
41
42
  this.context = new AppContext()
42
43
  .register(App, { value: this })
43
44
  .register(EJSON, { value: new EJSON([]) });
44
45
  this.context.register(AppContext, { value: this.context });
46
+ if (input)
47
+ this.addSync(input);
45
48
  }
46
49
  static instance() {
47
50
  const value = globalThis[App.instanceKey];
@@ -72,8 +75,9 @@ export class App {
72
75
  }
73
76
  throw new Error("Object not found");
74
77
  }
75
- async remove(ids) {
76
- for (const id of ids) {
78
+ async remove(items) {
79
+ for (const item of items) {
80
+ const id = typeof item === "string" ? item : this.getObjectId(item);
77
81
  const value = this.objects.get(id);
78
82
  if (!value)
79
83
  throw new Error(`Object not found: ${id}`);
@@ -90,6 +94,7 @@ export class App {
90
94
  }
91
95
  else if (isMiddleware(value)) {
92
96
  this.middlewares.delete(value);
97
+ this.sortedMiddlewares = undefined;
93
98
  }
94
99
  else if (isSettings(value)) {
95
100
  this.removeSettings(value);
@@ -186,10 +191,7 @@ export class App {
186
191
  });
187
192
  return Object.fromEntries(entries);
188
193
  }
189
- async add(input) {
190
- let loadSettingsHandler = false;
191
- const services = [];
192
- const settings = [];
194
+ *addSync(input) {
193
195
  const objects = this.resolveEntry(input);
194
196
  for (const [id, value] of Object.entries(objects)) {
195
197
  const path = this.normalizeObjectPath(id);
@@ -199,18 +201,16 @@ export class App {
199
201
  }
200
202
  else if (isService(value)) {
201
203
  const item = this.addService(value);
202
- services.push(item);
203
204
  this.services.add(item);
204
205
  }
205
206
  else if (isMiddleware(value)) {
206
207
  this.middlewares.add(value);
208
+ this.sortedMiddlewares = undefined;
207
209
  }
208
210
  else if (isSettings(value)) {
209
211
  this.settings.add(value);
210
- settings.push(value);
211
212
  }
212
213
  else if (isSettingsHandler(value)) {
213
- loadSettingsHandler = true;
214
214
  this.settingsHandler = value;
215
215
  this.context.register(SettingsHandler, {
216
216
  singleton: true,
@@ -233,27 +233,31 @@ export class App {
233
233
  else {
234
234
  this.unknownObjectIds.add(id);
235
235
  }
236
- /*
237
- // [review] require create a dependency for removing
238
-
239
- if (is(value, IocBaseClass)) {
240
- const params = normalizeIocParams(value.$ioc.params);
241
- for (const key in params) {
242
- const { value } = params[key].options;
243
- if (isSettings(value)) {
244
- this.settings.add(value);
245
- settings.push(value);
246
- }
247
- }
248
- }*/
249
236
  this.objects.set(id, value);
237
+ yield { id, value };
238
+ }
239
+ }
240
+ async add(input) {
241
+ const settingsHandler = this.settingsHandler;
242
+ const services = [];
243
+ const settings = [];
244
+ for (const { id, value } of this.addSync(input)) {
245
+ if (this.started) {
246
+ if (isService(value)) {
247
+ const lastService = [...this.services][this.services.size - 1];
248
+ services.push(lastService);
249
+ }
250
+ else if (isSettings(value)) {
251
+ settings.push(value);
252
+ }
253
+ }
250
254
  for (const cb of this.listeners.add)
251
255
  await cb({ id, value });
252
256
  for (const cb of this.listeners.change)
253
257
  await cb({ id, value, action: "add" });
254
258
  }
255
259
  if (this.started) {
256
- if (loadSettingsHandler)
260
+ if (settingsHandler !== this.settingsHandler)
257
261
  await this.context.resolve(SettingsHandler, { abstract: true }).load();
258
262
  for (const setting of settings)
259
263
  await this.registerSettings(setting);
@@ -290,11 +294,21 @@ export class App {
290
294
  });
291
295
  return requestContext;
292
296
  }
297
+ getSortedMiddlewares() {
298
+ if (this.sortedMiddlewares)
299
+ return this.sortedMiddlewares;
300
+ this.sortedMiddlewares = sortByDeps([...this.middlewares].map((value) => ({
301
+ value,
302
+ deps: value.$options.deps,
303
+ priority: value.$options.priority,
304
+ }))).map((item) => item.value);
305
+ return this.sortedMiddlewares;
306
+ }
293
307
  async request(request, context) {
294
308
  if (!context)
295
309
  context = this.createRequestContext(request);
296
310
  log("request", context.resolve(RequestUrl).pathname);
297
- for (const middleware of this.middlewares) {
311
+ for (const middleware of this.getSortedMiddlewares()) {
298
312
  const $md = context.resolve(middleware);
299
313
  const response = await $md.onRequest();
300
314
  if (response && response instanceof Response) {
@@ -302,8 +316,8 @@ export class App {
302
316
  for (const [name, value] of headers.entries()) {
303
317
  response.headers.set(name, value);
304
318
  }
319
+ return response;
305
320
  }
306
- return response;
307
321
  }
308
322
  }
309
323
  async initSettingsValue(constructor) {
@@ -406,6 +420,7 @@ export class App {
406
420
  this.routes.clear();
407
421
  this.services.clear();
408
422
  this.middlewares.clear();
423
+ this.sortedMiddlewares = undefined;
409
424
  this.settings.clear();
410
425
  this.api.clear();
411
426
  this.context.resolve(EJSON).clear();
@@ -0,0 +1,6 @@
1
+ export declare class AppError extends Error {
2
+ constructor(message: string, options?: {
3
+ cause?: unknown;
4
+ });
5
+ }
6
+ //# sourceMappingURL=AppError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppError.d.ts","sourceRoot":"","sources":["../src/AppError.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAK3D"}
@@ -0,0 +1,7 @@
1
+ export class AppError extends Error {
2
+ constructor(message, options) {
3
+ super(message);
4
+ this.name = "AppError";
5
+ this.cause = options?.cause;
6
+ }
7
+ }
@@ -4,6 +4,8 @@ export declare const kindMiddleware: (input: object, name?: string) => void, isM
4
4
  export type MiddlewareSelf = IocParamsUserConfig | undefined;
5
5
  export type MiddlewareData<TSelf extends MiddlewareSelf = MiddlewareSelf> = {
6
6
  self?: TSelf;
7
+ deps?: MiddlewareConstructor[];
8
+ priority?: number;
7
9
  };
8
10
  export type MiddlewareOptions<T extends MiddlewareData = MiddlewareData> = T & {
9
11
  static?: Record<string, any>;
@@ -12,7 +14,9 @@ export type MergeMiddlewareData<D1 extends MiddlewareData, D2 extends Partial<Mi
12
14
  export declare abstract class Middleware {
13
15
  abstract onRequest(): any;
14
16
  }
15
- export type MiddlewareConstructor = Constructor<Middleware>;
17
+ export type MiddlewareConstructor = Constructor<Middleware> & {
18
+ $options: MiddlewareOptions;
19
+ };
16
20
  export declare class MiddlewareBuilder<T extends MiddlewareData = {}> {
17
21
  readonly data: T;
18
22
  readonly options: MiddlewareOptions<T>;
@@ -21,6 +25,8 @@ export declare class MiddlewareBuilder<T extends MiddlewareData = {}> {
21
25
  self<TSelf extends MiddlewareSelf>(value: TSelf): MiddlewareBuilder<MergeMiddlewareData<T, {
22
26
  self: TSelf;
23
27
  }>>;
28
+ deps(deps: MiddlewareConstructor[]): this;
29
+ priority(priority: number): this;
24
30
  create(): IocClass<T["self"] & {}, Middleware>;
25
31
  }
26
32
  //# sourceMappingURL=MiddlewareBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MiddlewareBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/MiddlewareBuilder.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,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,IAAI,CAAC,GAAG;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B,CAAC;AAEF,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;CAK/C"}
1
+ {"version":3,"file":"MiddlewareBuilder.d.ts","sourceRoot":"","sources":["../../src/builders/MiddlewareBuilder.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,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;IACb,IAAI,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,IAAI,CAAC,GAAG;IAC7E,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B,CAAC;AAEF,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,GAAG;IAC5D,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC;AAIF,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,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,IAAI;IAGzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAGhC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC;CAM/C"}
@@ -29,8 +29,15 @@ export class MiddlewareBuilder {
29
29
  self(value) {
30
30
  return this.clone({ self: value });
31
31
  }
32
+ deps(deps) {
33
+ return this.clone({ deps });
34
+ }
35
+ priority(priority) {
36
+ return this.clone({ priority });
37
+ }
32
38
  create() {
33
39
  const Class = MiddlewareClass(this.options.self || {});
40
+ Object.assign(Class, { $options: this.options });
34
41
  if (this.options.static)
35
42
  Object.assign(Class, this.options.static);
36
43
  return Class;
@@ -2,6 +2,7 @@ export { ResponseHeaders } from "./ResponseHeaders.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 { AppError } from "./AppError.js";
5
6
  export { defineRoutePath, type RoutePathFunc } from "./routePath.js";
6
7
  export { EJSON, type EJSONEncodedObject } from "./EJSON.js";
7
8
  export { AppContext } from "./contexts/AppContext.js";
@@ -15,7 +16,7 @@ export { $session } from "./objects/$session.js";
15
16
  export { $schema } from "./objects/$schema.js";
16
17
  export { RouteBuilder, type RouteOptions, type Route, type RouteData, type RouteProps, } from "./builders/RouteBuilder.js";
17
18
  export { $settings } from "./objects/$settings.js";
18
- export { Settings, SettingsBuilder, type SettingsConstructor, type SettingsData, isSettings, } from "./builders/SettingsBuilder.js";
19
+ export { Settings, SettingsBuilder, isSettings, type SettingsConstructor, type SettingsData, } from "./builders/SettingsBuilder.js";
19
20
  export { Middleware, isMiddleware, type MiddlewareConstructor, type MiddlewareOptions, type MiddlewareData, } from "./builders/MiddlewareBuilder.js";
20
21
  export { Serializer, type SerializerData, isSerializer, } from "./builders/SerializerBuilder.js";
21
22
  export { Service, type ServiceConstructor, type ServiceOptions, type ServiceData, isService, } from "./builders/ServiceBuilder.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.base.d.ts","sourceRoot":"","sources":["../src/index.base.ts"],"names":[],"mappings":"AAAA,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,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,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,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,UAAU,EACV,KAAK,cAAc,EACnB,YAAY,GACb,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"}
1
+ {"version":3,"file":"index.base.d.ts","sourceRoot":"","sources":["../src/index.base.ts"],"names":[],"mappings":"AAAA,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,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,KAAK,kBAAkB,EAAE,MAAM,YAAY,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,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,UAAU,EACV,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,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,UAAU,EACV,KAAK,cAAc,EACnB,YAAY,GACb,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"}
package/lib/index.base.js CHANGED
@@ -2,6 +2,7 @@ export { ResponseHeaders } from "./ResponseHeaders.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 { AppError } from "./AppError.js";
5
6
  export { defineRoutePath } from "./routePath.js";
6
7
  export { EJSON } from "./EJSON.js";
7
8
  // contexts
@@ -1,3 +1,4 @@
1
+ import { AppError } from "../AppError.js";
1
2
  import { TypeAssertError } from "@dreamkit/schema";
2
3
  export declare const errorSerializer: import("../index.base.js").Serializer<Error, {
3
4
  name: string;
@@ -5,4 +6,8 @@ export declare const errorSerializer: import("../index.base.js").Serializer<Erro
5
6
  }>;
6
7
  export declare const dateSerializer: import("../index.base.js").Serializer<Date, string>;
7
8
  export declare const typeAssertErrorSerializer: import("../index.base.js").Serializer<TypeAssertError, import("@dreamkit/schema").TypeAssertErrorData<any>[]>;
9
+ export declare const appErrorSerializer: import("../index.base.js").Serializer<AppError, {
10
+ message: string;
11
+ cause: unknown;
12
+ }>;
8
13
  //# sourceMappingURL=serializers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"serializers.d.ts","sourceRoot":"","sources":["../../src/presets/serializers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,eAAO,MAAM,eAAe;;;EAU1B,CAAC;AAEH,eAAO,MAAM,cAAc,qDAMzB,CAAC;AAEH,eAAO,MAAM,yBAAyB,+GAMpC,CAAC"}
1
+ {"version":3,"file":"serializers.d.ts","sourceRoot":"","sources":["../../src/presets/serializers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,eAAO,MAAM,eAAe;;;EAU1B,CAAC;AAEH,eAAO,MAAM,cAAc,qDAMzB,CAAC;AAEH,eAAO,MAAM,yBAAyB,+GAKpC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;EAK7B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { AppError } from "../AppError.js";
1
2
  import { $serializer } from "../objects/$serializer.js";
2
3
  import { TypeAssertError } from "@dreamkit/schema";
3
4
  export const errorSerializer = $serializer.create({
@@ -20,8 +21,13 @@ export const dateSerializer = $serializer.create({
20
21
  });
21
22
  export const typeAssertErrorSerializer = $serializer.create({
22
23
  key: "TypeAssertError",
23
- priority: -1,
24
24
  is: (input) => input instanceof TypeAssertError,
25
25
  to: (input) => input.errors,
26
26
  from: (input) => new TypeAssertError(input),
27
27
  });
28
+ export const appErrorSerializer = $serializer.create({
29
+ key: "AppError",
30
+ is: (input) => input instanceof AppError,
31
+ to: (input) => ({ message: input.message, cause: input.cause }),
32
+ from: (input) => new AppError(input.message, { cause: input.cause }),
33
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dreamkit/app",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "description": "Set of utils to create applications.",
5
5
  "homepage": "https://dreamkit.dev",
6
6
  "repository": {
@@ -28,10 +28,10 @@
28
28
  ],
29
29
  "dependencies": {
30
30
  "debug": "^4.4.3",
31
- "@dreamkit/func": "0.0.15",
31
+ "@dreamkit/func": "0.0.16",
32
32
  "@dreamkit/ioc": "0.3.2",
33
33
  "@dreamkit/kind": "0.0.4",
34
- "@dreamkit/schema": "0.0.11",
34
+ "@dreamkit/schema": "0.0.12",
35
35
  "@dreamkit/utils": "0.0.9"
36
36
  },
37
37
  "devDependencies": {