@tstdl/base 0.92.167 → 0.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/application/application.d.ts +12 -18
  2. package/application/application.js +48 -69
  3. package/application/index.d.ts +1 -5
  4. package/application/index.js +1 -5
  5. package/application/providers.d.ts +10 -0
  6. package/application/providers.js +54 -0
  7. package/audit/audit.model.d.ts +15 -0
  8. package/audit/audit.model.js +73 -0
  9. package/audit/auditor.d.ts +42 -0
  10. package/audit/auditor.js +111 -0
  11. package/audit/index.d.ts +3 -0
  12. package/audit/index.js +3 -0
  13. package/audit/types.d.ts +22 -0
  14. package/audit/types.js +19 -0
  15. package/authentication/client/authentication.service.d.ts +1 -3
  16. package/authentication/client/authentication.service.js +4 -5
  17. package/browser/browser-context-controller.d.ts +2 -4
  18. package/browser/browser-context-controller.js +5 -6
  19. package/browser/browser-controller.d.ts +2 -4
  20. package/browser/browser-controller.js +3 -4
  21. package/browser/browser.service.d.ts +1 -3
  22. package/browser/browser.service.js +1 -2
  23. package/browser/page-controller.d.ts +2 -4
  24. package/browser/page-controller.js +7 -8
  25. package/browser/utils.js +3 -3
  26. package/cancellation/token.d.ts +104 -41
  27. package/cancellation/token.js +125 -54
  28. package/core.d.ts +1 -13
  29. package/core.js +1 -46
  30. package/disposable/disposable.d.ts +0 -8
  31. package/disposable/disposable.js +1 -3
  32. package/disposable/index.d.ts +0 -6
  33. package/disposable/index.js +0 -6
  34. package/disposable/using.d.ts +0 -1
  35. package/disposable/using.js +2 -3
  36. package/distributed-loop/distributed-loop.js +2 -2
  37. package/errors/utils.js +4 -1
  38. package/examples/api/authentication.js +11 -5
  39. package/examples/api/basic-overview.js +17 -12
  40. package/examples/api/custom-authentication.js +13 -7
  41. package/examples/api/streaming.js +15 -12
  42. package/examples/browser/basic.js +6 -3
  43. package/examples/document-management/main.js +6 -3
  44. package/examples/http/client.js +7 -3
  45. package/examples/mail/basic.js +9 -7
  46. package/examples/pdf/basic.js +8 -6
  47. package/examples/template/basic.js +7 -5
  48. package/http/client/http-client-request.d.ts +1 -2
  49. package/http/client/http-client-request.js +1 -2
  50. package/http/server/http-server.d.ts +1 -3
  51. package/http/server/http-server.js +0 -1
  52. package/http/server/node/node-http-server.d.ts +1 -2
  53. package/http/server/node/node-http-server.js +1 -2
  54. package/import.js +1 -1
  55. package/injector/injector.d.ts +1 -1
  56. package/injector/types.d.ts +3 -4
  57. package/lock/lock.d.ts +40 -21
  58. package/lock/lock.js +74 -1
  59. package/lock/postgres/drizzle/0000_busy_tattoo.sql +7 -0
  60. package/lock/postgres/drizzle/meta/0000_snapshot.json +65 -0
  61. package/lock/postgres/drizzle/meta/_journal.json +13 -0
  62. package/lock/postgres/drizzle.config.js +11 -0
  63. package/lock/postgres/index.d.ts +2 -0
  64. package/lock/postgres/index.js +2 -0
  65. package/lock/postgres/lock.d.ts +14 -0
  66. package/lock/postgres/lock.js +127 -0
  67. package/lock/postgres/models/index.d.ts +2 -0
  68. package/lock/postgres/models/index.js +2 -0
  69. package/lock/postgres/models/lock.model.d.ts +7 -0
  70. package/{examples/orm/user.model.js → lock/postgres/models/lock.model.js} +22 -30
  71. package/lock/postgres/models/schemas.d.ts +3 -0
  72. package/lock/postgres/models/schemas.js +4 -0
  73. package/lock/postgres/module.d.ts +6 -0
  74. package/lock/postgres/module.js +26 -0
  75. package/lock/postgres/provider.d.ts +6 -0
  76. package/lock/postgres/provider.js +29 -0
  77. package/lock/provider.d.ts +12 -2
  78. package/lock/provider.js +24 -1
  79. package/lock/web/web-lock.d.ts +4 -3
  80. package/lock/web/web-lock.js +49 -42
  81. package/lock/web/web-lock.provider.d.ts +0 -3
  82. package/lock/web/web-lock.provider.js +5 -22
  83. package/logger/formatter.d.ts +13 -0
  84. package/logger/formatter.js +3 -0
  85. package/logger/formatters/index.d.ts +2 -0
  86. package/logger/formatters/index.js +2 -0
  87. package/logger/formatters/json.d.ts +5 -0
  88. package/logger/formatters/json.js +33 -0
  89. package/logger/formatters/pretty-print.d.ts +5 -0
  90. package/logger/formatters/pretty-print.js +55 -0
  91. package/logger/index.d.ts +5 -2
  92. package/logger/index.js +5 -2
  93. package/logger/level.d.ts +10 -8
  94. package/logger/level.js +9 -9
  95. package/logger/logger.d.ts +21 -30
  96. package/logger/logger.js +98 -26
  97. package/logger/manager.d.ts +20 -0
  98. package/logger/manager.js +86 -0
  99. package/logger/tokens.d.ts +1 -1
  100. package/logger/tokens.js +1 -1
  101. package/logger/transport.d.ts +14 -0
  102. package/logger/transport.js +16 -0
  103. package/logger/transports/console.d.ts +14 -0
  104. package/logger/transports/console.js +36 -0
  105. package/logger/transports/index.d.ts +1 -0
  106. package/logger/transports/index.js +1 -0
  107. package/mail/clients/nodemailer.mail-client.d.ts +0 -1
  108. package/mail/clients/nodemailer.mail-client.js +9 -7
  109. package/message-bus/local/local-message-bus.js +2 -2
  110. package/message-bus/message-bus-base.d.ts +2 -3
  111. package/message-bus/message-bus-base.js +5 -6
  112. package/message-bus/message-bus.d.ts +1 -2
  113. package/message-bus/message-bus.js +1 -2
  114. package/module/index.d.ts +0 -2
  115. package/module/index.js +0 -2
  116. package/module/module.d.ts +17 -18
  117. package/module/module.js +47 -12
  118. package/module/modules/function.module.d.ts +6 -6
  119. package/module/modules/function.module.js +25 -9
  120. package/module/modules/web-server.module.d.ts +2 -10
  121. package/module/modules/web-server.module.js +3 -11
  122. package/openid-connect/index.d.ts +0 -2
  123. package/openid-connect/index.js +0 -2
  124. package/openid-connect/oidc-state.model.d.ts +4 -5
  125. package/openid-connect/oidc-state.model.js +51 -1
  126. package/openid-connect/oidc.service-model.d.ts +1 -1
  127. package/openid-connect/oidc.service.d.ts +2 -6
  128. package/openid-connect/oidc.service.js +24 -37
  129. package/orm/decorators.d.ts +10 -1
  130. package/orm/decorators.js +8 -0
  131. package/orm/server/repository.d.ts +3 -1
  132. package/orm/server/repository.js +32 -3
  133. package/package.json +19 -29
  134. package/pdf/pdf.service.js +9 -9
  135. package/pool/pool.d.ts +1 -3
  136. package/pool/pool.js +3 -4
  137. package/queue/postgres/job.model.d.ts +1 -2
  138. package/queue/postgres/job.model.js +1 -2
  139. package/queue/postgres/module.js +1 -1
  140. package/threading/thread-pool.d.ts +1 -3
  141. package/threading/thread-pool.js +7 -8
  142. package/utils/format-error.d.ts +7 -0
  143. package/utils/format-error.js +59 -17
  144. package/utils/function/memoize.d.ts +22 -7
  145. package/utils/function/memoize.js +82 -23
  146. package/utils/index.d.ts +1 -0
  147. package/utils/index.js +1 -0
  148. package/utils/object/dereference.d.ts +51 -19
  149. package/utils/object/dereference.js +52 -43
  150. package/utils/timing.js +2 -2
  151. package/utils/try-chain.d.ts +22 -0
  152. package/utils/try-chain.js +46 -0
  153. package/database/entity-repository.d.ts +0 -50
  154. package/database/entity-repository.js +0 -3
  155. package/database/entity.d.ts +0 -7
  156. package/database/entity.js +0 -1
  157. package/database/id.d.ts +0 -1
  158. package/database/id.js +0 -9
  159. package/database/index.d.ts +0 -11
  160. package/database/index.js +0 -11
  161. package/database/module.d.ts +0 -8
  162. package/database/module.js +0 -11
  163. package/database/mongo/classes.d.ts +0 -21
  164. package/database/mongo/classes.js +0 -26
  165. package/database/mongo/index.d.ts +0 -15
  166. package/database/mongo/index.js +0 -15
  167. package/database/mongo/model/document.d.ts +0 -29
  168. package/database/mongo/model/document.js +0 -63
  169. package/database/mongo/model/index.d.ts +0 -1
  170. package/database/mongo/model/index.js +0 -1
  171. package/database/mongo/module.d.ts +0 -8
  172. package/database/mongo/module.js +0 -68
  173. package/database/mongo/mongo-base.repository.d.ts +0 -103
  174. package/database/mongo/mongo-base.repository.js +0 -263
  175. package/database/mongo/mongo-bulk.d.ts +0 -35
  176. package/database/mongo/mongo-bulk.js +0 -90
  177. package/database/mongo/mongo-entity-repository.d.ts +0 -98
  178. package/database/mongo/mongo-entity-repository.js +0 -278
  179. package/database/mongo/operations.d.ts +0 -10
  180. package/database/mongo/operations.js +0 -54
  181. package/database/mongo/query-converter.d.ts +0 -6
  182. package/database/mongo/query-converter.js +0 -83
  183. package/database/mongo/simple-entity-repository.d.ts +0 -7
  184. package/database/mongo/simple-entity-repository.js +0 -6
  185. package/database/mongo/types.d.ts +0 -50
  186. package/database/mongo/types.js +0 -3
  187. package/database/query.d.ts +0 -121
  188. package/database/query.js +0 -7
  189. package/database/utils.d.ts +0 -2
  190. package/database/utils.js +0 -3
  191. package/disposable/async-disposer.d.ts +0 -35
  192. package/disposable/async-disposer.js +0 -125
  193. package/examples/orm/drizzle.config.js +0 -6
  194. package/examples/orm/schemas.d.ts +0 -3
  195. package/examples/orm/schemas.js +0 -4
  196. package/examples/orm/test.d.ts +0 -1
  197. package/examples/orm/test.js +0 -11
  198. package/examples/orm/user.model.d.ts +0 -13
  199. package/key-value-store/mongo/index.d.ts +0 -6
  200. package/key-value-store/mongo/index.js +0 -6
  201. package/key-value-store/mongo/module.d.ts +0 -8
  202. package/key-value-store/mongo/module.js +0 -18
  203. package/key-value-store/mongo/mongo-key-value-store.provider.d.ts +0 -8
  204. package/key-value-store/mongo/mongo-key-value-store.provider.js +0 -26
  205. package/key-value-store/mongo/mongo-key-value.model.d.ts +0 -7
  206. package/key-value-store/mongo/mongo-key-value.model.js +0 -1
  207. package/key-value-store/mongo/mongo-key-value.repository.d.ts +0 -10
  208. package/key-value-store/mongo/mongo-key-value.repository.js +0 -31
  209. package/key-value-store/mongo/mongo-key-value.store.d.ts +0 -15
  210. package/key-value-store/mongo/mongo-key-value.store.js +0 -82
  211. package/key-value-store/mongo/tokens.d.ts +0 -3
  212. package/key-value-store/mongo/tokens.js +0 -2
  213. package/lock/mongo/index.d.ts +0 -5
  214. package/lock/mongo/index.js +0 -5
  215. package/lock/mongo/lock.d.ts +0 -14
  216. package/lock/mongo/lock.js +0 -125
  217. package/lock/mongo/model.d.ts +0 -6
  218. package/lock/mongo/model.js +0 -1
  219. package/lock/mongo/module.d.ts +0 -12
  220. package/lock/mongo/module.js +0 -20
  221. package/lock/mongo/mongo-lock-repository.d.ts +0 -14
  222. package/lock/mongo/mongo-lock-repository.js +0 -67
  223. package/lock/mongo/provider.d.ts +0 -8
  224. package/lock/mongo/provider.js +0 -36
  225. package/logger/console/index.d.ts +0 -1
  226. package/logger/console/index.js +0 -1
  227. package/logger/console/logger.d.ts +0 -11
  228. package/logger/console/logger.js +0 -64
  229. package/logger/noop/index.d.ts +0 -1
  230. package/logger/noop/index.js +0 -1
  231. package/logger/noop/logger.d.ts +0 -9
  232. package/logger/noop/logger.js +0 -21
  233. package/migration/index.d.ts +0 -9
  234. package/migration/index.js +0 -9
  235. package/migration/migration-state-repository.d.ts +0 -4
  236. package/migration/migration-state-repository.js +0 -3
  237. package/migration/migration-state.d.ts +0 -6
  238. package/migration/migration-state.js +0 -1
  239. package/migration/migrator.d.ts +0 -23
  240. package/migration/migrator.js +0 -76
  241. package/migration/mongo/index.d.ts +0 -2
  242. package/migration/mongo/index.js +0 -2
  243. package/migration/mongo/migration-state-repository.d.ts +0 -11
  244. package/migration/mongo/migration-state-repository.js +0 -32
  245. package/migration/mongo/module.d.ts +0 -12
  246. package/migration/mongo/module.js +0 -17
  247. package/module/module-base.d.ts +0 -18
  248. package/module/module-base.js +0 -40
  249. package/module/module-metric-reporter.d.ts +0 -29
  250. package/module/module-metric-reporter.js +0 -62
  251. package/openid-connect/mongo-oidc-state.repository.d.ts +0 -21
  252. package/openid-connect/mongo-oidc-state.repository.js +0 -52
  253. package/openid-connect/oidc-state.repository.d.ts +0 -4
  254. package/openid-connect/oidc-state.repository.js +0 -3
  255. package/process-shutdown.d.ts +0 -9
  256. package/process-shutdown.js +0 -65
  257. package/queue/mongo/index.d.ts +0 -4
  258. package/queue/mongo/index.js +0 -4
  259. package/queue/mongo/job.d.ts +0 -12
  260. package/queue/mongo/job.js +0 -1
  261. package/queue/mongo/mongo-job.repository.d.ts +0 -13
  262. package/queue/mongo/mongo-job.repository.js +0 -54
  263. package/queue/mongo/queue.d.ts +0 -38
  264. package/queue/mongo/queue.js +0 -266
  265. package/queue/mongo/queue.provider.d.ts +0 -18
  266. package/queue/mongo/queue.provider.js +0 -38
  267. package/search-index/elastic/config.d.ts +0 -8
  268. package/search-index/elastic/config.js +0 -26
  269. package/search-index/elastic/index.d.ts +0 -8
  270. package/search-index/elastic/index.js +0 -8
  271. package/search-index/elastic/keyword-rewriter.d.ts +0 -8
  272. package/search-index/elastic/keyword-rewriter.js +0 -18
  273. package/search-index/elastic/model/elastic-query.d.ts +0 -16
  274. package/search-index/elastic/model/elastic-query.js +0 -1
  275. package/search-index/elastic/model/index-mapping.d.ts +0 -26
  276. package/search-index/elastic/model/index-mapping.js +0 -4
  277. package/search-index/elastic/model/index.d.ts +0 -3
  278. package/search-index/elastic/model/index.js +0 -3
  279. package/search-index/elastic/model/sort.d.ts +0 -8
  280. package/search-index/elastic/model/sort.js +0 -1
  281. package/search-index/elastic/module.d.ts +0 -10
  282. package/search-index/elastic/module.js +0 -49
  283. package/search-index/elastic/query-builder/boolean-query-builder.d.ts +0 -11
  284. package/search-index/elastic/query-builder/boolean-query-builder.js +0 -52
  285. package/search-index/elastic/query-builder/index.d.ts +0 -1
  286. package/search-index/elastic/query-builder/index.js +0 -1
  287. package/search-index/elastic/query-converter.d.ts +0 -9
  288. package/search-index/elastic/query-converter.js +0 -183
  289. package/search-index/elastic/search-index.d.ts +0 -30
  290. package/search-index/elastic/search-index.js +0 -144
  291. package/search-index/elastic/sort-converter.d.ts +0 -4
  292. package/search-index/elastic/sort-converter.js +0 -14
  293. package/search-index/elastic/types.d.ts +0 -5
  294. package/search-index/elastic/types.js +0 -1
  295. package/search-index/error.d.ts +0 -10
  296. package/search-index/error.js +0 -14
  297. package/search-index/index.d.ts +0 -3
  298. package/search-index/index.js +0 -3
  299. package/search-index/memory/index.d.ts +0 -1
  300. package/search-index/memory/index.js +0 -1
  301. package/search-index/memory/memory-search-index.d.ts +0 -19
  302. package/search-index/memory/memory-search-index.js +0 -144
  303. package/search-index/search-index.d.ts +0 -46
  304. package/search-index/search-index.js +0 -31
  305. package/search-index/search-result.d.ts +0 -12
  306. package/search-index/search-result.js +0 -1
  307. package/theme/adapters/css-adapter.d.ts +0 -5
  308. package/theme/adapters/css-adapter.js +0 -29
  309. package/theme/adapters/index.d.ts +0 -2
  310. package/theme/adapters/index.js +0 -2
  311. package/theme/adapters/tailwind-adapter.d.ts +0 -18
  312. package/theme/adapters/tailwind-adapter.js +0 -32
  313. package/theme/index.d.ts +0 -1
  314. package/theme/index.js +0 -1
  315. package/theme/theme-service.d.ts +0 -43
  316. package/theme/theme-service.js +0 -128
  317. /package/{examples/orm → lock/postgres}/drizzle.config.d.ts +0 -0
