@carno.js/core 0.2.3
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 +674 -0
- package/dist/Carno.d.ts +65 -0
- package/dist/Carno.js +307 -0
- package/dist/Cheetah.d.ts +65 -0
- package/dist/Cheetah.js +307 -0
- package/dist/cache/bento-cache.driver.d.ts +13 -0
- package/dist/cache/bento-cache.driver.js +55 -0
- package/dist/cache/cache.service.d.ts +8 -0
- package/dist/cache/cache.service.js +6 -0
- package/dist/commons/decorators/Injectable.decorator.d.ts +20 -0
- package/dist/commons/decorators/Injectable.decorator.js +33 -0
- package/dist/commons/decorators/controller.decorator.d.ts +8 -0
- package/dist/commons/decorators/controller.decorator.js +22 -0
- package/dist/commons/decorators/http.decorators.d.ts +13 -0
- package/dist/commons/decorators/http.decorators.js +44 -0
- package/dist/commons/decorators/index.d.ts +5 -0
- package/dist/commons/decorators/index.js +21 -0
- package/dist/commons/decorators/inject.decorator.d.ts +1 -0
- package/dist/commons/decorators/inject.decorator.js +5 -0
- package/dist/commons/decorators/middleware.decorator.d.ts +2 -0
- package/dist/commons/decorators/middleware.decorator.js +30 -0
- package/dist/commons/decorators/service.decorator.d.ts +2 -0
- package/dist/commons/decorators/service.decorator.js +7 -0
- package/dist/commons/http-code.enum.d.ts +50 -0
- package/dist/commons/http-code.enum.js +54 -0
- package/dist/commons/index.d.ts +3 -0
- package/dist/commons/index.js +19 -0
- package/dist/commons/registries/ProviderControl.d.ts +77 -0
- package/dist/commons/registries/ProviderControl.js +112 -0
- package/dist/commons/registries/ProviderRegistry.d.ts +7 -0
- package/dist/commons/registries/ProviderRegistry.js +20 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.js +10 -0
- package/dist/container/ContainerConfiguration.d.ts +45 -0
- package/dist/container/ContainerConfiguration.js +121 -0
- package/dist/container/DependencyResolver.d.ts +18 -0
- package/dist/container/DependencyResolver.js +81 -0
- package/dist/container/InjectorService.d.ts +34 -0
- package/dist/container/InjectorService.js +157 -0
- package/dist/container/MethodInvoker.d.ts +17 -0
- package/dist/container/MethodInvoker.js +69 -0
- package/dist/container/RouteResolver.d.ts +27 -0
- package/dist/container/RouteResolver.js +173 -0
- package/dist/container/container.d.ts +41 -0
- package/dist/container/container.js +71 -0
- package/dist/container/createContainer.d.ts +3 -0
- package/dist/container/createContainer.js +12 -0
- package/dist/container/createInjector.d.ts +2 -0
- package/dist/container/createInjector.js +7 -0
- package/dist/container/index.d.ts +6 -0
- package/dist/container/index.js +22 -0
- package/dist/container/middleware.resolver.d.ts +9 -0
- package/dist/container/middleware.resolver.js +35 -0
- package/dist/default-routes-carno.d.ts +3 -0
- package/dist/default-routes-carno.js +29 -0
- package/dist/default-routes-cheetah.d.ts +3 -0
- package/dist/default-routes-cheetah.js +29 -0
- package/dist/domain/CarnoClosure.d.ts +1 -0
- package/dist/domain/CarnoClosure.js +2 -0
- package/dist/domain/CarnoMiddleware.d.ts +5 -0
- package/dist/domain/CarnoMiddleware.js +2 -0
- package/dist/domain/CheetahClosure.d.ts +1 -0
- package/dist/domain/CheetahClosure.js +2 -0
- package/dist/domain/CheetahMiddleware.d.ts +5 -0
- package/dist/domain/CheetahMiddleware.js +2 -0
- package/dist/domain/Context.d.ts +26 -0
- package/dist/domain/Context.js +107 -0
- package/dist/domain/LocalsContainer.d.ts +4 -0
- package/dist/domain/LocalsContainer.js +10 -0
- package/dist/domain/Metadata.d.ts +449 -0
- package/dist/domain/Metadata.js +511 -0
- package/dist/domain/cors-config.d.ts +12 -0
- package/dist/domain/cors-config.js +18 -0
- package/dist/domain/http-method.d.ts +7 -0
- package/dist/domain/http-method.js +11 -0
- package/dist/domain/index.d.ts +10 -0
- package/dist/domain/index.js +26 -0
- package/dist/domain/provider-scope.d.ts +5 -0
- package/dist/domain/provider-scope.js +9 -0
- package/dist/domain/provider-type.d.ts +6 -0
- package/dist/domain/provider-type.js +10 -0
- package/dist/domain/provider.d.ts +37 -0
- package/dist/domain/provider.js +70 -0
- package/dist/events/hooks.decorator.d.ts +3 -0
- package/dist/events/hooks.decorator.js +29 -0
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.js +18 -0
- package/dist/events/on-event.d.ts +13 -0
- package/dist/events/on-event.js +11 -0
- package/dist/exceptions/HttpException.d.ts +9 -0
- package/dist/exceptions/HttpException.js +26 -0
- package/dist/exceptions/index.d.ts +1 -0
- package/dist/exceptions/index.js +17 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.js +32 -0
- package/dist/route/Matcher.d.ts +16 -0
- package/dist/route/Matcher.js +48 -0
- package/dist/route/RouteExecutor.d.ts +13 -0
- package/dist/route/RouteExecutor.js +70 -0
- package/dist/route/memoirist.d.ts +25 -0
- package/dist/route/memoirist.js +250 -0
- package/dist/services/logger.service.d.ts +23 -0
- package/dist/services/logger.service.js +54 -0
- package/dist/services/request-logger.service.d.ts +15 -0
- package/dist/services/request-logger.service.js +50 -0
- package/dist/testing/core-testing.d.ts +24 -0
- package/dist/testing/core-testing.js +98 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.js +17 -0
- package/dist/utils/ancestorOf.d.ts +2 -0
- package/dist/utils/ancestorOf.js +10 -0
- package/dist/utils/ancestorsOf.d.ts +6 -0
- package/dist/utils/ancestorsOf.js +20 -0
- package/dist/utils/classOf.d.ts +13 -0
- package/dist/utils/classOf.js +21 -0
- package/dist/utils/cleanObject.d.ts +6 -0
- package/dist/utils/cleanObject.js +22 -0
- package/dist/utils/constructorOf.d.ts +11 -0
- package/dist/utils/constructorOf.js +18 -0
- package/dist/utils/createInstance.d.ts +1 -0
- package/dist/utils/createInstance.js +7 -0
- package/dist/utils/decoratorTypeOf.d.ts +11 -0
- package/dist/utils/decoratorTypeOf.js +32 -0
- package/dist/utils/deepClone.d.ts +6 -0
- package/dist/utils/deepClone.js +63 -0
- package/dist/utils/deepMerge.d.ts +9 -0
- package/dist/utils/deepMerge.js +62 -0
- package/dist/utils/descriptorOf.d.ts +8 -0
- package/dist/utils/descriptorOf.js +16 -0
- package/dist/utils/getClassOrSymbol.d.ts +1 -0
- package/dist/utils/getClassOrSymbol.js +8 -0
- package/dist/utils/getConstructorArgNames.d.ts +1 -0
- package/dist/utils/getConstructorArgNames.js +12 -0
- package/dist/utils/getMethodArgTypes.d.ts +1 -0
- package/dist/utils/getMethodArgTypes.js +9 -0
- package/dist/utils/getValue.d.ts +32 -0
- package/dist/utils/getValue.js +47 -0
- package/dist/utils/hasJsonMethod.d.ts +1 -0
- package/dist/utils/hasJsonMethod.js +6 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.js +31 -0
- package/dist/utils/isArray.d.ts +13 -0
- package/dist/utils/isArray.js +21 -0
- package/dist/utils/isArrowFn.d.ts +1 -0
- package/dist/utils/isArrowFn.js +7 -0
- package/dist/utils/isBoolean.d.ts +7 -0
- package/dist/utils/isBoolean.js +15 -0
- package/dist/utils/isBuffer.d.ts +7 -0
- package/dist/utils/isBuffer.js +19 -0
- package/dist/utils/isClass.d.ts +1 -0
- package/dist/utils/isClass.js +26 -0
- package/dist/utils/isClassValidator.d.ts +6 -0
- package/dist/utils/isClassValidator.js +13 -0
- package/dist/utils/isCollection.d.ts +6 -0
- package/dist/utils/isCollection.js +20 -0
- package/dist/utils/isDate.d.ts +6 -0
- package/dist/utils/isDate.js +11 -0
- package/dist/utils/isEmpty.d.ts +6 -0
- package/dist/utils/isEmpty.js +12 -0
- package/dist/utils/isFunction.d.ts +1 -0
- package/dist/utils/isFunction.js +6 -0
- package/dist/utils/isInheritedFrom.d.ts +1 -0
- package/dist/utils/isInheritedFrom.js +24 -0
- package/dist/utils/isMomentObject.d.ts +1 -0
- package/dist/utils/isMomentObject.js +6 -0
- package/dist/utils/isMongooseObject.d.ts +2 -0
- package/dist/utils/isMongooseObject.js +11 -0
- package/dist/utils/isNil.d.ts +1 -0
- package/dist/utils/isNil.js +6 -0
- package/dist/utils/isNumber.d.ts +7 -0
- package/dist/utils/isNumber.js +15 -0
- package/dist/utils/isObject.d.ts +1 -0
- package/dist/utils/isObject.js +6 -0
- package/dist/utils/isObservable.d.ts +1 -0
- package/dist/utils/isObservable.js +6 -0
- package/dist/utils/isPlainObject.d.ts +7 -0
- package/dist/utils/isPlainObject.js +16 -0
- package/dist/utils/isPrimitive.d.ts +14 -0
- package/dist/utils/isPrimitive.js +28 -0
- package/dist/utils/isPrimitiveType.d.ts +1 -0
- package/dist/utils/isPrimitiveType.js +11 -0
- package/dist/utils/isPromise.d.ts +7 -0
- package/dist/utils/isPromise.js +14 -0
- package/dist/utils/isProtectedKey.d.ts +5 -0
- package/dist/utils/isProtectedKey.js +10 -0
- package/dist/utils/isRegExp.d.ts +1 -0
- package/dist/utils/isRegExp.js +6 -0
- package/dist/utils/isRequestScope.d.ts +11 -0
- package/dist/utils/isRequestScope.js +23 -0
- package/dist/utils/isSerializable.d.ts +1 -0
- package/dist/utils/isSerializable.js +11 -0
- package/dist/utils/isStream.d.ts +1 -0
- package/dist/utils/isStream.js +6 -0
- package/dist/utils/isString.d.ts +6 -0
- package/dist/utils/isString.js +14 -0
- package/dist/utils/isSymbol.d.ts +6 -0
- package/dist/utils/isSymbol.js +14 -0
- package/dist/utils/methodsOf.d.ts +9 -0
- package/dist/utils/methodsOf.js +24 -0
- package/dist/utils/nameOf.d.ts +14 -0
- package/dist/utils/nameOf.js +31 -0
- package/dist/utils/objectKeys.d.ts +1 -0
- package/dist/utils/objectKeys.js +7 -0
- package/dist/utils/primitiveOf.d.ts +1 -0
- package/dist/utils/primitiveOf.js +18 -0
- package/dist/utils/prototypeOf.d.ts +6 -0
- package/dist/utils/prototypeOf.js +12 -0
- package/dist/utils/setValue.d.ts +1 -0
- package/dist/utils/setValue.js +32 -0
- package/dist/utils/toMap.d.ts +3 -0
- package/dist/utils/toMap.js +34 -0
- package/dist/utils/toStringConstructor.d.ts +1 -0
- package/dist/utils/toStringConstructor.js +10 -0
- package/package.json +55 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export declare enum HttpCode {
|
|
2
|
+
CONTINUE = 100,
|
|
3
|
+
SWITCHING_PROTOCOLS = 101,
|
|
4
|
+
PROCESSING = 102,
|
|
5
|
+
EARLY_HINTS = 103,
|
|
6
|
+
OK = 200,
|
|
7
|
+
CREATED = 201,
|
|
8
|
+
ACCEPTED = 202,
|
|
9
|
+
NON_AUTHORITATIVE_INFORMATION = 203,
|
|
10
|
+
NO_CONTENT = 204,
|
|
11
|
+
RESET_CONTENT = 205,
|
|
12
|
+
PARTIAL_CONTENT = 206,
|
|
13
|
+
AMBIGUOUS = 300,
|
|
14
|
+
MOVED_PERMANENTLY = 301,
|
|
15
|
+
FOUND = 302,
|
|
16
|
+
SEE_OTHER = 303,
|
|
17
|
+
NOT_MODIFIED = 304,
|
|
18
|
+
TEMPORARY_REDIRECT = 307,
|
|
19
|
+
PERMANENT_REDIRECT = 308,
|
|
20
|
+
BAD_REQUEST = 400,
|
|
21
|
+
UNAUTHORIZED = 401,
|
|
22
|
+
PAYMENT_REQUIRED = 402,
|
|
23
|
+
FORBIDDEN = 403,
|
|
24
|
+
NOT_FOUND = 404,
|
|
25
|
+
METHOD_NOT_ALLOWED = 405,
|
|
26
|
+
NOT_ACCEPTABLE = 406,
|
|
27
|
+
PROXY_AUTHENTICATION_REQUIRED = 407,
|
|
28
|
+
REQUEST_TIMEOUT = 408,
|
|
29
|
+
CONFLICT = 409,
|
|
30
|
+
GONE = 410,
|
|
31
|
+
LENGTH_REQUIRED = 411,
|
|
32
|
+
PRECONDITION_FAILED = 412,
|
|
33
|
+
PAYLOAD_TOO_LARGE = 413,
|
|
34
|
+
URI_TOO_LONG = 414,
|
|
35
|
+
UNSUPPORTED_MEDIA_TYPE = 415,
|
|
36
|
+
REQUESTED_RANGE_NOT_SATISFIABLE = 416,
|
|
37
|
+
EXPECTATION_FAILED = 417,
|
|
38
|
+
I_AM_A_TEAPOT = 418,
|
|
39
|
+
MISDIRECTED = 421,
|
|
40
|
+
UNPROCESSABLE_ENTITY = 422,
|
|
41
|
+
FAILED_DEPENDENCY = 424,
|
|
42
|
+
PRECONDITION_REQUIRED = 428,
|
|
43
|
+
TOO_MANY_REQUESTS = 429,
|
|
44
|
+
INTERNAL_SERVER_ERROR = 500,
|
|
45
|
+
NOT_IMPLEMENTED = 501,
|
|
46
|
+
BAD_GATEWAY = 502,
|
|
47
|
+
SERVICE_UNAVAILABLE = 503,
|
|
48
|
+
GATEWAY_TIMEOUT = 504,
|
|
49
|
+
HTTP_VERSION_NOT_SUPPORTED = 505
|
|
50
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HttpCode = void 0;
|
|
4
|
+
var HttpCode;
|
|
5
|
+
(function (HttpCode) {
|
|
6
|
+
HttpCode[HttpCode["CONTINUE"] = 100] = "CONTINUE";
|
|
7
|
+
HttpCode[HttpCode["SWITCHING_PROTOCOLS"] = 101] = "SWITCHING_PROTOCOLS";
|
|
8
|
+
HttpCode[HttpCode["PROCESSING"] = 102] = "PROCESSING";
|
|
9
|
+
HttpCode[HttpCode["EARLY_HINTS"] = 103] = "EARLY_HINTS";
|
|
10
|
+
HttpCode[HttpCode["OK"] = 200] = "OK";
|
|
11
|
+
HttpCode[HttpCode["CREATED"] = 201] = "CREATED";
|
|
12
|
+
HttpCode[HttpCode["ACCEPTED"] = 202] = "ACCEPTED";
|
|
13
|
+
HttpCode[HttpCode["NON_AUTHORITATIVE_INFORMATION"] = 203] = "NON_AUTHORITATIVE_INFORMATION";
|
|
14
|
+
HttpCode[HttpCode["NO_CONTENT"] = 204] = "NO_CONTENT";
|
|
15
|
+
HttpCode[HttpCode["RESET_CONTENT"] = 205] = "RESET_CONTENT";
|
|
16
|
+
HttpCode[HttpCode["PARTIAL_CONTENT"] = 206] = "PARTIAL_CONTENT";
|
|
17
|
+
HttpCode[HttpCode["AMBIGUOUS"] = 300] = "AMBIGUOUS";
|
|
18
|
+
HttpCode[HttpCode["MOVED_PERMANENTLY"] = 301] = "MOVED_PERMANENTLY";
|
|
19
|
+
HttpCode[HttpCode["FOUND"] = 302] = "FOUND";
|
|
20
|
+
HttpCode[HttpCode["SEE_OTHER"] = 303] = "SEE_OTHER";
|
|
21
|
+
HttpCode[HttpCode["NOT_MODIFIED"] = 304] = "NOT_MODIFIED";
|
|
22
|
+
HttpCode[HttpCode["TEMPORARY_REDIRECT"] = 307] = "TEMPORARY_REDIRECT";
|
|
23
|
+
HttpCode[HttpCode["PERMANENT_REDIRECT"] = 308] = "PERMANENT_REDIRECT";
|
|
24
|
+
HttpCode[HttpCode["BAD_REQUEST"] = 400] = "BAD_REQUEST";
|
|
25
|
+
HttpCode[HttpCode["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
|
|
26
|
+
HttpCode[HttpCode["PAYMENT_REQUIRED"] = 402] = "PAYMENT_REQUIRED";
|
|
27
|
+
HttpCode[HttpCode["FORBIDDEN"] = 403] = "FORBIDDEN";
|
|
28
|
+
HttpCode[HttpCode["NOT_FOUND"] = 404] = "NOT_FOUND";
|
|
29
|
+
HttpCode[HttpCode["METHOD_NOT_ALLOWED"] = 405] = "METHOD_NOT_ALLOWED";
|
|
30
|
+
HttpCode[HttpCode["NOT_ACCEPTABLE"] = 406] = "NOT_ACCEPTABLE";
|
|
31
|
+
HttpCode[HttpCode["PROXY_AUTHENTICATION_REQUIRED"] = 407] = "PROXY_AUTHENTICATION_REQUIRED";
|
|
32
|
+
HttpCode[HttpCode["REQUEST_TIMEOUT"] = 408] = "REQUEST_TIMEOUT";
|
|
33
|
+
HttpCode[HttpCode["CONFLICT"] = 409] = "CONFLICT";
|
|
34
|
+
HttpCode[HttpCode["GONE"] = 410] = "GONE";
|
|
35
|
+
HttpCode[HttpCode["LENGTH_REQUIRED"] = 411] = "LENGTH_REQUIRED";
|
|
36
|
+
HttpCode[HttpCode["PRECONDITION_FAILED"] = 412] = "PRECONDITION_FAILED";
|
|
37
|
+
HttpCode[HttpCode["PAYLOAD_TOO_LARGE"] = 413] = "PAYLOAD_TOO_LARGE";
|
|
38
|
+
HttpCode[HttpCode["URI_TOO_LONG"] = 414] = "URI_TOO_LONG";
|
|
39
|
+
HttpCode[HttpCode["UNSUPPORTED_MEDIA_TYPE"] = 415] = "UNSUPPORTED_MEDIA_TYPE";
|
|
40
|
+
HttpCode[HttpCode["REQUESTED_RANGE_NOT_SATISFIABLE"] = 416] = "REQUESTED_RANGE_NOT_SATISFIABLE";
|
|
41
|
+
HttpCode[HttpCode["EXPECTATION_FAILED"] = 417] = "EXPECTATION_FAILED";
|
|
42
|
+
HttpCode[HttpCode["I_AM_A_TEAPOT"] = 418] = "I_AM_A_TEAPOT";
|
|
43
|
+
HttpCode[HttpCode["MISDIRECTED"] = 421] = "MISDIRECTED";
|
|
44
|
+
HttpCode[HttpCode["UNPROCESSABLE_ENTITY"] = 422] = "UNPROCESSABLE_ENTITY";
|
|
45
|
+
HttpCode[HttpCode["FAILED_DEPENDENCY"] = 424] = "FAILED_DEPENDENCY";
|
|
46
|
+
HttpCode[HttpCode["PRECONDITION_REQUIRED"] = 428] = "PRECONDITION_REQUIRED";
|
|
47
|
+
HttpCode[HttpCode["TOO_MANY_REQUESTS"] = 429] = "TOO_MANY_REQUESTS";
|
|
48
|
+
HttpCode[HttpCode["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
|
|
49
|
+
HttpCode[HttpCode["NOT_IMPLEMENTED"] = 501] = "NOT_IMPLEMENTED";
|
|
50
|
+
HttpCode[HttpCode["BAD_GATEWAY"] = 502] = "BAD_GATEWAY";
|
|
51
|
+
HttpCode[HttpCode["SERVICE_UNAVAILABLE"] = 503] = "SERVICE_UNAVAILABLE";
|
|
52
|
+
HttpCode[HttpCode["GATEWAY_TIMEOUT"] = 504] = "GATEWAY_TIMEOUT";
|
|
53
|
+
HttpCode[HttpCode["HTTP_VERSION_NOT_SUPPORTED"] = 505] = "HTTP_VERSION_NOT_SUPPORTED";
|
|
54
|
+
})(HttpCode || (exports.HttpCode = HttpCode = {}));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./registries/ProviderControl"), exports);
|
|
18
|
+
__exportStar(require("./registries/ProviderRegistry"), exports);
|
|
19
|
+
__exportStar(require("./decorators"), exports);
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { ProviderType } from '../../domain/provider-type';
|
|
2
|
+
import { Provider } from '../../domain/provider';
|
|
3
|
+
import { ProviderScope } from '../../domain/provider-scope';
|
|
4
|
+
import { InjectorService } from '../../container/InjectorService';
|
|
5
|
+
import { LocalsContainer } from '../../domain/LocalsContainer';
|
|
6
|
+
export interface ResolvedInvokeOptions {
|
|
7
|
+
token: TokenProvider;
|
|
8
|
+
parent?: TokenProvider;
|
|
9
|
+
scope: ProviderScope;
|
|
10
|
+
deps: TokenProvider[];
|
|
11
|
+
imports: TokenProvider[];
|
|
12
|
+
provider: Provider;
|
|
13
|
+
construct(deps: TokenProvider[]): any;
|
|
14
|
+
}
|
|
15
|
+
export type ProviderSettings = {
|
|
16
|
+
injectable?: boolean;
|
|
17
|
+
model?: Type<Provider>;
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @param provider
|
|
21
|
+
* @param {Map<string | Function, any>} locals
|
|
22
|
+
* @param options
|
|
23
|
+
*/
|
|
24
|
+
onInvoke?(provider: Provider, locals: Map<string | Function, any>, options: ResolvedInvokeOptions & {
|
|
25
|
+
injector: InjectorService;
|
|
26
|
+
}): void;
|
|
27
|
+
};
|
|
28
|
+
export interface Type<T = any> extends Function {
|
|
29
|
+
new (...args: any[]): T;
|
|
30
|
+
}
|
|
31
|
+
export type TokenProvider<T = any> = string | symbol | Type<T> | Function | any;
|
|
32
|
+
export interface TokenProviderOpts {
|
|
33
|
+
token?: TokenProvider;
|
|
34
|
+
use: any;
|
|
35
|
+
}
|
|
36
|
+
declare class ProviderControl extends Map<TokenProvider, Provider> {
|
|
37
|
+
settings: Map<string, ProviderSettings>;
|
|
38
|
+
/**
|
|
39
|
+
* The get() method returns a specified element from a Map object.
|
|
40
|
+
* @param key Required. The key of the element to return from the Map object.
|
|
41
|
+
* @returns Returns the element associated with the specified key or undefined if the key can't be found in the Map object.
|
|
42
|
+
*/
|
|
43
|
+
get(key: TokenProvider): Provider | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* The has() method returns a boolean indicating whether an element with the specified key exists or not.
|
|
46
|
+
* @param key
|
|
47
|
+
* @returns {boolean}
|
|
48
|
+
*/
|
|
49
|
+
has(key: TokenProvider): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* The set() method adds or updates an element with a specified key and value to a Map object.
|
|
52
|
+
* @param key Required. The key of the element to add to the Map object.
|
|
53
|
+
* @param metadata Required. The value of the element to add to the Map object.
|
|
54
|
+
*/
|
|
55
|
+
set(key: TokenProvider, metadata: Provider): this;
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
* @param target
|
|
59
|
+
* @param options
|
|
60
|
+
*/
|
|
61
|
+
merge(target: TokenProvider, options: Partial<Provider>): Provider;
|
|
62
|
+
getByType(type: ProviderType): Provider[];
|
|
63
|
+
createRegistry(type: string, model: Type<Provider>, options?: Partial<ProviderSettings>): this;
|
|
64
|
+
getRegistrySettings(target: string | TokenProvider): ProviderSettings;
|
|
65
|
+
createRegisterFn(type: string): (provider: any | Provider, instance?: any) => void;
|
|
66
|
+
onInvoke(provider: Provider, locals: LocalsContainer, options: ResolvedInvokeOptions & {
|
|
67
|
+
injector: InjectorService;
|
|
68
|
+
}): void;
|
|
69
|
+
/**
|
|
70
|
+
*
|
|
71
|
+
* @param key
|
|
72
|
+
* @param options
|
|
73
|
+
*/
|
|
74
|
+
protected createIfNotExists(key: TokenProvider, options: Partial<Provider>): Provider;
|
|
75
|
+
}
|
|
76
|
+
export declare const GlobalProvider: ProviderControl;
|
|
77
|
+
export {};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GlobalProvider = void 0;
|
|
4
|
+
const provider_type_1 = require("../../domain/provider-type");
|
|
5
|
+
const provider_1 = require("../../domain/provider");
|
|
6
|
+
const utils_1 = require("../../utils");
|
|
7
|
+
class ProviderControl extends Map {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.settings = new Map();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The get() method returns a specified element from a Map object.
|
|
14
|
+
* @param key Required. The key of the element to return from the Map object.
|
|
15
|
+
* @returns Returns the element associated with the specified key or undefined if the key can't be found in the Map object.
|
|
16
|
+
*/
|
|
17
|
+
get(key) {
|
|
18
|
+
return super.get((0, utils_1.getClassOrSymbol)(key));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* The has() method returns a boolean indicating whether an element with the specified key exists or not.
|
|
22
|
+
* @param key
|
|
23
|
+
* @returns {boolean}
|
|
24
|
+
*/
|
|
25
|
+
has(key) {
|
|
26
|
+
return super.has((0, utils_1.getClassOrSymbol)(key));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The set() method adds or updates an element with a specified key and value to a Map object.
|
|
30
|
+
* @param key Required. The key of the element to add to the Map object.
|
|
31
|
+
* @param metadata Required. The value of the element to add to the Map object.
|
|
32
|
+
*/
|
|
33
|
+
set(key, metadata) {
|
|
34
|
+
super.set((0, utils_1.getClassOrSymbol)(key), metadata);
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
* @param target
|
|
40
|
+
* @param options
|
|
41
|
+
*/
|
|
42
|
+
merge(target, options) {
|
|
43
|
+
let meta = this.createIfNotExists(target, options);
|
|
44
|
+
Object.keys(options).forEach((key) => {
|
|
45
|
+
// @ts-ignore
|
|
46
|
+
meta[key] = options[key];
|
|
47
|
+
});
|
|
48
|
+
this.set(target, meta);
|
|
49
|
+
return meta;
|
|
50
|
+
}
|
|
51
|
+
getByType(type) {
|
|
52
|
+
let result = [];
|
|
53
|
+
this.forEach((value, key) => {
|
|
54
|
+
if (value.type === type) {
|
|
55
|
+
result.push(value);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
createRegistry(type, model, options = {}) {
|
|
62
|
+
const defaultOptions = this.getRegistrySettings(type);
|
|
63
|
+
options = Object.assign(defaultOptions, {
|
|
64
|
+
...options,
|
|
65
|
+
model
|
|
66
|
+
});
|
|
67
|
+
this.settings.set(type, options);
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
getRegistrySettings(target) {
|
|
71
|
+
let type = "provider";
|
|
72
|
+
if (typeof target === "string") {
|
|
73
|
+
type = target;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const provider = this.get(target);
|
|
77
|
+
if (provider) {
|
|
78
|
+
type = provider.type;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return (this.settings.get(type) || {
|
|
82
|
+
model: provider_1.Provider
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
createRegisterFn(type) {
|
|
86
|
+
return (provider, instance) => {
|
|
87
|
+
provider = Object.assign({ instance }, provider, { type });
|
|
88
|
+
this.merge(provider.provide, provider);
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
onInvoke(provider, locals, options) {
|
|
92
|
+
const settings = this.settings.get(provider.type);
|
|
93
|
+
if (settings?.onInvoke) {
|
|
94
|
+
settings.onInvoke(provider, locals, options);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
*
|
|
99
|
+
* @param key
|
|
100
|
+
* @param options
|
|
101
|
+
*/
|
|
102
|
+
createIfNotExists(key, options) {
|
|
103
|
+
const type = options.type || provider_type_1.ProviderType.PROVIDER;
|
|
104
|
+
if (!this.has(key)) {
|
|
105
|
+
const { model = provider_1.Provider } = this.settings.get(type) || {};
|
|
106
|
+
const item = new model(key, options);
|
|
107
|
+
this.set(key, item);
|
|
108
|
+
}
|
|
109
|
+
return this.get(key);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.GlobalProvider = new ProviderControl();
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Provider } from '../../domain/provider';
|
|
2
|
+
export declare const registerController: (provider: any | Provider, instance?: any) => void;
|
|
3
|
+
/**
|
|
4
|
+
* Register a provider configuration.
|
|
5
|
+
* @param {Provider<any>} provider
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerProvider(provider: Partial<Provider>): Provider;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerController = void 0;
|
|
4
|
+
exports.registerProvider = registerProvider;
|
|
5
|
+
const provider_1 = require("../../domain/provider");
|
|
6
|
+
const provider_type_1 = require("../../domain/provider-type");
|
|
7
|
+
const ProviderControl_1 = require("./ProviderControl");
|
|
8
|
+
ProviderControl_1.GlobalProvider.createRegistry(provider_type_1.ProviderType.CONTROLLER, provider_1.Provider);
|
|
9
|
+
ProviderControl_1.GlobalProvider.createRegistry(provider_type_1.ProviderType.ROUTES, provider_1.Provider);
|
|
10
|
+
exports.registerController = ProviderControl_1.GlobalProvider.createRegisterFn(provider_type_1.ProviderType.CONTROLLER);
|
|
11
|
+
/**
|
|
12
|
+
* Register a provider configuration.
|
|
13
|
+
* @param {Provider<any>} provider
|
|
14
|
+
*/
|
|
15
|
+
function registerProvider(provider) {
|
|
16
|
+
if (!provider.provide) {
|
|
17
|
+
throw new Error("Provider.provide is required");
|
|
18
|
+
}
|
|
19
|
+
return ProviderControl_1.GlobalProvider.merge(provider.provide, provider);
|
|
20
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const CONTROLLER = "carno:controller";
|
|
2
|
+
export declare const CONTROLLER_ROUTES = "carno:controller:routes";
|
|
3
|
+
export declare const CONTROLLER_MIDDLEWARES = "carno:controller:middlewares";
|
|
4
|
+
export declare const CONTROLLER_EVENTS = "carno:controller:events";
|
|
5
|
+
export declare const ROUTE_PARAM = "carno:route:param";
|
|
6
|
+
export declare const ROUTE_MIDDLEWARES = "carno:route:middlewares";
|
|
7
|
+
export declare const PROVIDER = "carno:provider";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PROVIDER = exports.ROUTE_MIDDLEWARES = exports.ROUTE_PARAM = exports.CONTROLLER_EVENTS = exports.CONTROLLER_MIDDLEWARES = exports.CONTROLLER_ROUTES = exports.CONTROLLER = void 0;
|
|
4
|
+
exports.CONTROLLER = "carno:controller";
|
|
5
|
+
exports.CONTROLLER_ROUTES = "carno:controller:routes";
|
|
6
|
+
exports.CONTROLLER_MIDDLEWARES = "carno:controller:middlewares";
|
|
7
|
+
exports.CONTROLLER_EVENTS = "carno:controller:events";
|
|
8
|
+
exports.ROUTE_PARAM = "carno:route:param";
|
|
9
|
+
exports.ROUTE_MIDDLEWARES = "carno:route:middlewares";
|
|
10
|
+
exports.PROVIDER = "carno:provider";
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Env } from 'bun';
|
|
2
|
+
import { TokenProvider, TokenProviderOpts } from '../commons';
|
|
3
|
+
import { CarnoMiddleware, Provider, ProviderScope } from '../domain';
|
|
4
|
+
export type TokenRoute = {
|
|
5
|
+
method: string;
|
|
6
|
+
path: string;
|
|
7
|
+
methodName: string;
|
|
8
|
+
middlewares: CarnoMiddleware[];
|
|
9
|
+
};
|
|
10
|
+
export type TokenRouteWithProvider = TokenRoute & {
|
|
11
|
+
provider: Provider;
|
|
12
|
+
};
|
|
13
|
+
export type TokenRouteWithProviderMap = Map<string, TokenRouteWithProvider[]>;
|
|
14
|
+
export declare class ContainerConfiguration {
|
|
15
|
+
readonly default: Map<string, any>;
|
|
16
|
+
protected map: Map<string, any>;
|
|
17
|
+
constructor(initialProps?: {});
|
|
18
|
+
get version(): string;
|
|
19
|
+
set version(v: string);
|
|
20
|
+
get rootDir(): string;
|
|
21
|
+
set rootDir(value: string);
|
|
22
|
+
get env(): Env;
|
|
23
|
+
set env(value: Env);
|
|
24
|
+
get scopes(): Record<string, ProviderScope>;
|
|
25
|
+
set scopes(value: Record<string, ProviderScope>);
|
|
26
|
+
get imports(): (TokenProvider | TokenProviderOpts)[];
|
|
27
|
+
set imports(imports: (TokenProvider | TokenProviderOpts)[]);
|
|
28
|
+
get routes(): TokenRouteWithProviderMap;
|
|
29
|
+
set routes(routes: TokenRouteWithProviderMap);
|
|
30
|
+
/**
|
|
31
|
+
*
|
|
32
|
+
* @param propertyKey
|
|
33
|
+
* @param value
|
|
34
|
+
*/
|
|
35
|
+
set(propertyKey: string | Partial<ContainerConfiguration>, value?: any): this;
|
|
36
|
+
setRaw(propertyKey: string, value: any): this;
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
* @param propertyKey
|
|
40
|
+
* @param defaultValue
|
|
41
|
+
* @returns {undefined|any}
|
|
42
|
+
*/
|
|
43
|
+
get<T = any>(propertyKey: string, defaultValue?: T): T;
|
|
44
|
+
protected getRaw(propertyKey: string, defaultValue?: any): any;
|
|
45
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContainerConfiguration = void 0;
|
|
4
|
+
const __1 = require("..");
|
|
5
|
+
class ContainerConfiguration {
|
|
6
|
+
constructor(initialProps = {}) {
|
|
7
|
+
this.default = new Map();
|
|
8
|
+
this.map = new Map();
|
|
9
|
+
Object.entries({
|
|
10
|
+
scopes: {},
|
|
11
|
+
resolvers: [],
|
|
12
|
+
imports: [],
|
|
13
|
+
logger: {},
|
|
14
|
+
...initialProps
|
|
15
|
+
}).forEach(([key, value]) => {
|
|
16
|
+
this.default.set(key, value);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
get version() {
|
|
20
|
+
return this.get("version");
|
|
21
|
+
}
|
|
22
|
+
set version(v) {
|
|
23
|
+
this.map.set("version", v);
|
|
24
|
+
}
|
|
25
|
+
get rootDir() {
|
|
26
|
+
return this.get("rootDir");
|
|
27
|
+
}
|
|
28
|
+
set rootDir(value) {
|
|
29
|
+
this.map.set("rootDir", value);
|
|
30
|
+
}
|
|
31
|
+
get env() {
|
|
32
|
+
return this.map.get("env");
|
|
33
|
+
}
|
|
34
|
+
set env(value) {
|
|
35
|
+
this.map.set("env", value);
|
|
36
|
+
}
|
|
37
|
+
get scopes() {
|
|
38
|
+
return this.map.get("scopes");
|
|
39
|
+
}
|
|
40
|
+
set scopes(value) {
|
|
41
|
+
this.map.set("scopes", value);
|
|
42
|
+
}
|
|
43
|
+
// get resolvers(): DIResolver[] {
|
|
44
|
+
// return this.getRaw("resolvers");
|
|
45
|
+
// }
|
|
46
|
+
//
|
|
47
|
+
// set resolvers(resolvers: DIResolver[]) {
|
|
48
|
+
// this.map.set("resolvers", resolvers);
|
|
49
|
+
// }
|
|
50
|
+
get imports() {
|
|
51
|
+
return this.get("imports");
|
|
52
|
+
}
|
|
53
|
+
set imports(imports) {
|
|
54
|
+
this.map.set("imports", imports);
|
|
55
|
+
}
|
|
56
|
+
get routes() {
|
|
57
|
+
return this.get("routes");
|
|
58
|
+
}
|
|
59
|
+
set routes(routes) {
|
|
60
|
+
this.map.set("routes", routes);
|
|
61
|
+
}
|
|
62
|
+
// get logger(): Partial<DILoggerOptions> {
|
|
63
|
+
// return this.get("logger");
|
|
64
|
+
// }
|
|
65
|
+
//
|
|
66
|
+
// set logger(value: Partial<DILoggerOptions>) {
|
|
67
|
+
// const logger = {...this.logger, ...value};
|
|
68
|
+
// this.map.set("logger", logger);
|
|
69
|
+
// }
|
|
70
|
+
// get debug(): boolean {
|
|
71
|
+
// return this.logger.level === "debug";
|
|
72
|
+
// }
|
|
73
|
+
//
|
|
74
|
+
// set debug(debug: boolean) {
|
|
75
|
+
// this.logger = {...this.logger, level: debug ? "debug" : "info"};
|
|
76
|
+
// }
|
|
77
|
+
/**
|
|
78
|
+
*
|
|
79
|
+
* @param propertyKey
|
|
80
|
+
* @param value
|
|
81
|
+
*/
|
|
82
|
+
set(propertyKey, value) {
|
|
83
|
+
if (typeof propertyKey === "string") {
|
|
84
|
+
if (Reflect.has(this, propertyKey)) {
|
|
85
|
+
// @ts-ignore
|
|
86
|
+
this[propertyKey] = value;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.setRaw(propertyKey, value);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
Object.entries(propertyKey).forEach(([key, value]) => {
|
|
94
|
+
this.set(key, value);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
setRaw(propertyKey, value) {
|
|
100
|
+
(0, __1.setValue)(this.map, propertyKey, value);
|
|
101
|
+
return this;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
*
|
|
105
|
+
* @param propertyKey
|
|
106
|
+
* @param defaultValue
|
|
107
|
+
* @returns {undefined|any}
|
|
108
|
+
*/
|
|
109
|
+
get(propertyKey, defaultValue) {
|
|
110
|
+
return this.getRaw(propertyKey, defaultValue);
|
|
111
|
+
}
|
|
112
|
+
getRaw(propertyKey, defaultValue) {
|
|
113
|
+
const value = this.map.get(propertyKey);
|
|
114
|
+
if (value !== undefined) {
|
|
115
|
+
return value;
|
|
116
|
+
}
|
|
117
|
+
// @ts-ignore
|
|
118
|
+
return this.map[propertyKey] ?? defaultValue;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.ContainerConfiguration = ContainerConfiguration;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TokenProvider } from "../commons/registries/ProviderControl";
|
|
2
|
+
import { LocalsContainer } from "../domain/LocalsContainer";
|
|
3
|
+
import { Provider } from "../domain/provider";
|
|
4
|
+
import { Container } from "./container";
|
|
5
|
+
export declare class DependencyResolver {
|
|
6
|
+
private container;
|
|
7
|
+
constructor(container: Container);
|
|
8
|
+
resolve(provider: Provider, locals: LocalsContainer, invokeCallback: (token: TokenProvider, locals: LocalsContainer) => any): any;
|
|
9
|
+
private validateProvider;
|
|
10
|
+
private determineScope;
|
|
11
|
+
private hasRequestScopeDependency;
|
|
12
|
+
private createInstance;
|
|
13
|
+
private resolveServices;
|
|
14
|
+
private handleScope;
|
|
15
|
+
private handleSingleton;
|
|
16
|
+
private handleRequest;
|
|
17
|
+
getConstructorDependencies(target: TokenProvider, propertyKey?: string | symbol | undefined): TokenProvider[];
|
|
18
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependencyResolver = void 0;
|
|
4
|
+
const Metadata_1 = require("../domain/Metadata");
|
|
5
|
+
const provider_scope_1 = require("../domain/provider-scope");
|
|
6
|
+
const getClassOrSymbol_1 = require("../utils/getClassOrSymbol");
|
|
7
|
+
const isPrimitiveType_1 = require("../utils/isPrimitiveType");
|
|
8
|
+
class DependencyResolver {
|
|
9
|
+
constructor(container) {
|
|
10
|
+
this.container = container;
|
|
11
|
+
}
|
|
12
|
+
resolve(provider, locals, invokeCallback) {
|
|
13
|
+
if (provider.instance)
|
|
14
|
+
return provider.instance;
|
|
15
|
+
this.validateProvider(provider);
|
|
16
|
+
const scope = this.determineScope(provider);
|
|
17
|
+
const instance = this.createInstance(provider, invokeCallback, locals);
|
|
18
|
+
return this.handleScope(provider, instance, scope, locals);
|
|
19
|
+
}
|
|
20
|
+
validateProvider(provider) {
|
|
21
|
+
if (!provider.useClass && !provider.useValue) {
|
|
22
|
+
throw new Error("Provider not found.");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
determineScope(provider) {
|
|
26
|
+
if (provider.scope === provider_scope_1.ProviderScope.REQUEST) {
|
|
27
|
+
return provider_scope_1.ProviderScope.REQUEST;
|
|
28
|
+
}
|
|
29
|
+
const deps = this.getConstructorDependencies(provider.useClass);
|
|
30
|
+
const hasRequestDep = this.hasRequestScopeDependency(deps);
|
|
31
|
+
return hasRequestDep ? provider_scope_1.ProviderScope.REQUEST : provider_scope_1.ProviderScope.SINGLETON;
|
|
32
|
+
}
|
|
33
|
+
hasRequestScopeDependency(deps) {
|
|
34
|
+
if (deps.length === 0)
|
|
35
|
+
return false;
|
|
36
|
+
return deps.some((dep) => {
|
|
37
|
+
const depProvider = this.container.get(dep);
|
|
38
|
+
return depProvider?.scope === provider_scope_1.ProviderScope.REQUEST;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
createInstance(provider, invokeCallback, locals) {
|
|
42
|
+
if (provider.useValue) {
|
|
43
|
+
return provider.useValue;
|
|
44
|
+
}
|
|
45
|
+
const deps = this.getConstructorDependencies(provider.useClass);
|
|
46
|
+
const services = this.resolveServices(deps, invokeCallback, locals);
|
|
47
|
+
return new provider.useClass(...services);
|
|
48
|
+
}
|
|
49
|
+
resolveServices(deps, invokeCallback, locals) {
|
|
50
|
+
return deps
|
|
51
|
+
.filter((t) => !(0, isPrimitiveType_1.isPrimitiveType)(t))
|
|
52
|
+
.map((token) => invokeCallback((0, getClassOrSymbol_1.getClassOrSymbol)(token), locals));
|
|
53
|
+
}
|
|
54
|
+
handleScope(provider, instance, scope, locals) {
|
|
55
|
+
switch (scope) {
|
|
56
|
+
case provider_scope_1.ProviderScope.SINGLETON:
|
|
57
|
+
return this.handleSingleton(provider, instance);
|
|
58
|
+
case provider_scope_1.ProviderScope.REQUEST:
|
|
59
|
+
return this.handleRequest(provider, instance, locals);
|
|
60
|
+
default:
|
|
61
|
+
return instance;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
handleSingleton(provider, instance) {
|
|
65
|
+
provider.instance = instance;
|
|
66
|
+
this.container.addProvider(provider.token, provider);
|
|
67
|
+
return instance;
|
|
68
|
+
}
|
|
69
|
+
handleRequest(provider, instance, locals) {
|
|
70
|
+
const clone = provider.clone();
|
|
71
|
+
clone.instance = instance;
|
|
72
|
+
locals.set(clone.token, clone);
|
|
73
|
+
return instance;
|
|
74
|
+
}
|
|
75
|
+
getConstructorDependencies(target, propertyKey) {
|
|
76
|
+
return (Metadata_1.Metadata.getOwn("override:ctor:design:paramtypes", target, propertyKey) ||
|
|
77
|
+
[...Metadata_1.Metadata.getParamTypes(target, propertyKey)] ||
|
|
78
|
+
[]);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.DependencyResolver = DependencyResolver;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ApplicationConfig } from "../Carno";
|
|
2
|
+
import { TokenProvider } from "../commons/registries/ProviderControl";
|
|
3
|
+
import { Context } from "../domain/Context";
|
|
4
|
+
import { LocalsContainer } from "../domain/LocalsContainer";
|
|
5
|
+
import { Provider } from "../domain/provider";
|
|
6
|
+
import { ProviderScope } from "../domain/provider-scope";
|
|
7
|
+
import { EventType } from "../events/on-event";
|
|
8
|
+
import Memoirist from "../route/memoirist";
|
|
9
|
+
import { ContainerConfiguration, TokenRouteWithProvider } from "./ContainerConfiguration";
|
|
10
|
+
import { Container } from "./container";
|
|
11
|
+
export declare class InjectorService {
|
|
12
|
+
settings: ContainerConfiguration;
|
|
13
|
+
container: Container;
|
|
14
|
+
applicationConfig: ApplicationConfig;
|
|
15
|
+
router: Memoirist<TokenRouteWithProvider>;
|
|
16
|
+
private routeResolver;
|
|
17
|
+
private dependencyResolver;
|
|
18
|
+
private methodInvoker;
|
|
19
|
+
loadModule(container: Container, applicationConfig: ApplicationConfig, router: Memoirist<any>): Promise<void>;
|
|
20
|
+
private initializeResolvers;
|
|
21
|
+
private ensureProvider;
|
|
22
|
+
get(token: TokenProvider): Provider | undefined;
|
|
23
|
+
invoke(token: TokenProvider, locals?: LocalsContainer): any;
|
|
24
|
+
invokeRoute(route: TokenRouteWithProvider, context: Context, locals: LocalsContainer): Promise<any>;
|
|
25
|
+
scopeOf(provider: Provider): ProviderScope | undefined;
|
|
26
|
+
callHook(event: EventType, data?: unknown): Promise<void>;
|
|
27
|
+
private getHooksByEvent;
|
|
28
|
+
private sortHooksByPriority;
|
|
29
|
+
private runHookHandlers;
|
|
30
|
+
private executeHook;
|
|
31
|
+
private saveInjector;
|
|
32
|
+
private removeUnknownProviders;
|
|
33
|
+
private isProviderAllowed;
|
|
34
|
+
}
|