@deessejs/server 0.0.0 → 1.0.1

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.
Files changed (159) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/dist/api/factory.d.ts +8 -8
  4. package/dist/api/factory.d.ts.map +1 -1
  5. package/dist/api/factory.js +181 -109
  6. package/dist/api/factory.js.map +1 -1
  7. package/dist/api/index.d.ts +2 -2
  8. package/dist/api/index.d.ts.map +1 -1
  9. package/dist/api/index.js +1 -1
  10. package/dist/api/index.js.map +1 -1
  11. package/dist/api/types.d.ts +31 -16
  12. package/dist/api/types.d.ts.map +1 -1
  13. package/dist/context/builder.d.ts +5 -4
  14. package/dist/context/builder.d.ts.map +1 -1
  15. package/dist/context/builder.js +8 -3
  16. package/dist/context/builder.js.map +1 -1
  17. package/dist/context/types.d.ts +10 -3
  18. package/dist/context/types.d.ts.map +1 -1
  19. package/dist/errors/server-error.d.ts +9 -3
  20. package/dist/errors/server-error.d.ts.map +1 -1
  21. package/dist/errors/server-error.js +16 -4
  22. package/dist/errors/server-error.js.map +1 -1
  23. package/dist/errors/types.d.ts +1 -0
  24. package/dist/errors/types.d.ts.map +1 -1
  25. package/dist/events/dsl.d.ts +55 -0
  26. package/dist/events/dsl.d.ts.map +1 -0
  27. package/dist/events/dsl.js +42 -0
  28. package/dist/events/dsl.js.map +1 -0
  29. package/dist/events/emitter.d.ts +27 -6
  30. package/dist/events/emitter.d.ts.map +1 -1
  31. package/dist/events/emitter.js +193 -23
  32. package/dist/events/emitter.js.map +1 -1
  33. package/dist/events/index.d.ts +4 -1
  34. package/dist/events/index.d.ts.map +1 -1
  35. package/dist/events/index.js +3 -1
  36. package/dist/events/index.js.map +1 -1
  37. package/dist/events/queue.d.ts +19 -0
  38. package/dist/events/queue.d.ts.map +1 -0
  39. package/dist/events/queue.js +54 -0
  40. package/dist/events/queue.js.map +1 -0
  41. package/dist/events/types.d.ts +1 -1
  42. package/dist/events/types.d.ts.map +1 -1
  43. package/dist/hooks/executor.d.ts +3 -3
  44. package/dist/hooks/executor.d.ts.map +1 -1
  45. package/dist/hooks/types.d.ts +4 -4
  46. package/dist/hooks/types.d.ts.map +1 -1
  47. package/dist/index.d.ts +6 -3
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +5 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/internal-mutation/builder.d.ts +13 -10
  52. package/dist/internal-mutation/builder.d.ts.map +1 -1
  53. package/dist/internal-mutation/builder.js +57 -1
  54. package/dist/internal-mutation/builder.js.map +1 -1
  55. package/dist/internal-mutation/types.d.ts +5 -4
  56. package/dist/internal-mutation/types.d.ts.map +1 -1
  57. package/dist/internal-query/builder.d.ts +13 -10
  58. package/dist/internal-query/builder.d.ts.map +1 -1
  59. package/dist/internal-query/builder.js +56 -1
  60. package/dist/internal-query/builder.js.map +1 -1
  61. package/dist/internal-query/types.d.ts +4 -3
  62. package/dist/internal-query/types.d.ts.map +1 -1
  63. package/dist/middleware/builder.d.ts +1 -1
  64. package/dist/middleware/builder.d.ts.map +1 -1
  65. package/dist/middleware/helpers.d.ts +28 -0
  66. package/dist/middleware/helpers.d.ts.map +1 -0
  67. package/dist/middleware/helpers.js +31 -0
  68. package/dist/middleware/helpers.js.map +1 -0
  69. package/dist/middleware/types.d.ts.map +1 -1
  70. package/dist/mutation/builder.d.ts +13 -10
  71. package/dist/mutation/builder.d.ts.map +1 -1
  72. package/dist/mutation/builder.js +55 -1
  73. package/dist/mutation/builder.js.map +1 -1
  74. package/dist/mutation/types.d.ts +5 -4
  75. package/dist/mutation/types.d.ts.map +1 -1
  76. package/dist/query/builder.d.ts +18 -18
  77. package/dist/query/builder.d.ts.map +1 -1
  78. package/dist/query/builder.js +83 -32
  79. package/dist/query/builder.js.map +1 -1
  80. package/dist/query/types.d.ts +21 -18
  81. package/dist/query/types.d.ts.map +1 -1
  82. package/dist/router/builder.d.ts +4 -12
  83. package/dist/router/builder.d.ts.map +1 -1
  84. package/dist/router/builder.js +10 -32
  85. package/dist/router/builder.js.map +1 -1
  86. package/dist/router/types.d.ts +78 -2
  87. package/dist/router/types.d.ts.map +1 -1
  88. package/dist/type-test.d.ts +2 -0
  89. package/dist/type-test.d.ts.map +1 -0
  90. package/dist/type-test.js +2 -0
  91. package/dist/type-test.js.map +1 -0
  92. package/dist/types.d.ts +28 -7
  93. package/dist/types.d.ts.map +1 -1
  94. package/eslint.config.js +124 -1
  95. package/package.json +42 -38
  96. package/src/api/factory.ts +243 -160
  97. package/src/api/index.ts +2 -2
  98. package/src/api/types.ts +45 -18
  99. package/src/context/builder.ts +16 -10
  100. package/src/context/types.ts +11 -4
  101. package/src/errors/server-error.ts +20 -9
  102. package/src/errors/types.ts +1 -0
  103. package/src/events/dsl.ts +65 -0
  104. package/src/events/emitter.ts +224 -35
  105. package/src/events/index.ts +4 -1
  106. package/src/events/queue.ts +70 -0
  107. package/src/events/types.ts +1 -3
  108. package/src/hooks/executor.ts +4 -4
  109. package/src/hooks/types.ts +6 -11
  110. package/src/index.ts +11 -4
  111. package/src/internal-mutation/builder.ts +110 -36
  112. package/src/internal-mutation/types.ts +6 -5
  113. package/src/internal-query/builder.ts +102 -34
  114. package/src/internal-query/types.ts +5 -4
  115. package/src/middleware/builder.ts +1 -1
  116. package/src/middleware/helpers.ts +87 -0
  117. package/src/middleware/types.ts +1 -3
  118. package/src/mutation/builder.ts +106 -33
  119. package/src/mutation/types.ts +6 -5
  120. package/src/procedure/types.ts +1 -1
  121. package/src/query/builder.ts +151 -101
  122. package/src/query/types.ts +29 -19
  123. package/src/router/builder.ts +21 -46
  124. package/src/router/types.ts +120 -3
  125. package/src/types.ts +41 -38
  126. package/tests/index.test.ts +389 -2
  127. package/tests/type-safety.test.ts +496 -0
  128. package/dist/api.d.ts +0 -31
  129. package/dist/api.d.ts.map +0 -1
  130. package/dist/api.js +0 -155
  131. package/dist/api.js.map +0 -1
  132. package/dist/context.d.ts +0 -16
  133. package/dist/context.d.ts.map +0 -1
  134. package/dist/context.js +0 -25
  135. package/dist/context.js.map +0 -1
  136. package/dist/errors.d.ts +0 -30
  137. package/dist/errors.d.ts.map +0 -1
  138. package/dist/errors.js +0 -79
  139. package/dist/errors.js.map +0 -1
  140. package/dist/events.d.ts +0 -14
  141. package/dist/events.d.ts.map +0 -1
  142. package/dist/events.js +0 -42
  143. package/dist/events.js.map +0 -1
  144. package/dist/hooks.d.ts +0 -11
  145. package/dist/hooks.d.ts.map +0 -1
  146. package/dist/hooks.js +0 -26
  147. package/dist/hooks.js.map +0 -1
  148. package/dist/procedures.d.ts +0 -23
  149. package/dist/procedures.d.ts.map +0 -1
  150. package/dist/procedures.js +0 -4
  151. package/dist/procedures.js.map +0 -1
  152. package/dist/query-builder.d.ts +0 -37
  153. package/dist/query-builder.d.ts.map +0 -1
  154. package/dist/query-builder.js +0 -103
  155. package/dist/query-builder.js.map +0 -1
  156. package/dist/router.d.ts +0 -32
  157. package/dist/router.d.ts.map +0 -1
  158. package/dist/router.js +0 -98
  159. package/dist/router.js.map +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # @deessejs/server