@@ -0,0 +1,2 @@
1
+ export * from './json.js';
2
+ export * from './pretty-print.js';
@@ -0,0 +1,2 @@
1
+ export * from './json.js';
2
+ export * from './pretty-print.js';
@@ -0,0 +1,5 @@
1
+ import { LogFormatter, type LogPayload } from '../formatter.js';
2
+ /** Formats log entries as a JSON string. */
3
+ export declare class JsonLogFormatter extends LogFormatter {
4
+ format(payload: LogPayload): string;
5
+ }
@@ -0,0 +1,33 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Singleton } from '../../injector/decorators.js';
8
+ import { enumValueName } from '../../utils/enum.js';
9
+ import { formatError } from '../../utils/format-error.js';
10
+ import { isNotNullOrUndefined } from '../../utils/type-guards.js';
11
+ import { LogFormatter } from '../formatter.js';
12
+ import { LogLevel } from '../level.js';
13
+ /** Formats log entries as a JSON string. */
14
+ let JsonLogFormatter = class JsonLogFormatter extends LogFormatter {
15
+ format(payload) {
16
+ const logObject = {
17
+ timestamp: payload.timestamp.toISOString(),
18
+ level: enumValueName(LogLevel, payload.level).toLowerCase(),
19
+ module: (payload.module.length > 0) ? payload.module.join('.') : null,
20
+ message: payload.message,
21
+ ...payload.context,
22
+ };
23
+ // Special handling for error objects to make them serializable
24
+ if (isNotNullOrUndefined(logObject['error'])) {
25
+ logObject['error'] = formatError(logObject['error'], { includeStack: true });
26
+ }
27
+ return JSON.stringify(logObject);
28
+ }
29
+ };
30
+ JsonLogFormatter = __decorate([
31
+ Singleton()
32
+ ], JsonLogFormatter);
33
+ export { JsonLogFormatter };
@@ -0,0 +1,5 @@
1
+ import { LogFormatter, type LogPayload } from '../formatter.js';
2
+ /** Formats log entries in a human-readable, colorful format for development consoles. */
3
+ export declare class PrettyPrintLogFormatter extends LogFormatter {
4
+ format(payload: LogPayload): string;
5
+ }
@@ -0,0 +1,55 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Singleton } from '../../injector/decorators.js';
8
+ import { enumValueName } from '../../utils/enum.js';
9
+ import { formatError } from '../../utils/format-error.js';
10
+ import { isNotNullOrUndefined } from '../../utils/type-guards.js';
11
+ import { LogFormatter } from '../formatter.js';
12
+ import { LogLevel } from '../level.js';
13
+ const levelColorMap = {
14
+ [LogLevel.Error]: '\x1b[31m', // Red
15
+ [LogLevel.Warn]: '\x1b[33m', // Yellow
16
+ [LogLevel.Info]: '\x1b[32m', // Green
17
+ [LogLevel.Verbose]: '\x1b[36m', // Cyan
18
+ [LogLevel.Debug]: '\x1b[34m', // Blue
19
+ [LogLevel.Trace]: '\x1b[90m', // Gray
20
+ };
21
+ const resetColor = '\x1b[0m';
22
+ const dimColor = '\x1b[2m';
23
+ /** Formats log entries in a human-readable, colorful format for development consoles. */
24
+ let PrettyPrintLogFormatter = class PrettyPrintLogFormatter extends LogFormatter {
25
+ format(payload) {
26
+ const color = levelColorMap[payload.level];
27
+ const levelName = enumValueName(LogLevel, payload.level).toUpperCase();
28
+ const levelString = `${levelName}:`.padEnd(8);
29
+ const moduleString = payload.module.map((m) => `[${m}]`).join(' ');
30
+ const metadata = { ...payload.context };
31
+ let metadataString = '';
32
+ let errorString = '';
33
+ if (Object.keys(metadata).length > 0) {
34
+ const displayMeta = {};
35
+ // Don't display metadata used in interpolation
36
+ const interpolationKeys = Array.from(payload.message.matchAll(/{([^{}]+)}/g)).map((match) => match[1]);
37
+ for (const key in metadata) {
38
+ if (!interpolationKeys.includes(key)) {
39
+ displayMeta[key] = metadata[key];
40
+ }
41
+ }
42
+ if (Object.keys(displayMeta).length > 0) {
43
+ metadataString = ` ${dimColor}${JSON.stringify(displayMeta)}${resetColor}`;
44
+ }
45
+ if (isNotNullOrUndefined(metadata['error'])) {
46
+ errorString += `\n${formatError(metadata['error'], { includeStack: true })}`;
47
+ }
48
+ }
49
+ return `${dimColor}${payload.timestamp.toISOString()}${resetColor} ${color}${levelString}${resetColor} ${moduleString}${moduleString.length > 0 ? ' ' : ''}${payload.message}${metadataString}${errorString}`;
50
+ }
51
+ };
52
+ PrettyPrintLogFormatter = __decorate([
53
+ Singleton()
54
+ ], PrettyPrintLogFormatter);
55
+ export { PrettyPrintLogFormatter };
package/logger/index.d.ts CHANGED
@@ -3,8 +3,11 @@
3
3
  *
