@koala-ts/framework 2.13.0 → 2.14.1

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 (131) hide show
  1. package/dist/Http/Scope/index.d.ts +1 -0
  2. package/dist/Http/Scope/index.d.ts.map +1 -1
  3. package/dist/Http/Scope/index.js +1 -0
  4. package/dist/Http/Scope/index.js.map +1 -1
  5. package/dist/Http/Scope/initialize-scope.d.ts +8 -0
  6. package/dist/Http/Scope/initialize-scope.d.ts.map +1 -0
  7. package/dist/Http/Scope/initialize-scope.js +26 -0
  8. package/dist/Http/Scope/initialize-scope.js.map +1 -0
  9. package/dist/Http/Scope/initialize-scope.test.d.ts +2 -0
  10. package/dist/Http/Scope/initialize-scope.test.d.ts.map +1 -0
  11. package/dist/Http/Scope/initialize-scope.test.js +63 -0
  12. package/dist/Http/Scope/initialize-scope.test.js.map +1 -0
  13. package/dist/Http/Scope/request-scope-storage.d.ts +13 -0
  14. package/dist/Http/Scope/request-scope-storage.d.ts.map +1 -0
  15. package/dist/Http/Scope/request-scope-storage.js +15 -0
  16. package/dist/Http/Scope/request-scope-storage.js.map +1 -0
  17. package/dist/Http/Scope/request-scope-storage.test.d.ts +2 -0
  18. package/dist/Http/Scope/request-scope-storage.test.d.ts.map +1 -0
  19. package/dist/{Kernel/HttpKernel.test.js → Http/Scope/request-scope-storage.test.js} +4 -4
  20. package/dist/Http/Scope/request-scope-storage.test.js.map +1 -0
  21. package/dist/Http/middleware/apply-configured-global-middleware.d.ts +3 -0
  22. package/dist/Http/middleware/apply-configured-global-middleware.d.ts.map +1 -0
  23. package/dist/Http/middleware/apply-configured-global-middleware.js +9 -0
  24. package/dist/Http/middleware/apply-configured-global-middleware.js.map +1 -0
  25. package/dist/Http/middleware/apply-configured-global-middleware.test.d.ts +2 -0
  26. package/dist/Http/middleware/apply-configured-global-middleware.test.d.ts.map +1 -0
  27. package/dist/Http/middleware/apply-configured-global-middleware.test.js +53 -0
  28. package/dist/Http/middleware/apply-configured-global-middleware.test.js.map +1 -0
  29. package/dist/Kernel/index.d.ts +2 -1
  30. package/dist/Kernel/index.d.ts.map +1 -1
  31. package/dist/Kernel/index.js +2 -1
  32. package/dist/Kernel/index.js.map +1 -1
  33. package/dist/Kernel/register-event-subscribers.d.ts +4 -0
  34. package/dist/Kernel/register-event-subscribers.d.ts.map +1 -0
  35. package/dist/Kernel/register-event-subscribers.js +22 -0
  36. package/dist/Kernel/register-event-subscribers.js.map +1 -0
  37. package/dist/Kernel/register-event-subscribers.test.d.ts +2 -0
  38. package/dist/Kernel/register-event-subscribers.test.d.ts.map +1 -0
  39. package/dist/Kernel/register-event-subscribers.test.js +19 -0
  40. package/dist/Kernel/register-event-subscribers.test.js.map +1 -0
  41. package/dist/Testing/TestAgentFactory.d.ts +1 -1
  42. package/dist/Testing/TestAgentFactory.d.ts.map +1 -1
  43. package/dist/Testing/TestAgentFactory.js +1 -1
  44. package/dist/Testing/TestAgentFactory.js.map +1 -1
  45. package/dist/{Application/types.d.ts → application/application.d.ts} +1 -1
  46. package/dist/application/application.d.ts.map +1 -0
  47. package/dist/application/application.js +1 -0
  48. package/dist/application/application.js.map +1 -0
  49. package/dist/{Application/ApplicationFactory.d.ts → application/create-application.d.ts} +2 -2
  50. package/dist/application/create-application.d.ts.map +1 -0
  51. package/dist/application/create-application.js +18 -0
  52. package/dist/application/create-application.js.map +1 -0
  53. package/dist/application/create-application.test.d.ts +2 -0
  54. package/dist/application/create-application.test.d.ts.map +1 -0
  55. package/dist/{Application/ApplicationFactory.test.js → application/create-application.test.js} +3 -3
  56. package/dist/application/create-application.test.js.map +1 -0
  57. package/dist/index.d.ts +3 -2
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +2 -2
  60. package/dist/index.js.map +1 -1
  61. package/dist/routing/index.d.ts +4 -0
  62. package/dist/routing/index.d.ts.map +1 -0
  63. package/dist/routing/index.js +3 -0
  64. package/dist/routing/index.js.map +1 -0
  65. package/dist/{Routing/Router.d.ts → routing/router.d.ts} +3 -1
  66. package/dist/routing/router.d.ts.map +1 -0
  67. package/dist/{Routing/Router.js → routing/router.js} +34 -1
  68. package/dist/routing/router.js.map +1 -0
  69. package/dist/routing/router.test.d.ts +2 -0
  70. package/dist/routing/router.test.d.ts.map +1 -0
  71. package/dist/{Routing/Router.test.js → routing/router.test.js} +46 -4
  72. package/dist/routing/router.test.js.map +1 -0
  73. package/dist/{Routing → routing}/types.d.ts.map +1 -1
  74. package/dist/{Routing → routing}/types.js.map +1 -1
  75. package/dist/validator/constraints/index.d.ts +3 -0
  76. package/dist/validator/constraints/index.d.ts.map +1 -1
  77. package/dist/validator/constraints/index.js +3 -0
  78. package/dist/validator/constraints/index.js.map +1 -1
  79. package/dist/validator/constraints/string/email.d.ts.map +1 -1
  80. package/dist/validator/constraints/string/email.js +3 -0
  81. package/dist/validator/constraints/string/email.js.map +1 -1
  82. package/dist/validator/constraints/string/email.test.js +12 -0
  83. package/dist/validator/constraints/string/email.test.js.map +1 -1
  84. package/dist/validator/constraints/string/slug.d.ts +3 -0
  85. package/dist/validator/constraints/string/slug.d.ts.map +1 -0
  86. package/dist/validator/constraints/string/slug.js +32 -0
  87. package/dist/validator/constraints/string/slug.js.map +1 -0
  88. package/dist/validator/constraints/string/slug.test.d.ts +2 -0
  89. package/dist/validator/constraints/string/slug.test.d.ts.map +1 -0
  90. package/dist/validator/constraints/string/slug.test.js +74 -0
  91. package/dist/validator/constraints/string/slug.test.js.map +1 -0
  92. package/package.json +4 -7
  93. package/dist/Application/ApplicationFactory.d.ts.map +0 -1
  94. package/dist/Application/ApplicationFactory.js +0 -52
  95. package/dist/Application/ApplicationFactory.js.map +0 -1
  96. package/dist/Application/ApplicationFactory.test.d.ts +0 -2
  97. package/dist/Application/ApplicationFactory.test.d.ts.map +0 -1
  98. package/dist/Application/ApplicationFactory.test.js.map +0 -1
  99. package/dist/Application/Response.d.ts +0 -4
  100. package/dist/Application/Response.d.ts.map +0 -1
  101. package/dist/Application/Response.js +0 -14
  102. package/dist/Application/Response.js.map +0 -1
  103. package/dist/Application/Response.test.d.ts +0 -2
  104. package/dist/Application/Response.test.d.ts.map +0 -1
  105. package/dist/Application/Response.test.js +0 -40
  106. package/dist/Application/Response.test.js.map +0 -1
  107. package/dist/Application/index.d.ts +0 -3
  108. package/dist/Application/index.d.ts.map +0 -1
  109. package/dist/Application/index.js +0 -2
  110. package/dist/Application/index.js.map +0 -1
  111. package/dist/Application/types.d.ts.map +0 -1
  112. package/dist/Application/types.js.map +0 -1
  113. package/dist/Kernel/HttpKernel.d.ts +0 -7
  114. package/dist/Kernel/HttpKernel.d.ts.map +0 -1
  115. package/dist/Kernel/HttpKernel.js +0 -15
  116. package/dist/Kernel/HttpKernel.js.map +0 -1
  117. package/dist/Kernel/HttpKernel.test.d.ts +0 -2
  118. package/dist/Kernel/HttpKernel.test.d.ts.map +0 -1
  119. package/dist/Kernel/HttpKernel.test.js.map +0 -1
  120. package/dist/Routing/Router.d.ts.map +0 -1
  121. package/dist/Routing/Router.js.map +0 -1
  122. package/dist/Routing/Router.test.d.ts +0 -2
  123. package/dist/Routing/Router.test.d.ts.map +0 -1
  124. package/dist/Routing/Router.test.js.map +0 -1
  125. package/dist/Routing/index.d.ts +0 -4
  126. package/dist/Routing/index.d.ts.map +0 -1
  127. package/dist/Routing/index.js +0 -3
  128. package/dist/Routing/index.js.map +0 -1
  129. package/dist/Routing/types.js +0 -1
  130. /package/dist/{Routing → routing}/types.d.ts +0 -0
  131. /package/dist/{Application → routing}/types.js +0 -0
