@venizia/ignis 0.0.5-9 → 0.0.6-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base/applications/abstract.d.ts.map +1 -1
- package/dist/base/applications/abstract.js +1 -0
- package/dist/base/applications/abstract.js.map +1 -1
- package/dist/base/applications/base.d.ts.map +1 -1
- package/dist/base/applications/base.js +8 -1
- package/dist/base/applications/base.js.map +1 -1
- package/dist/base/applications/types.d.ts +10 -1
- package/dist/base/applications/types.d.ts.map +1 -1
- package/dist/base/controllers/abstract.d.ts +145 -22
- package/dist/base/controllers/abstract.d.ts.map +1 -1
- package/dist/base/controllers/abstract.js +101 -10
- package/dist/base/controllers/abstract.js.map +1 -1
- package/dist/base/controllers/base.d.ts +106 -17
- package/dist/base/controllers/base.d.ts.map +1 -1
- package/dist/base/controllers/base.js +94 -4
- package/dist/base/controllers/base.js.map +1 -1
- package/dist/base/controllers/common/constants.d.ts +34 -0
- package/dist/base/controllers/common/constants.d.ts.map +1 -1
- package/dist/base/controllers/common/constants.js +73 -1
- package/dist/base/controllers/common/constants.js.map +1 -1
- package/dist/base/controllers/common/types.d.ts +214 -57
- package/dist/base/controllers/common/types.d.ts.map +1 -1
- package/dist/base/controllers/common/types.js +9 -0
- package/dist/base/controllers/common/types.js.map +1 -1
- package/dist/base/controllers/factory/controller.d.ts +760 -40
- package/dist/base/controllers/factory/controller.d.ts.map +1 -1
- package/dist/base/controllers/factory/controller.js +370 -164
- package/dist/base/controllers/factory/controller.js.map +1 -1
- package/dist/base/controllers/factory/definition.d.ts +362 -142
- package/dist/base/controllers/factory/definition.d.ts.map +1 -1
- package/dist/base/controllers/factory/definition.js +288 -112
- package/dist/base/controllers/factory/definition.js.map +1 -1
- package/dist/base/controllers/factory/helper.d.ts +2 -0
- package/dist/base/controllers/factory/helper.d.ts.map +1 -0
- package/dist/base/controllers/factory/helper.js +3 -0
- package/dist/base/controllers/factory/helper.js.map +1 -0
- package/dist/base/datasources/base.d.ts.map +1 -1
- package/dist/base/datasources/base.js +10 -1
- package/dist/base/datasources/base.js.map +1 -1
- package/dist/base/metadata/index.d.ts +1 -0
- package/dist/base/metadata/index.d.ts.map +1 -1
- package/dist/base/metadata/index.js +1 -0
- package/dist/base/metadata/index.js.map +1 -1
- package/dist/base/metadata/request-context.d.ts +3 -0
- package/dist/base/metadata/request-context.d.ts.map +1 -0
- package/dist/base/metadata/request-context.js +9 -0
- package/dist/base/metadata/request-context.js.map +1 -0
- package/dist/base/metadata/routes.d.ts +31 -78
- package/dist/base/metadata/routes.d.ts.map +1 -1
- package/dist/base/metadata/routes.js +28 -34
- package/dist/base/metadata/routes.js.map +1 -1
- package/dist/base/middlewares/app-error.middleware.d.ts +11 -0
- package/dist/base/middlewares/app-error.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/app-error.middleware.js +87 -16
- package/dist/base/middlewares/app-error.middleware.js.map +1 -1
- package/dist/base/middlewares/emoji-favicon.middleware.d.ts +7 -0
- package/dist/base/middlewares/emoji-favicon.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/emoji-favicon.middleware.js +7 -0
- package/dist/base/middlewares/emoji-favicon.middleware.js.map +1 -1
- package/dist/base/middlewares/not-found.middleware.d.ts +8 -0
- package/dist/base/middlewares/not-found.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/not-found.middleware.js +8 -0
- package/dist/base/middlewares/not-found.middleware.js.map +1 -1
- package/dist/base/middlewares/request-normalize.middleware.d.ts +7 -0
- package/dist/base/middlewares/request-normalize.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/request-normalize.middleware.js +7 -0
- package/dist/base/middlewares/request-normalize.middleware.js.map +1 -1
- package/dist/base/middlewares/request-spy.middleware.d.ts +10 -0
- package/dist/base/middlewares/request-spy.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/request-spy.middleware.js +22 -0
- package/dist/base/middlewares/request-spy.middleware.js.map +1 -1
- package/dist/base/mixins/component.mixin.d.ts.map +1 -1
- package/dist/base/mixins/controller.mixin.d.ts.map +1 -1
- package/dist/base/mixins/repository.mixin.d.ts.map +1 -1
- package/dist/base/mixins/service.mixin.d.ts.map +1 -1
- package/dist/base/models/common/types.d.ts +24 -3
- package/dist/base/models/common/types.d.ts.map +1 -1
- package/dist/base/models/common/types.js +7 -5
- package/dist/base/models/common/types.js.map +1 -1
- package/dist/base/models/enrichers/user-audit.enricher.d.ts +3 -2
- package/dist/base/models/enrichers/user-audit.enricher.d.ts.map +1 -1
- package/dist/base/models/enrichers/user-audit.enricher.js +47 -11
- package/dist/base/models/enrichers/user-audit.enricher.js.map +1 -1
- package/dist/base/repositories/common/constants.d.ts +59 -0
- package/dist/base/repositories/common/constants.d.ts.map +1 -1
- package/dist/base/repositories/common/constants.js +51 -2
- package/dist/base/repositories/common/constants.js.map +1 -1
- package/dist/base/repositories/common/types.d.ts +510 -42
- package/dist/base/repositories/common/types.d.ts.map +1 -1
- package/dist/base/repositories/common/types.js +159 -11
- package/dist/base/repositories/common/types.js.map +1 -1
- package/dist/base/repositories/core/abstract.d.ts +450 -0
- package/dist/base/repositories/core/abstract.d.ts.map +1 -0
- package/dist/base/repositories/core/abstract.js +287 -0
- package/dist/base/repositories/core/abstract.js.map +1 -0
- package/dist/base/repositories/core/default-crud.d.ts +2 -2
- package/dist/base/repositories/core/default-crud.d.ts.map +1 -1
- package/dist/base/repositories/core/index.d.ts +1 -1
- package/dist/base/repositories/core/index.d.ts.map +1 -1
- package/dist/base/repositories/core/index.js +1 -1
- package/dist/base/repositories/core/index.js.map +1 -1
- package/dist/base/repositories/core/persistable.d.ts +87 -39
- package/dist/base/repositories/core/persistable.d.ts.map +1 -1
- package/dist/base/repositories/core/persistable.js +120 -30
- package/dist/base/repositories/core/persistable.js.map +1 -1
- package/dist/base/repositories/core/readable.d.ts +166 -62
- package/dist/base/repositories/core/readable.d.ts.map +1 -1
- package/dist/base/repositories/core/readable.js +176 -60
- package/dist/base/repositories/core/readable.js.map +1 -1
- package/dist/base/repositories/mixins/default-filter.d.ts +65 -0
- package/dist/base/repositories/mixins/default-filter.d.ts.map +1 -0
- package/dist/base/repositories/mixins/default-filter.js +97 -0
- package/dist/base/repositories/mixins/default-filter.js.map +1 -0
- package/dist/base/repositories/mixins/fields-visibility.d.ts +74 -0
- package/dist/base/repositories/mixins/fields-visibility.d.ts.map +1 -0
- package/dist/base/repositories/mixins/fields-visibility.js +129 -0
- package/dist/base/repositories/mixins/fields-visibility.js.map +1 -0
- package/dist/base/repositories/mixins/index.d.ts +3 -0
- package/dist/base/repositories/mixins/index.d.ts.map +1 -0
- package/dist/base/repositories/mixins/index.js +19 -0
- package/dist/base/repositories/mixins/index.js.map +1 -0
- package/dist/base/repositories/operators/filter.d.ts +137 -35
- package/dist/base/repositories/operators/filter.d.ts.map +1 -1
- package/dist/base/repositories/operators/filter.js +399 -159
- package/dist/base/repositories/operators/filter.js.map +1 -1
- package/dist/base/repositories/operators/index.d.ts +2 -0
- package/dist/base/repositories/operators/index.d.ts.map +1 -1
- package/dist/base/repositories/operators/index.js +2 -0
- package/dist/base/repositories/operators/index.js.map +1 -1
- package/dist/base/repositories/operators/json-utils.d.ts +60 -0
- package/dist/base/repositories/operators/json-utils.d.ts.map +1 -0
- package/dist/base/repositories/operators/json-utils.js +84 -0
- package/dist/base/repositories/operators/json-utils.js.map +1 -0
- package/dist/base/repositories/operators/query.d.ts +67 -0
- package/dist/base/repositories/operators/query.d.ts.map +1 -1
- package/dist/base/repositories/operators/query.js +186 -2
- package/dist/base/repositories/operators/query.js.map +1 -1
- package/dist/base/repositories/operators/relation.d.ts +33 -0
- package/dist/base/repositories/operators/relation.d.ts.map +1 -1
- package/dist/base/repositories/operators/relation.js +36 -0
- package/dist/base/repositories/operators/relation.js.map +1 -1
- package/dist/base/repositories/operators/update.d.ts +100 -0
- package/dist/base/repositories/operators/update.d.ts.map +1 -0
- package/dist/base/repositories/operators/update.js +222 -0
- package/dist/base/repositories/operators/update.js.map +1 -0
- package/dist/common/bindings.d.ts +17 -0
- package/dist/common/bindings.d.ts.map +1 -1
- package/dist/common/bindings.js +14 -0
- package/dist/common/bindings.js.map +1 -1
- package/dist/common/constants.d.ts +3 -0
- package/dist/common/constants.d.ts.map +1 -1
- package/dist/common/constants.js +3 -0
- package/dist/common/constants.js.map +1 -1
- package/dist/common/environments.d.ts +4 -0
- package/dist/common/environments.d.ts.map +1 -1
- package/dist/common/environments.js +4 -0
- package/dist/common/environments.js.map +1 -1
- package/dist/common/statuses.d.ts +19 -0
- package/dist/common/statuses.d.ts.map +1 -1
- package/dist/common/statuses.js +19 -0
- package/dist/common/statuses.js.map +1 -1
- package/dist/components/auth/authenticate/common/constants.d.ts +14 -0
- package/dist/components/auth/authenticate/common/constants.d.ts.map +1 -1
- package/dist/components/auth/authenticate/common/constants.js +22 -3
- package/dist/components/auth/authenticate/common/constants.js.map +1 -1
- package/dist/components/auth/authenticate/common/keys.d.ts +3 -2
- package/dist/components/auth/authenticate/common/keys.d.ts.map +1 -1
- package/dist/components/auth/authenticate/common/keys.js +3 -2
- package/dist/components/auth/authenticate/common/keys.js.map +1 -1
- package/dist/components/auth/authenticate/common/types.d.ts +66 -29
- package/dist/components/auth/authenticate/common/types.d.ts.map +1 -1
- package/dist/components/auth/authenticate/component.d.ts +17 -1
- package/dist/components/auth/authenticate/component.d.ts.map +1 -1
- package/dist/components/auth/authenticate/component.js +107 -39
- package/dist/components/auth/authenticate/component.js.map +1 -1
- package/dist/components/auth/authenticate/controllers/factory.d.ts +24 -24
- package/dist/components/auth/authenticate/controllers/factory.d.ts.map +1 -1
- package/dist/components/auth/authenticate/controllers/factory.js +5 -3
- package/dist/components/auth/authenticate/controllers/factory.js.map +1 -1
- package/dist/components/auth/authenticate/services/basic-token.service.d.ts +60 -0
- package/dist/components/auth/authenticate/services/basic-token.service.d.ts.map +1 -0
- package/dist/components/auth/authenticate/services/basic-token.service.js +135 -0
- package/dist/components/auth/authenticate/services/basic-token.service.js.map +1 -0
- package/dist/components/auth/authenticate/services/index.d.ts +1 -0
- package/dist/components/auth/authenticate/services/index.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/index.js +1 -0
- package/dist/components/auth/authenticate/services/index.js.map +1 -1
- package/dist/components/auth/authenticate/services/jwt-token.service.d.ts +4 -3
- package/dist/components/auth/authenticate/services/jwt-token.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/jwt-token.service.js.map +1 -1
- package/dist/components/auth/authenticate/strategies/basic.strategy.d.ts +34 -0
- package/dist/components/auth/authenticate/strategies/basic.strategy.d.ts.map +1 -0
- package/dist/components/auth/authenticate/strategies/basic.strategy.js +59 -0
- package/dist/components/auth/authenticate/strategies/basic.strategy.js.map +1 -0
- package/dist/components/auth/authenticate/strategies/index.d.ts +1 -0
- package/dist/components/auth/authenticate/strategies/index.d.ts.map +1 -1
- package/dist/components/auth/authenticate/strategies/index.js +1 -0
- package/dist/components/auth/authenticate/strategies/index.js.map +1 -1
- package/dist/components/auth/authenticate/strategies/jwt.strategy.d.ts +5 -4
- package/dist/components/auth/authenticate/strategies/jwt.strategy.d.ts.map +1 -1
- package/dist/components/auth/authenticate/strategies/jwt.strategy.js.map +1 -1
- package/dist/components/auth/authenticate/strategies/strategy-registry.d.ts +14 -9
- package/dist/components/auth/authenticate/strategies/strategy-registry.d.ts.map +1 -1
- package/dist/components/auth/authenticate/strategies/strategy-registry.js +84 -41
- package/dist/components/auth/authenticate/strategies/strategy-registry.js.map +1 -1
- package/dist/components/health-check/controller.d.ts +1 -84
- package/dist/components/health-check/controller.d.ts.map +1 -1
- package/dist/components/health-check/controller.js +13 -15
- package/dist/components/health-check/controller.js.map +1 -1
- package/dist/components/static-asset/controller/base.definition.d.ts +109 -9
- package/dist/components/static-asset/controller/base.definition.d.ts.map +1 -1
- package/dist/components/static-asset/controller/base.definition.js +9 -9
- package/dist/components/static-asset/controller/base.definition.js.map +1 -1
- package/dist/components/static-asset/controller/factory.d.ts +24 -24
- package/dist/components/static-asset/controller/factory.d.ts.map +1 -1
- package/dist/components/static-asset/controller/factory.js.map +1 -1
- package/dist/helpers/inversion/common/types.d.ts +26 -3
- package/dist/helpers/inversion/common/types.d.ts.map +1 -1
- package/dist/helpers/inversion/mixins/repository.mixin.d.ts +2 -2
- package/dist/helpers/inversion/mixins/repository.mixin.d.ts.map +1 -1
- package/dist/utilities/schema.utility.d.ts +2 -0
- package/dist/utilities/schema.utility.d.ts.map +1 -1
- package/package.json +6 -5
- package/dist/base/repositories/core/base.d.ts +0 -298
- package/dist/base/repositories/core/base.d.ts.map +0 -1
- package/dist/base/repositories/core/base.js +0 -311
- package/dist/base/repositories/core/base.js.map +0 -1
|
@@ -1,17 +1,108 @@
|
|
|
1
|
-
import { Hook,
|
|
2
|
-
import {
|
|
1
|
+
import { Hook, OpenAPIHono } from '@hono/zod-openapi';
|
|
2
|
+
import { ValueOrPromise } from '@venizia/ignis-helpers';
|
|
3
3
|
import { Env, Schema } from 'hono';
|
|
4
4
|
import { AbstractController } from './abstract';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
import { IAuthenticateRouteConfig, IBindRouteOptions, IDefineRouteOptions, TRouteHandler } from './common/types';
|
|
6
|
+
/**
|
|
7
|
+
* Base controller class with default implementations for route binding.
|
|
8
|
+
*
|
|
9
|
+
* Extends {@link AbstractController} with concrete implementations of
|
|
10
|
+
* {@link bindRoute} and {@link defineRoute}. This is the recommended
|
|
11
|
+
* base class for creating custom controllers.
|
|
12
|
+
*
|
|
13
|
+
* @typeParam RouteEnv - Hono environment type for context variables
|
|
14
|
+
* @typeParam RouteSchema - Combined schema type for all routes
|
|
15
|
+
* @typeParam BasePath - Base path prefix for the router
|
|
16
|
+
* @typeParam ConfigurableOptions - Options passed during configuration
|
|
17
|
+
* @typeParam Definitions - Route definitions map type for strongly-typed method overrides
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* class UserController extends BaseController {
|
|
22
|
+
* async binding() {
|
|
23
|
+
* // Define routes using defineRoute
|
|
24
|
+
* this.defineRoute({
|
|
25
|
+
* configs: {
|
|
26
|
+
* path: '/',
|
|
27
|
+
* method: 'get',
|
|
28
|
+
* authenticate: { strategies: ['jwt'] },
|
|
29
|
+
* responses: { 200: jsonResponse({ schema: UserSchema }) }
|
|
30
|
+
* },
|
|
31
|
+
* handler: async (c) => {
|
|
32
|
+
* const users = await this.userService.findAll();
|
|
33
|
+
* return c.json(users);
|
|
34
|
+
* }
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Or use fluent bindRoute pattern
|
|
38
|
+
* this.bindRoute({
|
|
39
|
+
* configs: { path: '/{id}', method: 'get', ... }
|
|
40
|
+
* }).to({
|
|
41
|
+
* handler: (c) => c.json({ id: c.req.param('id') })
|
|
42
|
+
* });
|
|
43
|
+
* }
|
|
44
|
+
* }
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare abstract class BaseController<RouteEnv extends Env = Env, RouteSchema extends Schema = {}, BasePath extends string = '/', ConfigurableOptions extends object = {}, Definitions extends Record<string, IAuthenticateRouteConfig> = Record<string, IAuthenticateRouteConfig>> extends AbstractController<RouteEnv, RouteSchema, BasePath, ConfigurableOptions, Definitions> {
|
|
48
|
+
/**
|
|
49
|
+
* Helper method to cast to Hono OpenAPI Handler
|
|
50
|
+
*/
|
|
51
|
+
toHonoHandler<ResponseType = unknown>(opts: {
|
|
52
|
+
handler: TRouteHandler<ResponseType, RouteEnv>;
|
|
53
|
+
}): Parameters<OpenAPIHono<RouteEnv>["openapi"]>[1];
|
|
54
|
+
/**
|
|
55
|
+
* Creates a fluent binding for registering a route.
|
|
56
|
+
*
|
|
57
|
+
* Returns an object with a `to()` method for attaching the handler.
|
|
58
|
+
* Useful for conditional binding or when you need access to the binding object.
|
|
59
|
+
*
|
|
60
|
+
* @typeParam RouteConfig - The route configuration type
|
|
61
|
+
* @param opts - Object containing route configuration
|
|
62
|
+
* @returns Binding options with `to()` method
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const binding = this.bindRoute({ configs: myRouteConfig });
|
|
67
|
+
* binding.to({ handler: myHandler });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
bindRoute<RouteConfig extends IAuthenticateRouteConfig>(opts: {
|
|
71
|
+
configs: RouteConfig;
|
|
72
|
+
}): IBindRouteOptions<RouteConfig, RouteEnv, RouteSchema, BasePath>;
|
|
73
|
+
/**
|
|
74
|
+
* Defines and registers a route with its handler in a single call.
|
|
75
|
+
*
|
|
76
|
+
* This is the preferred method for registering routes. It automatically:
|
|
77
|
+
* - Processes authentication strategies into middleware
|
|
78
|
+
* - Adds OpenAPI security requirements
|
|
79
|
+
* - Tags the route with the controller scope
|
|
80
|
+
*
|
|
81
|
+
* @typeParam RouteConfig - The route configuration type
|
|
82
|
+
* @param opts - Object containing route config, handler, and optional hook
|
|
83
|
+
* @returns The registered route definition
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* this.defineRoute({
|
|
88
|
+
* configs: {
|
|
89
|
+
* path: '/users',
|
|
90
|
+
* method: 'get',
|
|
91
|
+
* authenticate: { strategies: ['jwt'] },
|
|
92
|
+
* responses: { 200: jsonResponse({ schema: z.array(UserSchema) }) }
|
|
93
|
+
* },
|
|
94
|
+
* handler: async (c) => {
|
|
95
|
+
* const users = await db.select().from(usersTable);
|
|
96
|
+
* return c.json(users, 200);
|
|
97
|
+
* }
|
|
98
|
+
* });
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
defineRoute<RouteConfig extends IAuthenticateRouteConfig, ResponseType = unknown>(opts: {
|
|
102
|
+
configs: RouteConfig;
|
|
103
|
+
handler: TRouteHandler<ResponseType, RouteEnv>;
|
|
13
104
|
hook?: Hook<any, RouteEnv, string, ValueOrPromise<any>>;
|
|
14
|
-
}):
|
|
105
|
+
}): IDefineRouteOptions<RouteConfig, RouteEnv, RouteSchema, BasePath>;
|
|
15
106
|
/**
|
|
16
107
|
* Define a JSX route that renders server-side HTML
|
|
17
108
|
* Scope: [BaseController][defineJSXRoute]
|
|
@@ -37,12 +128,10 @@ export declare abstract class BaseController<RouteEnv extends Env = Env, RouteSc
|
|
|
37
128
|
* @param opts - Route configuration and handler
|
|
38
129
|
* @returns Route definition
|
|
39
130
|
*/
|
|
40
|
-
defineJSXRoute<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
configs: RC;
|
|
44
|
-
handler: TLazyRouteHandler<RC, RouteEnv>;
|
|
131
|
+
defineJSXRoute<RouteConfig extends IAuthenticateRouteConfig, ResponseType = unknown>(opts: {
|
|
132
|
+
configs: RouteConfig;
|
|
133
|
+
handler: TRouteHandler<ResponseType, RouteEnv>;
|
|
45
134
|
hook?: Hook<any, RouteEnv, string, ValueOrPromise<any>>;
|
|
46
|
-
}):
|
|
135
|
+
}): IDefineRouteOptions<RouteConfig, RouteEnv, RouteSchema, BasePath>;
|
|
47
136
|
}
|
|
48
137
|
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/base/controllers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/base/controllers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACd,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,8BAAsB,cAAc,CAClC,QAAQ,SAAS,GAAG,GAAG,GAAG,EAC1B,WAAW,SAAS,MAAM,GAAG,EAAE,EAC/B,QAAQ,SAAS,MAAM,GAAG,GAAG,EAC7B,mBAAmB,SAAS,MAAM,GAAG,EAAE,EACvC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,GAAG,MAAM,CACnE,MAAM,EACN,wBAAwB,CACzB,CACD,SAAQ,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,mBAAmB,EAAE,WAAW,CAAC;IAC7F;;OAEG;IACH,aAAa,CAAC,YAAY,GAAG,OAAO,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;KAAE,GACrE,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAGxE;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAAC,WAAW,SAAS,wBAAwB,EAAE,IAAI,EAAE;QAC5D,OAAO,EAAE,WAAW,CAAC;KACtB,GAAG,iBAAiB,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC;IAcnE;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,WAAW,CAAC,WAAW,SAAS,wBAAwB,EAAE,YAAY,GAAG,OAAO,EAAE,IAAI,EAAE;QACtF,OAAO,EAAE,WAAW,CAAC;QACrB,OAAO,EAAE,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;KACzD,GAAG,mBAAmB,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC;IAarE;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,cAAc,CAAC,WAAW,SAAS,wBAAwB,EAAE,YAAY,GAAG,OAAO,EAAE,IAAI,EAAE;QACzF,OAAO,EAAE,WAAW,CAAC;QACrB,OAAO,EAAE,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;KACzD,GAAG,mBAAmB,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC;CAStE"}
|
|
@@ -2,8 +2,70 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BaseController = void 0;
|
|
4
4
|
const abstract_1 = require("./abstract");
|
|
5
|
+
/**
|
|
6
|
+
* Base controller class with default implementations for route binding.
|
|
7
|
+
*
|
|
8
|
+
* Extends {@link AbstractController} with concrete implementations of
|
|
9
|
+
* {@link bindRoute} and {@link defineRoute}. This is the recommended
|
|
10
|
+
* base class for creating custom controllers.
|
|
11
|
+
*
|
|
12
|
+
* @typeParam RouteEnv - Hono environment type for context variables
|
|
13
|
+
* @typeParam RouteSchema - Combined schema type for all routes
|
|
14
|
+
* @typeParam BasePath - Base path prefix for the router
|
|
15
|
+
* @typeParam ConfigurableOptions - Options passed during configuration
|
|
16
|
+
* @typeParam Definitions - Route definitions map type for strongly-typed method overrides
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* class UserController extends BaseController {
|
|
21
|
+
* async binding() {
|
|
22
|
+
* // Define routes using defineRoute
|
|
23
|
+
* this.defineRoute({
|
|
24
|
+
* configs: {
|
|
25
|
+
* path: '/',
|
|
26
|
+
* method: 'get',
|
|
27
|
+
* authenticate: { strategies: ['jwt'] },
|
|
28
|
+
* responses: { 200: jsonResponse({ schema: UserSchema }) }
|
|
29
|
+
* },
|
|
30
|
+
* handler: async (c) => {
|
|
31
|
+
* const users = await this.userService.findAll();
|
|
32
|
+
* return c.json(users);
|
|
33
|
+
* }
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* // Or use fluent bindRoute pattern
|
|
37
|
+
* this.bindRoute({
|
|
38
|
+
* configs: { path: '/{id}', method: 'get', ... }
|
|
39
|
+
* }).to({
|
|
40
|
+
* handler: (c) => c.json({ id: c.req.param('id') })
|
|
41
|
+
* });
|
|
42
|
+
* }
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
5
46
|
class BaseController extends abstract_1.AbstractController {
|
|
6
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Helper method to cast to Hono OpenAPI Handler
|
|
49
|
+
*/
|
|
50
|
+
toHonoHandler(opts) {
|
|
51
|
+
return opts.handler;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Creates a fluent binding for registering a route.
|
|
55
|
+
*
|
|
56
|
+
* Returns an object with a `to()` method for attaching the handler.
|
|
57
|
+
* Useful for conditional binding or when you need access to the binding object.
|
|
58
|
+
*
|
|
59
|
+
* @typeParam RouteConfig - The route configuration type
|
|
60
|
+
* @param opts - Object containing route configuration
|
|
61
|
+
* @returns Binding options with `to()` method
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const binding = this.bindRoute({ configs: myRouteConfig });
|
|
66
|
+
* binding.to({ handler: myHandler });
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
7
69
|
bindRoute(opts) {
|
|
8
70
|
const routeConfigs = this.getRouteConfigs({ configs: opts.configs });
|
|
9
71
|
return {
|
|
@@ -11,17 +73,44 @@ class BaseController extends abstract_1.AbstractController {
|
|
|
11
73
|
to: ({ handler }) => {
|
|
12
74
|
return {
|
|
13
75
|
configs: routeConfigs,
|
|
14
|
-
route: this.router.openapi(routeConfigs, handler),
|
|
76
|
+
route: this.router.openapi(routeConfigs, this.toHonoHandler({ handler })),
|
|
15
77
|
};
|
|
16
78
|
},
|
|
17
79
|
};
|
|
18
80
|
}
|
|
19
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Defines and registers a route with its handler in a single call.
|
|
83
|
+
*
|
|
84
|
+
* This is the preferred method for registering routes. It automatically:
|
|
85
|
+
* - Processes authentication strategies into middleware
|
|
86
|
+
* - Adds OpenAPI security requirements
|
|
87
|
+
* - Tags the route with the controller scope
|
|
88
|
+
*
|
|
89
|
+
* @typeParam RouteConfig - The route configuration type
|
|
90
|
+
* @param opts - Object containing route config, handler, and optional hook
|
|
91
|
+
* @returns The registered route definition
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* this.defineRoute({
|
|
96
|
+
* configs: {
|
|
97
|
+
* path: '/users',
|
|
98
|
+
* method: 'get',
|
|
99
|
+
* authenticate: { strategies: ['jwt'] },
|
|
100
|
+
* responses: { 200: jsonResponse({ schema: z.array(UserSchema) }) }
|
|
101
|
+
* },
|
|
102
|
+
* handler: async (c) => {
|
|
103
|
+
* const users = await db.select().from(usersTable);
|
|
104
|
+
* return c.json(users, 200);
|
|
105
|
+
* }
|
|
106
|
+
* });
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
20
109
|
defineRoute(opts) {
|
|
21
110
|
const routeConfigs = this.getRouteConfigs({ configs: opts.configs });
|
|
22
111
|
return {
|
|
23
112
|
configs: routeConfigs,
|
|
24
|
-
route: this.router.openapi(routeConfigs, opts.handler, opts.hook),
|
|
113
|
+
route: this.router.openapi(routeConfigs, this.toHonoHandler({ handler: opts.handler }), opts.hook),
|
|
25
114
|
};
|
|
26
115
|
}
|
|
27
116
|
/**
|
|
@@ -53,6 +142,7 @@ class BaseController extends abstract_1.AbstractController {
|
|
|
53
142
|
const routeConfigs = this.getJSXRouteConfigs({ configs: opts.configs });
|
|
54
143
|
return {
|
|
55
144
|
configs: routeConfigs,
|
|
145
|
+
// Cast handler: TTypedContext is a type overlay compatible at runtime
|
|
56
146
|
route: this.router.openapi(routeConfigs, opts.handler, opts.hook),
|
|
57
147
|
};
|
|
58
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/base/controllers/base.ts"],"names":[],"mappings":";;;AAGA,yCAAgD;AAQhD,MAAsB,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/base/controllers/base.ts"],"names":[],"mappings":";;;AAGA,yCAAgD;AAQhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAsB,cASpB,SAAQ,6BAAqF;IAC7F;;OAEG;IACH,aAAa,CAAyB,IAAwD;QAC5F,OAAO,IAAI,CAAC,OAA0D,CAAC;IACzE,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,SAAS,CAA+C,IAEvD;QACC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAElF,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;gBAClB,OAAO;oBACL,OAAO,EAAE,YAAY;oBACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;iBAC1E,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,WAAW,CAAuE,IAIjF;QACC,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAElF,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,YAAY,EACZ,IAAI,CAAC,aAAa,CAAe,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAC3D,IAAI,CAAC,IAAI,CACV;SACF,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,cAAc,CAAuE,IAIpF;QACC,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAc,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAErF,OAAO;YACL,OAAO,EAAE,YAAY;YACrB,sEAAsE;YACtE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAc,EAAE,IAAI,CAAC,IAAI,CAAC;SACzE,CAAC;IACJ,CAAC;CACF;AApID,wCAoIC"}
|
|
@@ -1,6 +1,40 @@
|
|
|
1
|
+
import { z } from '@hono/zod-openapi';
|
|
2
|
+
import { TResponseHeaders } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Standard REST API path constants for CRUD controllers.
|
|
5
|
+
*
|
|
6
|
+
* These paths are used by {@link ControllerFactory} to define consistent
|
|
7
|
+
* endpoint patterns across all generated controllers.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // Combined with controller basePath:
|
|
12
|
+
* // basePath: '/users'
|
|
13
|
+
* // GET /users → find all (RestPaths.ROOT)
|
|
14
|
+
* // GET /users/count → count (RestPaths.COUNT)
|
|
15
|
+
* // GET /users/find-one → find one (RestPaths.FIND_ONE)
|
|
16
|
+
* // GET /users/:id → find by id
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
1
19
|
export declare class RestPaths {
|
|
2
20
|
static readonly ROOT = "/";
|
|
3
21
|
static readonly COUNT = "/count";
|
|
4
22
|
static readonly FIND_ONE = "/find-one";
|
|
5
23
|
}
|
|
24
|
+
export declare const trackableHeaders: z.ZodObject<{
|
|
25
|
+
"x-request-id": z.ZodOptional<z.ZodString>;
|
|
26
|
+
"x-request-channel": z.ZodOptional<z.ZodString>;
|
|
27
|
+
"x-device-info": z.ZodOptional<z.ZodString>;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
export declare const countableHeaders: z.ZodObject<{
|
|
30
|
+
"x-request-count": z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
export declare const defaultRequestHeaders: z.ZodObject<{
|
|
33
|
+
"x-request-id": z.ZodOptional<z.ZodString>;
|
|
34
|
+
"x-request-channel": z.ZodOptional<z.ZodString>;
|
|
35
|
+
"x-device-info": z.ZodOptional<z.ZodString>;
|
|
36
|
+
"x-request-count": z.ZodOptional<z.ZodString>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
export declare const commonResponseHeaders: TResponseHeaders;
|
|
39
|
+
export declare const findResponseHeaders: TResponseHeaders;
|
|
6
40
|
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/base/controllers/common/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/base/controllers/common/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,mBAAmB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,SAAS;IACpB,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO;IAC3B,MAAM,CAAC,QAAQ,CAAC,KAAK,YAAY;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,eAAe;CACxC;AAKD,eAAO,MAAM,gBAAgB;;;;iBAkB3B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;iBAS3B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;iBAAkD,CAAC;AAGrF,eAAO,MAAM,qBAAqB,EAAE,gBAanC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,gBAMjC,CAAC"}
|
|
@@ -1,10 +1,82 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RestPaths = void 0;
|
|
3
|
+
exports.findResponseHeaders = exports.commonResponseHeaders = exports.defaultRequestHeaders = exports.countableHeaders = exports.trackableHeaders = exports.RestPaths = void 0;
|
|
4
|
+
const helpers_1 = require("../../../helpers");
|
|
5
|
+
const zod_openapi_1 = require("@hono/zod-openapi");
|
|
6
|
+
/**
|
|
7
|
+
* Standard REST API path constants for CRUD controllers.
|
|
8
|
+
*
|
|
9
|
+
* These paths are used by {@link ControllerFactory} to define consistent
|
|
10
|
+
* endpoint patterns across all generated controllers.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Combined with controller basePath:
|
|
15
|
+
* // basePath: '/users'
|
|
16
|
+
* // GET /users → find all (RestPaths.ROOT)
|
|
17
|
+
* // GET /users/count → count (RestPaths.COUNT)
|
|
18
|
+
* // GET /users/find-one → find one (RestPaths.FIND_ONE)
|
|
19
|
+
* // GET /users/:id → find by id
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
4
22
|
class RestPaths {
|
|
5
23
|
static { this.ROOT = '/'; }
|
|
6
24
|
static { this.COUNT = '/count'; }
|
|
7
25
|
static { this.FIND_ONE = '/find-one'; }
|
|
8
26
|
}
|
|
9
27
|
exports.RestPaths = RestPaths;
|
|
28
|
+
// -----------------------------------------------------------------------------
|
|
29
|
+
// Default Headers
|
|
30
|
+
// -----------------------------------------------------------------------------
|
|
31
|
+
exports.trackableHeaders = zod_openapi_1.z.object({
|
|
32
|
+
[helpers_1.HTTP.Headers.REQUEST_TRACING_ID]: zod_openapi_1.z.string().optional().openapi({
|
|
33
|
+
description: 'Optional request ID',
|
|
34
|
+
}),
|
|
35
|
+
[helpers_1.HTTP.Headers.REQUEST_CHANNEL]: zod_openapi_1.z
|
|
36
|
+
.string()
|
|
37
|
+
.optional()
|
|
38
|
+
.openapi({
|
|
39
|
+
description: 'Optional request channel',
|
|
40
|
+
examples: ['channel-1', 'web', 'spos'],
|
|
41
|
+
}),
|
|
42
|
+
[helpers_1.HTTP.Headers.REQUEST_DEVICE_INFO]: zod_openapi_1.z
|
|
43
|
+
.string()
|
|
44
|
+
.optional()
|
|
45
|
+
.openapi({
|
|
46
|
+
description: 'Optional request device info',
|
|
47
|
+
examples: ['dev-1', 'device-abc', 'd-unique-id'],
|
|
48
|
+
}),
|
|
49
|
+
});
|
|
50
|
+
exports.countableHeaders = zod_openapi_1.z.object({
|
|
51
|
+
[helpers_1.HTTP.Headers.REQUEST_COUNT_DATA]: zod_openapi_1.z
|
|
52
|
+
.string()
|
|
53
|
+
.optional()
|
|
54
|
+
.openapi({
|
|
55
|
+
description: 'Controls response format. When "true" (default): returns {count, data}. When "false": returns data only.',
|
|
56
|
+
examples: ['true', '1', 'false', '0'],
|
|
57
|
+
}),
|
|
58
|
+
});
|
|
59
|
+
exports.defaultRequestHeaders = exports.trackableHeaders.extend(exports.countableHeaders.shape);
|
|
60
|
+
// Default response headers (OpenAPI Header Object format)
|
|
61
|
+
exports.commonResponseHeaders = {
|
|
62
|
+
[helpers_1.HTTP.Headers.REQUEST_TRACING_ID]: {
|
|
63
|
+
description: 'Echo of the request tracing ID',
|
|
64
|
+
schema: { type: 'string' },
|
|
65
|
+
},
|
|
66
|
+
[helpers_1.HTTP.Headers.RESPONSE_COUNT_DATA]: {
|
|
67
|
+
description: 'Number of records in response',
|
|
68
|
+
schema: { type: 'string', examples: ['1', '10', '100'] },
|
|
69
|
+
},
|
|
70
|
+
[helpers_1.HTTP.Headers.RESPONSE_FORMAT]: {
|
|
71
|
+
description: 'Response format indicator',
|
|
72
|
+
schema: { type: 'string', examples: ['array', 'object'] },
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
exports.findResponseHeaders = {
|
|
76
|
+
...exports.commonResponseHeaders,
|
|
77
|
+
[helpers_1.HTTP.Headers.CONTENT_RANGE]: {
|
|
78
|
+
description: 'Content range for pagination (e.g., "records 0-24/100")',
|
|
79
|
+
schema: { type: 'string', examples: ['records 0-24/100', 'records 25-49/100'] },
|
|
80
|
+
},
|
|
81
|
+
};
|
|
10
82
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/base/controllers/common/constants.ts"],"names":[],"mappings":";;;AAAA,MAAa,SAAS;aACJ,SAAI,GAAG,GAAG,CAAC;aACX,UAAK,GAAG,QAAQ,CAAC;aACjB,aAAQ,GAAG,WAAW,CAAC;;AAHzC,8BAIC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/base/controllers/common/constants.ts"],"names":[],"mappings":";;;AAAA,uCAAiC;AACjC,mDAAsC;AAGtC;;;;;;;;;;;;;;;GAeG;AACH,MAAa,SAAS;aACJ,SAAI,GAAG,GAAG,CAAC;aACX,UAAK,GAAG,QAAQ,CAAC;aACjB,aAAQ,GAAG,WAAW,CAAC;;AAHzC,8BAIC;AAED,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AACnE,QAAA,gBAAgB,GAAG,eAAC,CAAC,MAAM,CAAC;IACvC,CAAC,cAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,eAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;QAC/D,WAAW,EAAE,qBAAqB;KACnC,CAAC;IACF,CAAC,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,eAAC;SAC9B,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC;QACP,WAAW,EAAE,0BAA0B;QACvC,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC;KACvC,CAAC;IACJ,CAAC,cAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,eAAC;SAClC,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC;QACP,WAAW,EAAE,8BAA8B;QAC3C,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC;KACjD,CAAC;CACL,CAAC,CAAC;AAEU,QAAA,gBAAgB,GAAG,eAAC,CAAC,MAAM,CAAC;IACvC,CAAC,cAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,eAAC;SACjC,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC;QACP,WAAW,EACT,0GAA0G;QAC5G,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC;KACtC,CAAC;CACL,CAAC,CAAC;AAEU,QAAA,qBAAqB,GAAG,wBAAgB,CAAC,MAAM,CAAC,wBAAgB,CAAC,KAAK,CAAC,CAAC;AAErF,0DAA0D;AAC7C,QAAA,qBAAqB,GAAqB;IACrD,CAAC,cAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE;QACjC,WAAW,EAAE,gCAAgC;QAC7C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC3B;IACD,CAAC,cAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;QAClC,WAAW,EAAE,+BAA+B;QAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE;KACzD;IACD,CAAC,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;QAC9B,WAAW,EAAE,2BAA2B;QACxC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE;KAC1D;CACF,CAAC;AAEW,QAAA,mBAAmB,GAAqB;IACnD,GAAG,6BAAqB;IACxB,CAAC,cAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QAC5B,WAAW,EAAE,yDAAyD;QACtE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,EAAE;KAChF;CACF,CAAC"}
|