4
4
  * @module Logger
5
5
  */
6
- export * from './console/index.js';
6
+ export * from './formatter.js';
7
+ export * from './formatters/index.js';
7
8
  export * from './level.js';
8
9
  export * from './logger.js';
9
- export * from './noop/index.js';
10
+ export * from './manager.js';
10
11
  export * from './tokens.js';
12
+ export * from './transport.js';
13
+ export * from './transports/index.js';
package/logger/index.js CHANGED
@@ -3,8 +3,11 @@
3
3
  *
4
4
  * @module Logger
5
5
  */
6
- export * from './console/index.js';
6
+ export * from './formatter.js';
7
+ export * from './formatters/index.js';
7
8
  export * from './level.js';
8
9
  export * from './logger.js';
9
- export * from './noop/index.js';
10
+ export * from './manager.js';
10
11
  export * from './tokens.js';
12
+ export * from './transport.js';
13
+ export * from './transports/index.js';
package/logger/level.d.ts CHANGED
@@ -1,8 +1,10 @@
1
- export declare enum LogLevel {
2
- Error = 0,
3
- Warn = 1,
4
- Info = 2,
5
- Verbose = 3,
6
- Debug = 4,
7
- Trace = 5
8
- }
1
+ import { type EnumType } from '../enumeration/enumeration.js';
2
+ export declare const LogLevel: {
3
+ readonly Error: 0;
4
+ readonly Warn: 1;
5
+ readonly Info: 2;
6
+ readonly Verbose: 3;
7
+ readonly Debug: 4;
8
+ readonly Trace: 5;
9
+ };
10
+ export type LogLevel = EnumType<typeof LogLevel>;
package/logger/level.js CHANGED
@@ -1,9 +1,9 @@
1
- export var LogLevel;
2
- (function (LogLevel) {
3
- LogLevel[LogLevel["Error"] = 0] = "Error";
4
- LogLevel[LogLevel["Warn"] = 1] = "Warn";
5
- LogLevel[LogLevel["Info"] = 2] = "Info";
6
- LogLevel[LogLevel["Verbose"] = 3] = "Verbose";
7
- LogLevel[LogLevel["Debug"] = 4] = "Debug";
8
- LogLevel[LogLevel["Trace"] = 5] = "Trace";
9
- })(LogLevel || (LogLevel = {}));
1
+ import { defineEnum } from '../enumeration/enumeration.js';
2
+ export const LogLevel = defineEnum('LogLevel', {
3
+ Error: 0,
4
+ Warn: 1,
5
+ Info: 2,
6
+ Verbose: 3,
7
+ Debug: 4,
8
+ Trace: 5,
9
+ });
@@ -1,41 +1,32 @@
1
1
  import type { Resolvable } from '../injector/index.js';