2
+
3
+ ## 1.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - aefa639: Initialize changesets for monorepo release management
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Nesalia Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,19 +1,19 @@
1
- import type { Plugin, Middleware, Router, Procedure } from "../types.js";
1
+ import { type Plugin, type Middleware, type Router, type Procedure } from "../types.js";
2
2
  import { EventEmitter } from "../events/emitter.js";
3
- import type { APIInstance, LocalExecutor } from "./types.js";
3
+ import { type APIInstance, type TypedAPIInstance, type RequestInfo } from "./types.js";
4
4
  export declare function createAPI<Ctx, TRoutes extends Router<Ctx>>(config: {
5
5
  router: TRoutes;
6
- context: Ctx;
6
+ context?: Ctx;
7
+ createContext?: (requestInfo?: RequestInfo) => Ctx;
7
8
  plugins?: Plugin<Ctx>[];
8
9
  middleware?: Middleware<Ctx>[];
9
10
  eventEmitter?: EventEmitter<any>;
10
- }): APIInstance<Ctx, TRoutes>;
11
+ }): TypedAPIInstance<Ctx, TRoutes>;
11
12
  export declare function createPublicAPI<Ctx, TRoutes extends Router<Ctx>>(api: APIInstance<Ctx, TRoutes>): APIInstance<Ctx, PublicRouter<TRoutes>>;
