@kaito-http/core 3.0.0-beta.8 → 3.0.2

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.
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/stream/stream.ts
21
+ var stream_exports = {};
22
+ __export(stream_exports, {
23
+ KaitoSSEResponse: () => KaitoSSEResponse,
24
+ SSEController: () => SSEController,
25
+ sse: () => sse,
26
+ sseEventToString: () => sseEventToString,
27
+ sseFromAnyReadable: () => sseFromAnyReadable
28
+ });
29
+ module.exports = __toCommonJS(stream_exports);
30
+ var KaitoSSEResponse = class extends Response {
31
+ constructor(body, init) {
32
+ const headers = new Headers(init?.headers);
33
+ headers.set("Content-Type", "text/event-stream");
34
+ headers.set("Cache-Control", "no-cache");
35
+ headers.set("Connection", "keep-alive");
36
+ super(body, {
37
+ ...init,
38
+ headers
39
+ });
40
+ }
41
+ async *[Symbol.asyncIterator]() {
42
+ for await (const chunk of this.body) {
43
+ yield chunk;
44
+ }
45
+ }
46
+ };
47
+ function sseEventToString(event) {
48
+ let result = "";
49
+ if (event.event) {
50
+ result += `event:${event.event}
51
+ `;
52
+ }
53
+ if (event.id) {
54
+ result += `id:${event.id}
55
+ `;
56
+ }
57
+ if (event.retry) {
58
+ result += `retry:${event.retry}
59
+ `;
60
+ }
61
+ if (event.data !== void 0) {
62
+ result += `data:${JSON.stringify(event.data)}`;
63
+ }
64
+ return result;
65
+ }
66
+ var SSEController = class {
67
+ controller;
68
+ constructor(controller) {
69
+ this.controller = controller;
70
+ }
71
+ enqueue(event) {
72
+ this.controller.enqueue(sseEventToString(event) + "\n\n");
73
+ }
74
+ close() {
75
+ this.controller.close();
76
+ }
77
+ [Symbol.dispose]() {
78
+ this.close();
79
+ }
80
+ };
81
+ function sseFromSource(source) {
82
+ const start = source.start;
83
+ const pull = source.pull;
84
+ const cancel = source.cancel;
85
+ const readable = new ReadableStream({
86
+ ...cancel ? { cancel } : {},
87
+ ...start ? {
88
+ start: async (controller) => {
89
+ await start(new SSEController(controller));
90
+ }
91
+ } : {},
92
+ ...pull ? {
93
+ pull: async (controller) => {
94
+ await pull(new SSEController(controller));
95
+ }
96
+ } : {}
97
+ });
98
+ return new KaitoSSEResponse(readable);
99
+ }
100
+ function sse(source) {
101
+ const evaluated = typeof source === "function" ? source() : source;
102
+ if ("next" in evaluated) {
103
+ const generator = evaluated;
104
+ return sseFromSource({
105
+ async start(controller) {
106
+ try {
107
+ for await (const event of generator) {
108
+ controller.enqueue(event);
109
+ }
110
+ } finally {
111
+ controller.close();
112
+ }
113
+ }
114
+ });
115
+ } else {
116
+ return sseFromSource(evaluated);
117
+ }
118
+ }
119
+ function sseFromAnyReadable(stream, transform) {
120
+ const transformer = new TransformStream({
121
+ transform: (chunk, controller) => {
122
+ controller.enqueue(transform(chunk));
123
+ }
124
+ });
125
+ return sse(stream.pipeThrough(transformer));
126
+ }
127
+ // Annotate the CommonJS export names for ESM import in node:
128
+ 0 && (module.exports = {
129
+ KaitoSSEResponse,
130
+ SSEController,
131
+ sse,
132
+ sseEventToString,
133
+ sseFromAnyReadable
134
+ });
@@ -0,0 +1,36 @@
1
+ declare class KaitoSSEResponse<_T> extends Response {
2
+ constructor(body: ReadableStream<string>, init?: ResponseInit);
3
+ [Symbol.asyncIterator](): AsyncGenerator<Uint8Array<ArrayBufferLike>, void, unknown>;
4
+ }
5
+ type SSEEvent<T, E extends string> = ({
6
+ data: T;
7
+ event?: E | undefined;
8
+ } | {
9
+ data?: T | undefined;
10
+ event: E;
11
+ }) & {
12
+ retry?: number;
13
+ id?: string;
14
+ };
15
+ /**
16
+ * Converts an SSE Event into a string, ready for sending to the client
17
+ * @param event The SSE Event
18
+ * @returns A stringified version
19
+ */
20
+ declare function sseEventToString(event: SSEEvent<unknown, string>): string;
21
+ declare class SSEController<U, E extends string> implements Disposable {
22
+ private readonly controller;
23
+ constructor(controller: ReadableStreamDefaultController<string>);
24
+ enqueue(event: SSEEvent<U, E>): void;
25
+ close(): void;
26
+ [Symbol.dispose](): void;
27
+ }
28
+ interface SSESource<U, E extends string> {
29
+ cancel?: UnderlyingSourceCancelCallback;
30
+ start?(controller: SSEController<U, E>): Promise<void>;
31
+ pull?(controller: SSEController<U, E>): Promise<void>;
32
+ }
33
+ declare function sse<U, E extends string, T extends SSEEvent<U, E>>(source: SSESource<U, E> | AsyncGenerator<T, unknown, unknown> | (() => AsyncGenerator<T, unknown, unknown>)): KaitoSSEResponse<T>;
34
+ declare function sseFromAnyReadable<R, U, E extends string>(stream: ReadableStream<R>, transform: (chunk: R) => SSEEvent<U, E>): KaitoSSEResponse<SSEEvent<U, E>>;
35
+
36
+ export { KaitoSSEResponse, SSEController, type SSEEvent, type SSESource, sse, sseEventToString, sseFromAnyReadable };
@@ -0,0 +1,36 @@
1
+ declare class KaitoSSEResponse<_T> extends Response {
2
+ constructor(body: ReadableStream<string>, init?: ResponseInit);
3
+ [Symbol.asyncIterator](): AsyncGenerator<Uint8Array<ArrayBufferLike>, void, unknown>;
4
+ }
5
+ type SSEEvent<T, E extends string> = ({
6
+ data: T;
7
+ event?: E | undefined;
8
+ } | {
9
+ data?: T | undefined;
10
+ event: E;
11
+ }) & {
12
+ retry?: number;
13
+ id?: string;
14
+ };
15
+ /**
16
+ * Converts an SSE Event into a string, ready for sending to the client
17
+ * @param event The SSE Event
18
+ * @returns A stringified version
19
+ */
20
+ declare function sseEventToString(event: SSEEvent<unknown, string>): string;
21
+ declare class SSEController<U, E extends string> implements Disposable {
22
+ private readonly controller;
23
+ constructor(controller: ReadableStreamDefaultController<string>);
24
+ enqueue(event: SSEEvent<U, E>): void;
25
+ close(): void;
26
+ [Symbol.dispose](): void;
27
+ }
28
+ interface SSESource<U, E extends string> {
29
+ cancel?: UnderlyingSourceCancelCallback;
30
+ start?(controller: SSEController<U, E>): Promise<void>;
31
+ pull?(controller: SSEController<U, E>): Promise<void>;
32
+ }
33
+ declare function sse<U, E extends string, T extends SSEEvent<U, E>>(source: SSESource<U, E> | AsyncGenerator<T, unknown, unknown> | (() => AsyncGenerator<T, unknown, unknown>)): KaitoSSEResponse<T>;
34
+ declare function sseFromAnyReadable<R, U, E extends string>(stream: ReadableStream<R>, transform: (chunk: R) => SSEEvent<U, E>): KaitoSSEResponse<SSEEvent<U, E>>;
35
+
36
+ export { KaitoSSEResponse, SSEController, type SSEEvent, type SSESource, sse, sseEventToString, sseFromAnyReadable };
@@ -0,0 +1,105 @@
1
+ // src/stream/stream.ts
2
+ var KaitoSSEResponse = class extends Response {
3
+ constructor(body, init) {
4
+ const headers = new Headers(init?.headers);
5
+ headers.set("Content-Type", "text/event-stream");
6
+ headers.set("Cache-Control", "no-cache");
7
+ headers.set("Connection", "keep-alive");
8
+ super(body, {
9
+ ...init,
10
+ headers
11
+ });
12
+ }
13
+ async *[Symbol.asyncIterator]() {
14
+ for await (const chunk of this.body) {
15
+ yield chunk;
16
+ }
17
+ }
18
+ };
19
+ function sseEventToString(event) {
20
+ let result = "";
21
+ if (event.event) {
22
+ result += `event:${event.event}
23
+ `;
24
+ }
25
+ if (event.id) {
26
+ result += `id:${event.id}
27
+ `;
28
+ }
29
+ if (event.retry) {
30
+ result += `retry:${event.retry}
31
+ `;
32
+ }
33
+ if (event.data !== void 0) {
34
+ result += `data:${JSON.stringify(event.data)}`;
35
+ }
36
+ return result;
37
+ }
38
+ var SSEController = class {
39
+ controller;
40
+ constructor(controller) {
41
+ this.controller = controller;
42
+ }
43
+ enqueue(event) {
44
+ this.controller.enqueue(sseEventToString(event) + "\n\n");
45
+ }
46
+ close() {
47
+ this.controller.close();
48
+ }
49
+ [Symbol.dispose]() {
50
+ this.close();
51
+ }
52
+ };
53
+ function sseFromSource(source) {
54
+ const start = source.start;
55
+ const pull = source.pull;
56
+ const cancel = source.cancel;
57
+ const readable = new ReadableStream({
58
+ ...cancel ? { cancel } : {},
59
+ ...start ? {
60
+ start: async (controller) => {
61
+ await start(new SSEController(controller));
62
+ }
63
+ } : {},
64
+ ...pull ? {
65
+ pull: async (controller) => {
66
+ await pull(new SSEController(controller));
67
+ }
68
+ } : {}
69
+ });
70
+ return new KaitoSSEResponse(readable);
71
+ }
72
+ function sse(source) {
73
+ const evaluated = typeof source === "function" ? source() : source;
74
+ if ("next" in evaluated) {
75
+ const generator = evaluated;
76
+ return sseFromSource({
77
+ async start(controller) {
78
+ try {
79
+ for await (const event of generator) {
80
+ controller.enqueue(event);
81
+ }
82
+ } finally {
83
+ controller.close();
84
+ }
85
+ }
86
+ });
87
+ } else {
88
+ return sseFromSource(evaluated);
89
+ }
90
+ }
91
+ function sseFromAnyReadable(stream, transform) {
92
+ const transformer = new TransformStream({
93
+ transform: (chunk, controller) => {
94
+ controller.enqueue(transform(chunk));
95
+ }
96
+ });
97
+ return sse(stream.pipeThrough(transformer));
98
+ }
99
+ export {
100
+ KaitoSSEResponse,
101
+ SSEController,
102
+ sse,
103
+ sseEventToString,
104
+ sseFromAnyReadable
105
+ };
package/package.json CHANGED
@@ -1,17 +1,27 @@
1
1
  {
2
2
  "name": "@kaito-http/core",
3
- "version": "3.0.0-beta.8",
3
+ "version": "3.0.2",
4
4
  "type": "module",
5
5
  "author": "Alistair Smith <hi@alistair.sh>",
6
6
  "description": "Functional HTTP Framework for TypeScript",
7
7
  "scripts": {
8
- "build": "tsup"
8
+ "build": "tsup",
9
+ "attw": "attw --profile node16 --pack .",
10
+ "test": "node --test --import=tsx ./src/**/*.test.ts"
9
11
  },
10
12
  "exports": {
11
13
  "./package.json": "./package.json",
12
14
  ".": {
13
15
  "import": "./dist/index.js",
14
16
  "require": "./dist/index.cjs"
17
+ },
18
+ "./stream": {
19
+ "import": "./dist/stream/stream.js",
20
+ "require": "./dist/stream/stream.cjs"
21
+ },
22
+ "./cors": {
23
+ "import": "./dist/cors/cors.js",
24
+ "require": "./dist/cors/cors.cjs"
15
25
  }
16
26
  },
17
27
  "homepage": "https://github.com/kaito-http/kaito",
@@ -23,11 +33,10 @@
23
33
  ],
24
34
  "license": "MIT",
25
35
  "devDependencies": {
26
- "@types/content-type": "^1.1.8",
27
- "@types/cookie": "^0.6.0",
28
- "@types/node": "^22.7.4",
29
- "tsup": "^8.3.0",
30
- "typescript": "^5.6.2"
36
+ "@arethetypeswrong/cli": "^0.17.2",
37
+ "@types/node": "^22.10.2",
38
+ "tsup": "^8.3.5",
39
+ "typescript": "^5.7.2"
31
40
  },
32
41
  "files": [
33
42
  "package.json",
@@ -36,11 +45,5 @@
36
45
  ],
37
46
  "bugs": {
38
47
  "url": "https://github.com/kaito-http/kaito/issues"
39
- },
40
- "dependencies": {
41
- "content-type": "^1.0.5",
42
- "cookie": "^0.6.0",
43
- "find-my-way": "^9.1.0",
44
- "raw-body": "^3.0.0"
45
48
  }
46
49
  }