@miiajs/core 0.1.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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -0
  3. package/dist/app/app.d.ts +106 -0
  4. package/dist/app/app.d.ts.map +1 -0
  5. package/dist/app/app.js +449 -0
  6. package/dist/app/app.js.map +1 -0
  7. package/dist/app/index.d.ts +3 -0
  8. package/dist/app/index.d.ts.map +1 -0
  9. package/dist/app/index.js +2 -0
  10. package/dist/app/index.js.map +1 -0
  11. package/dist/app/module-loader.d.ts +16 -0
  12. package/dist/app/module-loader.d.ts.map +1 -0
  13. package/dist/app/module-loader.js +107 -0
  14. package/dist/app/module-loader.js.map +1 -0
  15. package/dist/app/router-explorer.d.ts +12 -0
  16. package/dist/app/router-explorer.d.ts.map +1 -0
  17. package/dist/app/router-explorer.js +76 -0
  18. package/dist/app/router-explorer.js.map +1 -0
  19. package/dist/app/routes-resolver.d.ts +11 -0
  20. package/dist/app/routes-resolver.d.ts.map +1 -0
  21. package/dist/app/routes-resolver.js +24 -0
  22. package/dist/app/routes-resolver.js.map +1 -0
  23. package/dist/cors.d.ts +22 -0
  24. package/dist/cors.d.ts.map +1 -0
  25. package/dist/cors.js +48 -0
  26. package/dist/cors.js.map +1 -0
  27. package/dist/decorators/apply-decorators.d.ts +19 -0
  28. package/dist/decorators/apply-decorators.d.ts.map +1 -0
  29. package/dist/decorators/apply-decorators.js +27 -0
  30. package/dist/decorators/apply-decorators.js.map +1 -0
  31. package/dist/decorators/class.d.ts +9 -0
  32. package/dist/decorators/class.d.ts.map +1 -0
  33. package/dist/decorators/class.js +15 -0
  34. package/dist/decorators/class.js.map +1 -0
  35. package/dist/decorators/create-decorator.d.ts +6 -0
  36. package/dist/decorators/create-decorator.d.ts.map +1 -0
  37. package/dist/decorators/create-decorator.js +31 -0
  38. package/dist/decorators/create-decorator.js.map +1 -0
  39. package/dist/decorators/http.d.ts +8 -0
  40. package/dist/decorators/http.d.ts.map +1 -0
  41. package/dist/decorators/http.js +24 -0
  42. package/dist/decorators/http.js.map +1 -0
  43. package/dist/decorators/index.d.ts +9 -0
  44. package/dist/decorators/index.d.ts.map +1 -0
  45. package/dist/decorators/index.js +7 -0
  46. package/dist/decorators/index.js.map +1 -0
  47. package/dist/decorators/metadata.d.ts +29 -0
  48. package/dist/decorators/metadata.d.ts.map +1 -0
  49. package/dist/decorators/metadata.js +40 -0
  50. package/dist/decorators/metadata.js.map +1 -0
  51. package/dist/decorators/middleware.d.ts +9 -0
  52. package/dist/decorators/middleware.d.ts.map +1 -0
  53. package/dist/decorators/middleware.js +82 -0
  54. package/dist/decorators/middleware.js.map +1 -0
  55. package/dist/di-container.d.ts +52 -0
  56. package/dist/di-container.d.ts.map +1 -0
  57. package/dist/di-container.js +177 -0
  58. package/dist/di-container.js.map +1 -0
  59. package/dist/discovery/discovery-service.d.ts +63 -0
  60. package/dist/discovery/discovery-service.d.ts.map +1 -0
  61. package/dist/discovery/discovery-service.js +65 -0
  62. package/dist/discovery/discovery-service.js.map +1 -0
  63. package/dist/discovery/index.d.ts +3 -0
  64. package/dist/discovery/index.d.ts.map +1 -0
  65. package/dist/discovery/index.js +2 -0
  66. package/dist/discovery/index.js.map +1 -0
  67. package/dist/exceptions.d.ts +28 -0
  68. package/dist/exceptions.d.ts.map +1 -0
  69. package/dist/exceptions.js +67 -0
  70. package/dist/exceptions.js.map +1 -0
  71. package/dist/index.d.ts +24 -0
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +31 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/logger.d.ts +43 -0
  76. package/dist/logger.d.ts.map +1 -0
  77. package/dist/logger.js +123 -0
  78. package/dist/logger.js.map +1 -0
  79. package/dist/middleware.d.ts +4 -0
  80. package/dist/middleware.d.ts.map +1 -0
  81. package/dist/middleware.js +36 -0
  82. package/dist/middleware.js.map +1 -0
  83. package/dist/polyfill.d.ts +2 -0
  84. package/dist/polyfill.d.ts.map +1 -0
  85. package/dist/polyfill.js +6 -0
  86. package/dist/polyfill.js.map +1 -0
  87. package/dist/resolver.d.ts +36 -0
  88. package/dist/resolver.d.ts.map +1 -0
  89. package/dist/resolver.js +42 -0
  90. package/dist/resolver.js.map +1 -0
  91. package/dist/response.d.ts +19 -0
  92. package/dist/response.d.ts.map +1 -0
  93. package/dist/response.js +62 -0
  94. package/dist/response.js.map +1 -0
  95. package/dist/router.d.ts +35 -0
  96. package/dist/router.d.ts.map +1 -0
  97. package/dist/router.js +160 -0
  98. package/dist/router.js.map +1 -0
  99. package/dist/testing/index.d.ts +2 -0
  100. package/dist/testing/index.d.ts.map +1 -0
  101. package/dist/testing/index.js +2 -0
  102. package/dist/testing/index.js.map +1 -0
  103. package/dist/testing/test-app.d.ts +22 -0
  104. package/dist/testing/test-app.d.ts.map +1 -0
  105. package/dist/testing/test-app.js +76 -0
  106. package/dist/testing/test-app.js.map +1 -0
  107. package/dist/types.d.ts +85 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +2 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist/utils/index.d.ts +4 -0
  112. package/dist/utils/index.d.ts.map +1 -0
  113. package/dist/utils/index.js +3 -0
  114. package/dist/utils/index.js.map +1 -0
  115. package/dist/utils/join-paths.d.ts +2 -0
  116. package/dist/utils/join-paths.d.ts.map +1 -0
  117. package/dist/utils/join-paths.js +7 -0
  118. package/dist/utils/join-paths.js.map +1 -0
  119. package/dist/utils/resolve-options.d.ts +32 -0
  120. package/dist/utils/resolve-options.d.ts.map +1 -0
  121. package/dist/utils/resolve-options.js +10 -0
  122. package/dist/utils/resolve-options.js.map +1 -0
  123. package/package.json +57 -0
