@mpen/routekit 0.1.0 → 0.1.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 (133) hide show
  1. package/dist/bin.d.mts +4 -0
  2. package/dist/client/react.d.mts +178 -0
  3. package/dist/client/react.mjs +142 -0
  4. package/dist/client.d.mts +433 -0
  5. package/dist/client.mjs +264 -0
  6. package/dist/content-BuDOmhH_.mjs +102 -0
  7. package/dist/core-CzUCxvGk.d.mts +140 -0
  8. package/dist/core-DbmQauwS.mjs +81 -0
  9. package/dist/handlers.d.mts +72 -0
  10. package/dist/handlers.mjs +153 -0
  11. package/dist/index.d.mts +3 -0
  12. package/dist/index.mjs +1152 -0
  13. package/dist/middleware.d.mts +388 -0
  14. package/dist/middleware.mjs +1222 -0
  15. package/dist/request-Dn0zc-xm.mjs +1025 -0
  16. package/dist/response/content.d.mts +79 -0
  17. package/dist/response/content.mjs +2 -0
  18. package/dist/response/json-rpc.d.mts +1 -0
  19. package/dist/response/json-rpc.mjs +1 -0
  20. package/dist/response/problem/valibot.d.mts +230 -0
  21. package/dist/response/problem/valibot.mjs +258 -0
  22. package/dist/response/problem.d.mts +415 -0
  23. package/dist/response/problem.mjs +183 -0
  24. package/dist/response/status.d.mts +45 -0
  25. package/dist/response/status.mjs +2 -0
  26. package/dist/responses-B379Ep9Y.d.mts +296 -0
  27. package/dist/responses-BpVrgeYi.mjs +101 -0
  28. package/dist/router-Cwb7ak0J.d.mts +1819 -0
  29. package/dist/routes.d.mts +282 -0
  30. package/dist/routes.mjs +311 -0
  31. package/dist/status-C-8mw-FB.mjs +59 -0
  32. package/dist/valibot-D7liFYyB.d.mts +290 -0
  33. package/dist/valibot-Du97X-TS.mjs +326 -0
  34. package/package.json +8 -2
  35. package/src/bin/gen-api-client.test.ts +0 -70
  36. package/src/bin/gen-api-client.ts +0 -986
  37. package/src/client/headers.ts +0 -31
  38. package/src/client/index.ts +0 -8
  39. package/src/client/promise.ts +0 -11
  40. package/src/client/react/index.test.tsx +0 -266
  41. package/src/client/react/index.ts +0 -431
  42. package/src/client/responses.test.ts +0 -151
  43. package/src/client/responses.ts +0 -278
  44. package/src/client/transport.ts +0 -74
  45. package/src/client/transports/body-codec.ts +0 -61
  46. package/src/client/transports/fetch.ts +0 -113
  47. package/src/client/tsconfig.json +0 -9
  48. package/src/client/types.ts +0 -15
  49. package/src/client/url.ts +0 -31
  50. package/src/index.ts +0 -63
  51. package/src/router/fetch-types.ts +0 -13
  52. package/src/router/handlers/index.ts +0 -2
  53. package/src/router/handlers/openapi/index.ts +0 -2
  54. package/src/router/handlers/openapi/openapi.ts +0 -293
  55. package/src/router/integration/zod-openapi.test.ts +0 -74
  56. package/src/router/lib/charset.test.ts +0 -22
  57. package/src/router/lib/charset.ts +0 -133
  58. package/src/router/lib/collections.ts +0 -3
  59. package/src/router/lib/format.test.ts +0 -67
  60. package/src/router/lib/format.ts +0 -35
  61. package/src/router/lib/host.ts +0 -4
  62. package/src/router/lib/json-schema.ts +0 -6
  63. package/src/router/lib/media-type.test.ts +0 -122
  64. package/src/router/lib/media-type.ts +0 -289
  65. package/src/router/lib/pathname.test.ts +0 -18
  66. package/src/router/lib/pathname.ts +0 -19
  67. package/src/router/lib/route-names.ts +0 -70
  68. package/src/router/lib/route-normalize.test.ts +0 -36
  69. package/src/router/lib/route-normalize.ts +0 -67
  70. package/src/router/lib/schema-merge.ts +0 -56
  71. package/src/router/middleware/accept-ctx.test.ts +0 -33
  72. package/src/router/middleware/accept-ctx.ts +0 -12
  73. package/src/router/middleware/body-limit.test.ts +0 -112
  74. package/src/router/middleware/body-limit.ts +0 -121
  75. package/src/router/middleware/content-type-context.ts +0 -0
  76. package/src/router/middleware/cors.test.ts +0 -269
  77. package/src/router/middleware/cors.ts +0 -490
  78. package/src/router/middleware/csrf.test.ts +0 -106
  79. package/src/router/middleware/csrf.ts +0 -192
  80. package/src/router/middleware/define.ts +0 -249
  81. package/src/router/middleware/index.ts +0 -34
  82. package/src/router/middleware/jsxhtml-response.ts +0 -0
  83. package/src/router/middleware/oas-swagger.ts +0 -0
  84. package/src/router/middleware/rate-limit.test.ts +0 -886
  85. package/src/router/middleware/rate-limit.ts +0 -920
  86. package/src/router/middleware/request-id-ctx.test.ts +0 -183
  87. package/src/router/middleware/request-id-ctx.ts +0 -135
  88. package/src/router/middleware/request-logger-format.test.ts +0 -16
  89. package/src/router/middleware/request-logger-format.ts +0 -269
  90. package/src/router/middleware/request-logger.test.ts +0 -267
  91. package/src/router/middleware/request-logger.ts +0 -131
  92. package/src/router/middleware/start-time-ctx.ts +0 -5
  93. package/src/router/request.ts +0 -611
  94. package/src/router/response/core.ts +0 -181
  95. package/src/router/response/directives.ts +0 -233
  96. package/src/router/response/formats/content/bodyless.ts +0 -54
  97. package/src/router/response/formats/content/content.ts +0 -79
  98. package/src/router/response/formats/content/index.ts +0 -2
  99. package/src/router/response/formats/json-rpc/index.ts +0 -2
  100. package/src/router/response/formats/problem/badRequest.ts +0 -90
  101. package/src/router/response/formats/problem/conflict.ts +0 -90
  102. package/src/router/response/formats/problem/created.ts +0 -40
  103. package/src/router/response/formats/problem/index.ts +0 -27
  104. package/src/router/response/formats/problem/notFound.ts +0 -90
  105. package/src/router/response/formats/problem/permissionDenied.ts +0 -90
  106. package/src/router/response/formats/problem/problem.test.ts +0 -888
  107. package/src/router/response/formats/problem/rateLimited.ts +0 -90
  108. package/src/router/response/formats/problem/responses.ts +0 -219
  109. package/src/router/response/formats/problem/root-errors.ts +0 -48
  110. package/src/router/response/formats/problem/sessionExpired.ts +0 -90
  111. package/src/router/response/formats/problem/types.ts +0 -170
  112. package/src/router/response/formats/problem/unauthenticated.ts +0 -90
  113. package/src/router/response/formats/problem/valibot.ts +0 -410
  114. package/src/router/response/formats/status/index.ts +0 -1
  115. package/src/router/response/formats/status/responses.ts +0 -59
  116. package/src/router/response/formats/status/status.test.ts +0 -21
  117. package/src/router/response/framers.ts +0 -85
  118. package/src/router/response/index.ts +0 -28
  119. package/src/router/response/openapi.test.ts +0 -96
  120. package/src/router/response/openapi.ts +0 -1
  121. package/src/router/response/serializers.ts +0 -66
  122. package/src/router/response/stream.ts +0 -35
  123. package/src/router/router.test.ts +0 -1571
  124. package/src/router/router.ts +0 -1965
  125. package/src/router/routes/index.ts +0 -46
  126. package/src/router/routes/valibot/index.ts +0 -18
  127. package/src/router/routes/valibot/valibot.ts +0 -1393
  128. package/src/router/routes/valibot.test.ts +0 -286
  129. package/src/router/routes/zod/index.ts +0 -18
  130. package/src/router/routes/zod/zod.ts +0 -1318
  131. package/src/router/routes/zod.test.ts +0 -280
  132. package/src/router/server-interface.ts +0 -31
  133. package/src/router/types.ts +0 -657