12
- export { createPublicAPI as createClient };
13
- export declare function createLocalExecutor<Ctx>(api: APIInstance<Ctx>): LocalExecutor<Ctx>;
14
- type PublicRouter<TRoutes extends Router> = {
13
+ type PublicRouter<TRoutes extends Router<any, any>> = {
15
14
  [K in keyof TRoutes as TRoutes[K] extends Procedure<any, any, any> ? TRoutes[K] extends {
16
15
  type: "query" | "mutation";
17
- } ? K : never : K]: TRoutes[K] extends Router ? PublicRouter<TRoutes[K]> : TRoutes[K];
16
+ } ? K : never : K]: TRoutes[K] extends Router<any, any> ? PublicRouter<TRoutes[K]> : TRoutes[K];
18
17
  };
18
+ export {};
19
19
  //# sourceMappingURL=factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/api/factory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAa,aAAa,EAAE,MAAM,YAAY,CAAC;AAmDxE,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC,EACxD,MAAM,EAAE;IACN,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;CAClC,GACA,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,CAU3B;AAMD,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC,EAC9D,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,GAC7B,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAQzC;AAMD,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,CAAC;AAM3C,wBAAgB,mBAAmB,CAAC,GAAG,EACrC,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,GACpB,aAAa,CAAC,GAAG,CAAC,CASpB;AAiED,KAAK,YAAY,CAAC,OAAO,SAAS,MAAM,IAAI;KACzC,CAAC,IAAI,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAC9D,OAAO,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,OAAO,GAAG,UAAU,CAAA;KAAE,GAC/C,CAAC,GACD,KAAK,GACP,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,MAAM,GAC7B,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/api/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,MAAM,EAAE,KAAK,SAAS,EAA6D,MAAM,aAAa,CAAC;AACnJ,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpD,OAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAwMxF,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC,EACxD,MAAM,EAAE;IACN,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,KAAK,GAAG,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;CAClC,GACA,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CA+ChC;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC,EAC9D,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,GAC7B,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAWzC;AAED,KAAK,YAAY,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI;KACnD,CAAC,IAAI,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAC9D,OAAO,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,OAAO,GAAG,UAAU,CAAA;KAAE,GAC/C,CAAC,GACD,KAAK,GACP,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GACvC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;CACf,CAAC"}
