@carno.js/core 0.2.11 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +673 -673
- package/README.md +188 -0
- package/dist/Carno.js +272 -333
- package/dist/Carno.mjs +268 -0
- package/dist/DefaultRoutes.js +51 -0
- package/dist/DefaultRoutes.mjs +34 -0
- package/dist/bun/index.js +183 -0
- package/dist/bun/index.js.map +86 -0
- package/dist/cache/CacheDriver.js +13 -0
- package/dist/cache/CacheDriver.mjs +0 -0
- package/dist/cache/CacheService.js +113 -0
- package/dist/cache/CacheService.mjs +93 -0
- package/dist/cache/MemoryDriver.js +66 -0
- package/dist/cache/MemoryDriver.mjs +46 -0
- package/dist/cache/RedisDriver.js +81 -0
- package/dist/cache/RedisDriver.mjs +61 -0
- package/dist/compiler/JITCompiler.js +111 -0
- package/dist/compiler/JITCompiler.mjs +89 -0
- package/dist/container/Container.js +99 -0
- package/dist/container/Container.mjs +78 -0
- package/dist/context/Context.js +97 -0
- package/dist/context/Context.mjs +77 -0
- package/dist/cors/CorsHandler.js +90 -0
- package/dist/cors/CorsHandler.mjs +68 -0
- package/dist/decorators/Controller.js +42 -0
- package/dist/decorators/Controller.mjs +22 -0
- package/dist/decorators/Inject.js +30 -0
- package/dist/decorators/Inject.mjs +10 -0
- package/dist/decorators/Middleware.js +35 -0
- package/dist/decorators/Middleware.mjs +15 -0
- package/dist/decorators/Service.js +31 -0
- package/dist/decorators/Service.mjs +12 -0
- package/dist/decorators/methods.js +60 -0
- package/dist/decorators/methods.mjs +34 -0
- package/dist/decorators/params.js +63 -0
- package/dist/decorators/params.mjs +37 -0
- package/dist/events/Lifecycle.js +69 -0
- package/dist/events/Lifecycle.mjs +41 -0
- package/dist/exceptions/HttpException.js +112 -26
- package/dist/exceptions/HttpException.mjs +82 -0
- package/dist/index.js +129 -31
- package/dist/index.mjs +94 -0
- package/dist/metadata.js +34 -0
- package/dist/metadata.mjs +9 -0
- package/dist/middleware/CarnoMiddleware.js +13 -0
- package/dist/middleware/CarnoMiddleware.mjs +0 -0
- package/dist/router/RadixRouter.js +121 -0
- package/dist/router/RadixRouter.mjs +101 -0
- package/dist/testing/TestHarness.js +81 -0
- package/dist/testing/TestHarness.mjs +60 -0
- package/dist/utils/Metadata.js +53 -0
- package/dist/utils/Metadata.mjs +31 -0
- package/dist/validation/ValibotAdapter.js +67 -0
- package/dist/validation/ValibotAdapter.mjs +48 -0
- package/dist/validation/ValidatorAdapter.js +35 -19
- package/dist/validation/ValidatorAdapter.mjs +14 -0
- package/dist/validation/ZodAdapter.js +80 -0
- package/dist/validation/ZodAdapter.mjs +59 -0
- package/package.json +21 -63
- package/src/Carno.ts +605 -0
- package/src/DefaultRoutes.ts +34 -0
- package/src/cache/CacheDriver.ts +50 -0
- package/src/cache/CacheService.ts +139 -0
- package/src/cache/MemoryDriver.ts +104 -0
- package/src/cache/RedisDriver.ts +116 -0
- package/src/compiler/JITCompiler.ts +167 -0
- package/src/container/Container.ts +168 -0
- package/src/context/Context.ts +128 -0
- package/src/cors/CorsHandler.ts +145 -0
- package/src/decorators/Controller.ts +63 -0
- package/src/decorators/Inject.ts +16 -0
- package/src/decorators/Middleware.ts +22 -0
- package/src/decorators/Service.ts +18 -0
- package/src/decorators/methods.ts +58 -0
- package/src/decorators/params.ts +47 -0
- package/src/events/Lifecycle.ts +97 -0
- package/src/exceptions/HttpException.ts +99 -0
- package/src/index.ts +92 -0
- package/src/metadata.ts +46 -0
- package/src/middleware/CarnoMiddleware.ts +14 -0
- package/src/router/RadixRouter.ts +225 -0
- package/src/testing/TestHarness.ts +177 -0
- package/src/utils/Metadata.ts +43 -0
- package/src/validation/ValibotAdapter.ts +95 -0
- package/src/validation/ValidatorAdapter.ts +69 -0
- package/src/validation/ZodAdapter.ts +102 -0
- package/dist/Carno.d.ts +0 -75
- package/dist/cache/bento-cache.driver.d.ts +0 -13
- package/dist/cache/bento-cache.driver.js +0 -55
- package/dist/cache/cache.service.d.ts +0 -8
- package/dist/cache/cache.service.js +0 -6
- package/dist/commons/decorators/Injectable.decorator.d.ts +0 -20
- package/dist/commons/decorators/Injectable.decorator.js +0 -33
- package/dist/commons/decorators/controller.decorator.d.ts +0 -8
- package/dist/commons/decorators/controller.decorator.js +0 -22
- package/dist/commons/decorators/http.decorators.d.ts +0 -13
- package/dist/commons/decorators/http.decorators.js +0 -63
- package/dist/commons/decorators/index.d.ts +0 -6
- package/dist/commons/decorators/index.js +0 -22
- package/dist/commons/decorators/inject.decorator.d.ts +0 -1
- package/dist/commons/decorators/inject.decorator.js +0 -5
- package/dist/commons/decorators/middleware.decorator.d.ts +0 -2
- package/dist/commons/decorators/middleware.decorator.js +0 -30
- package/dist/commons/decorators/service.decorator.d.ts +0 -2
- package/dist/commons/decorators/service.decorator.js +0 -7
- package/dist/commons/decorators/validation.decorator.d.ts +0 -32
- package/dist/commons/decorators/validation.decorator.js +0 -40
- package/dist/commons/http-code.enum.d.ts +0 -50
- package/dist/commons/http-code.enum.js +0 -54
- package/dist/commons/index.d.ts +0 -3
- package/dist/commons/index.js +0 -19
- package/dist/commons/registries/ProviderControl.d.ts +0 -77
- package/dist/commons/registries/ProviderControl.js +0 -112
- package/dist/commons/registries/ProviderRegistry.d.ts +0 -7
- package/dist/commons/registries/ProviderRegistry.js +0 -20
- package/dist/constants.d.ts +0 -8
- package/dist/constants.js +0 -11
- package/dist/container/ContainerConfiguration.d.ts +0 -45
- package/dist/container/ContainerConfiguration.js +0 -121
- package/dist/container/DependencyResolver.d.ts +0 -20
- package/dist/container/DependencyResolver.js +0 -85
- package/dist/container/InjectorService.d.ts +0 -58
- package/dist/container/InjectorService.js +0 -286
- package/dist/container/MethodInvoker.d.ts +0 -21
- package/dist/container/MethodInvoker.js +0 -83
- package/dist/container/RouteResolver.d.ts +0 -27
- package/dist/container/RouteResolver.js +0 -173
- package/dist/container/container.d.ts +0 -41
- package/dist/container/container.js +0 -71
- package/dist/container/createContainer.d.ts +0 -3
- package/dist/container/createContainer.js +0 -12
- package/dist/container/createInjector.d.ts +0 -2
- package/dist/container/createInjector.js +0 -7
- package/dist/container/index.d.ts +0 -6
- package/dist/container/index.js +0 -22
- package/dist/container/middleware.resolver.d.ts +0 -9
- package/dist/container/middleware.resolver.js +0 -35
- package/dist/default-routes-carno.d.ts +0 -3
- package/dist/default-routes-carno.js +0 -29
- package/dist/domain/BaseContext.d.ts +0 -15
- package/dist/domain/BaseContext.js +0 -2
- package/dist/domain/CarnoClosure.d.ts +0 -1
- package/dist/domain/CarnoClosure.js +0 -2
- package/dist/domain/CarnoMiddleware.d.ts +0 -5
- package/dist/domain/CarnoMiddleware.js +0 -2
- package/dist/domain/Context.d.ts +0 -58
- package/dist/domain/Context.js +0 -188
- package/dist/domain/FastContext.d.ts +0 -34
- package/dist/domain/FastContext.js +0 -59
- package/dist/domain/LocalsContainer.d.ts +0 -4
- package/dist/domain/LocalsContainer.js +0 -10
- package/dist/domain/Metadata.d.ts +0 -449
- package/dist/domain/Metadata.js +0 -511
- package/dist/domain/cors-config.d.ts +0 -12
- package/dist/domain/cors-config.js +0 -18
- package/dist/domain/cors-headers-cache.d.ts +0 -17
- package/dist/domain/cors-headers-cache.js +0 -101
- package/dist/domain/http-method.d.ts +0 -7
- package/dist/domain/http-method.js +0 -11
- package/dist/domain/index.d.ts +0 -10
- package/dist/domain/index.js +0 -26
- package/dist/domain/provider-scope.d.ts +0 -5
- package/dist/domain/provider-scope.js +0 -9
- package/dist/domain/provider-type.d.ts +0 -6
- package/dist/domain/provider-type.js +0 -10
- package/dist/domain/provider.d.ts +0 -37
- package/dist/domain/provider.js +0 -70
- package/dist/events/hooks.decorator.d.ts +0 -3
- package/dist/events/hooks.decorator.js +0 -29
- package/dist/events/index.d.ts +0 -2
- package/dist/events/index.js +0 -18
- package/dist/events/on-event.d.ts +0 -13
- package/dist/events/on-event.js +0 -11
- package/dist/exceptions/HttpException.d.ts +0 -9
- package/dist/exceptions/index.d.ts +0 -1
- package/dist/exceptions/index.js +0 -17
- package/dist/index.d.ts +0 -16
- package/dist/route/CompiledRoute.d.ts +0 -23
- package/dist/route/CompiledRoute.js +0 -9
- package/dist/route/FastPathExecutor.d.ts +0 -12
- package/dist/route/FastPathExecutor.js +0 -50
- package/dist/route/JITCompiler.d.ts +0 -28
- package/dist/route/JITCompiler.js +0 -245
- package/dist/route/Matcher.d.ts +0 -11
- package/dist/route/Matcher.js +0 -48
- package/dist/route/ParamResolverFactory.d.ts +0 -14
- package/dist/route/ParamResolverFactory.js +0 -49
- package/dist/route/RouteCompiler.d.ts +0 -28
- package/dist/route/RouteCompiler.js +0 -157
- package/dist/route/RouteExecutor.d.ts +0 -12
- package/dist/route/RouteExecutor.js +0 -84
- package/dist/route/memoirist.d.ts +0 -31
- package/dist/route/memoirist.js +0 -373
- package/dist/services/logger.service.d.ts +0 -23
- package/dist/services/logger.service.js +0 -47
- package/dist/testing/core-testing.d.ts +0 -24
- package/dist/testing/core-testing.js +0 -102
- package/dist/testing/index.d.ts +0 -1
- package/dist/testing/index.js +0 -17
- package/dist/utils/ValidationCache.d.ts +0 -5
- package/dist/utils/ValidationCache.js +0 -35
- package/dist/utils/ancestorOf.d.ts +0 -2
- package/dist/utils/ancestorOf.js +0 -10
- package/dist/utils/ancestorsOf.d.ts +0 -6
- package/dist/utils/ancestorsOf.js +0 -20
- package/dist/utils/classOf.d.ts +0 -13
- package/dist/utils/classOf.js +0 -21
- package/dist/utils/cleanObject.d.ts +0 -6
- package/dist/utils/cleanObject.js +0 -22
- package/dist/utils/constructorOf.d.ts +0 -11
- package/dist/utils/constructorOf.js +0 -18
- package/dist/utils/createInstance.d.ts +0 -1
- package/dist/utils/createInstance.js +0 -7
- package/dist/utils/decoratorTypeOf.d.ts +0 -11
- package/dist/utils/decoratorTypeOf.js +0 -32
- package/dist/utils/deepClone.d.ts +0 -6
- package/dist/utils/deepClone.js +0 -63
- package/dist/utils/deepMerge.d.ts +0 -9
- package/dist/utils/deepMerge.js +0 -62
- package/dist/utils/descriptorOf.d.ts +0 -8
- package/dist/utils/descriptorOf.js +0 -16
- package/dist/utils/formatValidationErrors.d.ts +0 -5
- package/dist/utils/formatValidationErrors.js +0 -80
- package/dist/utils/getClassOrSymbol.d.ts +0 -1
- package/dist/utils/getClassOrSymbol.js +0 -8
- package/dist/utils/getConstructorArgNames.d.ts +0 -1
- package/dist/utils/getConstructorArgNames.js +0 -12
- package/dist/utils/getMethodArgTypes.d.ts +0 -1
- package/dist/utils/getMethodArgTypes.js +0 -9
- package/dist/utils/getValue.d.ts +0 -32
- package/dist/utils/getValue.js +0 -47
- package/dist/utils/hasJsonMethod.d.ts +0 -1
- package/dist/utils/hasJsonMethod.js +0 -6
- package/dist/utils/index.d.ts +0 -15
- package/dist/utils/index.js +0 -31
- package/dist/utils/isArray.d.ts +0 -13
- package/dist/utils/isArray.js +0 -21
- package/dist/utils/isArrowFn.d.ts +0 -1
- package/dist/utils/isArrowFn.js +0 -7
- package/dist/utils/isBoolean.d.ts +0 -7
- package/dist/utils/isBoolean.js +0 -15
- package/dist/utils/isBuffer.d.ts +0 -7
- package/dist/utils/isBuffer.js +0 -19
- package/dist/utils/isClass.d.ts +0 -1
- package/dist/utils/isClass.js +0 -26
- package/dist/utils/isCollection.d.ts +0 -6
- package/dist/utils/isCollection.js +0 -20
- package/dist/utils/isDate.d.ts +0 -6
- package/dist/utils/isDate.js +0 -11
- package/dist/utils/isEmpty.d.ts +0 -6
- package/dist/utils/isEmpty.js +0 -12
- package/dist/utils/isFunction.d.ts +0 -1
- package/dist/utils/isFunction.js +0 -6
- package/dist/utils/isInheritedFrom.d.ts +0 -1
- package/dist/utils/isInheritedFrom.js +0 -24
- package/dist/utils/isMomentObject.d.ts +0 -1
- package/dist/utils/isMomentObject.js +0 -6
- package/dist/utils/isMongooseObject.d.ts +0 -2
- package/dist/utils/isMongooseObject.js +0 -11
- package/dist/utils/isNil.d.ts +0 -1
- package/dist/utils/isNil.js +0 -6
- package/dist/utils/isNumber.d.ts +0 -7
- package/dist/utils/isNumber.js +0 -15
- package/dist/utils/isObject.d.ts +0 -1
- package/dist/utils/isObject.js +0 -6
- package/dist/utils/isObservable.d.ts +0 -1
- package/dist/utils/isObservable.js +0 -6
- package/dist/utils/isPlainObject.d.ts +0 -7
- package/dist/utils/isPlainObject.js +0 -16
- package/dist/utils/isPrimitive.d.ts +0 -14
- package/dist/utils/isPrimitive.js +0 -28
- package/dist/utils/isPrimitiveType.d.ts +0 -1
- package/dist/utils/isPrimitiveType.js +0 -11
- package/dist/utils/isPromise.d.ts +0 -7
- package/dist/utils/isPromise.js +0 -14
- package/dist/utils/isProtectedKey.d.ts +0 -5
- package/dist/utils/isProtectedKey.js +0 -10
- package/dist/utils/isRegExp.d.ts +0 -1
- package/dist/utils/isRegExp.js +0 -6
- package/dist/utils/isRequestScope.d.ts +0 -11
- package/dist/utils/isRequestScope.js +0 -23
- package/dist/utils/isSerializable.d.ts +0 -1
- package/dist/utils/isSerializable.js +0 -11
- package/dist/utils/isStream.d.ts +0 -1
- package/dist/utils/isStream.js +0 -6
- package/dist/utils/isString.d.ts +0 -6
- package/dist/utils/isString.js +0 -14
- package/dist/utils/isSymbol.d.ts +0 -6
- package/dist/utils/isSymbol.js +0 -14
- package/dist/utils/methodsOf.d.ts +0 -9
- package/dist/utils/methodsOf.js +0 -24
- package/dist/utils/nameOf.d.ts +0 -14
- package/dist/utils/nameOf.js +0 -31
- package/dist/utils/objectKeys.d.ts +0 -1
- package/dist/utils/objectKeys.js +0 -7
- package/dist/utils/primitiveOf.d.ts +0 -1
- package/dist/utils/primitiveOf.js +0 -18
- package/dist/utils/prototypeOf.d.ts +0 -6
- package/dist/utils/prototypeOf.js +0 -12
- package/dist/utils/setValue.d.ts +0 -1
- package/dist/utils/setValue.js +0 -32
- package/dist/utils/toMap.d.ts +0 -3
- package/dist/utils/toMap.js +0 -34
- package/dist/utils/toStringConstructor.d.ts +0 -1
- package/dist/utils/toStringConstructor.js +0 -10
- package/dist/validation/ValidatorAdapter.d.ts +0 -66
- package/dist/validation/adapters/ClassValidatorAdapter.d.ts +0 -23
- package/dist/validation/adapters/ClassValidatorAdapter.js +0 -47
- package/dist/validation/adapters/ZodAdapter.d.ts +0 -14
- package/dist/validation/adapters/ZodAdapter.js +0 -56
- package/dist/validation/adapters/index.d.ts +0 -4
- package/dist/validation/adapters/index.js +0 -7
- package/dist/validation/index.d.ts +0 -3
- package/dist/validation/index.js +0 -20
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { ApplicationConfig } from "../Carno";
|
|
2
|
-
import { TokenProvider } from "../commons/registries/ProviderControl";
|
|
3
|
-
import type { ValidatorAdapter } from "../validation/ValidatorAdapter";
|
|
4
|
-
import { Context } from "../domain/Context";
|
|
5
|
-
import { LocalsContainer } from "../domain/LocalsContainer";
|
|
6
|
-
import { Provider } from "../domain/provider";
|
|
7
|
-
import { ProviderScope } from "../domain/provider-scope";
|
|
8
|
-
import { EventType } from "../events/on-event";
|
|
9
|
-
import Memoirist from "../route/memoirist";
|
|
10
|
-
import { ContainerConfiguration, TokenRouteWithProvider } from "./ContainerConfiguration";
|
|
11
|
-
import { Container } from "./container";
|
|
12
|
-
export declare class InjectorService {
|
|
13
|
-
settings: ContainerConfiguration;
|
|
14
|
-
container: Container;
|
|
15
|
-
applicationConfig: ApplicationConfig;
|
|
16
|
-
router: Memoirist<TokenRouteWithProvider>;
|
|
17
|
-
private hooksByEvent;
|
|
18
|
-
private _hasOnRequestHook;
|
|
19
|
-
private _hasOnResponseHook;
|
|
20
|
-
private controllerScopes;
|
|
21
|
-
private routeResolver;
|
|
22
|
-
private dependencyResolver;
|
|
23
|
-
private methodInvoker;
|
|
24
|
-
private validatorAdapter;
|
|
25
|
-
loadModule(container: Container, applicationConfig: ApplicationConfig, router: Memoirist<any>, validatorAdapter: ValidatorAdapter): Promise<void>;
|
|
26
|
-
private initializeResolvers;
|
|
27
|
-
private ensureProvider;
|
|
28
|
-
get(token: TokenProvider): Provider | undefined;
|
|
29
|
-
invoke(token: TokenProvider, locals?: LocalsContainer): any;
|
|
30
|
-
resolveControllerInstance(token: TokenProvider, locals: LocalsContainer): any;
|
|
31
|
-
invokeRoute(route: TokenRouteWithProvider, context: Context, locals: LocalsContainer, instance: any): Promise<any>;
|
|
32
|
-
scopeOf(provider: Provider): ProviderScope | undefined;
|
|
33
|
-
callHook(event: EventType, data?: unknown): Promise<void>;
|
|
34
|
-
private getCachedHooks;
|
|
35
|
-
private cacheHooks;
|
|
36
|
-
hasHook(event: EventType): boolean;
|
|
37
|
-
hasOnRequestHook(): boolean;
|
|
38
|
-
hasOnResponseHook(): boolean;
|
|
39
|
-
private cacheControllerScopes;
|
|
40
|
-
private buildControllerScopeMap;
|
|
41
|
-
private getControllers;
|
|
42
|
-
private getControllerScope;
|
|
43
|
-
private preInstantiateSingletonControllers;
|
|
44
|
-
private compileRoutes;
|
|
45
|
-
private ensureControllerInstance;
|
|
46
|
-
private buildHooksByEvent;
|
|
47
|
-
private readAllHooks;
|
|
48
|
-
private groupHooksByEvent;
|
|
49
|
-
private appendHook;
|
|
50
|
-
private sortHookMap;
|
|
51
|
-
private sortAndStore;
|
|
52
|
-
private sortHooksByPriority;
|
|
53
|
-
private runHookHandlers;
|
|
54
|
-
private executeHook;
|
|
55
|
-
private saveInjector;
|
|
56
|
-
private removeUnknownProviders;
|
|
57
|
-
private isProviderAllowed;
|
|
58
|
-
}
|
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var InjectorService_1;
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.InjectorService = void 0;
|
|
11
|
-
const Injectable_decorator_1 = require("../commons/decorators/Injectable.decorator");
|
|
12
|
-
const commons_1 = require("../commons");
|
|
13
|
-
const ProviderControl_1 = require("../commons/registries/ProviderControl");
|
|
14
|
-
const constants_1 = require("../constants");
|
|
15
|
-
const default_routes_carno_1 = require("../default-routes-carno");
|
|
16
|
-
const Context_1 = require("../domain/Context");
|
|
17
|
-
const LocalsContainer_1 = require("../domain/LocalsContainer");
|
|
18
|
-
const Metadata_1 = require("../domain/Metadata");
|
|
19
|
-
const provider_scope_1 = require("../domain/provider-scope");
|
|
20
|
-
const provider_type_1 = require("../domain/provider-type");
|
|
21
|
-
const on_event_1 = require("../events/on-event");
|
|
22
|
-
const logger_service_1 = require("../services/logger.service");
|
|
23
|
-
const cache_service_1 = require("../cache/cache.service");
|
|
24
|
-
const isPrimitiveType_1 = require("../utils/isPrimitiveType");
|
|
25
|
-
const nameOf_1 = require("../utils/nameOf");
|
|
26
|
-
const ContainerConfiguration_1 = require("./ContainerConfiguration");
|
|
27
|
-
const container_1 = require("./container");
|
|
28
|
-
const middleware_resolver_1 = require("./middleware.resolver");
|
|
29
|
-
const RouteResolver_1 = require("./RouteResolver");
|
|
30
|
-
const DependencyResolver_1 = require("./DependencyResolver");
|
|
31
|
-
const MethodInvoker_1 = require("./MethodInvoker");
|
|
32
|
-
const RouteCompiler_1 = require("../route/RouteCompiler");
|
|
33
|
-
let InjectorService = InjectorService_1 = class InjectorService {
|
|
34
|
-
constructor() {
|
|
35
|
-
this.settings = new ContainerConfiguration_1.ContainerConfiguration();
|
|
36
|
-
this.container = new container_1.Container();
|
|
37
|
-
this.applicationConfig = {};
|
|
38
|
-
this.hooksByEvent = new Map();
|
|
39
|
-
this._hasOnRequestHook = false;
|
|
40
|
-
this._hasOnResponseHook = false;
|
|
41
|
-
this.controllerScopes = new Map();
|
|
42
|
-
}
|
|
43
|
-
async loadModule(container, applicationConfig, router, validatorAdapter) {
|
|
44
|
-
this.container = container;
|
|
45
|
-
this.router = router;
|
|
46
|
-
this.applicationConfig = applicationConfig;
|
|
47
|
-
this.validatorAdapter = validatorAdapter;
|
|
48
|
-
this.initializeResolvers();
|
|
49
|
-
this.removeUnknownProviders();
|
|
50
|
-
this.saveInjector();
|
|
51
|
-
this.routeResolver.resolveControllers();
|
|
52
|
-
this.cacheControllerScopes();
|
|
53
|
-
this.cacheHooks();
|
|
54
|
-
await this.callHook(on_event_1.EventType.OnApplicationInit);
|
|
55
|
-
this.preInstantiateSingletonControllers();
|
|
56
|
-
this.compileRoutes();
|
|
57
|
-
}
|
|
58
|
-
initializeResolvers() {
|
|
59
|
-
this.routeResolver = new RouteResolver_1.RouteResolver(this.router, this.applicationConfig.globalMiddlewares);
|
|
60
|
-
this.dependencyResolver = new DependencyResolver_1.DependencyResolver(this.container);
|
|
61
|
-
this.methodInvoker = new MethodInvoker_1.MethodInvoker(this.applicationConfig, this.validatorAdapter);
|
|
62
|
-
}
|
|
63
|
-
ensureProvider(token) {
|
|
64
|
-
if (!this.container.has(token) && ProviderControl_1.GlobalProvider.has(token)) {
|
|
65
|
-
this.container.addProvider(token);
|
|
66
|
-
}
|
|
67
|
-
return this.container.get(token);
|
|
68
|
-
}
|
|
69
|
-
get(token) {
|
|
70
|
-
return this.ensureProvider(token);
|
|
71
|
-
}
|
|
72
|
-
invoke(token, locals = new LocalsContainer_1.LocalsContainer()) {
|
|
73
|
-
if (locals.has(token)) {
|
|
74
|
-
const stored = locals.get(token);
|
|
75
|
-
return stored?.instance ?? stored;
|
|
76
|
-
}
|
|
77
|
-
if ((0, isPrimitiveType_1.isPrimitiveType)(token)) {
|
|
78
|
-
return token;
|
|
79
|
-
}
|
|
80
|
-
const provider = this.ensureProvider(token);
|
|
81
|
-
if (!provider) {
|
|
82
|
-
throw new Error(`Provider not found for: ${(0, nameOf_1.nameOf)(token)}, check if it was imported into the module or imported without type-only import.`);
|
|
83
|
-
}
|
|
84
|
-
return this.dependencyResolver.resolve(provider, locals, (t, l) => this.invoke(t, l));
|
|
85
|
-
}
|
|
86
|
-
resolveControllerInstance(token, locals) {
|
|
87
|
-
const provider = this.ensureProvider(token);
|
|
88
|
-
if (!provider) {
|
|
89
|
-
const message = `Provider not found for: ${(0, nameOf_1.nameOf)(token)}, check if it was ` +
|
|
90
|
-
`imported into the module or imported without type-only import.`;
|
|
91
|
-
throw new Error(message);
|
|
92
|
-
}
|
|
93
|
-
const scope = this.getControllerScope(provider);
|
|
94
|
-
if (scope !== provider_scope_1.ProviderScope.SINGLETON) {
|
|
95
|
-
return this.invoke(token, locals);
|
|
96
|
-
}
|
|
97
|
-
if (provider.instance) {
|
|
98
|
-
return provider.instance;
|
|
99
|
-
}
|
|
100
|
-
return this.invoke(token, locals);
|
|
101
|
-
}
|
|
102
|
-
invokeRoute(route, context, locals, instance) {
|
|
103
|
-
const middlewarePromise = middleware_resolver_1.MiddlewareRes.resolveMiddlewares(route, this, locals);
|
|
104
|
-
if (middlewarePromise instanceof Promise) {
|
|
105
|
-
return middlewarePromise.then(() => this.methodInvoker.invoke(instance, route.methodName, locals, context, (t, l) => this.invoke(t, l)));
|
|
106
|
-
}
|
|
107
|
-
return this.methodInvoker.invoke(instance, route.methodName, locals, context, (t, l) => this.invoke(t, l));
|
|
108
|
-
}
|
|
109
|
-
scopeOf(provider) {
|
|
110
|
-
return provider.scope || provider_scope_1.ProviderScope.SINGLETON;
|
|
111
|
-
}
|
|
112
|
-
async callHook(event, data = null) {
|
|
113
|
-
const hooks = this.getCachedHooks(event);
|
|
114
|
-
if (hooks.length === 0) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
await this.runHookHandlers(hooks, data ?? {});
|
|
118
|
-
}
|
|
119
|
-
getCachedHooks(event) {
|
|
120
|
-
return this.hooksByEvent.get(event) ?? [];
|
|
121
|
-
}
|
|
122
|
-
cacheHooks() {
|
|
123
|
-
this.hooksByEvent = this.buildHooksByEvent();
|
|
124
|
-
this._hasOnRequestHook = (this.hooksByEvent.get(on_event_1.EventType.OnRequest)?.length ?? 0) > 0;
|
|
125
|
-
this._hasOnResponseHook = (this.hooksByEvent.get(on_event_1.EventType.OnResponse)?.length ?? 0) > 0;
|
|
126
|
-
}
|
|
127
|
-
hasHook(event) {
|
|
128
|
-
if (event === on_event_1.EventType.OnRequest) {
|
|
129
|
-
return this._hasOnRequestHook;
|
|
130
|
-
}
|
|
131
|
-
if (event === on_event_1.EventType.OnResponse) {
|
|
132
|
-
return this._hasOnResponseHook;
|
|
133
|
-
}
|
|
134
|
-
return (this.hooksByEvent.get(event)?.length ?? 0) > 0;
|
|
135
|
-
}
|
|
136
|
-
hasOnRequestHook() {
|
|
137
|
-
return this._hasOnRequestHook;
|
|
138
|
-
}
|
|
139
|
-
hasOnResponseHook() {
|
|
140
|
-
return this._hasOnResponseHook;
|
|
141
|
-
}
|
|
142
|
-
cacheControllerScopes() {
|
|
143
|
-
const controllers = this.getControllers();
|
|
144
|
-
this.controllerScopes = this.buildControllerScopeMap(controllers);
|
|
145
|
-
}
|
|
146
|
-
buildControllerScopeMap(controllers) {
|
|
147
|
-
const scoped = new Map();
|
|
148
|
-
controllers.forEach((controller) => {
|
|
149
|
-
const scope = this.dependencyResolver.resolveScope(controller);
|
|
150
|
-
scoped.set(controller.token, scope);
|
|
151
|
-
});
|
|
152
|
-
return scoped;
|
|
153
|
-
}
|
|
154
|
-
getControllers() {
|
|
155
|
-
const controllers = ProviderControl_1.GlobalProvider.getByType(provider_type_1.ProviderType.CONTROLLER);
|
|
156
|
-
return controllers;
|
|
157
|
-
}
|
|
158
|
-
getControllerScope(controller) {
|
|
159
|
-
const cached = this.controllerScopes.get(controller.token);
|
|
160
|
-
if (cached) {
|
|
161
|
-
return cached;
|
|
162
|
-
}
|
|
163
|
-
const scope = this.dependencyResolver.resolveScope(controller);
|
|
164
|
-
this.controllerScopes.set(controller.token, scope);
|
|
165
|
-
return scope;
|
|
166
|
-
}
|
|
167
|
-
preInstantiateSingletonControllers() {
|
|
168
|
-
const controllers = this.getControllers();
|
|
169
|
-
for (const controller of controllers) {
|
|
170
|
-
const scope = this.getControllerScope(controller);
|
|
171
|
-
if (scope !== provider_scope_1.ProviderScope.SINGLETON) {
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
this.ensureControllerInstance(controller);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
compileRoutes() {
|
|
178
|
-
const compiler = new RouteCompiler_1.RouteCompiler({
|
|
179
|
-
container: this.container,
|
|
180
|
-
controllerScopes: this.controllerScopes,
|
|
181
|
-
validatorAdapter: this.validatorAdapter,
|
|
182
|
-
hasOnRequestHook: this._hasOnRequestHook,
|
|
183
|
-
hasOnResponseHook: this._hasOnResponseHook,
|
|
184
|
-
});
|
|
185
|
-
const routesToCompile = [...this.router.history];
|
|
186
|
-
for (const [method, path, store] of routesToCompile) {
|
|
187
|
-
if (!store || store.routeType !== undefined) {
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
const compiled = compiler.compile(store);
|
|
191
|
-
if (!compiled) {
|
|
192
|
-
continue;
|
|
193
|
-
}
|
|
194
|
-
this.router.updateStore(method, path, store, compiled);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
ensureControllerInstance(controller) {
|
|
198
|
-
if (controller.instance) {
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
this.invoke(controller.token);
|
|
202
|
-
}
|
|
203
|
-
buildHooksByEvent() {
|
|
204
|
-
const hooks = this.readAllHooks();
|
|
205
|
-
return this.groupHooksByEvent(hooks);
|
|
206
|
-
}
|
|
207
|
-
readAllHooks() {
|
|
208
|
-
return Metadata_1.Metadata.get(constants_1.CONTROLLER_EVENTS, Reflect) ?? [];
|
|
209
|
-
}
|
|
210
|
-
groupHooksByEvent(hooks) {
|
|
211
|
-
const grouped = new Map();
|
|
212
|
-
hooks.forEach((hook) => this.appendHook(grouped, hook));
|
|
213
|
-
return this.sortHookMap(grouped);
|
|
214
|
-
}
|
|
215
|
-
appendHook(grouped, hook) {
|
|
216
|
-
const list = grouped.get(hook.eventName) ?? [];
|
|
217
|
-
list.push(hook);
|
|
218
|
-
grouped.set(hook.eventName, list);
|
|
219
|
-
}
|
|
220
|
-
sortHookMap(grouped) {
|
|
221
|
-
const sorted = new Map();
|
|
222
|
-
grouped.forEach((hooks, event) => this.sortAndStore(sorted, event, hooks));
|
|
223
|
-
return sorted;
|
|
224
|
-
}
|
|
225
|
-
sortAndStore(target, event, hooks) {
|
|
226
|
-
target.set(event, this.sortHooksByPriority(hooks));
|
|
227
|
-
}
|
|
228
|
-
sortHooksByPriority(hooks) {
|
|
229
|
-
return hooks.slice().sort((first, second) => {
|
|
230
|
-
return (second.priority ?? 0) - (first.priority ?? 0);
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
async runHookHandlers(hooks, data) {
|
|
234
|
-
for (const hook of hooks) {
|
|
235
|
-
await this.executeHook(hook, data);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
async executeHook(hook, data) {
|
|
239
|
-
const instance = this.invoke(hook.target);
|
|
240
|
-
await instance[hook.methodName](data);
|
|
241
|
-
}
|
|
242
|
-
saveInjector() {
|
|
243
|
-
const provider = this.ensureProvider(InjectorService_1);
|
|
244
|
-
provider.instance = this;
|
|
245
|
-
this.container.set(InjectorService_1, provider);
|
|
246
|
-
}
|
|
247
|
-
removeUnknownProviders() {
|
|
248
|
-
if (!ProviderControl_1.GlobalProvider.has(logger_service_1.LoggerService)) {
|
|
249
|
-
(0, commons_1.registerProvider)({ provide: logger_service_1.LoggerService, useClass: logger_service_1.LoggerService, instance: new logger_service_1.LoggerService(this) });
|
|
250
|
-
}
|
|
251
|
-
const defaults = [
|
|
252
|
-
InjectorService_1,
|
|
253
|
-
Context_1.Context,
|
|
254
|
-
logger_service_1.LoggerService,
|
|
255
|
-
default_routes_carno_1.DefaultRoutesCarno,
|
|
256
|
-
cache_service_1.CacheService
|
|
257
|
-
];
|
|
258
|
-
this.applicationConfig.providers = this.applicationConfig.providers || [];
|
|
259
|
-
this.applicationConfig.providers.push(...defaults);
|
|
260
|
-
let hooks = Metadata_1.Metadata.get(constants_1.CONTROLLER_EVENTS, Reflect);
|
|
261
|
-
for (let [token] of ProviderControl_1.GlobalProvider.entries()) {
|
|
262
|
-
if (!this.isProviderAllowed(token)) {
|
|
263
|
-
ProviderControl_1.GlobalProvider.delete(token);
|
|
264
|
-
if (hooks) {
|
|
265
|
-
hooks = hooks.filter((hook) => hook.target !== token);
|
|
266
|
-
Metadata_1.Metadata.set(constants_1.CONTROLLER_EVENTS, hooks, Reflect);
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
isProviderAllowed(token) {
|
|
272
|
-
if (!this.applicationConfig.providers) {
|
|
273
|
-
return false;
|
|
274
|
-
}
|
|
275
|
-
return this.applicationConfig.providers.some((provider) => {
|
|
276
|
-
if (provider?.provide) {
|
|
277
|
-
return provider.provide === token;
|
|
278
|
-
}
|
|
279
|
-
return provider === token;
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
exports.InjectorService = InjectorService;
|
|
284
|
-
exports.InjectorService = InjectorService = InjectorService_1 = __decorate([
|
|
285
|
-
(0, Injectable_decorator_1.Injectable)()
|
|
286
|
-
], InjectorService);
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { ApplicationConfig } from "../Carno";
|
|
2
|
-
import { TokenProvider } from "../commons/registries/ProviderControl";
|
|
3
|
-
import { Context } from "../domain/Context";
|
|
4
|
-
import { LocalsContainer } from "../domain/LocalsContainer";
|
|
5
|
-
import type { ValidatorAdapter } from "../validation/ValidatorAdapter";
|
|
6
|
-
export declare class MethodInvoker {
|
|
7
|
-
private applicationConfig;
|
|
8
|
-
private validatorAdapter;
|
|
9
|
-
private historyMethods;
|
|
10
|
-
constructor(applicationConfig: ApplicationConfig, validatorAdapter: ValidatorAdapter);
|
|
11
|
-
invoke(instance: any, methodName: string, locals: LocalsContainer, context: Context, invokeCallback: (token: TokenProvider, locals: LocalsContainer) => any): Promise<any>;
|
|
12
|
-
private getMethodInfo;
|
|
13
|
-
private getCachedMethod;
|
|
14
|
-
private cacheMethodInfo;
|
|
15
|
-
private setCachedMethod;
|
|
16
|
-
private resolveMethodServices;
|
|
17
|
-
private ensureBodyParsed;
|
|
18
|
-
private hasBodyParam;
|
|
19
|
-
private isBodyParam;
|
|
20
|
-
private resolveService;
|
|
21
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MethodInvoker = void 0;
|
|
4
|
-
const Metadata_1 = require("../domain/Metadata");
|
|
5
|
-
const getClassOrSymbol_1 = require("../utils/getClassOrSymbol");
|
|
6
|
-
const getMethodArgTypes_1 = require("../utils/getMethodArgTypes");
|
|
7
|
-
class MethodInvoker {
|
|
8
|
-
constructor(applicationConfig, validatorAdapter) {
|
|
9
|
-
this.applicationConfig = applicationConfig;
|
|
10
|
-
this.validatorAdapter = validatorAdapter;
|
|
11
|
-
this.historyMethods = new WeakMap();
|
|
12
|
-
}
|
|
13
|
-
async invoke(instance, methodName, locals, context, invokeCallback) {
|
|
14
|
-
const methodInfo = this.getMethodInfo(instance, methodName);
|
|
15
|
-
await this.ensureBodyParsed(methodInfo, context);
|
|
16
|
-
const services = this.resolveMethodServices(methodInfo, context, locals, invokeCallback);
|
|
17
|
-
return instance[methodName](...services);
|
|
18
|
-
}
|
|
19
|
-
getMethodInfo(instance, methodName) {
|
|
20
|
-
const cached = this.getCachedMethod(instance, methodName);
|
|
21
|
-
return cached || this.cacheMethodInfo(instance, methodName);
|
|
22
|
-
}
|
|
23
|
-
getCachedMethod(instance, methodName) {
|
|
24
|
-
const cachedMethod = this.historyMethods.get(instance);
|
|
25
|
-
return cachedMethod?.[methodName];
|
|
26
|
-
}
|
|
27
|
-
cacheMethodInfo(instance, methodName) {
|
|
28
|
-
const args = (0, getMethodArgTypes_1.getMethodArgTypes)(instance, methodName);
|
|
29
|
-
const params = Metadata_1.Metadata.getParamDecoratorFunc(instance, methodName);
|
|
30
|
-
const needsBody = this.hasBodyParam(params);
|
|
31
|
-
const methodInfo = { args, params, needsBody };
|
|
32
|
-
this.setCachedMethod(instance, methodName, methodInfo);
|
|
33
|
-
return methodInfo;
|
|
34
|
-
}
|
|
35
|
-
setCachedMethod(instance, methodName, methodInfo) {
|
|
36
|
-
const cachedMethod = this.historyMethods.get(instance) || {};
|
|
37
|
-
cachedMethod[methodName] = methodInfo;
|
|
38
|
-
this.historyMethods.set(instance, cachedMethod);
|
|
39
|
-
}
|
|
40
|
-
resolveMethodServices(methodInfo, context, locals, invokeCallback) {
|
|
41
|
-
const { args, params } = methodInfo;
|
|
42
|
-
const services = [];
|
|
43
|
-
for (let index = 0; index < args.length; index++) {
|
|
44
|
-
const service = this.resolveService(args[index], params[index], context, locals, invokeCallback);
|
|
45
|
-
services.push(service);
|
|
46
|
-
}
|
|
47
|
-
return services;
|
|
48
|
-
}
|
|
49
|
-
async ensureBodyParsed(methodInfo, context) {
|
|
50
|
-
if (!methodInfo.needsBody) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (context.isBodyParsed()) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
await context.getBody();
|
|
57
|
-
}
|
|
58
|
-
hasBodyParam(params) {
|
|
59
|
-
if (!params) {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
return Object.values(params).some((param) => this.isBodyParam(param));
|
|
63
|
-
}
|
|
64
|
-
isBodyParam(param) {
|
|
65
|
-
if (param?.type === "body") {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
if (!param?.fun) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
return String(param.fun).includes("context.body");
|
|
72
|
-
}
|
|
73
|
-
resolveService(token, param, context, locals, invokeCallback) {
|
|
74
|
-
if (!param) {
|
|
75
|
-
return invokeCallback((0, getClassOrSymbol_1.getClassOrSymbol)(token), locals);
|
|
76
|
-
}
|
|
77
|
-
const value = param.fun(context, param.param);
|
|
78
|
-
return this.validatorAdapter.hasValidation(token)
|
|
79
|
-
? this.validatorAdapter.validateAndTransform(token, value)
|
|
80
|
-
: value;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
exports.MethodInvoker = MethodInvoker;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { TokenRouteWithProvider } from "./ContainerConfiguration";
|
|
2
|
-
import Memoirist from "../route/memoirist";
|
|
3
|
-
export declare class RouteResolver {
|
|
4
|
-
private router;
|
|
5
|
-
private globalMiddlewares;
|
|
6
|
-
constructor(router: Memoirist<TokenRouteWithProvider>, globalMiddlewares?: any[]);
|
|
7
|
-
resolveControllers(): void;
|
|
8
|
-
private getTopLevelControllers;
|
|
9
|
-
private buildRouteMap;
|
|
10
|
-
private processController;
|
|
11
|
-
private getControllerRoutes;
|
|
12
|
-
private getControllerMiddlewares;
|
|
13
|
-
private applyControllerPath;
|
|
14
|
-
private normalizePath;
|
|
15
|
-
private addRoutesToMap;
|
|
16
|
-
private filterRoutesByMethod;
|
|
17
|
-
private addMethodRoutes;
|
|
18
|
-
private createTokenRouteWithProvider;
|
|
19
|
-
private processChildren;
|
|
20
|
-
private resolveChildrenRoutes;
|
|
21
|
-
private processChildController;
|
|
22
|
-
private getValidChildController;
|
|
23
|
-
private applyChildPaths;
|
|
24
|
-
private buildChildPath;
|
|
25
|
-
private buildChildRoutes;
|
|
26
|
-
private registerRoutes;
|
|
27
|
-
}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RouteResolver = void 0;
|
|
4
|
-
const ProviderControl_1 = require("../commons/registries/ProviderControl");
|
|
5
|
-
const constants_1 = require("../constants");
|
|
6
|
-
const domain_1 = require("../domain");
|
|
7
|
-
const Metadata_1 = require("../domain/Metadata");
|
|
8
|
-
const provider_type_1 = require("../domain/provider-type");
|
|
9
|
-
class RouteResolver {
|
|
10
|
-
constructor(router, globalMiddlewares) {
|
|
11
|
-
this.router = router;
|
|
12
|
-
this.globalMiddlewares = [];
|
|
13
|
-
this.globalMiddlewares = globalMiddlewares || [];
|
|
14
|
-
}
|
|
15
|
-
resolveControllers() {
|
|
16
|
-
const controllers = this.getTopLevelControllers();
|
|
17
|
-
const hydrateRoute = this.buildRouteMap(controllers);
|
|
18
|
-
this.registerRoutes(hydrateRoute);
|
|
19
|
-
}
|
|
20
|
-
getTopLevelControllers() {
|
|
21
|
-
return ProviderControl_1.GlobalProvider.getByType(provider_type_1.ProviderType.CONTROLLER).filter((controller) => !controller.isChild());
|
|
22
|
-
}
|
|
23
|
-
buildRouteMap(controllers) {
|
|
24
|
-
const hydrateRoute = new Map();
|
|
25
|
-
for (const controller of controllers) {
|
|
26
|
-
this.processController(controller, hydrateRoute);
|
|
27
|
-
}
|
|
28
|
-
return hydrateRoute;
|
|
29
|
-
}
|
|
30
|
-
processController(controller, hydrateRoute) {
|
|
31
|
-
const routes = this.getControllerRoutes(controller);
|
|
32
|
-
if (routes.length === 0)
|
|
33
|
-
return;
|
|
34
|
-
const controllerMiddleware = this.getControllerMiddlewares(controller);
|
|
35
|
-
const processedRoutes = this.applyControllerPath(controller, routes);
|
|
36
|
-
this.addRoutesToMap(hydrateRoute, processedRoutes, controller, controllerMiddleware);
|
|
37
|
-
this.processChildren(controller, hydrateRoute, controllerMiddleware);
|
|
38
|
-
}
|
|
39
|
-
getControllerRoutes(controller) {
|
|
40
|
-
return Metadata_1.Metadata.get(constants_1.CONTROLLER_ROUTES, controller.token);
|
|
41
|
-
}
|
|
42
|
-
getControllerMiddlewares(controller) {
|
|
43
|
-
return Metadata_1.Metadata.get(constants_1.CONTROLLER_MIDDLEWARES, controller.token) || [];
|
|
44
|
-
}
|
|
45
|
-
applyControllerPath(controller, routes) {
|
|
46
|
-
if (!controller.path)
|
|
47
|
-
return routes;
|
|
48
|
-
return routes.map((route) => ({
|
|
49
|
-
...route,
|
|
50
|
-
path: this.normalizePath(`${controller.path}${route.path}`),
|
|
51
|
-
}));
|
|
52
|
-
}
|
|
53
|
-
normalizePath(path) {
|
|
54
|
-
let normalized = path.endsWith("/") ? path.slice(0, -1) : path;
|
|
55
|
-
return normalized.startsWith("/") ? normalized : `/${normalized}`;
|
|
56
|
-
}
|
|
57
|
-
addRoutesToMap(hydrateRoute, routes, controller, controllerMiddleware) {
|
|
58
|
-
for (const method of Object.keys(domain_1.HttpMethod).map((key) => domain_1.HttpMethod[key])) {
|
|
59
|
-
const methodRoutes = this.filterRoutesByMethod(routes, method);
|
|
60
|
-
if (methodRoutes.length === 0)
|
|
61
|
-
continue;
|
|
62
|
-
this.addMethodRoutes(hydrateRoute, method, methodRoutes, controller, controllerMiddleware);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
filterRoutesByMethod(routes, method) {
|
|
66
|
-
return routes.filter((route) => route.method.toLowerCase() === method);
|
|
67
|
-
}
|
|
68
|
-
addMethodRoutes(hydrateRoute, method, routes, controller, controllerMiddleware) {
|
|
69
|
-
const mappedRoutes = routes.map((route) => this.createTokenRouteWithProvider(route, controller, controllerMiddleware));
|
|
70
|
-
hydrateRoute.set(method, [
|
|
71
|
-
...(hydrateRoute.get(method) || []),
|
|
72
|
-
...mappedRoutes,
|
|
73
|
-
]);
|
|
74
|
-
}
|
|
75
|
-
createTokenRouteWithProvider(route, controller, controllerMiddleware) {
|
|
76
|
-
return {
|
|
77
|
-
...route,
|
|
78
|
-
provider: controller.token,
|
|
79
|
-
route,
|
|
80
|
-
middlewares: [
|
|
81
|
-
...this.globalMiddlewares,
|
|
82
|
-
...controllerMiddleware,
|
|
83
|
-
...(Metadata_1.Metadata.get(constants_1.ROUTE_MIDDLEWARES, controller.token, route.methodName) || []),
|
|
84
|
-
],
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
processChildren(controller, hydrateRoute, controllerMiddleware) {
|
|
88
|
-
if (!controller.children)
|
|
89
|
-
return;
|
|
90
|
-
const childrenRoutes = this.resolveChildrenRoutes(controller.path ?? "", controller.children, controllerMiddleware);
|
|
91
|
-
childrenRoutes.forEach((route) => {
|
|
92
|
-
const method = route.method.toLowerCase();
|
|
93
|
-
hydrateRoute.set(method, [
|
|
94
|
-
...(hydrateRoute.get(method) || []),
|
|
95
|
-
route,
|
|
96
|
-
]);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
resolveChildrenRoutes(parentPath, children, parentMiddlewares) {
|
|
100
|
-
let childrenRoutes = [];
|
|
101
|
-
for (const childController of children) {
|
|
102
|
-
const routes = this.processChildController(childController, parentPath, parentMiddlewares);
|
|
103
|
-
childrenRoutes = [...childrenRoutes, ...routes];
|
|
104
|
-
}
|
|
105
|
-
return childrenRoutes;
|
|
106
|
-
}
|
|
107
|
-
processChildController(childController, parentPath, parentMiddlewares) {
|
|
108
|
-
const controller = this.getValidChildController(childController);
|
|
109
|
-
const childRoutes = this.getControllerRoutes(controller);
|
|
110
|
-
if (childRoutes.length === 0)
|
|
111
|
-
return [];
|
|
112
|
-
const childMiddlewares = this.getControllerMiddlewares(controller);
|
|
113
|
-
const processedRoutes = this.applyChildPaths(childRoutes, parentPath, controller);
|
|
114
|
-
return this.buildChildRoutes(processedRoutes, controller, parentMiddlewares, childMiddlewares);
|
|
115
|
-
}
|
|
116
|
-
getValidChildController(childController) {
|
|
117
|
-
const controller = ProviderControl_1.GlobalProvider.get(childController);
|
|
118
|
-
if (!controller) {
|
|
119
|
-
throw new Error(`Child ${childController} not is an controller. Please, check the providers configuration.`);
|
|
120
|
-
}
|
|
121
|
-
return controller;
|
|
122
|
-
}
|
|
123
|
-
applyChildPaths(routes, parentPath, controller) {
|
|
124
|
-
if (!parentPath)
|
|
125
|
-
return routes;
|
|
126
|
-
return routes.map((route) => ({
|
|
127
|
-
...route,
|
|
128
|
-
path: this.buildChildPath(parentPath, controller.path, route.path),
|
|
129
|
-
}));
|
|
130
|
-
}
|
|
131
|
-
buildChildPath(parentPath, controllerPath, routePath) {
|
|
132
|
-
let path = controllerPath ?? "";
|
|
133
|
-
if (path.endsWith("/")) {
|
|
134
|
-
path = path.slice(0, -1);
|
|
135
|
-
}
|
|
136
|
-
if (!path.startsWith("/") && path) {
|
|
137
|
-
path = `/${path}`;
|
|
138
|
-
}
|
|
139
|
-
const fullPath = `${parentPath}${path}${routePath}`;
|
|
140
|
-
return this.normalizePath(fullPath);
|
|
141
|
-
}
|
|
142
|
-
buildChildRoutes(routes, controller, parentMiddlewares, childMiddlewares) {
|
|
143
|
-
let childRoutes = [];
|
|
144
|
-
for (const method of Object.keys(domain_1.HttpMethod).map((key) => domain_1.HttpMethod[key])) {
|
|
145
|
-
const methodRoutes = this.filterRoutesByMethod(routes, method);
|
|
146
|
-
if (methodRoutes.length === 0)
|
|
147
|
-
continue;
|
|
148
|
-
const mappedRoutes = methodRoutes.map((route) => ({
|
|
149
|
-
...route,
|
|
150
|
-
provider: controller.token,
|
|
151
|
-
route,
|
|
152
|
-
middlewares: [
|
|
153
|
-
...this.globalMiddlewares,
|
|
154
|
-
...parentMiddlewares,
|
|
155
|
-
...childMiddlewares,
|
|
156
|
-
...(Metadata_1.Metadata.get(constants_1.ROUTE_MIDDLEWARES, controller.token, route.methodName) || []),
|
|
157
|
-
],
|
|
158
|
-
}));
|
|
159
|
-
childRoutes = [...childRoutes, ...mappedRoutes];
|
|
160
|
-
}
|
|
161
|
-
if (controller.children) {
|
|
162
|
-
const nestedRoutes = this.resolveChildrenRoutes(controller.path, controller.children, childMiddlewares);
|
|
163
|
-
childRoutes = [...childRoutes, ...nestedRoutes];
|
|
164
|
-
}
|
|
165
|
-
return childRoutes;
|
|
166
|
-
}
|
|
167
|
-
registerRoutes(hydrateRoute) {
|
|
168
|
-
hydrateRoute.forEach((routes) => {
|
|
169
|
-
routes.forEach((route) => this.router.add(route.method.toLowerCase(), route.path, route));
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
exports.RouteResolver = RouteResolver;
|