@effect/platform-browser 0.29.5 → 0.29.7

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,6 @@
1
+ {
2
+ "main": "../dist/cjs/BrowserHttpClient.js",
3
+ "module": "../dist/esm/BrowserHttpClient.js",
4
+ "types": "../dist/dts/BrowserHttpClient.d.ts",
5
+ "sideEffects": []
6
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.xmlHttpRequest = exports.layerXMLHttpRequest = exports.currentXMLHttpRequest = void 0;
7
+ var internal = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./internal/http/client.js"));
8
+ function _getRequireWildcardCache(e) {
9
+ if ("function" != typeof WeakMap) return null;
10
+ var r = new WeakMap(),
11
+ t = new WeakMap();
12
+ return (_getRequireWildcardCache = function (e) {
13
+ return e ? t : r;
14
+ })(e);
15
+ }
16
+ function _interopRequireWildcard(e, r) {
17
+ if (!r && e && e.__esModule) return e;
18
+ if (null === e || "object" != typeof e && "function" != typeof e) return {
19
+ default: e
20
+ };
21
+ var t = _getRequireWildcardCache(r);
22
+ if (t && t.has(e)) return t.get(e);
23
+ var n = {
24
+ __proto__: null
25
+ },
26
+ a = Object.defineProperty && Object.getOwnPropertyDescriptor;
27
+ for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) {
28
+ var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
29
+ i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
30
+ }
31
+ return n.default = e, t && t.set(e, n), n;
32
+ }
33
+ /**
34
+ * @since 1.0.0
35
+ * @category clients
36
+ */
37
+ const xmlHttpRequest = exports.xmlHttpRequest = internal.makeXMLHttpRequest;
38
+ /**
39
+ * @since 1.0.0
40
+ * @category layers
41
+ */
42
+ const layerXMLHttpRequest = exports.layerXMLHttpRequest = internal.layerXMLHttpRequest;
43
+ /**
44
+ * @since 1.0.0
45
+ * @category fiber refs
46
+ */
47
+ const currentXMLHttpRequest = exports.currentXMLHttpRequest = internal.currentXMLHttpRequest;
48
+ //# sourceMappingURL=BrowserHttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserHttpClient.js","names":["internal","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","xmlHttpRequest","exports","makeXMLHttpRequest","layerXMLHttpRequest","currentXMLHttpRequest"],"sources":["../../src/BrowserHttpClient.ts"],"sourcesContent":[null],"mappings":";;;;;;AAMA,IAAAA,QAAA,gBAAAC,uBAAA,eAAAC,OAAA;AAAqD,SAAAC,yBAAAC,CAAA;EAAA,yBAAAC,OAAA;EAAA,IAAAC,CAAA,OAAAD,OAAA;IAAAE,CAAA,OAAAF,OAAA;EAAA,QAAAF,wBAAA,YAAAA,CAAAC,CAAA;IAAA,OAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA;EAAA,GAAAF,CAAA;AAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA;EAAA,KAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA;EAAA,aAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA;IAAAK,OAAA,EAAAL;EAAA;EAAA,IAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA;EAAA,IAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA;EAAA,IAAAQ,CAAA;MAAAC,SAAA;IAAA;IAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA;EAAA,SAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA;IAAA,IAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA;IAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA;EAAA;EAAA,OAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA;AAErD;;;;AAIO,MAAMY,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAA0BxB,QAAQ,CAAC0B,kBAAkB;AAEhF;;;;AAIO,MAAMC,mBAAmB,GAAAF,OAAA,CAAAE,mBAAA,GAAqD3B,QAAQ,CAAC2B,mBAAmB;AAEjH;;;;AAIO,MAAMC,qBAAqB,GAAAH,OAAA,CAAAG,qBAAA,GAA6C5B,QAAQ,CAAC4B,qBAAqB"}
package/dist/cjs/index.js CHANGED
@@ -3,7 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Clipboard = exports.BrowserWorkerRunner = exports.BrowserWorker = exports.BrowserRuntime = exports.BrowserKeyValueStore = void 0;
6
+ exports.Clipboard = exports.BrowserWorkerRunner = exports.BrowserWorker = exports.BrowserRuntime = exports.BrowserKeyValueStore = exports.BrowserHttpClient = void 0;
7
+ var _BrowserHttpClient = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./BrowserHttpClient.js"));
8
+ exports.BrowserHttpClient = _BrowserHttpClient;
7
9
  var _BrowserKeyValueStore = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./BrowserKeyValueStore.js"));
8
10
  exports.BrowserKeyValueStore = _BrowserKeyValueStore;