@@ -1,161 +1,233 @@
1
- import { createErrorResult } from "../errors/server-error.js";
2
- // ============================================
3
- // API Instance
4
- // ============================================
5
- class APIInstanceImpl {
6
- router;
7
- ctx;
8
- plugins;
9
- globalMiddleware;
10
- eventEmitter;
11
- constructor(config) {
12
- this.router = config.router;
13
- this.ctx = config.context;
14
- this.plugins = config.plugins;
15
- this.globalMiddleware = config.middleware;
16
- this.eventEmitter = config.eventEmitter;
17
- }
18
- async executeRaw(route, args) {
19
- // Parse route like "users.get" or "posts.list"
20
- const parts = route.split(".");
21
- let current = this.router;
22
- for (let i = 0; i < parts.length - 1; i++) {
23
- current = current[parts[i]];
24
- if (!current) {
25
- return createErrorResult("ROUTE_NOT_FOUND", `Route not found: ${route}`);
1
+ import { err, error as errorFn, none } from "@deessejs/fp";
2
+ import { createPendingEventQueue } from "../events/queue.js";
3
+ import { createErrorResult, ServerException } from "../errors/server-error.js";
4
+ import { isRouter, isProcedure } from "../router/index.js";
5
+ function createRouterProxy(router, ctx, globalMiddleware, rootRouter, eventEmitter, queue, path = []
6
+ /* eslint-disable @typescript-eslint/consistent-return */
7
+ ) {
8
+ return new Proxy({}, {
9
+ get(target, prop) {
10
+ if (prop === "then" || prop === "toJSON" || prop === "valueOf" || prop === Symbol.toStringTag) {
11
+ return undefined;
26
12
  }
27
- }
28
- const procedure = current[parts[parts.length - 1]];
29
- if (!procedure || !isProcedure(procedure)) {
13
+ if (typeof prop !== "string") {
14
+ return none();
15
+ }
16
+ const value = router[prop];
17
+ if (value === undefined) {
18
+ return none();
19
+ }
20
+ if (isProcedure(value)) {
21
+ const fullPath = [...path, prop].join(".");
22
+ return (args) => executeRoute(rootRouter, ctx, globalMiddleware, fullPath, args, eventEmitter, queue);
23
+ }
24
+ if (typeof value === "object" && value !== null) {
25
+ return createRouterProxy(value, ctx, globalMiddleware, rootRouter, eventEmitter, queue, [...path, prop]);
26
+ }
27
+ return none();
28
+ },
29
+ });
30
+ }
31
+ async function executeRoute(router, ctx, globalMiddleware, route, args, eventEmitter, queue) {
32
+ const parts = route.split(".");
33
+ let current = router;
34
+ for (let i = 0; i < parts.length - 1; i++) {
35
+ current = current[parts[i]];
36
+ if (!current) {
30
37
  return createErrorResult("ROUTE_NOT_FOUND", `Route not found: ${route}`);
31
38
  }
32
- // Execute with hooks
33
- return executeProcedure(procedure, this.ctx, args, this.globalMiddleware);
34
39
  }
35
- async execute(route, args) {
36
- return this.executeRaw(route, args);
40
+ const procedure = current[parts.at(-1)];
41
+ if (!procedure || !isProcedure(procedure)) {
42
+ return createErrorResult("ROUTE_NOT_FOUND", `Route not found: ${route}`);
37
43
  }
44
+ return executeProcedure(procedure, ctx, args, globalMiddleware, eventEmitter, queue, route);
38
45
  }
39
- // ============================================
40
- // createAPI - Main factory function
41
- // ============================================
42
- export function createAPI(config) {
43
- const { router, context, plugins = [], middleware = [], eventEmitter } = config;
44
- return new APIInstanceImpl({
45
- router,
46
- context,
47
- plugins,
48
- middleware,
49
- eventEmitter,
50
- });
51
- }
52
- // ============================================
53
- // createPublicAPI
54
- // ============================================
55
- export function createPublicAPI(api) {
56
- const publicRouter = filterPublicRouter(api.router);
57
- return new APIInstanceImpl({
58
- router: publicRouter,
59
- context: api.ctx,
60
- plugins: api.plugins,
61
- middleware: api.globalMiddleware,
62
- });
63
- }
64
- // ============================================
65
- // createClient (alias)
66
- // ============================================
67
- export { createPublicAPI as createClient };
68
- // ============================================
69
- // createLocalExecutor
70
- // ============================================
71
- export function createLocalExecutor(api) {
72
- const events = [];
46
+ function createHandlerContext(ctx, queue) {
47
+ const send = (name, data, options) => {
48
+ queue.enqueue({
49
+ name: name,
50
+ data,
51
+ timestamp: new Date().toISOString(),
52
+ namespace: options?.namespace ?? "default",
53
+ options,
54
+ });
55
+ };
73
56
  return {
74
- execute: async (route, args) => {
75
- return api.executeRaw(route, args);
76
- },
77
- getEvents: () => events,
57
+ ...ctx,
58
+ send,
78
59
  };
79
60
  }
80
- // ============================================
81
- // Helper Functions
82
- // ============================================
83
- function isProcedure(obj) {
84
- return (obj &&
85
- typeof obj === "object" &&
86
- "type" in obj &&
87
- ["query", "mutation", "internalQuery", "internalMutation"].includes(obj.type));
88
- }
89
- async function executeProcedure(procedure, ctx, args, middleware) {
61
+ async function executeProcedure(procedure, ctx, args, middleware, eventEmitter, queue, route) {
62
+ // Create handler context with send function
63
+ const handlerCtx = createHandlerContext(ctx, queue);
64
+ // Validate args if schema is defined
65
+ const hookedProc = procedure;
66
+ if (hookedProc.argsSchema) {
67
+ const parseResult = hookedProc.argsSchema.safeParse(args);
68
+ if (!parseResult.success) {
69
+ const errors = parseResult.error.errors.map((e) => `${e.path.join(".")}: ${e.message}`);
70
+ /* eslint-disable unicorn/throw-new-error -- errorFn returns a function, not a constructor */
71
+ const ValidationError = errorFn({ name: "VALIDATION_ERROR", message: (args) => args.message });
72
+ return err(ValidationError({ message: errors.join(", ") })
73
+ .addNotes(`Validation failed for route: ${route}`));
74
+ /* eslint-enable unicorn/throw-new-error */
75
+ }
76
+ args = parseResult.data;
77
+ }
78
+ // Extract per-procedure middleware and combine with global middleware
79
+ // Per-procedure middleware runs AFTER global middleware (as per design doc)
80
+ const procedureMiddleware = hookedProc._middleware || [];
81
+ const allMiddleware = [...middleware, ...procedureMiddleware];
90
82
  try {
91
- // Apply middleware chain
92
83
  let index = 0;
93
- const next = async () => {
94
- if (index >= middleware.length) {
95
- // Execute the actual handler
96
- const hookedProc = procedure;
84
+ /* eslint-disable-next-line sonarjs/cognitive-complexity, complexity -- Middleware chain requires this complexity */
85
+ const next = async (overrides) => {
86
+ // Merge context if overrides provided
87
+ const currentCtx = overrides?.ctx ? { ...handlerCtx, ...overrides.ctx } : handlerCtx;
88
+ if (index >= allMiddleware.length) {
89
+ // No more middleware, execute procedure handler
97
90
  if (hookedProc._hooks?.beforeInvoke) {
98
- await hookedProc._hooks.beforeInvoke(ctx, args);
91
+ await hookedProc._hooks.beforeInvoke(currentCtx, args);
99
92
  }
100
93
  try {
101
- const result = await procedure.handler(ctx, args);
94
+ const result = await procedure.handler(currentCtx, args);
102
95
  if (hookedProc._hooks?.afterInvoke) {
103
- await hookedProc._hooks.afterInvoke(ctx, args, result);
96
+ await hookedProc._hooks.afterInvoke(currentCtx, args, result);
104
97
  }
105
98
  if (result.ok && hookedProc._hooks?.onSuccess) {
106
- await hookedProc._hooks.onSuccess(ctx, args, result.value);
99
+ await hookedProc._hooks.onSuccess(currentCtx, args, result.value);
107
100
  }
108
101
  else if (!result.ok && hookedProc._hooks?.onError) {
109
- await hookedProc._hooks.onError(ctx, args, result.error);
102
+ await hookedProc._hooks.onError(currentCtx, args, result.error);
103
+ }
104
+ // Only emit events if handler succeeded
105
+ if (result.ok) {
106
+ await queue.flush(eventEmitter);
110
107
  }
111
108
  return result;
112
109
  }
113
110
  catch (error) {
114
111
  if (hookedProc._hooks?.onError) {
115
- await hookedProc._hooks.onError(ctx, args, error);
112
+ await hookedProc._hooks.onError(currentCtx, args, error);
116
113
  }
117
- throw error;
114
+ const errToReturn = error instanceof Error ? error : new Error(String(error));
115
+ /* eslint-disable unicorn/throw-new-error -- errorFn returns a function, not a constructor */
116
+ const InternalError = errorFn({ name: "INTERNAL_ERROR", message: (args) => args.message });
117
+ return err(InternalError({ message: errToReturn.message })
118
+ .addNotes(`Error in route: ${route}`)
119
+ .from(errorFn({ name: "INTERNAL_ERROR", message: (_) => errToReturn.message })({ message: errToReturn.message })));
120
+ /* eslint-enable unicorn/throw-new-error */
118
121
  }
119
122
  }
120
- const mw = middleware[index++];
121
- return mw.handler(ctx, next);
123
+ const mw = allMiddleware[index++];
124
+ return mw.handler(currentCtx, {
125
+ next: (innerOverrides) => next(innerOverrides),
126
+ args,
127
+ meta: {},
128
+ });
122
129
  };
123
130
  return await next();
124
131
  }
125
132
  catch (error) {
126
- return createErrorResult("INTERNAL_ERROR", error?.message || "Internal error");
133
+ // On error, discard pending events (don't emit them)
134
+ queue.clear();
135
+ const errToReturn = error instanceof Error ? error : new Error(String(error));
136
+ if (error instanceof ServerException) {
137
+ /* eslint-disable unicorn/throw-new-error -- errorFn returns a function, not a constructor */
138
+ const ServerError = errorFn({ name: error.code, message: (args) => args.message });
139
+ return err(ServerError({ message: error.message })
140
+ .addNotes(`Route: ${route}`)
141
+ .from(errorFn({ name: error.code, message: (_) => error.message })({ message: error.message })));
142
+ /* eslint-enable unicorn/throw-new-error */
143
+ }
144
+ /* eslint-disable unicorn/throw-new-error -- errorFn returns a function, not a constructor */
145
+ const UnexpectedError = errorFn({ name: "INTERNAL_ERROR", message: (args) => args.message });
146
+ return err(UnexpectedError({ message: errToReturn.message })
147
+ .addNotes(`Unexpected error in route: ${route}`)
148
+ .from(errorFn({ name: "INTERNAL_ERROR", message: (_) => errToReturn.message })({ message: errToReturn.message })));
149
+ /* eslint-enable unicorn/throw-new-error */
127
150
  }
128
151
  }
152
+ export function createAPI(config) {
153
+ const { router, context, createContext, plugins = [], middleware = [], eventEmitter } = config;
154
+ const queue = createPendingEventQueue();
155
+ // Resolve context factory - createContext takes precedence over static context
156
+ // Both factories accept optional RequestInfo for per-request context enrichment
157
+ const contextFactory = createContext ?? ((_requestInfo) => context);
158
+ const executeRawInternal = (route, args, ctx) => {
159
+ return executeRoute(router, ctx, middleware, route, args, eventEmitter, queue);
160
+ };
161
+ const execute = async (route, args, requestInfo) => {
162
+ const ctx = contextFactory(requestInfo); // Fresh context per request, with optional request info
163
+ return executeRawInternal(route, args, ctx);
164
+ };
165
+ const executeRaw = async (route, args, requestInfo) => {
166
+ const ctx = contextFactory(requestInfo); // Fresh context per request, with optional request info
167
+ return executeRawInternal(route, args, ctx);
168
+ };
169
+ const initialCtx = contextFactory();
170
+ const state = {
171
+ router,
172
+ ctx: initialCtx,
173
+ plugins,
174
+ globalMiddleware: middleware,
175
+ eventEmitter,
176
+ executeRaw,
177
+ execute,
178
+ };
179
+ const routerProxy = createRouterProxy(state.router, state.ctx, state.globalMiddleware, state.router, eventEmitter, queue);
180
+ return new Proxy(state, {
181
+ get(target, prop) {
182
+ if (prop === "router")
183
+ return target.router;
184
+ if (prop === "ctx")
185
+ return target.ctx;
186
+ if (prop === "plugins")
187
+ return target.plugins;
188
+ if (prop === "globalMiddleware")
189
+ return target.globalMiddleware;
190
+ if (prop === "eventEmitter")
191
+ return target.eventEmitter;
192
+ if (prop === "execute")
193
+ return target.execute.bind(target);
194
+ if (prop === "executeRaw")
195
+ return target.executeRaw.bind(target);
196
+ if (prop === "getEvents")
197
+ return () => target.eventEmitter?.getEventLog() ?? [];
198
+ return routerProxy[prop];
199
+ },
200
+ });
201
+ }
202
+ export function createPublicAPI(api) {
203
+ const publicRouter = filterPublicRouter(api.router);
204
+ // Try to get createContext from the API instance if available
205
+ const createContext = api.createContext;
206
+ return createAPI({
207
+ router: publicRouter,
208
+ context: api.ctx,
209
+ createContext: createContext,
210
+ plugins: api.plugins,
211
+ middleware: api.globalMiddleware,
212
+ });
213
+ }
129
214
  function filterPublicRouter(router) {
130
215
  const result = {};
131
216
  for (const key in router) {
132
217
  const value = router[key];
133
218
  if (isRouter(value)) {
134
- // Recurse into nested router
135
219
  result[key] = filterPublicRouter(value);
136
220
  }
137
221
  else if (isProcedure(value)) {
138
- // Only include query and mutation
139
222
  if (value.type === "query" || value.type === "mutation") {
140
223
  result[key] = value;
141
224
  }
142
225
  }
143
226
  else {
144
- // Pass through anything else
145
227
  result[key] = value;
146
228
  }
147
229
  }
148
230
  return result;
149
231
  }
150
- function isRouter(obj) {
151
- if (!obj || typeof obj !== "object")
152
- return false;
153
- // If it has procedure-like properties, it's not a plain router
154
- for (const key of Object.keys(obj)) {
155
- if (isProcedure(obj[key])) {
156
- return false;
157
- }
158
- }
159
- return true;
160
- }
232
+ /* eslint-enable @typescript-eslint/no-explicit-any */
161
233
  //# sourceMappingURL=factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/api/factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/api/factory.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export type { APIInstance, LocalExecutor, APIConfig } from "./types.js";
2
- export { createAPI, createPublicAPI, createClient, createLocalExecutor } from "./factory.js";
1
+ export type { APIInstance, APIConfig, RequestInfo } from "./types.js";
2
+ export { createAPI, createPublicAPI } from "./factory.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
package/dist/api/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { createAPI, createPublicAPI, createClient, createLocalExecutor } from "./factory.js";
1
+ export { createAPI, createPublicAPI } from "./factory.js";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -1,22 +1,37 @@
1
- import type { Plugin, Middleware, Router } from "../types.js";
2
- import type { EventEmitter } from "../events/emitter.js";
3
- export interface APIInstance<Ctx, TRoutes = Router<Ctx>> {
1
+ import { type EventEmitter } from "../events/emitter.js";
2
+ import { type Result } from "@deessejs/fp";
3
+ import { type Router, type Procedure } from "../types.js";
4
+ export type EventEmitterAny = EventEmitter<any>;
5
+ export type ProcedureProxy<Ctx, Args, Output> = (args: Args) => Promise<Result<Output>>;
6
+ export type RouterProxy<Ctx, Routes extends Router<Ctx, any>> = {
7
+ [K in keyof Routes]: Routes[K] extends Procedure<Ctx, infer Args, infer Output> ? ProcedureProxy<Ctx, Args, Output> : Routes[K] extends Router<Ctx, any> ? RouterProxy<Ctx, Routes[K]> : Routes[K];
8
+ };
9
+ export type TypedAPIInstance<Ctx, TRoutes extends Router<Ctx, any>> = APIInstance<Ctx, TRoutes> & RouterProxy<Ctx, TRoutes>;
10
+ export interface RequestInfo {
11
+ headers?: Record<string, string>;
12
+ method?: string;
13
+ url?: string;
14
+ [key: string]: unknown;
15
+ }
16
+ export interface APIInstance<Ctx, TRoutes = Router<Ctx, any>> {
4
17
  readonly router: TRoutes;
5
18
  readonly ctx: Ctx;
6
- readonly plugins: Plugin<Ctx>[];
7
- readonly globalMiddleware: Middleware<Ctx>[];
8
- execute(route: string, args: unknown): Promise<import("@deessejs/fp").Result<unknown>>;
9
- executeRaw(route: string, args: unknown): Promise<import("@deessejs/fp").Result<unknown>>;
10
- }
11
- export interface LocalExecutor<Ctx> {
12
- execute(route: string, args: unknown): Promise<import("@deessejs/fp").Result<unknown>>;
13
- getEvents(): any[];
19
+ readonly plugins: import("../types.js").Plugin<Ctx>[];
20
+ readonly globalMiddleware: import("../types.js").Middleware<Ctx>[];
21
+ readonly eventEmitter?: EventEmitterAny;
22
+ execute(route: string, args: unknown, requestInfo?: RequestInfo): Promise<import("@deessejs/fp").Result<unknown>>;
23
+ executeRaw(route: string, args: unknown, requestInfo?: RequestInfo): Promise<import("@deessejs/fp").Result<unknown>>;
14
24
  }
15
- export interface APIConfig<Ctx, TRoutes extends Router<Ctx>> {
25
+ export interface APIConfig<TRoutes extends Router<unknown, any>> {
16
26
  router: TRoutes;
17
- context: Ctx;
18
- plugins: Plugin<Ctx>[];
19
- middleware: Middleware<Ctx>[];
20
- eventEmitter?: EventEmitter<any>;
27
+ context?: unknown;
28
+ /**
29
+ * Factory function to create context per request.
30
+ * Receives optional RequestInfo (headers, method, url) for per-request context enrichment.
31
+ */
32
+ createContext?: (requestInfo?: RequestInfo) => unknown;
33
+ plugins: import("../types.js").Plugin<unknown>[];
34
+ middleware: import("../types.js").Middleware<unknown>[];
35
+ eventEmitter?: EventEmitterAny;
21
36
  }
22
37
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAa,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAE7C,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACvF,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3F;AAED,MAAM,WAAW,aAAa,CAAC,GAAG;IAChC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACvF,SAAS,IAAI,GAAG,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS,CAAC,GAAG,EAAE,OAAO,SAAS,MAAM,CAAC,GAAG,CAAC;IACzD,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B,YAAY,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;CAClC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,12 @@
1
- import type { EventRegistry, Middleware, Router } from "../types.js";
1
+ import { type EventRegistry, type Middleware, type Router } from "../types.js";
2
2
  import { QueryBuilder } from "../query/builder.js";
3
- import type { DefineContextConfig } from "./types.js";
3
+ import { type TypedAPIInstance } from "../api/types.js";
4
+ import { type DefineContextConfig } from "./types.js";
4
5
  export declare function defineContext<Ctx, Events extends EventRegistry = EventRegistry>(config: DefineContextConfig<Ctx, Events>): {
5
- t: QueryBuilder<Ctx>;
6
+ t: QueryBuilder<Ctx, Events>;
6
7
  createAPI: (apiConfig: {
7
8
  router: Router<Ctx>;
8
9
  middleware?: Middleware<Ctx>[];
9
- }) => any;
10
+ }) => TypedAPIInstance<Ctx, Router<Ctx>>;
10
11
  };
11
12
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/context/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,aAAa,CAC3B,GAAG,EACH,MAAM,SAAS,aAAa,GAAG,aAAa,EAE5C,MAAM,EAAE,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,GACvC;IACD,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IAErB,SAAS,EAAE,CAAC,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAAC,UAAU,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAA;KAAE,KAAK,GAAG,CAAC;CACxF,CAqBA"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/context/builder.ts"],"names":[],"mappings":"AAAA,OAAQ,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAQ,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEvD,wBAAgB,aAAa,CAC3B,GAAG,EACH,MAAM,SAAS,aAAa,GAAG,aAAa,EAE5C,MAAM,EAAE,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,GACvC;IACD,CAAC,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,EAAE,CAAC,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAAC,UAAU,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAA;KAAE,KAAK,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;CACvH,CA2BA"}
@@ -2,16 +2,21 @@ import { QueryBuilder } from "../query/builder.js";
2
2
  import { EventEmitter } from "../events/emitter.js";
3
3
  import { createAPI } from "../api/factory.js";
4
4
  export function defineContext(config) {
5
- const { context, plugins = [], events } = config;
5
+ const { context, createContext, plugins = [], events } = config;
6
6
  // Create event emitter if events are defined
7
7
  const eventEmitter = events ? new EventEmitter(events) : undefined;
8
+ // Initial context for QueryBuilder (used for building queries, not for request handling)
9
+ const initialContext = createContext ? createContext() : context;
8
10
  // Create query builder (t)
9
- const t = new QueryBuilder(context, eventEmitter);
10
- // Create createAPI function - use any to avoid complex type issues
11
+ /* eslint-disable @typescript-eslint/no-explicit-any */
12
+ const t = new QueryBuilder(initialContext, eventEmitter);
13
+ /* eslint-enable @typescript-eslint/no-explicit-any */
14
+ // Create createAPI function
11
15
  const createAPIFn = (apiConfig) => {
12
16
  return createAPI({
13
17
  router: apiConfig.router,
14
18
  context,
19
+ createContext,
15
20
  plugins,
16
21
  middleware: apiConfig.middleware,
17
22
  eventEmitter,
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/context/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,MAAM,UAAU,aAAa,CAI3B,MAAwC;IAMxC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEjD,6CAA6C;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,CAAS,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3E,2BAA2B;IAC3B,MAAM,CAAC,GAAG,IAAI,YAAY,CAAM,OAAO,EAAE,YAAmB,CAAC,CAAC;IAE9D,mEAAmE;IACnE,MAAM,WAAW,GAAG,CAAC,SAAkE,EAAE,EAAE;QACzF,OAAO,SAAS,CAAC;YACf,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,OAAO;YACP,OAAO;YACP,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,YAAY;SACb,CAAQ,CAAC;IACZ,CAAC,CAAC;IAEF,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/context/builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAI9C,MAAM,UAAU,aAAa,CAI3B,MAAwC;IAKxC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEhE,6CAA6C;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,CAAS,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3E,yFAAyF;IACzF,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAEjE,2BAA2B;IAC3B,uDAAuD;IACvD,MAAM,CAAC,GAAG,IAAI,YAAY,CAAc,cAAqB,EAAE,YAAmB,CAAC,CAAC;IACpF,sDAAsD;IAEtD,4BAA4B;IAC5B,MAAM,WAAW,GAAG,CAAC,SAAkE,EAAE,EAAE;QACzF,OAAO,SAAS,CAAC;YACf,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,OAAO;YACP,aAAa;YACb,OAAO;YACP,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,YAAY;SACb,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;AACvC,CAAC"}