@@ -1,4 +1,6 @@
1
1
  import 'reflect-metadata';
2
+ import { koaBody } from 'koa-body';
3
+ import Router from '@koa/router';
2
4
  const key = Symbol('Route');
3
5
  export function Route({ method, path, middleware = [], options = {} }) {
4
6
  return function (target, propertyKey) {
@@ -17,6 +19,12 @@ export function Route({ method, path, middleware = [], options = {} }) {
17
19
  export function getRoutes() {
18
20
  return (Reflect.getMetadata(key, Reflect) ?? []);
19
21
  }
22
+ export function registerRoutes(app) {
23
+ const router = createRouter();
24
+ app.use(router.routes());
25
+ app.use(router.allowedMethods());
26
+ return app;
27
+ }
20
28
  function qualifyMethod(method) {
21
29
  const methods = Array.isArray(method) ? method : [method];
22
30
  const result = [];
@@ -37,4 +45,29 @@ function extractBodyOptions(options) {
37
45
  const { parseBody: _parseBody, ...bodyOptions } = options;
38
46
  return bodyOptions;
39
47
  }
40
- //# sourceMappingURL=Router.js.map
48
+ function createRouter() {
49
+ const router = new Router();
50
+ for (const route of normalizeRoutes(getRoutes())) {
51
+ router[route.method](route.path, ...route.middleware);
52
+ }
53
+ return router;
54
+ }
55
+ function normalizeRoutes(routes) {
56
+ const registrations = [];
57
+ for (const route of routes) {
58
+ const middleware = resolveRouteMiddleware(route);
59
+ for (const method of route.methods) {
60
+ registrations.push({
61
+ method,
62
+ path: route.path,
63
+ middleware,
64
+ });
65
+ }
66
+ }
67
+ return registrations;
68
+ }
69
+ function resolveRouteMiddleware(route) {
70
+ const middlewareStack = [...route.middleware, route.handler];
71
+ return route.parseBody ? [koaBody(route.bodyOptions), ...middlewareStack] : middlewareStack;
72
+ }
73
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/routing/router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=router.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.test.d.ts","sourceRoot":"","sources":["../../src/routing/router.test.ts"],"names":[],"mappings":""}
@@ -7,8 +7,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- import { getRoutes, Route } from '../Routing/Router.js';
11
- import { describe, expect, test, vi } from 'vitest';
10
+ import { getRoutes, registerRoutes, Route } from '../routing/router.js';
11
+ import Koa from 'koa';
12
+ import request from 'supertest';
13
+ import { afterEach, describe, expect, test, vi } from 'vitest';
14
+ afterEach(() => {
15
+ vi.restoreAllMocks();
16
+ });
12
17
  describe('Route', () => {
13
18
  const exampleMiddleware = vi.fn();
14
19
  class Foo {
@@ -114,8 +119,45 @@ describe('Route', () => {
114
119
  });
115
120
  });
116
121
  test('empty routes', () => {
117
- Reflect.getMetadata = vi.fn(() => undefined);
122
+ vi.spyOn(Reflect, 'getMetadata').mockReturnValue(undefined);
118
123
  expect(getRoutes()).toEqual([]);
119
124
  });
120
125
  });
121
- //# sourceMappingURL=Router.test.js.map
126
+ describe('registerRoutes', () => {
127
+ test('it dispatches registered routes', async () => {
128
+ const target = vi.fn(async (ctx) => {
129
+ ctx.body = { ok: true };
130
+ });
131
+ Route({ path: '/registered-route', method: 'post', options: { parseBody: false } })(target, 'handler', {});
132
+ const app = new Koa();
133
+ registerRoutes(app);
134
+ const response = await request(app.callback()).post('/registered-route');
135
+ expect(response.status).toBe(200);
136
+ expect(response.body).toEqual({ ok: true });
137
+ expect(target).toHaveBeenCalledTimes(1);
138
+ });
139
+ test('it responds with allowed methods', async () => {
140
+ const target = vi.fn(async (ctx) => {
141
+ ctx.status = 204;
142
+ });
143
+ Route({ path: '/allowed-methods-route', method: 'get', options: { parseBody: false } })(target, 'handler', {});
144
+ const app = new Koa();
145
+ registerRoutes(app);
146
+ const response = await request(app.callback()).post('/allowed-methods-route');
147
+ expect(response.status).toBe(405);
148
+ expect(response.headers.allow).toBe('HEAD, GET');
149
+ });
150
+ test('it builds the router once for multiple requests', async () => {
151
+ const target = vi.fn(async (ctx) => {
152
+ ctx.status = 204;
153
+ });
154
+ Route({ path: '/router-created-once', method: 'get', options: { parseBody: false } })(target, 'handler', {});
155
+ const createRouterSpy = vi.spyOn(Reflect, 'getMetadata');
156
+ const app = new Koa();
157
+ registerRoutes(app);
158
+ await request(app.callback()).get('/router-created-once');
159
+ await request(app.callback()).get('/router-created-once');
160
+ expect(createRouterSpy).toHaveBeenCalledTimes(1);
161
+ });
162
+ });
163
+ //# sourceMappingURL=router.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.test.js","sourceRoot":"","sources":["../../src/routing/router.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Routing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,CAChC,wBAAwB,GAAG;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CACF,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/routing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAE7C,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,CAChC,wBAAwB,GAAG;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CACF,CAAC;AAEF,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/Routing/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/routing/types.ts"],"names":[],"mappings":""}
@@ -1,10 +1,13 @@
1
1
  import { notBlank } from './basic/not-blank.js';
2
2
  import { email } from './string/email.js';
3
+ import { slug } from './string/slug.js';
3
4
  export declare const builtInConstraints: {
4
5
  notBlank: typeof notBlank;
5
6
  email: typeof email;
7
+ slug: typeof slug;
6
8
  };
7
9
  export * from './string/email.js';
10
+ export * from './string/slug.js';
8
11
  export * from './basic/not-blank.js';
9
12
  export * from './other/compound.js';
10
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validator/constraints/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,eAAO,MAAM,kBAAkB;;;CAM9B,CAAC;AAEF,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validator/constraints/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,eAAO,MAAM,kBAAkB;;;;CAO9B,CAAC;AAEF,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -1,12 +1,15 @@
1
1
  import { notBlank } from './basic/not-blank.js';
2
2
  import { email } from './string/email.js';
3
+ import { slug } from './string/slug.js';
3
4
  export const builtInConstraints = {
4
5
  // Basic
5
6
  notBlank,
6
7
  // String
7
8
  email,
9
+ slug,
8
10
  };
9
11
  export * from './string/email.js';
12
+ export * from './string/slug.js';
10
13
  export * from './basic/not-blank.js';
11
14
  export * from './other/compound.js';
12
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/validator/constraints/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ;IACR,QAAQ;IAER,SAAS;IACT,KAAK;CACN,CAAC;AAEF,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/validator/constraints/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ;IACR,QAAQ;IAER,SAAS;IACT,KAAK;IACL,IAAI;CACL,CAAC;AAEF,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../../src/validator/constraints/string/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAWhE,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,SAAS,EAAE,CA6B7E"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../../src/validator/constraints/string/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAWhE,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,SAAS,EAAE,CAiC7E"}
@@ -3,6 +3,9 @@ const strictEmailRegex = /^[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Za-z0-9-]+(?:\.[A
3
3
  export function email(value, context) {
4
4
  const options = context.options;
5
5
  const message = options.message ?? DEFAULT_MESSAGE;
6
+ if (value === undefined) {
7
+ return [];
8
+ }
6
9
  if (typeof value !== 'string') {
7
10
  return [
8
11
  {
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../../../src/validator/constraints/string/email.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,0CAA0C,CAAC;AAOnE,MAAM,gBAAgB,GAAG,sEAAsE,CAAC;AAEhG,MAAM,UAAU,KAAK,CAAC,KAAc,EAAE,OAA0B;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAuB,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IAEnD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO;gBACP,KAAK;aACN;SACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE1E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,OAAO;YACL;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO;gBACP,KAAK;aACN;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../../../src/validator/constraints/string/email.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,0CAA0C,CAAC;AAOnE,MAAM,gBAAgB,GAAG,sEAAsE,CAAC;AAEhG,MAAM,UAAU,KAAK,CAAC,KAAc,EAAE,OAA0B;IAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAuB,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IAEnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO;gBACP,KAAK;aACN;SACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE1E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,OAAO;YACL;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO;gBACP,KAAK;aACN;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -115,5 +115,17 @@ describe('email', () => {
115
115
  value: 42,
116
116
  });
117
117
  });
118
+ it('returns no violations for undefined values', () => {
119
+ const context = {
120
+ path: 'email',
121
+ root: { email: undefined },
122
+ value: undefined,
123
+ constraint: 'email',
124
+ options: {},
125
+ runNestedRules: () => [],
126
+ };
127
+ const violations = email(undefined, context);
128
+ expect(violations).toHaveLength(0);
129
+ });
118
130
  });
119
131
  //# sourceMappingURL=email.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.test.js","sourceRoot":"","sources":["../../../../src/validator/constraints/string/email.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email.test.js","sourceRoot":"","sources":["../../../../src/validator/constraints/string/email.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ConstraintContext, Violation } from '../../types.js';
2
+ export declare function slug(value: unknown, context: ConstraintContext): Violation[];
3
+ //# sourceMappingURL=slug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../../../src/validator/constraints/string/slug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAWhE,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,SAAS,EAAE,CAiC5E"}
@@ -0,0 +1,32 @@
1
+ const DEFAULT_MESSAGE = 'This value is not a valid slug.';
2
+ const strictSlugRegex = /^(?!-)(?!.*--)[a-z0-9]+(?:-[a-z0-9]+)*$/;
3
+ export function slug(value, context) {
4
+ const options = context.options;
5
+ const message = options.message ?? DEFAULT_MESSAGE;
6
+ if (value === undefined) {
7
+ return [];
8
+ }
9
+ if (typeof value !== 'string') {
10
+ return [
11
+ {
12
+ path: context.path,
13
+ constraint: context.constraint,
14
+ message,
15
+ value,
16
+ },
17
+ ];
18
+ }
19
+ const normalized = options.normalizer ? options.normalizer(value) : value;
20
+ if (!strictSlugRegex.test(normalized)) {
21
+ return [
22
+ {
23
+ path: context.path,
24
+ constraint: context.constraint,
25
+ message,
26
+ value,
27
+ },
28
+ ];
29
+ }
30
+ return [];
31
+ }
32
+ //# sourceMappingURL=slug.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../../../src/validator/constraints/string/slug.ts"],"names":[],"mappings":"AAEA,MAAM,eAAe,GAAG,iCAAiC,CAAC;AAO1D,MAAM,eAAe,GAAG,yCAAyC,CAAC;AAElE,MAAM,UAAU,IAAI,CAAC,KAAc,EAAE,OAA0B;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAsB,CAAC;IAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;IAEnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO;YACL;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO;gBACP,KAAK;aACN;SACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE1E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,OAAO;YACL;gBACE,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,OAAO;gBACP,KAAK;aACN;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=slug.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.test.d.ts","sourceRoot":"","sources":["../../../../src/validator/constraints/string/slug.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { slug } from './slug.js';
3
+ describe('slug', () => {
4
+ it('accepts valid slug with lowercase, digits and hyphens', () => {
5
+ const context = createContext('article-123');
6
+ const violations = slug('article-123', context);
7
+ expect(violations).toHaveLength(0);
8
+ });
9
+ it.each([
10
+ { value: 'Article-123', label: 'uppercase letters' },
11
+ { value: 'my slug', label: 'spaces' },
12
+ { value: 'my_slug', label: 'underscores' },
13
+ { value: 'my@slug', label: 'special symbols' },
14
+ { value: '-my-slug', label: 'leading hyphen' },
15
+ { value: 'my-slug-', label: 'trailing hyphen' },
16
+ { value: 'my--slug', label: 'consecutive hyphens' },
17
+ { value: '', label: 'empty string' },
18
+ ])('rejects invalid slug with $label', ({ value }) => {
19
+ const context = createContext(value);
20
+ const violations = slug(value, context);
21
+ expect(violations).toHaveLength(1);
22
+ expect(violations[0]).toEqual({
23
+ path: 'slug',
24
+ constraint: 'slug',
25
+ message: 'This value is not a valid slug.',
26
+ value,
27
+ });
28
+ });
29
+ it('rejects non-string values with default message', () => {
30
+ const context = createContext(42);
31
+ const violations = slug(42, context);
32
+ expect(violations).toHaveLength(1);
33
+ expect(violations[0]).toEqual({
34
+ path: 'slug',
35
+ constraint: 'slug',
36
+ message: 'This value is not a valid slug.',
37
+ value: 42,
38
+ });
39
+ });
40
+ it('returns no violations for undefined values', () => {
41
+ const context = createContext(undefined);
42
+ const violations = slug(undefined, context);
43
+ expect(violations).toHaveLength(0);
44
+ });
45
+ it('uses a custom message when provided', () => {
46
+ const context = createContext('invalid slug', { message: 'Slug is invalid' });
47
+ const violations = slug('invalid slug', context);
48
+ expect(violations).toHaveLength(1);
49
+ expect(violations[0]).toEqual({
50
+ path: 'slug',
51
+ constraint: 'slug',
52
+ message: 'Slug is invalid',
53
+ value: 'invalid slug',
54
+ });
55
+ });
56
+ it('normalizes values before validation', () => {
57
+ const context = createContext(' article-slug ', {
58
+ normalizer: (value) => value.trim(),
59
+ });
60
+ const violations = slug(' article-slug ', context);
61
+ expect(violations).toHaveLength(0);
62
+ });
63
+ });
64
+ function createContext(value, options = {}) {
65
+ return {
66
+ path: 'slug',
67
+ root: { slug: value },
68
+ value,
69
+ constraint: 'slug',
70
+ options,
71
+ runNestedRules: () => [],
72
+ };
73
+ }
74
+ //# sourceMappingURL=slug.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.test.js","sourceRoot":"","sources":["../../../../src/validator/constraints/string/slug.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QAE7C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAEhD,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,mBAAmB,EAAE;QACpD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;QACrC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;QAC1C,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE;QAC9C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE;QAC9C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE;QAC/C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,EAAE;QACnD,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;KACrC,CAAC,CAAC,kCAAkC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAExC,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5B,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,iCAAiC;YAC1C,KAAK;SACN,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;QAElC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAErC,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5B,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,iCAAiC;YAC1C,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,OAAO,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE5C,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAE9E,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5B,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,iBAAiB;YAC1B,KAAK,EAAE,cAAc;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,EAAE;YAC9C,UAAU,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;SAC5C,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAEnD,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,aAAa,CAAC,KAAc,EAAE,UAA6B,EAAE;IACpE,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;QACrB,KAAK;QACL,UAAU,EAAE,MAAM;QAClB,OAAO;QACP,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE;KACzB,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  ]
19
19
  }
20
20
  },
21
- "version": "2.13.0",
21
+ "version": "2.14.1",
22
22
  "description": "A NodeJS framework for lazy developers",
23
23
  "keywords": [
24
24
  "koala",
@@ -61,8 +61,7 @@
61
61
  "@koa/router": "^15.1.1",
62
62
  "@koa/send": "^6.0.0",
63
63
  "@types/koa": "^3.0.0",
64
- "@types/stack-trace": "^0.0.33",
65
- "@types/supertest": "^6.0.3",
64
+ "@types/supertest": "^7.2.0",
66
65
  "argon2": "^0.44.0",
67
66
  "dotenv": "^17.2.3",
68
67
  "dotenv-expand": "^12.0.3",
@@ -73,13 +72,11 @@
73
72
  },
74
73
  "devDependencies": {
75
74
  "@arethetypeswrong/cli": "^0.18.2",
76
- "@eslint/js": "^9.39.2",
75
+ "@eslint/js": "^10.0.1",
77
76
  "@vitest/coverage-v8": "^4.0.12",
78
- "eslint": "^9.39.2",
77
+ "eslint": "^10.1.0",
79
78
  "eslint-config-prettier": "^10.1.8",
80
- "eslint-plugin-import": "^2.32.0",
81
79
  "eslint-plugin-prettier": "^5.5.4",
82
- "eslint-plugin-promise": "^7.2.1",
83
80
  "globals": "^17.3.0",
84
81
  "jiti": "^2.6.1",
85
82
  "prettier": "^3.7.4",
@@ -1 +0,0 @@
1
- {"version":3,"file":"ApplicationFactory.d.ts","sourceRoot":"","sources":["../../src/Application/ApplicationFactory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAM5C,wBAAgB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAuBvD"}
@@ -1,52 +0,0 @@
1
- import Router from '@koa/router';
2
- import Koa from 'koa';
3
- import { koaBody } from 'koa-body';
4
- import { extendResponse } from '../Application/Response.js';
5
- import { serveStaticFiles } from '../Http/Files/index.js';
6
- import { httpKernel } from '../Kernel/index.js';
7
- import { getRoutes } from '../Routing/index.js';
8
- export function create(config) {
9
- const app = new Koa();
10
- app.scope = app.context;
11
- app.use(extendResponse);
12
- app.use(httpKernel);
13
- if (undefined !== config.globalMiddleware) {
14
- registerGlobalMiddleware(app, config.globalMiddleware);
15
- }
16
- app.use(serveStaticFiles(config.staticFiles));
17
- // Register routes
18
- const router = createRouter();
19
- app.use(router.routes());
20
- app.use(router.allowedMethods());
21
- if (undefined !== config.eventSubscribers) {
22
- registerEventSubscribers(app, config.eventSubscribers);
23
- }
24
- return app;
25
- }
26
- function createRouter() {
27
- const router = new Router();
28
- for (const route of getRoutes()) {
29
- const middlewareStack = [...route.middleware, route.handler];
30
- for (const method of route.methods) {
31
- const routeMiddleware = route.parseBody ? [koaBody(route.bodyOptions), ...middlewareStack] : middlewareStack;
32
- router[method](route.path, ...routeMiddleware);
33
- }
34
- }
35
- return router;
36
- }
37
- function registerGlobalMiddleware(app, middleware) {
38
- for (const mw of middleware) {
39
- app.use(mw);
40
- }
41
- }
42
- function registerEventSubscribers(app, map) {
43
- for (const [event, subscribers] of Object.entries(map)) {
44
- if (Array.isArray(subscribers)) {
45
- for (const subscriber of subscribers)
46
- app.on(event, subscriber);
47
- continue;
48
- }
49
- app.on(event, subscribers);
50
- }
51
- }
52
- //# sourceMappingURL=ApplicationFactory.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ApplicationFactory.js","sourceRoot":"","sources":["../../src/Application/ApplicationFactory.ts"],"names":[],"mappings":"AAAA,OAAO,MAA+B,MAAM,aAAa,CAAC;AAC1D,OAAO,GAAgE,MAAM,KAAK,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAwB,UAAU,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,UAAU,MAAM,CAAC,MAAmB;IACxC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiB,CAAC;IACrC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC;IAExB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEpB,IAAI,SAAS,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1C,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAE9C,kBAAkB;IAClB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACzB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IAEjC,IAAI,SAAS,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1C,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,EAAE,CAAC;QAChC,MAAM,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAE7D,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;YAC7G,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAI,eAA0E,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAgB,EAAE,UAA4B;IAC9E,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,GAAgB,EAAE,GAAwD;IAC1G,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,KAAK,MAAM,UAAU,IAAI,WAAW;gBAAE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,UAAqD,CAAC,CAAC;YAC3G,SAAS;QACX,CAAC;QAED,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,WAAsD,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=ApplicationFactory.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ApplicationFactory.test.d.ts","sourceRoot":"","sources":["../../src/Application/ApplicationFactory.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ApplicationFactory.test.js","sourceRoot":"","sources":["../../src/Application/ApplicationFactory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEvC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5B,CAAC,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- import { type Next } from 'koa';
2
- import { type HttpScope } from '../Http/index.js';
3
- export declare function extendResponse(scope: HttpScope, next: Next): Promise<void>;
4
- //# sourceMappingURL=Response.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Response.d.ts","sourceRoot":"","sources":["../../src/Application/Response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE3D,wBAAsB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhF"}
@@ -1,14 +0,0 @@
1
- export async function extendResponse(scope, next) {
2
- scope.response.setHeader = function (name, value) {
3
- scope.set(name, value);
4
- return this;
5
- };
6
- scope.response.withHeaders = function (headers) {
7
- for (const [name, value] of Object.entries(headers)) {
8
- scope.set(name, value);
9
- }
10
- return this;
11
- };
12
- await next();
13
- }
14
- //# sourceMappingURL=Response.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Response.js","sourceRoot":"","sources":["../../src/Application/Response.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAgB,EAAE,IAAU;IAC/D,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,UAAU,IAAY,EAAE,KAAwB;QACzE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,UAAU,OAA0C;QAC/E,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,IAAI,EAAE,CAAC;AACf,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Response.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Response.test.d.ts","sourceRoot":"","sources":["../../src/Application/Response.test.ts"],"names":[],"mappings":""}
@@ -1,40 +0,0 @@
1
- import { extendResponse } from '../Application/Response.js';
2
- import { beforeEach, describe, expect, test, vi } from 'vitest';
3
- describe('Response', () => {
4
- describe('Extend response', () => {
5
- let scope;
6
- let next;
7
- beforeEach(() => {
8
- scope = { response: {}, set: vi.fn() };
9
- next = vi.fn();
10
- });
11
- test('it should extend response with setHeader method', async () => {
12
- await extendResponse(scope, next);
13
- scope.response.setHeader('Content-Type', 'application/json');
14
- expect(scope.set).toHaveBeenCalledWith('Content-Type', 'application/json');
15
- });
16
- test('response.setHeader should be chainable', async () => {
17
- await extendResponse(scope, next);
18
- const response = scope.response.setHeader('Content-Type', 'application/json');
19
- expect(response).toBe(scope.response);
20
- });
21
- test('it should extend response with withHeaders method', async () => {
22
- await extendResponse(scope, next);
23
- scope.response.withHeaders({
24
- 'Content-Type': 'application/json',
25
- 'X-Custom-Header': 'value',
26
- });
27
- expect(scope.set).toHaveBeenCalledWith('Content-Type', 'application/json');
28
- expect(scope.set).toHaveBeenCalledWith('X-Custom-Header', 'value');
29
- });
30
- test('response.withHeaders is chainable', async () => {
31
- await extendResponse(scope, next);
32
- const response = scope.response.withHeaders({
33
- 'Content-Type': 'application/json',
34
- 'X-Custom-Header': 'value',
35
- });
36
- expect(response).toBe(scope.response);
37
- });
38
- });
39
- });
40
- //# sourceMappingURL=Response.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Response.test.js","sourceRoot":"","sources":["../../src/Application/Response.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEhE,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,IAAI,KAAgB,CAAC;QACrB,IAAI,IAAU,CAAC;QAEf,UAAU,CAAC,GAAG,EAAE;YACd,KAAK,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAA0B,CAAC;YAC/D,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAElC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAE7D,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAElC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAE9E,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAElC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACzB,cAAc,EAAE,kBAAkB;gBAClC,iBAAiB,EAAE,OAAO;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAC3E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAElC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC1C,cAAc,EAAE,kBAAkB;gBAClC,iBAAiB,EAAE,OAAO;aAC3B,CAAC,CAAC;YAEH,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- export type * from '../Application/types.js';
2
- export * from '../Application/ApplicationFactory.js';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Application/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,qBAAqB,CAAC;AACzC,cAAc,kCAAkC,CAAC"}
@@ -1,2 +0,0 @@
1
- export * from '../Application/ApplicationFactory.js';
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Application/index.ts"],"names":[],"mappings":"AACA,cAAc,kCAAkC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Application/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAElD,MAAM,MAAM,WAAW,CAAC,MAAM,GAAG,QAAQ,EAAE,MAAM,GAAG,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IACrF,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/Application/types.ts"],"names":[],"mappings":""}