9
11
  var _BrowserRuntime = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("./BrowserRuntime.js"));
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.makeXMLHttpRequest = exports.layerXMLHttpRequest = exports.currentXMLHttpRequest = exports.IncomingMessageImpl = void 0;
7
+ var Client = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Http/Client"));
8
+ var Error = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Http/ClientError"));
9
+ var ClientResponse = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Http/ClientResponse"));
10
+ var Headers = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Http/Headers"));
11
+ var IncomingMessage = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Http/IncomingMessage"));
12
+ var UrlParams = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("@effect/platform/Http/UrlParams"));
13
+ var Effect = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Effect"));
14
+ var Either = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Either"));
15
+ var FiberRef = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/FiberRef"));
16
+ var _GlobalValue = /*#__PURE__*/require("effect/GlobalValue");
17
+ var Layer = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Layer"));
18
+ var Option = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Option"));
19
+ var Stream = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("effect/Stream"));
20
+ var HeaderParser = /*#__PURE__*/_interopRequireWildcard( /*#__PURE__*/require("multipasta/HeadersParser"));
21
+ function _getRequireWildcardCache(e) {
22
+ if ("function" != typeof WeakMap) return null;
23
+ var r = new WeakMap(),
24
+ t = new WeakMap();
25
+ return (_getRequireWildcardCache = function (e) {
26
+ return e ? t : r;
27
+ })(e);
28
+ }
29
+ function _interopRequireWildcard(e, r) {
30
+ if (!r && e && e.__esModule) return e;
31
+ if (null === e || "object" != typeof e && "function" != typeof e) return {
32
+ default: e
33
+ };
34
+ var t = _getRequireWildcardCache(r);
35
+ if (t && t.has(e)) return t.get(e);
36
+ var n = {
37
+ __proto__: null
38
+ },
39
+ a = Object.defineProperty && Object.getOwnPropertyDescriptor;
40
+ for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) {
41
+ var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;
42
+ i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];
43
+ }
44
+ return n.default = e, t && t.set(e, n), n;
45
+ }
46
+ /** @internal */
47
+ const currentXMLHttpRequest = exports.currentXMLHttpRequest = /*#__PURE__*/(0, _GlobalValue.globalValue)("@effect/platform-browser/BrowserHttpClient/currentXMLHttpRequest", () => FiberRef.unsafeMake(globalThis.XMLHttpRequest));
48
+ /** @internal */
49
+ const makeXMLHttpRequest = exports.makeXMLHttpRequest = /*#__PURE__*/Client.makeDefault(request => UrlParams.makeUrl(request.url, request.urlParams, _ => Error.RequestError({
50
+ request,
51
+ reason: "InvalidUrl",
52
+ error: _
53
+ })).pipe(Effect.zip(FiberRef.get(currentXMLHttpRequest)), Effect.flatMap(([url, XHR]) => {
54
+ const xhr = new XHR();
55
+ xhr.open(request.method, url.toString(), true);
56
+ xhr.responseType = "text";
57
+ Object.entries(request.headers).forEach(([k, v]) => {
58
+ xhr.setRequestHeader(k, v);
59
+ });
60
+ return sendBody(xhr, request).pipe(Effect.zipLeft(Effect.async(resume => {
61
+ const onChange = () => {
62
+ if (xhr.readyState >= 2) {
63
+ resume(Effect.unit);
64
+ }
65
+ };
66
+ xhr.onreadystatechange = onChange;
67
+ onChange();
68
+ })), Effect.as(new ClientResponseImpl(request, xhr)), Effect.onInterrupt(() => Effect.sync(() => xhr.abort())));
69
+ })));
70
+ const sendBody = (xhr, request) => Effect.suspend(() => {
71
+ const body = request.body;
72
+ switch (body._tag) {
73
+ case "Empty":
74
+ return Effect.sync(() => xhr.send());
75
+ case "Raw":
76
+ return Effect.sync(() => xhr.send(body.body));
77
+ case "Uint8Array":
78
+ return Effect.sync(() => xhr.send(body.body));
79
+ case "FormData":
80
+ return Effect.sync(() => xhr.send(body.formData));
81
+ case "Stream":
82
+ return Effect.matchEffect(Stream.runFold(body.stream, new Uint8Array(0), (acc, chunk) => {
83
+ const next = new Uint8Array(acc.length + chunk.length);
84
+ next.set(acc, 0);
85
+ next.set(chunk, acc.length);
86
+ return next;
87
+ }), {
88
+ onFailure: error => Effect.fail(Error.RequestError({
89
+ request,
90
+ reason: "Encode",
91
+ error
92
+ })),
93
+ onSuccess: body => Effect.sync(() => xhr.send(body))
94
+ });
95
+ }
96
+ });
97
+ const encoder = /*#__PURE__*/new TextEncoder();
98
+ /** @internal */
99
+ class IncomingMessageImpl {
100
+ source;
101
+ onError;
102
+ [IncomingMessage.TypeId];
103
+ constructor(source, onError) {
104
+ this.source = source;
105
+ this.onError = onError;
106
+ this[IncomingMessage.TypeId] = IncomingMessage.TypeId;
107
+ }
108
+ _headers;
109
+ get headers() {
110
+ if (this._headers) {
111
+ return this._headers;
112
+ }
113
+ const headers = this.source.getAllResponseHeaders();
114
+ if (headers === "") {
115
+ return Headers.empty;
116
+ }
117
+ const parser = HeaderParser.make();
118
+ const result = parser(encoder.encode(headers + "\r\n"), 0);
119
+ const parsed = result._tag === "Headers" ? Headers.fromInput(result.headers) : Headers.empty;
120
+ return this._headers = parsed;
121
+ }
122
+ get remoteAddress() {
123
+ return Option.none();
124
+ }
125
+ _textEffect;
126
+ get text() {
127
+ if (this._textEffect) {
128
+ return this._textEffect;
129
+ }
130
+ return this._textEffect = Effect.async(resume => {
131
+ if (this.source.readyState === 4) {
132
+ resume(Effect.succeed(this.source.response));
133
+ return;
134
+ }
135
+ const onReadyStateChange = () => {
136
+ if (this.source.readyState === 4) {
137
+ resume(Effect.succeed(this.source.response));
138
+ }
139
+ };
140
+ const onError = event => {
141
+ resume(Effect.fail(this.onError(event)));
142
+ };
143
+ this.source.addEventListener("readystatechange", onReadyStateChange);
144
+ this.source.addEventListener("error", onError);
145
+ return Effect.sync(() => {
146
+ this.source.removeEventListener("readystatechange", onReadyStateChange);
147
+ this.source.removeEventListener("error", onError);
148
+ });
149
+ }).pipe(Effect.cached, Effect.runSync);
150
+ }
151
+ get json() {
152
+ return Effect.tryMap(this.text, {
153
+ try: _ => _ === "" ? null : JSON.parse(_),
154
+ catch: this.onError
155
+ });
156
+ }
157
+ get urlParamsBody() {
158
+ return Effect.flatMap(this.text, _ => Effect.try({
159
+ try: () => UrlParams.fromInput(new URLSearchParams(_)),
160
+ catch: this.onError
161
+ }));
162
+ }
163
+ get stream() {
164
+ return Stream.asyncInterrupt(emit => {
165
+ let bytes = 0;
166
+ const onReadyStateChange = () => {
167
+ if (this.source.readyState === 3) {
168
+ emit.single(encoder.encode(this.source.responseText.slice(bytes)));
169
+ bytes = this.source.responseText.length;
170
+ } else if (this.source.readyState === 4) {
171
+ if (bytes < this.source.responseText.length) {
172
+ emit.single(encoder.encode(this.source.responseText.slice(bytes)));
173
+ }
174
+ emit.end();
175
+ }
176
+ };
177
+ const onError = event => {
178
+ emit.fail(this.onError(event));
179
+ };
180
+ this.source.addEventListener("readystatechange", onReadyStateChange);
181
+ this.source.addEventListener("error", onError);
182
+ onReadyStateChange();
183
+ return Either.left(Effect.sync(() => {
184
+ this.source.removeEventListener("readystatechange", onReadyStateChange);
185
+ this.source.removeEventListener("error", onError);
186
+ }));
187
+ });
188
+ }
189
+ get arrayBuffer() {
190
+ return this.text.pipe(Effect.map(_ => encoder.encode(_).buffer));
191
+ }
192
+ }
193
+ exports.IncomingMessageImpl = IncomingMessageImpl;
194
+ class ClientResponseImpl extends IncomingMessageImpl {
195
+ request;
196
+ [ClientResponse.TypeId];
197
+ constructor(request, source) {
198
+ super(source, _ => Error.ResponseError({
199
+ request,
200
+ response: this,
201
+ reason: "Decode",
202
+ error: _
203
+ }));
204
+ this.request = request;
205
+ this[ClientResponse.TypeId] = ClientResponse.TypeId;
206
+ }
207
+ get status() {
208
+ return this.source.status;
209
+ }
210
+ get formData() {
211
+ return Effect.die("Not implemented");
212
+ }
213
+ toString() {
214
+ return `ClientResponse(${this.status})`;
215
+ }
216
+ toJSON() {
217
+ return {
218
+ _tag: "ClientResponse",
219
+ status: this.status,
220
+ headers: this.headers
221
+ };
222
+ }
223
+ }
224
+ /** @internal */
225
+ const layerXMLHttpRequest = exports.layerXMLHttpRequest = /*#__PURE__*/Layer.succeed(Client.Client, makeXMLHttpRequest);
226
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","names":["Client","_interopRequireWildcard","require","Error","ClientResponse","Headers","IncomingMessage","UrlParams","Effect","Either","FiberRef","_GlobalValue","Layer","Option","Stream","HeaderParser","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","currentXMLHttpRequest","exports","globalValue","unsafeMake","globalThis","XMLHttpRequest","makeXMLHttpRequest","makeDefault","request","makeUrl","url","urlParams","_","RequestError","reason","error","pipe","zip","flatMap","XHR","xhr","open","method","toString","responseType","entries","headers","forEach","k","v","setRequestHeader","sendBody","zipLeft","async","resume","onChange","readyState","unit","onreadystatechange","as","ClientResponseImpl","onInterrupt","sync","abort","suspend","body","_tag","send","formData","matchEffect","runFold","stream","Uint8Array","acc","chunk","next","length","onFailure","fail","onSuccess","encoder","TextEncoder","IncomingMessageImpl","source","onError","TypeId","constructor","_headers","getAllResponseHeaders","empty","parser","make","result","encode","parsed","fromInput","remoteAddress","none","_textEffect","text","succeed","response","onReadyStateChange","event","addEventListener","removeEventListener","cached","runSync","json","tryMap","try","JSON","parse","catch","urlParamsBody","URLSearchParams","asyncInterrupt","emit","bytes","single","responseText","slice","end","left","arrayBuffer","map","buffer","ResponseError","status","die","toJSON","layerXMLHttpRequest"],"sources":["../../../../src/internal/http/client.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Client from "@effect/platform/Http/Client";
5
+ import type * as FiberRef from "effect/FiberRef";
6
+ import type * as Layer from "effect/Layer";
7
+ /**
8
+ * @since 1.0.0
9
+ * @category clients
10
+ */
11
+ export declare const xmlHttpRequest: Client.Client.Default;
12
+ /**
13
+ * @since 1.0.0
14
+ * @category layers
15
+ */
16
+ export declare const layerXMLHttpRequest: Layer.Layer<Client.Client.Default, never, never>;
17
+ /**
18
+ * @since 1.0.0
19
+ * @category fiber refs
20
+ */
21
+ export declare const currentXMLHttpRequest: FiberRef.FiberRef<typeof XMLHttpRequest>;
22
+ //# sourceMappingURL=BrowserHttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserHttpClient.d.ts","sourceRoot":"","sources":["../../src/BrowserHttpClient.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAG1C;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,OAAqC,CAAA;AAEhF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAgC,CAAA;AAEjH;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,cAAc,CAAkC,CAAA"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ export * as BrowserHttpClient from "./BrowserHttpClient.js";
1
5
  /**
2
6
  * @since 1.0.0
3
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AAEjE;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA;AAE/D;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,iBAAiB,MAAM,wBAAwB,CAAA;AAE3D;;GAEG;AACH,OAAO,KAAK,oBAAoB,MAAM,2BAA2B,CAAA;AAEjE;;GAEG;AACH,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AAErD;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD;;GAEG;AACH,OAAO,KAAK,mBAAmB,MAAM,0BAA0B,CAAA;AAE/D;;GAEG;AACH,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/internal/http/client.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import * as internal from "./internal/http/client.js";
2
+ /**
3
+ * @since 1.0.0
4
+ * @category clients
5
+ */
6
+ export const xmlHttpRequest = internal.makeXMLHttpRequest;
7
+ /**
8
+ * @since 1.0.0
9
+ * @category layers
10
+ */
11
+ export const layerXMLHttpRequest = internal.layerXMLHttpRequest;
12
+ /**
13
+ * @since 1.0.0
14
+ * @category fiber refs
15
+ */
16
+ export const currentXMLHttpRequest = internal.currentXMLHttpRequest;
17
+ //# sourceMappingURL=BrowserHttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserHttpClient.js","names":["internal","xmlHttpRequest","makeXMLHttpRequest","layerXMLHttpRequest","currentXMLHttpRequest"],"sources":["../../src/BrowserHttpClient.ts"],"sourcesContent":[null],"mappings":"AAMA,OAAO,KAAKA,QAAQ,MAAM,2BAA2B;AAErD;;;;AAIA,OAAO,MAAMC,cAAc,GAA0BD,QAAQ,CAACE,kBAAkB;AAEhF;;;;AAIA,OAAO,MAAMC,mBAAmB,GAAqDH,QAAQ,CAACG,mBAAmB;AAEjH;;;;AAIA,OAAO,MAAMC,qBAAqB,GAA6CJ,QAAQ,CAACI,qBAAqB"}
package/dist/esm/index.js CHANGED
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ export * as BrowserHttpClient from "./BrowserHttpClient.js";
1
5
  /**
2
6
  * @since 1.0.0
3
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["BrowserKeyValueStore","BrowserRuntime","BrowserWorker","BrowserWorkerRunner","Clipboard"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,oBAAoB,MAAM,2BAA2B;AAEjE;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,mBAAmB,MAAM,0BAA0B;AAE/D;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB"}
1
+ {"version":3,"file":"index.js","names":["BrowserHttpClient","BrowserKeyValueStore","BrowserRuntime","BrowserWorker","BrowserWorkerRunner","Clipboard"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,iBAAiB,MAAM,wBAAwB;AAE3D;;;AAGA,OAAO,KAAKC,oBAAoB,MAAM,2BAA2B;AAEjE;;;AAGA,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;AAGA,OAAO,KAAKC,aAAa,MAAM,oBAAoB;AAEnD;;;AAGA,OAAO,KAAKC,mBAAmB,MAAM,0BAA0B;AAE/D;;;AAGA,OAAO,KAAKC,SAAS,MAAM,gBAAgB"}
@@ -0,0 +1,194 @@
1
+ import * as Client from "@effect/platform/Http/Client";
2
+ import * as Error from "@effect/platform/Http/ClientError";
3
+ import * as ClientResponse from "@effect/platform/Http/ClientResponse";
4
+ import * as Headers from "@effect/platform/Http/Headers";
5
+ import * as IncomingMessage from "@effect/platform/Http/IncomingMessage";
6
+ import * as UrlParams from "@effect/platform/Http/UrlParams";
7
+ import * as Effect from "effect/Effect";
8
+ import * as Either from "effect/Either";
9
+ import * as FiberRef from "effect/FiberRef";
10
+ import { globalValue } from "effect/GlobalValue";
11
+ import * as Layer from "effect/Layer";
12
+ import * as Option from "effect/Option";
13
+ import * as Stream from "effect/Stream";
14
+ import * as HeaderParser from "multipasta/HeadersParser";
15
+ /** @internal */
16
+ export const currentXMLHttpRequest = /*#__PURE__*/globalValue("@effect/platform-browser/BrowserHttpClient/currentXMLHttpRequest", () => FiberRef.unsafeMake(globalThis.XMLHttpRequest));
17
+ /** @internal */
18
+ export const makeXMLHttpRequest = /*#__PURE__*/Client.makeDefault(request => UrlParams.makeUrl(request.url, request.urlParams, _ => Error.RequestError({
19
+ request,
20
+ reason: "InvalidUrl",
21
+ error: _
22
+ })).pipe(Effect.zip(FiberRef.get(currentXMLHttpRequest)), Effect.flatMap(([url, XHR]) => {
23
+ const xhr = new XHR();
24
+ xhr.open(request.method, url.toString(), true);
25
+ xhr.responseType = "text";
26
+ Object.entries(request.headers).forEach(([k, v]) => {
27
+ xhr.setRequestHeader(k, v);
28
+ });
29
+ return sendBody(xhr, request).pipe(Effect.zipLeft(Effect.async(resume => {
30
+ const onChange = () => {
31
+ if (xhr.readyState >= 2) {
32
+ resume(Effect.unit);
33
+ }
34
+ };
35
+ xhr.onreadystatechange = onChange;
36
+ onChange();
37
+ })), Effect.as(new ClientResponseImpl(request, xhr)), Effect.onInterrupt(() => Effect.sync(() => xhr.abort())));
38
+ })));
39
+ const sendBody = (xhr, request) => Effect.suspend(() => {
40
+ const body = request.body;
41
+ switch (body._tag) {
42
+ case "Empty":
43
+ return Effect.sync(() => xhr.send());
44
+ case "Raw":
45
+ return Effect.sync(() => xhr.send(body.body));
46
+ case "Uint8Array":
47
+ return Effect.sync(() => xhr.send(body.body));
48
+ case "FormData":
49
+ return Effect.sync(() => xhr.send(body.formData));
50
+ case "Stream":
51
+ return Effect.matchEffect(Stream.runFold(body.stream, new Uint8Array(0), (acc, chunk) => {
52
+ const next = new Uint8Array(acc.length + chunk.length);
53
+ next.set(acc, 0);
54
+ next.set(chunk, acc.length);
55
+ return next;
56
+ }), {
57
+ onFailure: error => Effect.fail(Error.RequestError({
58
+ request,
59
+ reason: "Encode",
60
+ error
61
+ })),
62
+ onSuccess: body => Effect.sync(() => xhr.send(body))
63
+ });
64
+ }
65
+ });
66
+ const encoder = /*#__PURE__*/new TextEncoder();
67
+ /** @internal */
68
+ export class IncomingMessageImpl {
69
+ source;
70
+ onError;
71
+ [IncomingMessage.TypeId];
72
+ constructor(source, onError) {
73
+ this.source = source;
74
+ this.onError = onError;
75
+ this[IncomingMessage.TypeId] = IncomingMessage.TypeId;
76
+ }
77
+ _headers;
78
+ get headers() {
79
+ if (this._headers) {
80
+ return this._headers;
81
+ }
82
+ const headers = this.source.getAllResponseHeaders();
83
+ if (headers === "") {
84
+ return Headers.empty;
85
+ }
86
+ const parser = HeaderParser.make();
87
+ const result = parser(encoder.encode(headers + "\r\n"), 0);
88
+ const parsed = result._tag === "Headers" ? Headers.fromInput(result.headers) : Headers.empty;
89
+ return this._headers = parsed;
90
+ }
91
+ get remoteAddress() {
92
+ return Option.none();
93
+ }
94
+ _textEffect;
95
+ get text() {
96
+ if (this._textEffect) {
97
+ return this._textEffect;
98
+ }
99
+ return this._textEffect = Effect.async(resume => {
100
+ if (this.source.readyState === 4) {
101
+ resume(Effect.succeed(this.source.response));
102
+ return;
103
+ }
104
+ const onReadyStateChange = () => {
105
+ if (this.source.readyState === 4) {
106
+ resume(Effect.succeed(this.source.response));
107
+ }
108
+ };
109
+ const onError = event => {
110
+ resume(Effect.fail(this.onError(event)));
111
+ };
112
+ this.source.addEventListener("readystatechange", onReadyStateChange);
113
+ this.source.addEventListener("error", onError);
114
+ return Effect.sync(() => {
115
+ this.source.removeEventListener("readystatechange", onReadyStateChange);
116
+ this.source.removeEventListener("error", onError);
117
+ });
118
+ }).pipe(Effect.cached, Effect.runSync);
119
+ }
120
+ get json() {
121
+ return Effect.tryMap(this.text, {
122
+ try: _ => _ === "" ? null : JSON.parse(_),
123
+ catch: this.onError
124
+ });
125
+ }
126
+ get urlParamsBody() {
127
+ return Effect.flatMap(this.text, _ => Effect.try({
128
+ try: () => UrlParams.fromInput(new URLSearchParams(_)),
129
+ catch: this.onError
130
+ }));
131
+ }
132
+ get stream() {
133
+ return Stream.asyncInterrupt(emit => {
134
+ let bytes = 0;
135
+ const onReadyStateChange = () => {
136
+ if (this.source.readyState === 3) {
137
+ emit.single(encoder.encode(this.source.responseText.slice(bytes)));
138
+ bytes = this.source.responseText.length;
139
+ } else if (this.source.readyState === 4) {
140
+ if (bytes < this.source.responseText.length) {
141
+ emit.single(encoder.encode(this.source.responseText.slice(bytes)));
142
+ }
143
+ emit.end();
144
+ }
145
+ };
146
+ const onError = event => {
147
+ emit.fail(this.onError(event));
148
+ };
149
+ this.source.addEventListener("readystatechange", onReadyStateChange);
150
+ this.source.addEventListener("error", onError);
151
+ onReadyStateChange();
152
+ return Either.left(Effect.sync(() => {
153
+ this.source.removeEventListener("readystatechange", onReadyStateChange);
154
+ this.source.removeEventListener("error", onError);
155
+ }));
156
+ });
157
+ }
158
+ get arrayBuffer() {
159
+ return this.text.pipe(Effect.map(_ => encoder.encode(_).buffer));
160
+ }
161
+ }
162
+ class ClientResponseImpl extends IncomingMessageImpl {
163
+ request;
164
+ [ClientResponse.TypeId];
165
+ constructor(request, source) {
166
+ super(source, _ => Error.ResponseError({
167
+ request,
168
+ response: this,
169
+ reason: "Decode",
170
+ error: _
171
+ }));
172
+ this.request = request;
173
+ this[ClientResponse.TypeId] = ClientResponse.TypeId;
174
+ }
175
+ get status() {
176
+ return this.source.status;
177
+ }
178
+ get formData() {
179
+ return Effect.die("Not implemented");
180
+ }
181
+ toString() {
182
+ return `ClientResponse(${this.status})`;
183
+ }
184
+ toJSON() {
185
+ return {
186
+ _tag: "ClientResponse",
187
+ status: this.status,
188
+ headers: this.headers
189
+ };
190
+ }
191
+ }
192
+ /** @internal */
193
+ export const layerXMLHttpRequest = /*#__PURE__*/Layer.succeed(Client.Client, makeXMLHttpRequest);
194
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","names":["Client","Error","ClientResponse","Headers","IncomingMessage","UrlParams","Effect","Either","FiberRef","globalValue","Layer","Option","Stream","HeaderParser","currentXMLHttpRequest","unsafeMake","globalThis","XMLHttpRequest","makeXMLHttpRequest","makeDefault","request","makeUrl","url","urlParams","_","RequestError","reason","error","pipe","zip","get","flatMap","XHR","xhr","open","method","toString","responseType","Object","entries","headers","forEach","k","v","setRequestHeader","sendBody","zipLeft","async","resume","onChange","readyState","unit","onreadystatechange","as","ClientResponseImpl","onInterrupt","sync","abort","suspend","body","_tag","send","formData","matchEffect","runFold","stream","Uint8Array","acc","chunk","next","length","set","onFailure","fail","onSuccess","encoder","TextEncoder","IncomingMessageImpl","source","onError","TypeId","constructor","_headers","getAllResponseHeaders","empty","parser","make","result","encode","parsed","fromInput","remoteAddress","none","_textEffect","text","succeed","response","onReadyStateChange","event","addEventListener","removeEventListener","cached","runSync","json","tryMap","try","JSON","parse","catch","urlParamsBody","URLSearchParams","asyncInterrupt","emit","bytes","single","responseText","slice","end","left","arrayBuffer","map","buffer","ResponseError","status","die","toJSON","layerXMLHttpRequest"],"sources":["../../../../src/internal/http/client.ts"],"sourcesContent":[null],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/platform-browser",
3
- "version": "0.29.5",
3
+ "version": "0.29.7",
4
4
  "description": "Unified interfaces for common platform-specific services",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -8,9 +8,12 @@