2
2
  import { resolveArgumentType } from '../injector/index.js';
3
+ import type { Record } from '../types/types.js';
3
4
  import { LogLevel } from './level.js';
4
- export type LogEntry = string;
5
- export type LogEntryProvider = () => LogEntry;
6
- export type LogEntryOrProvider = LogEntry | LogEntryProvider;
7
- export type LoggerStatic = new (level: LogLevel) => Logger;
8
- export type LogErrorOptions = {
9
- includeRest?: boolean;
10
- includeStack?: boolean;
11
- };
12
- /** Either string as a module shorthand or object */
13
- export type LoggerArgument = string | undefined | {
14
- level?: LogLevel;
5
+ export type LoggerArgument = string | string[] | {
15
6
  module?: string | string[];
16
- prefix?: string;
7
+ context?: Record<string>;
8
+ level?: LogLevel;
17
9
  };
18
10
  export type LoggerForkOptions = {
19
- subModule?: string;
20
- prefix?: string;
11
+ context?: Record<string>;
12
+ replaceContext?: boolean;
21
13
  level?: LogLevel;
22
14
  };
23
- export declare abstract class Logger implements Resolvable<LoggerArgument> {
24
- readonly level: LogLevel;
25
- readonly module?: string[];
26
- readonly logPrefix: string;
15
+ export declare class Logger implements Resolvable<LoggerArgument> {
16
+ #private;
17
+ readonly module: string[];
18
+ readonly context: Record<string>;
19
+ readonly level: LogLevel | undefined;
27
20
  readonly [resolveArgumentType]: LoggerArgument;
28
- constructor(level: LogLevel, module?: string | string[], prefix?: string);
29
- error(entry: LogEntryOrProvider): void;
30
- error(error: unknown, options?: LogErrorOptions): void;
31
- warn(entry: LogEntryOrProvider): void;
32
- info(entry: LogEntryOrProvider): void;
33
- verbose(entry: LogEntryOrProvider): void;
34
- debug(entry: LogEntryOrProvider): void;
35
- trace(entry: LogEntryOrProvider): void;
21
+ error(message: string, context?: Record<string>): void;
22
+ error(error: unknown, context?: Record<string>): void;
23
+ warn(message: string, context?: Record<string>): void;
24
+ info(message: string, context?: Record<string>): void;
25
+ verbose(message: string, context?: Record<string>): void;
26
+ debug(message: string, context?: Record<string>): void;
27
+ trace(message: string, context?: Record<string>): void;
28
+ fork(subModule: string | string[], options?: LoggerForkOptions): Logger;
29
+ fork(options: LoggerForkOptions): Logger;
30
+ with(context: Record<string>): Logger;
36
31
  private _log;
37
- abstract fork(options: LoggerForkOptions): Logger;
38
- abstract subModule(subModule: string): Logger;
39
- abstract prefix(prefix: string): Logger;
40
- protected abstract log(level: LogLevel, entry: LogEntry | Error, errorOptions?: LogErrorOptions): void;
41
32
  }
package/logger/logger.js CHANGED
@@ -1,39 +1,111 @@
1
- import { resolveArgumentType } from '../injector/index.js';
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var Logger_1;
8
+ import { createContextProvider } from '../context/context.js';
9
+ import { inject, Injectable, injectArgument, isInInjectionContext, resolveArgumentType } from '../injector/index.js';
2
10
  import { toArray } from '../utils/array/array.js';
3
- import { isDefined, isFunction } from '../utils/type-guards.js';
11
+ import { now } from '../utils/date-time.js';
12
+ import { getCachedDereference } from '../utils/object/dereference.js';
13
+ import { hasOwnProperty } from '../utils/object/object.js';
14
+ import { isArray, isNotArray, isObject, isString } from '../utils/type-guards.js';
4
15
  import { LogLevel } from './level.js';
5
- export class Logger {
6
- level;
7
- module;
8
- logPrefix;
9
- constructor(level, module, prefix = '') {
10
- this.level = level;
11
- this.module = isDefined(module) ? toArray(module) : undefined;
12
- this.logPrefix = prefix;
16
+ import { LogManager } from './manager.js';
17
+ const { getCurrentLoggerCreationContext, runInLoggerCreationContext, isInLoggerCreationContext } = createContextProvider('LoggerCreation');
18
+ let Logger = Logger_1 = class Logger {
19
+ #manager = getCurrentLoggerCreationContext()?.manager ?? inject(LogManager);
20
+ #argument = isInInjectionContext() ? injectArgument(this, { optional: true }) : undefined;
21
+ module = getCurrentLoggerCreationContext()?.module ?? moduleFromArgument(this.#argument);
22
+ context = getCurrentLoggerCreationContext()?.context ?? ((isObject(this.#argument) && isNotArray(this.#argument)) ? (this.#argument.context ?? {}) : {});
23
+ level = isInLoggerCreationContext() ? getCurrentLoggerCreationContext().level : (isObject(this.#argument) && isNotArray(this.#argument)) ? this.#argument.level : undefined;
24
+ error(errorOrMessage, context) {
25
+ if (isString(errorOrMessage)) {
26
+ this._log(LogLevel.Error, errorOrMessage, context);
27
+ }
28
+ else {
29
+ const message = (errorOrMessage instanceof Error) ? errorOrMessage.message : 'Error';
30
+ this._log(LogLevel.Error, message, { ...context, error: errorOrMessage });
31
+ }
13
32
  }
14
- error(errorOrEntry, options) {
15
- this._log(LogLevel.Error, errorOrEntry, options);
33
+ warn(message, context) {
34
+ this._log(LogLevel.Warn, message, context);
16
35
  }
17
- warn(entry) {
18
- this._log(LogLevel.Warn, entry);
36
+ info(message, context) {
37
+ this._log(LogLevel.Info, message, context);
19
38
  }
20
- info(entry) {
21
- this._log(LogLevel.Info, entry);
39
+ verbose(message, context) {
40
+ this._log(LogLevel.Verbose, message, context);
22
41
  }
23
- verbose(entry) {
24
- this._log(LogLevel.Verbose, entry);
42
+ debug(message, context) {
43
+ this._log(LogLevel.Debug, message, context);
25
44
  }
26
- debug(entry) {
27
- this._log(LogLevel.Debug, entry);
45
+ trace(message, context) {
46
+ this._log(LogLevel.Trace, message, context);
28
47
  }
29
- trace(entry) {
30
- this._log(LogLevel.Trace, entry);
48
+ fork(subModuleOrOptions, optionsOrNothing) {
49
+ const subModule = (isString(subModuleOrOptions) || isArray(subModuleOrOptions)) ? subModuleOrOptions : [];
50
+ const options = (isString(subModuleOrOptions) || isArray(subModuleOrOptions)) ? optionsOrNothing : subModuleOrOptions;
51
+ const newModule = [...this.module, ...toArray(subModule)];
52
+ const creationContext = {
53
+ manager: this.#manager,
54
+ module: newModule,
55
+ context: (options?.replaceContext == true) ? (options.context ?? {}) : { ...this.context, ...options?.context },
56
+ level: options?.level ?? this.level,
57
+ };
58
+ return runInLoggerCreationContext(creationContext, () => new Logger_1());
31
59
  }
32
- _log(level, entryOrProvider, errorOptions) {
33
- if (this.level < level) {
60
+ with(context) {
61
+ const creationContext = {
62
+ manager: this.#manager,
63
+ module: this.module,
64
+ context: { ...this.context, ...context },
65
+ level: this.level,
66
+ };
67
+ return runInLoggerCreationContext(creationContext, () => new Logger_1());
68
+ }
69
+ _log(level, message, context = {}) {
70
+ const moduleLevel = this.level ?? this.#manager.getModuleLevel(this.module);
71
+ if (level > moduleLevel) {
34
72
  return;
35
73
  }
36
- const entry = isFunction(entryOrProvider) ? entryOrProvider() : entryOrProvider;
37
- this.log(level, entry, errorOptions);
74
+ const effectiveContext = { ...this.context, ...context };
75
+ const finalMessage = interpolateMessage(message, effectiveContext);
76
+ const payload = {
77
+ timestamp: now(),
78
+ level,
79
+ module: this.module,
80
+ message: finalMessage,
81
+ context: effectiveContext,
82
+ };
83
+ this.#manager.log(payload);
84
+ }
85
+ };
86
+ Logger = Logger_1 = __decorate([
87
+ Injectable()
88
+ ], Logger);
89
+ export { Logger };
90
+ function moduleFromArgument(argument) {
91
+ if (isString(argument)) {
92
+ return [argument];
38
93
  }
94
+ if (isArray(argument)) {
95
+ return argument;
96
+ }
97
+ if (isObject(argument)) {
98
+ return moduleFromArgument(argument.module);
99
+ }
100
+ return [];
101
+ }
102
+ const cachedDereference = getCachedDereference({ optional: true });
103
+ function interpolateMessage(message, context) {
104
+ return message.replace(/{([^{}]+)}/g, (match, key) => {
105
+ if (hasOwnProperty(context, key)) {
106
+ const value = cachedDereference(context, key);
107
+ return String(value);
108
+ }
109
+ return match;
110
+ });
39
111
  }
@@ -0,0 +1,20 @@
1
+ import type { LogPayload } from './formatter.js';
2
+ import { LogLevel } from './level.js';
3
+ export declare class LogManager {
4
+ #private;
5
+ log(payload: LogPayload): void;
6
+ setDefaultLevel(level: LogLevel): void;
7
+ /**
8
+ * Sets the log level for a specific module.
9
+ * @param module The module (e.g., 'Api.Users' or ['Api', 'Users'])
10
+ * @param level The log level to set
11
+ */
12
+ setModuleLevel(module: string | string[], level: LogLevel): void;
13
+ /**
14
+ * Gets the effective log level for a given module path.
15
+ * It finds the most specific rule matching the module path.
16
+ * @param module Array of module names, e.g., ['Api', 'Users']
17
+ * @returns The effective log level
18
+ */
19
+ getModuleLevel(module?: string | string[]): LogLevel;
20
+ }
@@ -0,0 +1,86 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Singleton } from '../injector/decorators.js';
8
+ import { inject, injectAll } from '../injector/inject.js';
9
+ import { isDefined } from '../utils/type-guards.js';
10
+ import { LogLevel } from './level.js';
11
+ import { DEFAULT_LOG_LEVEL } from './tokens.js';
12
+ import { LogTransport } from './transport.js';
13
+ let LogManager = class LogManager {
14
+ #transports = injectAll(LogTransport);
15
+ #moduleLevelRules = new Map();
16
+ #moduleLevelCache = new Map();
17
+ #defaultLevel = inject(DEFAULT_LOG_LEVEL, undefined, { optional: true }) ?? LogLevel.Trace;
18
+ log(payload) {
19
+ for (const transport of this.#transports) {
20
+ if (payload.level <= transport.level) {
21
+ try {
22
+ transport.log(payload);
23
+ }
24
+ catch (err) {
25
+ try {
26
+ const transportName = transport.constructor?.name ?? 'UnknownTransport';
27
+ console.error(`[LogTransport Error] transport=${transportName} error=`, err, 'payload=', payload);
28
+ }
29
+ catch { /* swallow to avoid cascading failures. */ }
30
+ }
31
+ }
32
+ }
33
+ }
34
+ setDefaultLevel(level) {
35
+ this.#defaultLevel = level;
36
+ this.#moduleLevelCache.clear();
37
+ }
38
+ /**
39
+ * Sets the log level for a specific module.
40
+ * @param module The module (e.g., 'Api.Users' or ['Api', 'Users'])
41
+ * @param level The log level to set
42
+ */
43
+ setModuleLevel(module, level) {
44
+ const moduleString = Array.isArray(module) ? module.join('.') : module;
45
+ if (this.#moduleLevelRules.get(moduleString) === level) {
46
+ return;
47
+ }
48
+ this.#moduleLevelRules.set(moduleString, level);
49
+ this.#moduleLevelCache.clear();
50
+ }
51
+ /**
52
+ * Gets the effective log level for a given module path.
53
+ * It finds the most specific rule matching the module path.
54
+ * @param module Array of module names, e.g., ['Api', 'Users']
55
+ * @returns The effective log level
56
+ */
57
+ getModuleLevel(module) {
58
+ if (!isDefined(module) || (module.length == 0)) {
59
+ return this.#defaultLevel;
60
+ }
61
+ const path = Array.isArray(module) ? module.join('.') : module;
62
+ const cachedLevel = this.#moduleLevelCache.get(path);
63
+ if (isDefined(cachedLevel)) {
64
+ return cachedLevel;
65
+ }
66
+ let currentPath = path;
67
+ while (currentPath.length > 0) {
68
+ const level = this.#moduleLevelRules.get(currentPath);
69
+ if (isDefined(level)) {
70
+ this.#moduleLevelCache.set(path, level); // Cache the result for the original full path
71
+ return level;
72
+ }
73
+ const lastDotIndex = currentPath.lastIndexOf('.');
74
+ if (lastDotIndex === -1) {
75
+ break;
76
+ }
77
+ currentPath = currentPath.substring(0, lastDotIndex);
78
+ }
79
+ this.#moduleLevelCache.set(path, this.#defaultLevel);
80
+ return this.#defaultLevel;
81
+ }
82
+ };
83
+ LogManager = __decorate([
84
+ Singleton()
85
+ ], LogManager);
86
+ export { LogManager };
@@ -1,2 +1,2 @@
1
1
  import type { LogLevel } from './level.js';
2
- export declare const LOG_LEVEL: import("../injector/token.js").InjectionToken<LogLevel, never>;
2
+ export declare const DEFAULT_LOG_LEVEL: import("../injector/token.js").InjectionToken<LogLevel, never>;
package/logger/tokens.js CHANGED
@@ -1,2 +1,2 @@
1
1
  import { injectionToken } from '../injector/token.js';
2
- export const LOG_LEVEL = injectionToken('log level');
2
+ export const DEFAULT_LOG_LEVEL = injectionToken('default log level');
@@ -0,0 +1,14 @@
1
+ import type { ProvidersItem } from '../injector/injector.js';
2
+ import type { Resolvable, resolveArgumentType } from '../injector/interfaces.js';
3
+ import type { Provider } from '../injector/provider.js';
4
+ import type { LogPayload } from './formatter.js';
5
+ import { LogLevel } from './level.js';
6
+ export declare class LogTransportOptions {
7
+ level?: LogLevel;
8
+ }
9
+ export declare abstract class LogTransport implements Resolvable<LogTransportOptions> {
10
+ readonly level: LogLevel;
11
+ readonly [resolveArgumentType]: LogTransportOptions;
12
+ abstract log(payload: LogPayload): void;
13
+ }
14
+ export declare function provideLogTransport<T extends LogTransport>(provider: Provider<T>): ProvidersItem;
@@ -0,0 +1,16 @@
1
+ import { inject, injectArgument } from '../injector/inject.js';
2
+ import { LogLevel } from './level.js';
3
+ import { DEFAULT_LOG_LEVEL } from './tokens.js';
4
+ export class LogTransportOptions {
5
+ level;
6
+ }
7
+ export class LogTransport {
8
+ level = injectArgument(this, { optional: true })?.level ?? inject(DEFAULT_LOG_LEVEL, undefined, { optional: true }) ?? LogLevel.Trace;
9
+ }
10
+ export function provideLogTransport(provider) {
11
+ return {
12
+ ...provider,
13
+ provide: LogTransport,
14
+ multi: true,
15
+ };
16
+ }
@@ -0,0 +1,14 @@
1
+ import { type InjectionToken, type Resolvable, type resolveArgumentType } from '../../injector/index.js';
2
+ import type { ProvidersItem } from '../../injector/injector.js';
3
+ import type { LogFormatter, LogPayload } from '../formatter.js';
4
+ import { LogLevel } from '../level.js';
5
+ import { LogTransport, LogTransportOptions } from '../transport.js';
6
+ export declare class ConsoleLogTransportOptions extends LogTransportOptions {
7
+ formatter: InjectionToken<LogFormatter>;
8
+ }
9
+ export declare class ConsoleLogTransport extends LogTransport implements Resolvable<ConsoleLogTransportOptions> {
10
+ #private;
11
+ readonly [resolveArgumentType]: ConsoleLogTransportOptions;
12
+ log(payload: LogPayload): void;
13
+ }
14
+ export declare function provideConsoleLogTransport(formatter: InjectionToken<LogFormatter>, level?: LogLevel): ProvidersItem;
@@ -0,0 +1,36 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Singleton } from '../../injector/decorators.js';
8
+ import { inject, injectArgument } from '../../injector/index.js';
9
+ import { LogLevel } from '../level.js';
10
+ import { LogTransport, LogTransportOptions, provideLogTransport } from '../transport.js';
11
+ export class ConsoleLogTransportOptions extends LogTransportOptions {
12
+ formatter;
13
+ }
14
+ const consoleLevelFuncMap = {
15
+ [LogLevel.Error]: 'error',
16
+ [LogLevel.Warn]: 'warn',
17
+ [LogLevel.Info]: 'info',
18
+ [LogLevel.Verbose]: 'info',
19
+ [LogLevel.Debug]: 'debug',
20
+ [LogLevel.Trace]: 'debug',
21
+ };
22
+ let ConsoleLogTransport = class ConsoleLogTransport extends LogTransport {
23
+ #formatter = inject(injectArgument(this).formatter);
24
+ log(payload) {
25
+ const message = this.#formatter.format(payload);
26
+ const consoleFunc = consoleLevelFuncMap[payload.level];
27
+ console[consoleFunc](message);
28
+ }
29
+ };
30
+ ConsoleLogTransport = __decorate([
31
+ Singleton()
32
+ ], ConsoleLogTransport);
33
+ export { ConsoleLogTransport };
34
+ export function provideConsoleLogTransport(formatter, level) {
35
+ return provideLogTransport({ useToken: ConsoleLogTransport, defaultArgument: { formatter, level } });
36
+ }
@@ -0,0 +1 @@
1
+ export * from './console.js';
@@ -0,0 +1 @@
1
+ export * from './console.js';
@@ -1,4 +1,3 @@
1
- import type { Disposable } from '../../disposable/disposable.js';
2
1
  import { MailClient, MailClientConfig } from '../mail.client.js';
3
2
  import type { MailData, MailSendResult } from '../models/index.js';
4
3
  export declare class NodemailerMailClient extends MailClient implements Disposable {
@@ -32,13 +32,13 @@ let NodemailerMailClient = class NodemailerMailClient extends MailClient {
32
32
  subject: data.subject,
33
33
  text: data.content.text,
34
34
  html: data.content.html,
35
- headers: data.headers
35
+ headers: data.headers,
36
36
  });
37
37
  return {
38
38
  messageId: result.messageId,
39
39
  accepted: result.accepted,
40
40
  rejected: result.rejected,
41
- pending: result.pending
41
+ pending: result.pending,
42
42
  };
43
43
  }
44
44
  getTransport(config) {
@@ -62,11 +62,13 @@ function convertConfig(config) {
62
62
  host: config.host,
63
63
  port: config.port,
64
64
  secure: config.secure ?? (config.port == 465),
65
- auth: isUndefined(config.auth) ? undefined : {
66
- type: 'login',
67
- user: config.auth.user,
68
- pass: config.auth.password
69
- }
65
+ auth: isUndefined(config.auth)
66
+ ? undefined
67
+ : {
68
+ type: 'login',
69
+ user: config.auth.user,
70
+ pass: config.auth.password,
71
+ },
70
72
  };
71
73
  }
72
74
  /**