@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.
Files changed (214) hide show
  1. package/LICENSE +674 -0
  2. package/dist/Carno.d.ts +65 -0
  3. package/dist/Carno.js +307 -0
  4. package/dist/Cheetah.d.ts +65 -0
  5. package/dist/Cheetah.js +307 -0
  6. package/dist/cache/bento-cache.driver.d.ts +13 -0
  7. package/dist/cache/bento-cache.driver.js +55 -0
  8. package/dist/cache/cache.service.d.ts +8 -0
  9. package/dist/cache/cache.service.js +6 -0
  10. package/dist/commons/decorators/Injectable.decorator.d.ts +20 -0
  11. package/dist/commons/decorators/Injectable.decorator.js +33 -0
  12. package/dist/commons/decorators/controller.decorator.d.ts +8 -0
  13. package/dist/commons/decorators/controller.decorator.js +22 -0
  14. package/dist/commons/decorators/http.decorators.d.ts +13 -0
  15. package/dist/commons/decorators/http.decorators.js +44 -0
  16. package/dist/commons/decorators/index.d.ts +5 -0
  17. package/dist/commons/decorators/index.js +21 -0
  18. package/dist/commons/decorators/inject.decorator.d.ts +1 -0
  19. package/dist/commons/decorators/inject.decorator.js +5 -0
  20. package/dist/commons/decorators/middleware.decorator.d.ts +2 -0
  21. package/dist/commons/decorators/middleware.decorator.js +30 -0
  22. package/dist/commons/decorators/service.decorator.d.ts +2 -0
  23. package/dist/commons/decorators/service.decorator.js +7 -0
  24. package/dist/commons/http-code.enum.d.ts +50 -0
  25. package/dist/commons/http-code.enum.js +54 -0
  26. package/dist/commons/index.d.ts +3 -0
  27. package/dist/commons/index.js +19 -0
  28. package/dist/commons/registries/ProviderControl.d.ts +77 -0
  29. package/dist/commons/registries/ProviderControl.js +112 -0
  30. package/dist/commons/registries/ProviderRegistry.d.ts +7 -0
  31. package/dist/commons/registries/ProviderRegistry.js +20 -0
  32. package/dist/constants.d.ts +7 -0
  33. package/dist/constants.js +10 -0
  34. package/dist/container/ContainerConfiguration.d.ts +45 -0
  35. package/dist/container/ContainerConfiguration.js +121 -0
  36. package/dist/container/DependencyResolver.d.ts +18 -0
  37. package/dist/container/DependencyResolver.js +81 -0
  38. package/dist/container/InjectorService.d.ts +34 -0
  39. package/dist/container/InjectorService.js +157 -0
  40. package/dist/container/MethodInvoker.d.ts +17 -0
  41. package/dist/container/MethodInvoker.js +69 -0
  42. package/dist/container/RouteResolver.d.ts +27 -0
  43. package/dist/container/RouteResolver.js +173 -0
  44. package/dist/container/container.d.ts +41 -0
  45. package/dist/container/container.js +71 -0
  46. package/dist/container/createContainer.d.ts +3 -0
  47. package/dist/container/createContainer.js +12 -0
  48. package/dist/container/createInjector.d.ts +2 -0
  49. package/dist/container/createInjector.js +7 -0
  50. package/dist/container/index.d.ts +6 -0
  51. package/dist/container/index.js +22 -0
  52. package/dist/container/middleware.resolver.d.ts +9 -0
  53. package/dist/container/middleware.resolver.js +35 -0
  54. package/dist/default-routes-carno.d.ts +3 -0
  55. package/dist/default-routes-carno.js +29 -0
  56. package/dist/default-routes-cheetah.d.ts +3 -0
  57. package/dist/default-routes-cheetah.js +29 -0
  58. package/dist/domain/CarnoClosure.d.ts +1 -0
  59. package/dist/domain/CarnoClosure.js +2 -0
  60. package/dist/domain/CarnoMiddleware.d.ts +5 -0
  61. package/dist/domain/CarnoMiddleware.js +2 -0
  62. package/dist/domain/CheetahClosure.d.ts +1 -0
  63. package/dist/domain/CheetahClosure.js +2 -0
  64. package/dist/domain/CheetahMiddleware.d.ts +5 -0
  65. package/dist/domain/CheetahMiddleware.js +2 -0
  66. package/dist/domain/Context.d.ts +26 -0
  67. package/dist/domain/Context.js +107 -0
  68. package/dist/domain/LocalsContainer.d.ts +4 -0
  69. package/dist/domain/LocalsContainer.js +10 -0
  70. package/dist/domain/Metadata.d.ts +449 -0
  71. package/dist/domain/Metadata.js +511 -0
  72. package/dist/domain/cors-config.d.ts +12 -0
  73. package/dist/domain/cors-config.js +18 -0
  74. package/dist/domain/http-method.d.ts +7 -0
  75. package/dist/domain/http-method.js +11 -0
  76. package/dist/domain/index.d.ts +10 -0
  77. package/dist/domain/index.js +26 -0
  78. package/dist/domain/provider-scope.d.ts +5 -0
  79. package/dist/domain/provider-scope.js +9 -0
  80. package/dist/domain/provider-type.d.ts +6 -0
  81. package/dist/domain/provider-type.js +10 -0
  82. package/dist/domain/provider.d.ts +37 -0
  83. package/dist/domain/provider.js +70 -0
  84. package/dist/events/hooks.decorator.d.ts +3 -0
  85. package/dist/events/hooks.decorator.js +29 -0
  86. package/dist/events/index.d.ts +2 -0
  87. package/dist/events/index.js +18 -0
  88. package/dist/events/on-event.d.ts +13 -0
  89. package/dist/events/on-event.js +11 -0
  90. package/dist/exceptions/HttpException.d.ts +9 -0
  91. package/dist/exceptions/HttpException.js +26 -0
  92. package/dist/exceptions/index.d.ts +1 -0
  93. package/dist/exceptions/index.js +17 -0
  94. package/dist/index.d.ts +16 -0
  95. package/dist/index.js +32 -0
  96. package/dist/route/Matcher.d.ts +16 -0
  97. package/dist/route/Matcher.js +48 -0
  98. package/dist/route/RouteExecutor.d.ts +13 -0
  99. package/dist/route/RouteExecutor.js +70 -0
  100. package/dist/route/memoirist.d.ts +25 -0
  101. package/dist/route/memoirist.js +250 -0
  102. package/dist/services/logger.service.d.ts +23 -0
  103. package/dist/services/logger.service.js +54 -0
  104. package/dist/services/request-logger.service.d.ts +15 -0
  105. package/dist/services/request-logger.service.js +50 -0
  106. package/dist/testing/core-testing.d.ts +24 -0
  107. package/dist/testing/core-testing.js +98 -0
  108. package/dist/testing/index.d.ts +1 -0
  109. package/dist/testing/index.js +17 -0
  110. package/dist/utils/ancestorOf.d.ts +2 -0
  111. package/dist/utils/ancestorOf.js +10 -0
  112. package/dist/utils/ancestorsOf.d.ts +6 -0
  113. package/dist/utils/ancestorsOf.js +20 -0
  114. package/dist/utils/classOf.d.ts +13 -0
  115. package/dist/utils/classOf.js +21 -0
  116. package/dist/utils/cleanObject.d.ts +6 -0
  117. package/dist/utils/cleanObject.js +22 -0
  118. package/dist/utils/constructorOf.d.ts +11 -0
  119. package/dist/utils/constructorOf.js +18 -0
  120. package/dist/utils/createInstance.d.ts +1 -0
  121. package/dist/utils/createInstance.js +7 -0
  122. package/dist/utils/decoratorTypeOf.d.ts +11 -0
  123. package/dist/utils/decoratorTypeOf.js +32 -0
  124. package/dist/utils/deepClone.d.ts +6 -0
  125. package/dist/utils/deepClone.js +63 -0
  126. package/dist/utils/deepMerge.d.ts +9 -0
  127. package/dist/utils/deepMerge.js +62 -0
  128. package/dist/utils/descriptorOf.d.ts +8 -0
  129. package/dist/utils/descriptorOf.js +16 -0
  130. package/dist/utils/getClassOrSymbol.d.ts +1 -0
  131. package/dist/utils/getClassOrSymbol.js +8 -0
  132. package/dist/utils/getConstructorArgNames.d.ts +1 -0
  133. package/dist/utils/getConstructorArgNames.js +12 -0
  134. package/dist/utils/getMethodArgTypes.d.ts +1 -0
  135. package/dist/utils/getMethodArgTypes.js +9 -0
  136. package/dist/utils/getValue.d.ts +32 -0
  137. package/dist/utils/getValue.js +47 -0
  138. package/dist/utils/hasJsonMethod.d.ts +1 -0
  139. package/dist/utils/hasJsonMethod.js +6 -0
  140. package/dist/utils/index.d.ts +15 -0
  141. package/dist/utils/index.js +31 -0
  142. package/dist/utils/isArray.d.ts +13 -0
  143. package/dist/utils/isArray.js +21 -0
  144. package/dist/utils/isArrowFn.d.ts +1 -0
  145. package/dist/utils/isArrowFn.js +7 -0
  146. package/dist/utils/isBoolean.d.ts +7 -0
  147. package/dist/utils/isBoolean.js +15 -0
  148. package/dist/utils/isBuffer.d.ts +7 -0
  149. package/dist/utils/isBuffer.js +19 -0
  150. package/dist/utils/isClass.d.ts +1 -0
  151. package/dist/utils/isClass.js +26 -0
  152. package/dist/utils/isClassValidator.d.ts +6 -0
  153. package/dist/utils/isClassValidator.js +13 -0
  154. package/dist/utils/isCollection.d.ts +6 -0
  155. package/dist/utils/isCollection.js +20 -0
  156. package/dist/utils/isDate.d.ts +6 -0
  157. package/dist/utils/isDate.js +11 -0
  158. package/dist/utils/isEmpty.d.ts +6 -0
  159. package/dist/utils/isEmpty.js +12 -0
  160. package/dist/utils/isFunction.d.ts +1 -0
  161. package/dist/utils/isFunction.js +6 -0
  162. package/dist/utils/isInheritedFrom.d.ts +1 -0
  163. package/dist/utils/isInheritedFrom.js +24 -0
  164. package/dist/utils/isMomentObject.d.ts +1 -0
  165. package/dist/utils/isMomentObject.js +6 -0
  166. package/dist/utils/isMongooseObject.d.ts +2 -0
  167. package/dist/utils/isMongooseObject.js +11 -0
  168. package/dist/utils/isNil.d.ts +1 -0
  169. package/dist/utils/isNil.js +6 -0
  170. package/dist/utils/isNumber.d.ts +7 -0
  171. package/dist/utils/isNumber.js +15 -0
  172. package/dist/utils/isObject.d.ts +1 -0
  173. package/dist/utils/isObject.js +6 -0
  174. package/dist/utils/isObservable.d.ts +1 -0
  175. package/dist/utils/isObservable.js +6 -0
  176. package/dist/utils/isPlainObject.d.ts +7 -0
  177. package/dist/utils/isPlainObject.js +16 -0
  178. package/dist/utils/isPrimitive.d.ts +14 -0
  179. package/dist/utils/isPrimitive.js +28 -0
  180. package/dist/utils/isPrimitiveType.d.ts +1 -0
  181. package/dist/utils/isPrimitiveType.js +11 -0
  182. package/dist/utils/isPromise.d.ts +7 -0
  183. package/dist/utils/isPromise.js +14 -0
  184. package/dist/utils/isProtectedKey.d.ts +5 -0
  185. package/dist/utils/isProtectedKey.js +10 -0
  186. package/dist/utils/isRegExp.d.ts +1 -0
  187. package/dist/utils/isRegExp.js +6 -0
  188. package/dist/utils/isRequestScope.d.ts +11 -0
  189. package/dist/utils/isRequestScope.js +23 -0
  190. package/dist/utils/isSerializable.d.ts +1 -0
  191. package/dist/utils/isSerializable.js +11 -0
  192. package/dist/utils/isStream.d.ts +1 -0
  193. package/dist/utils/isStream.js +6 -0
  194. package/dist/utils/isString.d.ts +6 -0
  195. package/dist/utils/isString.js +14 -0
  196. package/dist/utils/isSymbol.d.ts +6 -0
  197. package/dist/utils/isSymbol.js +14 -0
  198. package/dist/utils/methodsOf.d.ts +9 -0
  199. package/dist/utils/methodsOf.js +24 -0
  200. package/dist/utils/nameOf.d.ts +14 -0
  201. package/dist/utils/nameOf.js +31 -0
  202. package/dist/utils/objectKeys.d.ts +1 -0
  203. package/dist/utils/objectKeys.js +7 -0
  204. package/dist/utils/primitiveOf.d.ts +1 -0
  205. package/dist/utils/primitiveOf.js +18 -0
  206. package/dist/utils/prototypeOf.d.ts +6 -0
  207. package/dist/utils/prototypeOf.js +12 -0
  208. package/dist/utils/setValue.d.ts +1 -0
  209. package/dist/utils/setValue.js +32 -0
  210. package/dist/utils/toMap.d.ts +3 -0
  211. package/dist/utils/toMap.js +34 -0
  212. package/dist/utils/toStringConstructor.d.ts +1 -0
  213. package/dist/utils/toStringConstructor.js +10 -0
  214. 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,3 @@
1
+ export * from './registries/ProviderControl';
2
+ export * from './registries/ProviderRegistry';
3
+ export * from './decorators';
@@ -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
+ }