8
8
  "url": "https://github.com/effect-ts/effect.git"
9
9
  },
10
10
  "sideEffects": [],
11
+ "dependencies": {
12
+ "multipasta": "^0.1.21"
13
+ },
11
14
  "peerDependencies": {
12
- "@effect/platform": "^0.44.5",
13
- "effect": "^2.3.3"
15
+ "@effect/platform": "^0.44.6",
16
+ "effect": "^2.3.4"
14
17
  },
15
18
  "main": "./dist/cjs/index.js",
16
19
  "module": "./dist/esm/index.js",
@@ -22,6 +25,11 @@
22
25
  "import": "./dist/esm/index.js",
23
26
  "default": "./dist/cjs/index.js"
24
27
  },
28
+ "./BrowserHttpClient": {
29
+ "types": "./dist/dts/BrowserHttpClient.d.ts",
30
+ "import": "./dist/esm/BrowserHttpClient.js",
31
+ "default": "./dist/cjs/BrowserHttpClient.js"
32
+ },
25
33
  "./BrowserKeyValueStore": {
26
34
  "types": "./dist/dts/BrowserKeyValueStore.d.ts",
27
35
  "import": "./dist/esm/BrowserKeyValueStore.js",
@@ -50,6 +58,9 @@
50
58
  },
