@gjsify/web-streams 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.
package/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # @gjsify/web-streams
2
+
3
+ GJS implementation of the Web Streams API (ReadableStream, WritableStream, TransformStream).
4
+
5
+ Part of the [gjsify](https://github.com/gjsify/gjsify) project — Node.js and Web APIs for GJS (GNOME JavaScript).
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install @gjsify/web-streams
11
+ # or
12
+ yarn add @gjsify/web-streams
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```typescript
18
+ import { ReadableStream, WritableStream, TransformStream } from '@gjsify/web-streams';
19
+
20
+ const readable = new ReadableStream({
21
+ start(controller) {
22
+ controller.enqueue('hello');
23
+ controller.close();
24
+ }
25
+ });
26
+ ```
27
+
28
+ ## License
29
+
30
+ MIT
@@ -0,0 +1,121 @@
1
+ import { WritableStream } from "./writable-stream.js";
2
+ import { ReadableStream } from "./readable-stream.js";
3
+ import { TransformStream } from "./transform-stream.js";
4
+ import { ByteLengthQueuingStrategy, CountQueuingStrategy } from "./queuing-strategies.js";
5
+ import { TextEncoderStream } from "./text-encoder-stream.js";
6
+ import { TextDecoderStream } from "./text-decoder-stream.js";
7
+ function isNativeStreamUsable(Ctor, method) {
8
+ try {
9
+ if (typeof Ctor !== "function") return false;
10
+ return typeof Ctor.prototype[method] === "function";
11
+ } catch {
12
+ return false;
13
+ }
14
+ }
15
+ const _ReadableStream = isNativeStreamUsable(globalThis.ReadableStream, "getReader") ? globalThis.ReadableStream : ReadableStream;
16
+ const _WritableStream = isNativeStreamUsable(globalThis.WritableStream, "getWriter") ? globalThis.WritableStream : WritableStream;
17
+ const _TransformStream = isNativeStreamUsable(globalThis.TransformStream, "readable") ? globalThis.TransformStream : TransformStream;
18
+ const _ByteLengthQueuingStrategy = typeof globalThis.ByteLengthQueuingStrategy === "function" ? globalThis.ByteLengthQueuingStrategy : ByteLengthQueuingStrategy;
19
+ const _CountQueuingStrategy = typeof globalThis.CountQueuingStrategy === "function" ? globalThis.CountQueuingStrategy : CountQueuingStrategy;
20
+ const _TextEncoderStream = typeof globalThis.TextEncoderStream === "function" ? globalThis.TextEncoderStream : TextEncoderStream;
21
+ const _TextDecoderStream = typeof globalThis.TextDecoderStream === "function" ? globalThis.TextDecoderStream : TextDecoderStream;
22
+ if (!isNativeStreamUsable(globalThis.ReadableStream, "getReader")) {
23
+ globalThis.ReadableStream = ReadableStream;
24
+ }
25
+ if (!isNativeStreamUsable(globalThis.WritableStream, "getWriter")) {
26
+ globalThis.WritableStream = WritableStream;
27
+ }
28
+ if (!isNativeStreamUsable(globalThis.TransformStream, "readable")) {
29
+ globalThis.TransformStream = TransformStream;
30
+ }
31
+ if (typeof globalThis.ByteLengthQueuingStrategy === "undefined") {
32
+ globalThis.ByteLengthQueuingStrategy = ByteLengthQueuingStrategy;
33
+ }
34
+ if (typeof globalThis.CountQueuingStrategy === "undefined") {
35
+ globalThis.CountQueuingStrategy = CountQueuingStrategy;
36
+ }
37
+ if (typeof globalThis.TextEncoderStream === "undefined") {
38
+ globalThis.TextEncoderStream = TextEncoderStream;
39
+ }
40
+ if (typeof globalThis.TextDecoderStream === "undefined") {
41
+ globalThis.TextDecoderStream = TextDecoderStream;
42
+ }
43
+ import { WritableStreamDefaultWriter as WritableStreamDefaultWriter2, WritableStreamDefaultController as WritableStreamDefaultController2 } from "./writable-stream.js";
44
+ import { ReadableStreamDefaultReader as ReadableStreamDefaultReader2, ReadableStreamDefaultController as ReadableStreamDefaultController2 } from "./readable-stream.js";
45
+ import { TransformStreamDefaultController as TransformStreamDefaultController2 } from "./transform-stream.js";
46
+ import {
47
+ isWritableStream,
48
+ isWritableStreamLocked,
49
+ writableStreamAbort,
50
+ writableStreamClose,
51
+ writableStreamCloseQueuedOrInFlight,
52
+ writableStreamDefaultWriterCloseWithErrorPropagation,
53
+ writableStreamDefaultControllerErrorIfNeeded,
54
+ createWritableStream
55
+ } from "./writable-stream.js";
56
+ import {
57
+ isReadableStream,
58
+ isReadableStreamLocked,
59
+ readableStreamCancel,
60
+ readableStreamClose,
61
+ readableStreamError,
62
+ readableStreamDefaultControllerClose,
63
+ readableStreamDefaultControllerEnqueue,
64
+ readableStreamDefaultControllerError,
65
+ readableStreamDefaultControllerGetDesiredSize,
66
+ readableStreamDefaultControllerCanCloseOrEnqueue,
67
+ readableStreamDefaultControllerHasBackpressure,
68
+ setupReadableStreamDefaultController,
69
+ createReadableStream
70
+ } from "./readable-stream.js";
71
+ import {
72
+ isTransformStream,
73
+ isTransformStreamDefaultController
74
+ } from "./transform-stream.js";
75
+ var index_default = {
76
+ WritableStream: _WritableStream,
77
+ ReadableStream: _ReadableStream,
78
+ TransformStream: _TransformStream,
79
+ ByteLengthQueuingStrategy: _ByteLengthQueuingStrategy,
80
+ CountQueuingStrategy: _CountQueuingStrategy,
81
+ TextEncoderStream: _TextEncoderStream,
82
+ TextDecoderStream: _TextDecoderStream
83
+ };
84
+ export {
85
+ _ByteLengthQueuingStrategy as ByteLengthQueuingStrategy,
86
+ _CountQueuingStrategy as CountQueuingStrategy,
87
+ _ReadableStream as ReadableStream,
88
+ ReadableStreamDefaultController2 as ReadableStreamDefaultController,
89
+ ReadableStreamDefaultReader2 as ReadableStreamDefaultReader,
90
+ _TextDecoderStream as TextDecoderStream,
91
+ _TextEncoderStream as TextEncoderStream,
92
+ _TransformStream as TransformStream,
93
+ TransformStreamDefaultController2 as TransformStreamDefaultController,
94
+ _WritableStream as WritableStream,
95
+ WritableStreamDefaultController2 as WritableStreamDefaultController,
96
+ WritableStreamDefaultWriter2 as WritableStreamDefaultWriter,
97
+ createReadableStream,
98
+ createWritableStream,
99
+ index_default as default,
100
+ isReadableStream,
101
+ isReadableStreamLocked,
102
+ isTransformStream,
103
+ isTransformStreamDefaultController,
104
+ isWritableStream,
105
+ isWritableStreamLocked,
106
+ readableStreamCancel,
107
+ readableStreamClose,
108
+ readableStreamDefaultControllerCanCloseOrEnqueue,
109
+ readableStreamDefaultControllerClose,
110
+ readableStreamDefaultControllerEnqueue,
111
+ readableStreamDefaultControllerError,
112
+ readableStreamDefaultControllerGetDesiredSize,
113
+ readableStreamDefaultControllerHasBackpressure,
114
+ readableStreamError,
115
+ setupReadableStreamDefaultController,
116
+ writableStreamAbort,
117
+ writableStreamClose,
118
+ writableStreamCloseQueuedOrInFlight,
119
+ writableStreamDefaultControllerErrorIfNeeded,
120
+ writableStreamDefaultWriterCloseWithErrorPropagation
121
+ };
@@ -0,0 +1,56 @@
1
+ const byteSizeFunction = Object.defineProperty(
2
+ (chunk) => chunk.byteLength,
3
+ "name",
4
+ { value: "size" }
5
+ );
6
+ const countSizeFunction = Object.defineProperty(
7
+ () => 1,
8
+ "name",
9
+ { value: "size" }
10
+ );
11
+ class ByteLengthQueuingStrategy {
12
+ #highWaterMark;
13
+ constructor(init) {
14
+ if (init == null || typeof init !== "object") {
15
+ throw new TypeError("init must be an object");
16
+ }
17
+ if (init.highWaterMark === void 0) {
18
+ throw new TypeError("init.highWaterMark is required");
19
+ }
20
+ this.#highWaterMark = +init.highWaterMark;
21
+ }
22
+ get highWaterMark() {
23
+ return this.#highWaterMark;
24
+ }
25
+ get size() {
26
+ return byteSizeFunction;
27
+ }
28
+ get [Symbol.toStringTag]() {
29
+ return "ByteLengthQueuingStrategy";
30
+ }
31
+ }
32
+ class CountQueuingStrategy {
33
+ #highWaterMark;
34
+ constructor(init) {
35
+ if (init == null || typeof init !== "object") {
36
+ throw new TypeError("init must be an object");
37
+ }
38
+ if (init.highWaterMark === void 0) {
39
+ throw new TypeError("init.highWaterMark is required");
40
+ }
41
+ this.#highWaterMark = +init.highWaterMark;
42
+ }
43
+ get highWaterMark() {
44
+ return this.#highWaterMark;
45
+ }
46
+ get size() {
47
+ return countSizeFunction;
48
+ }
49
+ get [Symbol.toStringTag]() {
50
+ return "CountQueuingStrategy";
51
+ }
52
+ }
53
+ export {
54
+ ByteLengthQueuingStrategy,
55
+ CountQueuingStrategy
56
+ };