@@ -0,0 +1,67 @@
1
+ const STATUS_TEXT = {
2
+ 400: 'Bad Request',
3
+ 401: 'Unauthorized',
4
+ 403: 'Forbidden',
5
+ 404: 'Not Found',
6
+ 405: 'Method Not Allowed',
7
+ 409: 'Conflict',
8
+ 422: 'Unprocessable Entity',
9
+ 429: 'Too Many Requests',
10
+ 500: 'Internal Server Error',
11
+ 502: 'Bad Gateway',
12
+ 503: 'Service Unavailable',
13
+ };
14
+ export class HttpException extends Error {
15
+ statusCode;
16
+ details;
17
+ constructor(statusCode, message, details) {
18
+ super(message);
19
+ this.statusCode = statusCode;
20
+ this.details = details;
21
+ this.name = this.constructor.name;
22
+ }
23
+ toJSON() {
24
+ return {
25
+ statusCode: this.statusCode,
26
+ error: STATUS_TEXT[this.statusCode] ?? 'Error',
27
+ message: this.message,
28
+ ...(this.details ? { details: this.details } : {}),
29
+ };
30
+ }
31
+ }
32
+ export class BadRequestException extends HttpException {
33
+ constructor(message = 'Bad Request', details) {
34
+ super(400, message, details);
35
+ }
36
+ }
37
+ export class UnauthorizedException extends HttpException {
38
+ constructor(message = 'Unauthorized', details) {
39
+ super(401, message, details);
40
+ }
41
+ }
42
+ export class ForbiddenException extends HttpException {
43
+ constructor(message = 'Forbidden', details) {
44
+ super(403, message, details);
45
+ }
46
+ }
47
+ export class NotFoundException extends HttpException {
48
+ constructor(message = 'Not Found', details) {
49
+ super(404, message, details);
50
+ }
51
+ }
52
+ export class ConflictException extends HttpException {
53
+ constructor(message = 'Conflict', details) {
54
+ super(409, message, details);
55
+ }
56
+ }
57
+ export class UnprocessableException extends HttpException {
58
+ constructor(message = 'Unprocessable Entity', details) {
59
+ super(422, message, details);
60
+ }
61
+ }
62
+ export class InternalServerException extends HttpException {
63
+ constructor(message = 'Internal Server Error', details) {
64
+ super(500, message, details);
65
+ }
66
+ }
67
+ //# sourceMappingURL=exceptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../src/exceptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAA2B;IAC1C,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,uBAAuB;IAC5B,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,qBAAqB;CAC3B,CAAA;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAE7B;IAEA;IAHT,YACS,UAAkB,EACzB,OAAe,EACR,OAAiB;QAExB,KAAK,CAAC,OAAO,CAAC,CAAA;QAJP,eAAU,GAAV,UAAU,CAAQ;QAElB,YAAO,GAAP,OAAO,CAAU;QAGxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IACnC,CAAC;IAED,MAAM;QACJ,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,OAAO;YAC9C,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD,CAAA;IACH,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACpD,YAAY,OAAO,GAAG,aAAa,EAAE,OAAiB;QACpD,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IACtD,YAAY,OAAO,GAAG,cAAc,EAAE,OAAiB;QACrD,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IACnD,YAAY,OAAO,GAAG,WAAW,EAAE,OAAiB;QAClD,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAClD,YAAY,OAAO,GAAG,WAAW,EAAE,OAAiB;QAClD,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IAClD,YAAY,OAAO,GAAG,UAAU,EAAE,OAAiB;QACjD,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IACvD,YAAY,OAAO,GAAG,sBAAsB,EAAE,OAAiB;QAC7D,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,aAAa;IACxD,YAAY,OAAO,GAAG,uBAAuB,EAAE,OAAiB;QAC9D,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ import './polyfill.js';
2
+ export { Miia } from './app/index.js';
3
+ export type { MiiaOptions } from './app/index.js';
4
+ export { LogLevel, Logger, ConsoleLogger } from './logger.js';
5
+ export type { LoggerService, LoggerConfig } from './logger.js';
6
+ export { Container, inject, injectOptional, runInContainerContext } from './di-container.js';
7
+ export { Resolver } from './resolver.js';
8
+ export { DiscoveryService } from './discovery/index.js';
9
+ export type { DiscoveredMethod, DiscoverableMethodMeta } from './discovery/index.js';
10
+ export { Injectable, Controller, Module } from './decorators/index.js';
11
+ export type { InjectableOptions } from './decorators/index.js';
12
+ export { Get, Post, Put, Patch, Delete, Head, Options } from './decorators/index.js';
13
+ export { Use, UseGuard, SkipGuard, ValidateBody, ValidateQuery, ValidateParams, Status } from './decorators/index.js';
14
+ export { createClassDecorator, createMethodDecorator, createFieldDecorator, createDecorator, applyDecorators, } from './decorators/index.js';
15
+ export { getMeta, setMeta, pushMeta, addToMapMeta, setInMapMeta, INJECTABLE, MODULE, PREFIX, RESOLVED_PREFIX, ROUTES, CLASS_MW, METHOD_MW, STATUSES, CLASS_GUARDS, METHOD_GUARDS, SKIP_GUARDS, GUARD_FACTORY, BODY_SCHEMAS, QUERY_SCHEMAS, PARAMS_SCHEMAS, } from './decorators/index.js';
16
+ export { Router } from './router.js';
17
+ export { compose } from './middleware.js';
18
+ export { HttpException, BadRequestException, UnauthorizedException, ForbiddenException, NotFoundException, ConflictException, UnprocessableException, InternalServerException, } from './exceptions.js';
19
+ export { ResponseBuilder } from './response.js';
20
+ export { cors } from './cors.js';
21
+ export { resolveOptions } from './utils/index.js';
22
+ export type { OptionsOrFactory } from './utils/index.js';
23
+ export type { Constructor, Resolve, Scope, Middleware, CanActivate, Guard, FactoryProvider, ProviderDefinition, ModuleOptions, ConfiguredModule, ZodLike, ZodLikeIssue, HttpMethod, RouteDefinition, RequestContext, ListenInfo, ServerHandle, ListenAdapter, } from './types.js';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,eAAe,CAAA;AAGtB,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGjD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC7D,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAGpF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACrH,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,MAAM,EACN,eAAe,EACf,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAGzC,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAGxD,YAAY,EACV,WAAW,EACX,OAAO,EACP,KAAK,EACL,UAAU,EACV,WAAW,EACX,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,UAAU,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ // @miiajs/core - public API
2
+ // Polyfill must be first - decorators execute at module load time
3
+ import './polyfill.js';
4
+ // Application
5
+ export { Miia } from './app/index.js';
6
+ // Logger
7
+ export { LogLevel, Logger, ConsoleLogger } from './logger.js';
8
+ // DI Container
9
+ export { Container, inject, injectOptional, runInContainerContext } from './di-container.js';
10
+ export { Resolver } from './resolver.js';
11
+ // Discovery
12
+ export { DiscoveryService } from './discovery/index.js';
13
+ // Decorators
14
+ export { Injectable, Controller, Module } from './decorators/index.js';
15
+ export { Get, Post, Put, Patch, Delete, Head, Options } from './decorators/index.js';
16
+ export { Use, UseGuard, SkipGuard, ValidateBody, ValidateQuery, ValidateParams, Status } from './decorators/index.js';
17
+ export { createClassDecorator, createMethodDecorator, createFieldDecorator, createDecorator, applyDecorators, } from './decorators/index.js';
18
+ export { getMeta, setMeta, pushMeta, addToMapMeta, setInMapMeta, INJECTABLE, MODULE, PREFIX, RESOLVED_PREFIX, ROUTES, CLASS_MW, METHOD_MW, STATUSES, CLASS_GUARDS, METHOD_GUARDS, SKIP_GUARDS, GUARD_FACTORY, BODY_SCHEMAS, QUERY_SCHEMAS, PARAMS_SCHEMAS, } from './decorators/index.js';
19
+ // Router
20
+ export { Router } from './router.js';
21
+ // Middleware
22
+ export { compose } from './middleware.js';
23
+ // Exceptions
24
+ export { HttpException, BadRequestException, UnauthorizedException, ForbiddenException, NotFoundException, ConflictException, UnprocessableException, InternalServerException, } from './exceptions.js';
25
+ // Response
26
+ export { ResponseBuilder } from './response.js';
27
+ // Built-in Middleware
28
+ export { cors } from './cors.js';
29
+ // Utilities
30
+ export { resolveOptions } from './utils/index.js';
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAE5B,kEAAkE;AAClE,OAAO,eAAe,CAAA;AAEtB,cAAc;AACd,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAGrC,SAAS;AACT,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG7D,eAAe;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAGvD,aAAa;AACb,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEtE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACrH,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,eAAe,GAChB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,MAAM,EACN,eAAe,EACf,MAAM,EACN,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,uBAAuB,CAAA;AAE9B,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,aAAa;AACb,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEzC,aAAa;AACb,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,iBAAiB,CAAA;AAExB,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,sBAAsB;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,43 @@
1
+ export declare enum LogLevel {
2
+ ERROR = 0,
3
+ WARN = 1,
4
+ LOG = 2,
5
+ DEBUG = 3
6
+ }
7
+ export interface LoggerService {
8
+ log(message: string, context?: string): void;
9
+ error(message: string, trace?: string, context?: string): void;
10
+ warn(message: string, context?: string): void;
11
+ debug?(message: string, context?: string): void;
12
+ }
13
+ export interface LoggerConfig {
14
+ level?: LogLevel;
15
+ json?: boolean;
16
+ appName?: string;
17
+ }
18
+ export declare class ConsoleLogger implements LoggerService {
19
+ private level;
20
+ private json;
21
+ private appName;
22
+ private lastTimestamp;
23
+ constructor(config?: LoggerConfig);
24
+ log(message: string, context?: string): void;
25
+ error(message: string, trace?: string, context?: string): void;
26
+ warn(message: string, context?: string): void;
27
+ debug(message: string, context?: string): void;
28
+ private printError;
29
+ private print;
30
+ private printJson;
31
+ }
32
+ export declare class Logger implements LoggerService {
33
+ private context?;
34
+ private static instance;
35
+ constructor(context?: string | undefined);
36
+ log(message: string, context?: string): void;
37
+ error(message: string, trace?: string, context?: string): void;
38
+ warn(message: string, context?: string): void;
39
+ debug(message: string, context?: string): void;
40
+ static setLogger(logger: LoggerService): void;
41
+ static getLogger(): LoggerService;
42
+ }
43
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,GAAG,IAAI;IACP,KAAK,IAAI;CACV;AAID,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAE5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAE9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAE7C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAChD;AAID,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAkBD,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,aAAa,CAAa;gBAEtB,MAAM,CAAC,EAAE,YAAY;IAMjC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAK5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAK9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAK7C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAK9C,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,KAAK;IA+Bb,OAAO,CAAC,SAAS;CAalB;AAID,qBAAa,MAAO,YAAW,aAAa;IAG9B,OAAO,CAAC,OAAO,CAAC;IAF5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqC;gBAExC,OAAO,CAAC,EAAE,MAAM,YAAA;IAEpC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI9C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAI7C,MAAM,CAAC,SAAS,IAAI,aAAa;CAGlC"}
package/dist/logger.js ADDED
@@ -0,0 +1,123 @@
1
+ // ─── Log Levels ─────────────────────────────────────────────────
2
+ export var LogLevel;
3
+ (function (LogLevel) {
4
+ LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
5
+ LogLevel[LogLevel["WARN"] = 1] = "WARN";
6
+ LogLevel[LogLevel["LOG"] = 2] = "LOG";
7
+ LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
8
+ })(LogLevel || (LogLevel = {}));
9
+ // ─── ANSI Colors ─────────────────────────────────────────────────
10
+ const color = {
11
+ reset: '\x1b[0m',
12
+ bold: '\x1b[1m',
13
+ green: '\x1b[32m',
14
+ yellow: '\x1b[33m',
15
+ red: '\x1b[31m',
16
+ magenta: '\x1b[35m',
17
+ cyan: '\x1b[36m',
18
+ gray: '\x1b[90m',
19
+ white: '\x1b[37m',
20
+ };
21
+ // ─── Default Console Logger (colored format) ────────────────────
22
+ export class ConsoleLogger {
23
+ level;
24
+ json;
25
+ appName;
26
+ lastTimestamp = Date.now();
27
+ constructor(config) {
28
+ this.level = config?.level ?? LogLevel.LOG;
29
+ this.json = config?.json ?? false;
30
+ this.appName = config?.appName ?? 'Miia';
31
+ }
32
+ log(message, context) {
33
+ if (LogLevel.LOG > this.level)
34
+ return;
35
+ this.json ? this.printJson('LOG', message, context) : this.print('LOG', message, context, color.green);
36
+ }
37
+ error(message, trace, context) {
38
+ if (LogLevel.ERROR > this.level)
39
+ return;
40
+ this.json ? this.printJson('ERROR', message, context, trace) : this.printError(message, trace, context);
41
+ }
42
+ warn(message, context) {
43
+ if (LogLevel.WARN > this.level)
44
+ return;
45
+ this.json ? this.printJson('WARN', message, context) : this.print('WARN', message, context, color.yellow);
46
+ }
47
+ debug(message, context) {
48
+ if (LogLevel.DEBUG > this.level)
49
+ return;
50
+ this.json ? this.printJson('DEBUG', message, context) : this.print('DEBUG', message, context, color.magenta);
51
+ }
52
+ printError(message, trace, context) {
53
+ this.print('ERROR', message, context, color.red);
54
+ if (trace)
55
+ console.error(`${color.red}${trace}${color.reset}`);
56
+ }
57
+ print(level, message, context, levelColor = '') {
58
+ const pid = typeof process !== 'undefined' ? process.pid : 0;
59
+ const now = Date.now();
60
+ const d = new Date(now);
61
+ const yyyy = d.getFullYear();
62
+ const MM = String(d.getMonth() + 1).padStart(2, '0');
63
+ const dd = String(d.getDate()).padStart(2, '0');
64
+ let hh = d.getHours();
65
+ const ampm = hh >= 12 ? 'PM' : 'AM';
66
+ hh = hh % 12 || 12;
67
+ const mm = String(d.getMinutes()).padStart(2, '0');
68
+ const ss = String(d.getSeconds()).padStart(2, '0');
69
+ const ms = String(d.getMilliseconds()).padStart(3, '0');
70
+ const timestamp = `${yyyy}-${MM}-${dd} ${String(hh).padStart(2, '0')}:${mm}:${ss}.${ms} ${ampm}`;
71
+ const delta = now - this.lastTimestamp;
72
+ this.lastTimestamp = now;
73
+ const deltaStr = delta >= 1000 ? `+${(delta / 1000).toFixed(1)}s` : `+${delta}ms`;
74
+ const ctx = context ? `${color.yellow}[${context}]${color.reset} ` : '';
75
+ const method = level === 'ERROR' ? console.error : level === 'WARN' ? console.warn : console.log;
76
+ method(`${levelColor}[${this.appName}]${color.reset} ` +
77
+ `${pid} ${timestamp} ` +
78
+ `${levelColor}${level.padEnd(5)}${color.reset} ` +
79
+ `${ctx}` +
80
+ `${levelColor}${message}${color.reset} ` +
81
+ `${color.yellow}${deltaStr}${color.reset}`);
82
+ }
83
+ printJson(level, message, context, trace) {
84
+ const entry = {
85
+ app: this.appName,
86
+ level,
87
+ message,
88
+ ...(context && { context }),
89
+ ...(trace && { trace }),
90
+ timestamp: new Date().toISOString(),
91
+ pid: typeof process !== 'undefined' ? process.pid : 0,
92
+ };
93
+ const method = level === 'ERROR' ? console.error : level === 'WARN' ? console.warn : console.log;
94
+ method(JSON.stringify(entry));
95
+ }
96
+ }
97
+ // ─── Logger (for use in services/controllers) ────────────────────
98
+ export class Logger {
99
+ context;
100
+ static instance = new ConsoleLogger();
101
+ constructor(context) {
102
+ this.context = context;
103
+ }
104
+ log(message, context) {
105
+ Logger.instance.log(message, context ?? this.context);
106
+ }
107
+ error(message, trace, context) {
108
+ Logger.instance.error(message, trace, context ?? this.context);
109
+ }
110
+ warn(message, context) {
111
+ Logger.instance.warn(message, context ?? this.context);
112
+ }
113
+ debug(message, context) {
114
+ Logger.instance.debug?.(message, context ?? this.context);
115
+ }
116
+ static setLogger(logger) {
117
+ Logger.instance = logger;
118
+ }
119
+ static getLogger() {
120
+ return Logger.instance;
121
+ }
122
+ }
123
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Middleware, RequestContext } from './types.js';
2
+ export declare function compose(middlewares: Middleware[]): Middleware;
3
+ export declare function guardToMiddleware(fn: (ctx: RequestContext) => boolean | Promise<boolean>): Middleware;
4
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAK5D,wBAAgB,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,CAiB7D;AAID,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,UAAU,CAYrG"}
@@ -0,0 +1,36 @@
1
+ import { ForbiddenException } from './exceptions.js';
2
+ // ─── Compose (Koa-style onion model) ────────────────────────────
3
+ export function compose(middlewares) {
4
+ return async (ctx, next) => {
5
+ let index = -1;
6
+ async function dispatch(i) {
7
+ if (i <= index)
8
+ throw new Error('next() called multiple times');
9
+ index = i;
10
+ if (i < middlewares.length) {
11
+ await middlewares[i](ctx, () => dispatch(i + 1));
12
+ }
13
+ else {
14
+ await next();
15
+ }
16
+ }
17
+ await dispatch(0);
18
+ };
19
+ }
20
+ // ─── Guard → Middleware conversion (internal) ────────────────────
21
+ export function guardToMiddleware(fn) {
22
+ return (ctx, next) => {
23
+ const result = fn(ctx);
24
+ if (result instanceof Promise) {
25
+ return result.then((allowed) => {
26
+ if (!allowed)
27
+ throw new ForbiddenException();
28
+ return next();
29
+ });
30
+ }
31
+ if (!result)
32
+ throw new ForbiddenException();
33
+ return next();
34
+ };
35
+ }
36
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,mEAAmE;AAEnE,MAAM,UAAU,OAAO,CAAC,WAAyB;IAC/C,OAAO,KAAK,EAAE,GAAmB,EAAE,IAAyB,EAAE,EAAE;QAC9D,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;QAEd,KAAK,UAAU,QAAQ,CAAC,CAAS;YAC/B,IAAI,CAAC,IAAI,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YAC/D,KAAK,GAAG,CAAC,CAAA;YAET,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC3B,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAClD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,EAAE,CAAA;YACd,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC,CAAA;AACH,CAAC;AAED,oEAAoE;AAEpE,MAAM,UAAU,iBAAiB,CAAC,EAAuD;IACvF,OAAO,CAAC,GAAmB,EAAE,IAAyB,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QACtB,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IAAI,CAAC,OAAO;oBAAE,MAAM,IAAI,kBAAkB,EAAE,CAAA;gBAC5C,OAAO,IAAI,EAAE,CAAA;YACf,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAkB,EAAE,CAAA;QAC3C,OAAO,IAAI,EAAE,CAAA;IACf,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=polyfill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyfill.d.ts","sourceRoot":"","sources":["../src/polyfill.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ // Polyfill Symbol.metadata for runtimes that don't support it natively.
2
+ // Must be imported before any decorator usage.
3
+ ;
4
+ Symbol.metadata ??= Symbol.for('Symbol.metadata');
5
+ export {};
6
+ //# sourceMappingURL=polyfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyfill.js","sourceRoot":"","sources":["../src/polyfill.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,+CAA+C;AAC/C,CAAC;AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA"}
@@ -0,0 +1,36 @@
1
+ import type { Container } from './di-container.js';
2
+ import type { Constructor } from './types.js';
3
+ /**
4
+ * Public DI lookup API. Wraps `Container` with a narrowed surface: only the
5
+ * read operations user code legitimately needs (`has`, `resolve`,
6
+ * `resolveOptional`). Mutations (`register`, `destroyAll`) stay internal -
7
+ * `Container` itself is not registered as a public DI token.
8
+ *
9
+ * **Prefer `inject(Token)` over `resolver.resolve(Token)` when possible.**
10
+ * Field-init `inject()` is the idiomatic MiiaJS pattern - it composes with
11
+ * lifecycle hooks and keeps deps explicit at the class level. Reach for
12
+ * `Resolver` only for runtime inspection: plugin systems, conditional
13
+ * resolution, or when the token is not known until runtime.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * @Injectable()
18
+ * class PluginRegistry {
19
+ * private resolver = inject(Resolver)
20
+ *
21
+ * load(name: string) {
22
+ * const token = `plugin:${name}`
23
+ * if (!this.resolver.has(token)) throw new Error(`unknown plugin: ${name}`)
24
+ * return this.resolver.resolve(token)
25
+ * }
26
+ * }
27
+ * ```
28
+ */
29
+ export declare class Resolver {
30
+ private container;
31
+ constructor(container: Container);
32
+ has(token: Constructor | string): boolean;
33
+ resolve<T>(token: Constructor<T> | string): T;
34
+ resolveOptional<T>(token: Constructor<T> | string): T | null;
35
+ }
36
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,QAAQ;IACP,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAExC,GAAG,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO;IAIzC,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC;IAI7C,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI;CAG7D"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Public DI lookup API. Wraps `Container` with a narrowed surface: only the
3
+ * read operations user code legitimately needs (`has`, `resolve`,
4
+ * `resolveOptional`). Mutations (`register`, `destroyAll`) stay internal -
5
+ * `Container` itself is not registered as a public DI token.
6
+ *
7
+ * **Prefer `inject(Token)` over `resolver.resolve(Token)` when possible.**
8
+ * Field-init `inject()` is the idiomatic MiiaJS pattern - it composes with
9
+ * lifecycle hooks and keeps deps explicit at the class level. Reach for
10
+ * `Resolver` only for runtime inspection: plugin systems, conditional
11
+ * resolution, or when the token is not known until runtime.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * @Injectable()
16
+ * class PluginRegistry {
17
+ * private resolver = inject(Resolver)
18
+ *
19
+ * load(name: string) {
20
+ * const token = `plugin:${name}`
21
+ * if (!this.resolver.has(token)) throw new Error(`unknown plugin: ${name}`)
22
+ * return this.resolver.resolve(token)
23
+ * }
24
+ * }
25
+ * ```
26
+ */
27
+ export class Resolver {
28
+ container;
29
+ constructor(container) {
30
+ this.container = container;
31
+ }
32
+ has(token) {
33
+ return this.container.has(token);
34
+ }
35
+ resolve(token) {
36
+ return this.container.resolve(token);
37
+ }
38
+ resolveOptional(token) {
39
+ return this.container.resolveOptional(token);
40
+ }
41
+ }
42
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,OAAO,QAAQ;IACC;IAApB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C,GAAG,CAAC,KAA2B;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,CAAI,KAA8B;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAI,KAAK,CAAC,CAAA;IACzC,CAAC;IAED,eAAe,CAAI,KAA8B;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAI,KAAK,CAAC,CAAA;IACjD,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ export declare class ResponseBuilder {
2
+ private _status;
3
+ private _headers;
4
+ private _body;
5
+ /** @internal */
6
+ _modified: boolean;
7
+ private ensureHeaders;
8
+ status(code: number): this;
9
+ header(name: string, value: string): this;
10
+ json(data: unknown): this;
11
+ text(data: string): this;
12
+ html(data: string): this;
13
+ redirect(url: string, status?: number): this;
14
+ stream(readable: ReadableStream): this;
15
+ build(): Response;
16
+ getStatus(): number;
17
+ getHeaders(): Headers;
18
+ }
19
+ //# sourceMappingURL=response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,KAAK,CAAwB;IACrC,gBAAgB;IAChB,SAAS,UAAQ;IAEjB,OAAO,CAAC,aAAa;IAIrB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM1B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMzC,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAOzB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,SAAM,GAAG,IAAI;IAOzC,MAAM,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAMtC,KAAK,IAAI,QAAQ;IAOjB,SAAS,IAAI,MAAM;IAInB,UAAU,IAAI,OAAO;CAGtB"}
@@ -0,0 +1,62 @@
1
+ export class ResponseBuilder {
2
+ _status = 200;
3
+ _headers = null;
4
+ _body = null;
5
+ /** @internal */
6
+ _modified = false;
7
+ ensureHeaders() {
8
+ return (this._headers ??= new Headers());
9
+ }
10
+ status(code) {
11
+ this._modified = true;
12
+ this._status = code;
13
+ return this;
14
+ }
15
+ header(name, value) {
16
+ this._modified = true;
17
+ this.ensureHeaders().set(name, value);
18
+ return this;
19
+ }
20
+ json(data) {
21
+ this._modified = true;
22
+ this.ensureHeaders().set('Content-Type', 'application/json');
23
+ this._body = JSON.stringify(data);
24
+ return this;
25
+ }
26
+ text(data) {
27
+ this._modified = true;
28
+ this.ensureHeaders().set('Content-Type', 'text/plain');
29
+ this._body = data;
30
+ return this;
31
+ }
32
+ html(data) {
33
+ this._modified = true;
34
+ this.ensureHeaders().set('Content-Type', 'text/html');
35
+ this._body = data;
36
+ return this;
37
+ }
38
+ redirect(url, status = 302) {
39
+ this._modified = true;
40
+ this._status = status;
41
+ this.ensureHeaders().set('Location', url);
42
+ return this;
43
+ }
44
+ stream(readable) {
45
+ this._modified = true;
46
+ this._body = readable;
47
+ return this;
48
+ }
49
+ build() {
50
+ return new Response(this._body, {
51
+ status: this._status,
52
+ headers: this._headers ?? undefined,
53
+ });
54
+ }
55
+ getStatus() {
56
+ return this._status;
57
+ }
58
+ getHeaders() {
59
+ return this.ensureHeaders();
60
+ }
61
+ }
62
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../src/response.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAe;IAClB,OAAO,GAAG,GAAG,CAAA;IACb,QAAQ,GAAmB,IAAI,CAAA;IAC/B,KAAK,GAAoB,IAAI,CAAA;IACrC,gBAAgB;IAChB,SAAS,GAAG,KAAK,CAAA;IAET,aAAa;QACnB,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,OAAO,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,KAAa;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QACrC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,IAAa;QAChB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;QAC5D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAA;QACtD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;QACrD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,QAAQ,CAAC,GAAW,EAAE,MAAM,GAAG,GAAG;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACzC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,CAAC,QAAwB;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK;QACH,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE;YAC9B,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,OAAO,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;SACpC,CAAC,CAAA;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,aAAa,EAAE,CAAA;IAC7B,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ import type { HttpMethod, Middleware, RequestContext } from './types.js';
2
+ export interface MatchResult {
3
+ handler: (ctx: RequestContext) => unknown;
4
+ params: Record<string, string>;
5
+ compiledPipeline?: Middleware;
6
+ }
7
+ export interface AddRouteOptions {
8
+ middlewares?: Middleware[];
9
+ /**
10
+ * Skip all globally-registered guards (via `app.useGuard()`) for this route.
11
+ * Global middleware from `app.use()` still applies - this opts out of guards only.
12
+ * Used by @miiajs/swagger so UI stays reachable when the app has global auth.
13
+ */
14
+ skipGlobalGuards?: boolean;
15
+ /**
16
+ * Specific global guard classes to skip for this route. Populated from `@SkipGuard`
17
+ * metadata by RouterExplorer. Routes with `skipGlobalGuards: true` ignore this set
18
+ * (they skip everything).
19
+ */
20
+ skippedGuardClasses?: Set<unknown> | null;
21
+ }
22
+ export interface GlobalGuardBinding {
23
+ guardClass: unknown;
24
+ middleware: Middleware;
25
+ }
26
+ export declare class Router {
27
+ private staticRoutes;
28
+ private tries;
29
+ private allEntries;
30
+ add(method: HttpMethod, pattern: string, handler: (ctx: RequestContext) => unknown, options?: AddRouteOptions): void;
31
+ match(method: string, pathname: string): MatchResult | null;
32
+ compileAll(globalGuards: GlobalGuardBinding[]): void;
33
+ private matchTrie;
34
+ }
35
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAYxE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAA;IACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,gBAAgB,CAAC,EAAE,UAAU,CAAA;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,UAAU,CAAA;CACvB;AAiBD,qBAAa,MAAM;IACjB,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,UAAU,CAAmB;IAErC,GAAG,CACD,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,EACzC,OAAO,GAAE,eAAoB,GAC5B,IAAI;IAmDP,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IA8C3D,UAAU,CAAC,YAAY,EAAE,kBAAkB,EAAE,GAAG,IAAI;IAqBpD,OAAO,CAAC,SAAS;CAgDlB"}