51
59
  "typesVersions": {
52
60
  "*": {
61
+ "BrowserHttpClient": [
62
+ "./dist/dts/BrowserHttpClient.d.ts"
63
+ ],
53
64
  "BrowserKeyValueStore": [
54
65
  "./dist/dts/BrowserKeyValueStore.d.ts"
55
66
  ],
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Client from "@effect/platform/Http/Client"
5
+ import type * as FiberRef from "effect/FiberRef"
6
+ import type * as Layer from "effect/Layer"
7
+ import * as internal from "./internal/http/client.js"
8
+
9
+ /**
10
+ * @since 1.0.0
11
+ * @category clients
12
+ */
13
+ export const xmlHttpRequest: Client.Client.Default = internal.makeXMLHttpRequest
14
+
15
+ /**
16
+ * @since 1.0.0
17
+ * @category layers
18
+ */
19
+ export const layerXMLHttpRequest: Layer.Layer<Client.Client.Default, never, never> = internal.layerXMLHttpRequest
20
+
21
+ /**
22
+ * @since 1.0.0
23
+ * @category fiber refs
24
+ */
25
+ export const currentXMLHttpRequest: FiberRef.FiberRef<typeof XMLHttpRequest> = internal.currentXMLHttpRequest
package/src/index.ts CHANGED
@@ -1,3 +1,8 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ export * as BrowserHttpClient from "./BrowserHttpClient.js"
5
+
1
6
  /**
2
7
  * @since 1.0.0
3
8
  */
@@ -0,0 +1,240 @@
1
+ import * as Client from "@effect/platform/Http/Client"
2
+ import * as Error from "@effect/platform/Http/ClientError"
3
+ import type * as ClientRequest from "@effect/platform/Http/ClientRequest"
4
+ import * as ClientResponse from "@effect/platform/Http/ClientResponse"
5
+ import * as Headers from "@effect/platform/Http/Headers"
6
+ import * as IncomingMessage from "@effect/platform/Http/IncomingMessage"
7
+ import * as UrlParams from "@effect/platform/Http/UrlParams"
8
+ import * as Effect from "effect/Effect"
9
+ import * as Either from "effect/Either"
10
+ import * as FiberRef from "effect/FiberRef"
11
+ import { globalValue } from "effect/GlobalValue"
12
+ import * as Layer from "effect/Layer"
13
+ import * as Option from "effect/Option"
14
+ import * as Stream from "effect/Stream"
15
+ import * as HeaderParser from "multipasta/HeadersParser"
16
+
17
+ /** @internal */
18
+ export const currentXMLHttpRequest = globalValue(
19
+ "@effect/platform-browser/BrowserHttpClient/currentXMLHttpRequest",
20
+ () => FiberRef.unsafeMake(globalThis.XMLHttpRequest)
21
+ )
22
+
23
+ /** @internal */
24
+ export const makeXMLHttpRequest = Client.makeDefault((request) =>
25
+ UrlParams.makeUrl(request.url, request.urlParams, (_) =>
26
+ Error.RequestError({
27
+ request,
28
+ reason: "InvalidUrl",
29
+ error: _
30
+ })).pipe(
31
+ Effect.zip(FiberRef.get(currentXMLHttpRequest)),
32
+ Effect.flatMap(([url, XHR]) => {
33
+ const xhr = new XHR()
34
+ xhr.open(request.method, url.toString(), true)
35
+ xhr.responseType = "text"
36
+ Object.entries(request.headers).forEach(([k, v]) => {
37
+ xhr.setRequestHeader(k, v)
38
+ })
39
+ return sendBody(xhr, request).pipe(
40
+ Effect.zipLeft(Effect.async<void>((resume) => {
41
+ const onChange = () => {
42
+ if (xhr.readyState >= 2) {
43
+ resume(Effect.unit)
44
+ }
45
+ }
46
+ xhr.onreadystatechange = onChange
47
+ onChange()
48
+ })),
49
+ Effect.as(new ClientResponseImpl(request, xhr)),
50
+ Effect.onInterrupt(() => Effect.sync(() => xhr.abort()))
51
+ )
52
+ })
53
+ )
54
+ )
55
+
56
+ const sendBody = (xhr: XMLHttpRequest, request: ClientRequest.ClientRequest): Effect.Effect<void, Error.RequestError> =>
57
+ Effect.suspend(() => {
58
+ const body = request.body
59
+ switch (body._tag) {
60
+ case "Empty":
61
+ return Effect.sync(() => xhr.send())
62
+ case "Raw":
63
+ return Effect.sync(() => xhr.send(body.body as any))
64
+ case "Uint8Array":
65
+ return Effect.sync(() => xhr.send(body.body))
66
+ case "FormData":
67
+ return Effect.sync(() => xhr.send(body.formData))
68
+ case "Stream":
69
+ return Effect.matchEffect(
70
+ Stream.runFold(body.stream, new Uint8Array(0), (acc, chunk) => {
71
+ const next = new Uint8Array(acc.length + chunk.length)
72
+ next.set(acc, 0)
73
+ next.set(chunk, acc.length)
74
+ return next
75
+ }),
76
+ {
77
+ onFailure: (error) =>
78
+ Effect.fail(Error.RequestError({
79
+ request,
80
+ reason: "Encode",
81
+ error
82
+ })),
83
+ onSuccess: (body) => Effect.sync(() => xhr.send(body))
84
+ }
85
+ )
86
+ }
87
+ })
88
+
89
+ const encoder = new TextEncoder()
90
+
91
+ /** @internal */
92
+ export class IncomingMessageImpl<E> implements IncomingMessage.IncomingMessage<E> {
93
+ readonly [IncomingMessage.TypeId]: IncomingMessage.TypeId
94
+
95
+ constructor(
96
+ readonly source: XMLHttpRequest,
97
+ readonly onError: (error: unknown) => E
98
+ ) {
99
+ this[IncomingMessage.TypeId] = IncomingMessage.TypeId
100
+ }
101
+
102
+ _headers: Headers.Headers | undefined
103
+ get headers() {
104
+ if (this._headers) {
105
+ return this._headers
106
+ }
107
+ const headers = this.source.getAllResponseHeaders()
108
+ if (headers === "") {
109
+ return Headers.empty
110
+ }
111
+ const parser = HeaderParser.make()
112
+ const result = parser(encoder.encode(headers + "\r\n"), 0)
113
+ const parsed = result._tag === "Headers" ? Headers.fromInput(result.headers) : Headers.empty
114
+ return this._headers = parsed
115
+ }
116
+
117
+ get remoteAddress() {
118
+ return Option.none()
119
+ }
120
+
121
+ _textEffect: Effect.Effect<string, E> | undefined
122
+ get text(): Effect.Effect<string, E> {
123
+ if (this._textEffect) {
124
+ return this._textEffect
125
+ }
126
+ return this._textEffect = Effect.async<string, E>((resume) => {
127
+ if (this.source.readyState === 4) {
128
+ resume(Effect.succeed(this.source.response))
129
+ return
130
+ }
131
+
132
+ const onReadyStateChange = () => {
133
+ if (this.source.readyState === 4) {
134
+ resume(Effect.succeed(this.source.response))
135
+ }
136
+ }
137
+ const onError = (event: any) => {
138
+ resume(Effect.fail(this.onError(event)))
139
+ }
140
+ this.source.addEventListener("readystatechange", onReadyStateChange)
141
+ this.source.addEventListener("error", onError)
142
+ return Effect.sync(() => {
143
+ this.source.removeEventListener("readystatechange", onReadyStateChange)
144
+ this.source.removeEventListener("error", onError)
145
+ })
146
+ }).pipe(
147
+ Effect.cached,
148
+ Effect.runSync
149
+ )
150
+ }
151
+
152
+ get json(): Effect.Effect<unknown, E> {
153
+ return Effect.tryMap(this.text, {
154
+ try: (_) => _ === "" ? null : JSON.parse(_) as unknown,
155
+ catch: this.onError
156
+ })
157
+ }
158
+
159
+ get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, E> {
160
+ return Effect.flatMap(this.text, (_) =>
161
+ Effect.try({
162
+ try: () => UrlParams.fromInput(new URLSearchParams(_)),
163
+ catch: this.onError
164
+ }))
165
+ }
166
+
167
+ get stream(): Stream.Stream<Uint8Array, E> {
168
+ return Stream.asyncInterrupt<Uint8Array, E>((emit) => {
169
+ let bytes = 0
170
+ const onReadyStateChange = () => {
171
+ if (this.source.readyState === 3) {
172
+ emit.single(encoder.encode(this.source.responseText.slice(bytes)))
173
+ bytes = this.source.responseText.length
174
+ } else if (this.source.readyState === 4) {
175
+ if (bytes < this.source.responseText.length) {
176
+ emit.single(encoder.encode(this.source.responseText.slice(bytes)))
177
+ }
178
+ emit.end()
179
+ }
180
+ }
181
+ const onError = (event: any) => {
182
+ emit.fail(this.onError(event))
183
+ }
184
+ this.source.addEventListener("readystatechange", onReadyStateChange)
185
+ this.source.addEventListener("error", onError)
186
+ onReadyStateChange()
187
+ return Either.left(Effect.sync(() => {
188
+ this.source.removeEventListener("readystatechange", onReadyStateChange)
189
+ this.source.removeEventListener("error", onError)
190
+ }))
191
+ })
192
+ }
193
+
194
+ get arrayBuffer(): Effect.Effect<ArrayBuffer, E> {
195
+ return this.text.pipe(
196
+ Effect.map((_) => encoder.encode(_).buffer)
197
+ )
198
+ }
199
+ }
200
+
201
+ class ClientResponseImpl extends IncomingMessageImpl<Error.ResponseError> implements ClientResponse.ClientResponse {
202
+ readonly [ClientResponse.TypeId]: ClientResponse.TypeId
203
+
204
+ constructor(
205
+ readonly request: ClientRequest.ClientRequest,
206
+ source: XMLHttpRequest
207
+ ) {
208
+ super(source, (_) =>
209
+ Error.ResponseError({
210
+ request,
211
+ response: this,
212
+ reason: "Decode",
213
+ error: _
214
+ }))
215
+ this[ClientResponse.TypeId] = ClientResponse.TypeId
216
+ }
217
+
218
+ get status() {
219
+ return this.source.status
220
+ }
221
+
222
+ get formData(): Effect.Effect<FormData, Error.ResponseError> {
223
+ return Effect.die("Not implemented")
224
+ }
225
+
226
+ toString(): string {
227
+ return `ClientResponse(${this.status})`
228
+ }
229
+
230
+ toJSON(): unknown {
231
+ return {
232
+ _tag: "ClientResponse",
233
+ status: this.status,
234
+ headers: this.headers
235
+ }
236
+ }
237
+ }
238
+
239
+ /** @internal */
240
+ export const layerXMLHttpRequest = Layer.succeed(Client.Client, makeXMLHttpRequest)