@@ -1,96 +0,0 @@
1
- #!/usr/bin/env -S bun test
2
- import { describe, expect, it } from 'bun:test'
3
- import { HttpMethod } from '@mpen/http'
4
- import { Router } from '../router'
5
- import { openapi } from '../handlers/openapi'
6
-
7
- describe('openapi', () => {
8
- it('builds OpenAPI paths from route schemas and metadata', async () => {
9
- const router = new Router()
10
- router.add({
11
- path: '/users/:id',
12
- method: HttpMethod.GET,
13
- schema: {
14
- request: {
15
- path: {
16
- type: 'object',
17
- properties: {
18
- id: { type: 'string' },
19
- },
20
- required: ['id'],
21
- },
22
- },
23
- response: {
24
- body: {
25
- 200: {
26
- type: 'object',
27
- properties: {
28
- id: { type: 'string' },
29
- email: { type: 'string', format: 'email' },
30
- },
31
- required: ['id', 'email'],
32
- },
33
- },
34
- },
35
- },
36
- meta: {
37
- openapi: {
38
- summary: 'Get user',
39
- responses: {
40
- 404: { description: 'Not found' },
41
- },
42
- },
43
- },
44
- handler: () => new Response('ok'),
45
- })
46
-
47
- router.add({
48
- path: '/swagger.json',
49
- method: HttpMethod.GET,
50
- handler: openapi({
51
- info: {
52
- title: 'Example API',
53
- version: '1.0.0',
54
- description: 'Demo API',
55
- },
56
- servers: [{ url: 'https://api.example.com' }],
57
- components: {
58
- schemas: {
59
- User: {
60
- type: 'object',
61
- required: ['id', 'email'],
62
- properties: {
63
- id: { type: 'string' },
64
- email: { type: 'string', format: 'email' },
65
- },
66
- },
67
- },
68
- },
69
- security: [{ bearerAuth: [] }],
70
- }),
71
- })
72
-
73
- const response = await router.fetch(new Request('https://example.com/swagger.json'))
74
- const document = (await response.json()) as any
75
-
76
- expect(document.openapi).toBe('3.0.3')
77
- expect(document.info).toEqual({
78
- title: 'Example API',
79
- version: '1.0.0',
80
- description: 'Demo API',
81
- })
82
- expect(document.servers).toEqual([{ url: 'https://api.example.com' }])
83
- expect(document.paths['/users/{id}'].get.summary).toBe('Get user')
84
- expect(document.paths['/users/{id}'].get.responses['200'].description).toBe('OK')
85
- expect(document.paths['/users/{id}'].get.parameters).toEqual([
86
- {
87
- name: 'id',
88
- in: 'path',
89
- required: true,
90
- schema: { type: 'string' },
91
- },
92
- ])
93
- expect(document.components.schemas.User.properties.email.format).toBe('email')
94
- expect(document.security).toEqual([{ bearerAuth: [] }])
95
- })
96
- })
@@ -1 +0,0 @@
1
- export * from '../handlers/openapi/openapi'
@@ -1,66 +0,0 @@
1
- import { CommonContentTypes } from '@mpen/http'
2
- import type { RouterBodyInit } from '../fetch-types'
3
-
4
- type MaybePromise<T> = T | Promise<T>
5
-
6
- /**
7
- * Serializer used by the router when a logical response has no explicit `Content-Type`.
8
- *
9
- * @example
10
- * ```ts
11
- * const json = jsonResponseBodySerializer()
12
- * ```
13
- */
14
- export interface ResponseBodySerializer<T = unknown> {
15
- /**
16
- * Media types this serializer can produce. Entries may include an Accept-style
17
- * `q` parameter for server-side preference during content negotiation.
18
- */
19
- mediaTypes: readonly string[]
20
- /**
21
- * Return `true` when this serializer can encode the provided value.
22
- *
23
- * @param value - Logical response body to inspect.
24
- * @returns Whether `value` can be serialized by this serializer.
25
- */
26
- canSerialize?(value: unknown): value is T
27
- /**
28
- * Encode a logical response body into a native Fetch response body.
29
- *
30
- * @param value - Logical response body to encode.
31
- * @returns Native response body data.
32
- */
33
- serialize(value: T): MaybePromise<RouterBodyInit | null>
34
- }
35
-
36
- /**
37
- * Create the default JSON response body serializer.
38
- *
39
- * @example
40
- * ```ts
41
- * const router = new Router().setResponseBodySerializers([jsonResponseBodySerializer()])
42
- * ```
43
- *
44
- * @returns Serializer for `application/json`.
45
- */
46
- export function jsonResponseBodySerializer(): ResponseBodySerializer<unknown> {
47
- return {
48
- mediaTypes: [CommonContentTypes.JSON],
49
- canSerialize: (_value): _value is unknown => true,
50
- serialize: (value) => (value === undefined ? null : JSON.stringify(value)),
51
- }
52
- }
53
-
54
- /**
55
- * Create the default response body serializer list.
56
- *
57
- * @example
58
- * ```ts
59
- * const serializers = defaultResponseBodySerializers()
60
- * ```
61
- *
62
- * @returns Default response body serializers.
63
- */
64
- export function defaultResponseBodySerializers(): ResponseBodySerializer[] {
65
- return [jsonResponseBodySerializer()]
66
- }
@@ -1,35 +0,0 @@
1
- export function createStartStream<R = any>(
2
- fn: (controller: ReadableStreamDefaultController<R>) => void | Promise<void>,
3
- ) {
4
- return new ReadableStream({
5
- start(controller) {
6
- fn(controller)
7
- },
8
- })
9
- }
10
-
11
- interface StreamWriter<R = any> {
12
- write(chunk: R): void
13
- // error(e?: any): void
14
- }
15
-
16
- export function createAsyncStream<R = any>(
17
- fn: (controller: StreamWriter<R>) => void | Promise<void>,
18
- ) {
19
- return new ReadableStream({
20
- start(controller) {
21
- const writer: StreamWriter<R> = {
22
- write: controller.enqueue.bind(controller),
23
- // error: controller.error.bind(controller),
24
- }
25
- Promise.try(fn, writer).then(
26
- () => {
27
- controller.close()
28
- },
29
- (err) => {
30
- controller.error(err)
31
- },
32
- )
33
- },
34
- })
35
- }