@statewalker/webrun-http-streams 0.1.1 → 0.2.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.
- package/README.md +361 -13
- package/dist/bytes.d.ts +43 -0
- package/dist/bytes.d.ts.map +1 -0
- package/dist/codec-default.d.ts +7 -0
- package/dist/codec-default.d.ts.map +1 -0
- package/dist/duplex-site-builder.d.ts +4 -1
- package/dist/duplex-site-builder.d.ts.map +1 -1
- package/dist/envelope.d.ts +10 -10
- package/dist/envelope.d.ts.map +1 -1
- package/dist/fetch.d.ts +3 -2
- package/dist/fetch.d.ts.map +1 -1
- package/dist/http-data.d.ts +11 -7
- package/dist/http-data.d.ts.map +1 -1
- package/dist/http-error.d.ts.map +1 -1
- package/dist/http-stubs.d.ts +12 -0
- package/dist/http-stubs.d.ts.map +1 -1
- package/dist/http1/chunked.d.ts +18 -0
- package/dist/http1/chunked.d.ts.map +1 -0
- package/dist/http1/decode.d.ts +5 -0
- package/dist/http1/decode.d.ts.map +1 -0
- package/dist/http1/encode.d.ts +20 -0
- package/dist/http1/encode.d.ts.map +1 -0
- package/dist/http1/errors.d.ts +9 -0
- package/dist/http1/errors.d.ts.map +1 -0
- package/dist/http1/headers.d.ts +78 -0
- package/dist/http1/headers.d.ts.map +1 -0
- package/dist/http1/index.d.ts +18 -0
- package/dist/http1/index.d.ts.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1040 -138
- package/dist/message.d.ts +50 -0
- package/dist/message.d.ts.map +1 -0
- package/dist/request-streams.d.ts +52 -0
- package/dist/request-streams.d.ts.map +1 -0
- package/dist/sniff.d.ts +18 -0
- package/dist/sniff.d.ts.map +1 -0
- package/package.json +13 -7
- package/src/bytes.ts +157 -0
- package/src/codec-default.ts +13 -0
- package/src/duplex-site-builder.ts +10 -2
- package/src/envelope.ts +43 -34
- package/src/fetch.ts +130 -12
- package/src/http-data.ts +160 -17
- package/src/http-stubs.ts +72 -18
- package/src/http1/chunked.ts +89 -0
- package/src/http1/decode.ts +208 -0
- package/src/http1/encode.ts +181 -0
- package/src/http1/errors.ts +8 -0
- package/src/http1/headers.ts +263 -0
- package/src/http1/index.ts +40 -0
- package/src/index.ts +18 -0
- package/src/message.ts +62 -0
- package/src/request-streams.ts +75 -0
- package/src/sniff.ts +68 -0
- package/LICENSE +0 -21
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ByteReader } from "../bytes.js";
|
|
2
|
+
import type { ByteSource } from "../message.js";
|
|
3
|
+
/**
|
|
4
|
+
* Chunk sizes are written in HEXADECIMAL — a 21-byte chunk is `15`. Writing
|
|
5
|
+
* them in decimal is the defect note 15 found in @libp2p/http, and it is the
|
|
6
|
+
* one that cannot be caught downstream: decimal digits are also valid hex, so
|
|
7
|
+
* a conforming parser silently reads the wrong length.
|
|
8
|
+
*
|
|
9
|
+
* Zero-length source chunks are skipped; a zero-sized chunk on the wire is the
|
|
10
|
+
* body terminator.
|
|
11
|
+
*/
|
|
12
|
+
export declare function encodeChunked(body: ByteSource): AsyncGenerator<Uint8Array>;
|
|
13
|
+
/**
|
|
14
|
+
* Decode a chunked body, yielding data chunks as they arrive. Nothing is
|
|
15
|
+
* accumulated: a chunk larger than the transport's frame is yielded in pieces.
|
|
16
|
+
*/
|
|
17
|
+
export declare function decodeChunked(reader: ByteReader, maxLineBytes: number): AsyncGenerator<Uint8Array>;
|
|
18
|
+
//# sourceMappingURL=chunked.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunked.d.ts","sourceRoot":"","sources":["../../src/http1/chunked.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAQhD;;;;;;;;GAQG;AACH,wBAAuB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC,CAQjF;AAED;;;GAGG;AACH,wBAAuB,aAAa,CAClC,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,GACnB,cAAc,CAAC,UAAU,CAAC,CAoD5B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ByteSource, DecodedRequest, DecodedResponse } from "../message.js";
|
|
2
|
+
import type { ResolvedHttpCodecOptions } from "./encode.js";
|
|
3
|
+
export declare function decodeRequest(input: ByteSource, opts: ResolvedHttpCodecOptions): Promise<DecodedRequest>;
|
|
4
|
+
export declare function decodeResponse(input: ByteSource, opts: ResolvedHttpCodecOptions, method: string): Promise<DecodedResponse>;
|
|
5
|
+
//# sourceMappingURL=decode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../../src/http1/decode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAoG5D,wBAAsB,aAAa,CACjC,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA4DzB;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,wBAAwB,EAC9B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,CAAC,CAmC1B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ByteSource, RequestEnvelope, ResponseEnvelope } from "../message.js";
|
|
2
|
+
export type ResolvedHttpCodecOptions = {
|
|
3
|
+
scheme: "http" | "https";
|
|
4
|
+
host: string;
|
|
5
|
+
maxHeaderBytes: number;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Split a URL into an origin-form request target and an authority *without*
|
|
9
|
+
* going through `new URL()`. `URL` normalises percent-encoding and would
|
|
10
|
+
* re-serialise the target — which is the exact class of defect note 15 found
|
|
11
|
+
* in @libp2p/http, where rebuilding the request line silently dropped
|
|
12
|
+
* `url.search`. Here the target is a verbatim slice of the caller's string.
|
|
13
|
+
*/
|
|
14
|
+
export declare function splitTarget(url: string, opts: ResolvedHttpCodecOptions): {
|
|
15
|
+
target: string;
|
|
16
|
+
authority: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function encodeRequest(env: RequestEnvelope, body: ByteSource | undefined, opts: ResolvedHttpCodecOptions): AsyncGenerator<Uint8Array>;
|
|
19
|
+
export declare function encodeResponse(env: ResponseEnvelope, body: ByteSource | undefined, _opts: ResolvedHttpCodecOptions, requestMethod?: string): AsyncGenerator<Uint8Array>;
|
|
20
|
+
//# sourceMappingURL=encode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/http1/encode.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAgBnF,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAMF;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,wBAAwB,GAC7B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CA6BvC;AA0BD,wBAAuB,aAAa,CAClC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,UAAU,GAAG,SAAS,EAC5B,IAAI,EAAE,wBAAwB,GAC7B,cAAc,CAAC,UAAU,CAAC,CA+B5B;AAED,wBAAuB,cAAc,CACnC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE,UAAU,GAAG,SAAS,EAK5B,KAAK,EAAE,wBAAwB,EAC/B,aAAa,CAAC,EAAE,MAAM,GACrB,cAAc,CAAC,UAAU,CAAC,CA0C5B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Raised for any byte sequence this codec refuses to interpret. Every case is
|
|
3
|
+
* a refusal to guess: HTTP/1.1 parsers that guess are how request smuggling
|
|
4
|
+
* works.
|
|
5
|
+
*/
|
|
6
|
+
export declare class HttpParseError extends Error {
|
|
7
|
+
readonly name = "HttpParseError";
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/http1/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,oBAAoB;CAC3C"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { ByteReader } from "../bytes.js";
|
|
2
|
+
export type HeaderList = [string, string][];
|
|
3
|
+
export declare function isTokenChar(byte: number): boolean;
|
|
4
|
+
export declare function isToken(value: string): boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Header bytes are latin-1: byte-preserving, matching Node, and lossless
|
|
7
|
+
* across a decode/encode round-trip. Control characters are rejected
|
|
8
|
+
* separately by `assertValidHeaderValue`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function decodeLatin1(bytes: Uint8Array): string;
|
|
11
|
+
export declare function encodeLatin1(text: string): Uint8Array;
|
|
12
|
+
/**
|
|
13
|
+
* Validates a value that is about to become (or was read as) a `Host`
|
|
14
|
+
* header: untrusted input either way, so an unrecognised shape is a refusal,
|
|
15
|
+
* not a guess. Rejects a present-but-empty value, one carrying userinfo
|
|
16
|
+
* (`evil.com@good.com`), and — the reason this also runs on encode — one
|
|
17
|
+
* smuggling a CRLF-terminated line into the authority of a caller-supplied
|
|
18
|
+
* url. Never applied to trusted configuration (a codec's `opts.host`).
|
|
19
|
+
*/
|
|
20
|
+
export declare function assertValidHost(host: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* A request-target must be entirely visible ASCII (RFC 9110 VCHAR) — nothing
|
|
23
|
+
* `<= 0x20` (space and every control character, CR/LF included) and nothing
|
|
24
|
+
* `>= 0x7F` (DEL and beyond). Applied on encode (`splitTarget`, so a
|
|
25
|
+
* caller-supplied url can never inject a second request line) and on decode
|
|
26
|
+
* (so a relay that decodes then re-encodes can never put an embedded control
|
|
27
|
+
* character back on the wire).
|
|
28
|
+
*/
|
|
29
|
+
export declare function assertValidTarget(target: string): void;
|
|
30
|
+
export declare function assertValidHeaderValue(name: string, value: string): void;
|
|
31
|
+
/** Same character class as a header value (M5) — CR/LF, every C0 control, and DEL. */
|
|
32
|
+
export declare function assertValidStatusText(value: string): void;
|
|
33
|
+
export declare function encodeHeaderLines(headers: HeaderList): string;
|
|
34
|
+
/**
|
|
35
|
+
* Read to the blank line. `alreadyUsed` is the byte count of the start line,
|
|
36
|
+
* so the bound covers the whole head section rather than the headers alone.
|
|
37
|
+
*/
|
|
38
|
+
export declare function readHeaderSection(reader: ByteReader, maxHeaderBytes: number, alreadyUsed: number): Promise<HeaderList>;
|
|
39
|
+
export declare function getAll(headers: HeaderList, name: string): string[];
|
|
40
|
+
export declare function withoutHeaders(headers: HeaderList, names: string[]): HeaderList;
|
|
41
|
+
/**
|
|
42
|
+
* Parse a `Content-Length` field into a single validated value.
|
|
43
|
+
*
|
|
44
|
+
* RFC 9110 §8.6 permits the value to be a comma-separated list of identical
|
|
45
|
+
* numbers (a relay may have appended one), so the list is folded; differing
|
|
46
|
+
* values are a refusal, not a choice. Shared by `resolveFraming` on decode and
|
|
47
|
+
* by the encoder's declared-length check, which previously carried its own
|
|
48
|
+
* copy that did NOT split on commas — so decode accepted `5, 5` while encode
|
|
49
|
+
* rejected it, and a relay that decoded then re-encoded threw.
|
|
50
|
+
*
|
|
51
|
+
* Returns undefined when the field is absent.
|
|
52
|
+
*/
|
|
53
|
+
export declare function parseContentLength(values: string[]): number | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Statuses that carry no body whatever the headers say (RFC 9110 §8.6): 1xx,
|
|
56
|
+
* 204 and 304. Defined once because the encoder must not frame a body for
|
|
57
|
+
* them and the decoder must not try to read one — two lists that agreed today
|
|
58
|
+
* and were free to drift tomorrow.
|
|
59
|
+
*
|
|
60
|
+
* A response to HEAD is also bodyless, but that depends on the request rather
|
|
61
|
+
* than the status, so callers test it separately.
|
|
62
|
+
*/
|
|
63
|
+
export declare function isBodylessStatus(status: number): boolean;
|
|
64
|
+
export type BodyFraming = {
|
|
65
|
+
kind: "chunked";
|
|
66
|
+
} | {
|
|
67
|
+
kind: "length";
|
|
68
|
+
length: number;
|
|
69
|
+
} | {
|
|
70
|
+
kind: "none";
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* RFC 9112 §6.3, with every ambiguity turned into a refusal. In particular a
|
|
74
|
+
* message declaring both Content-Length and Transfer-Encoding is rejected
|
|
75
|
+
* rather than resolved — disagreeing on which one wins is request smuggling.
|
|
76
|
+
*/
|
|
77
|
+
export declare function resolveFraming(headers: HeaderList, version: string): BodyFraming;
|
|
78
|
+
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/http1/headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAS5C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAM9C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAItD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAUrD;AAUD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAOtD;AAwBD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAExE;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM,CAQ7D;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,UAAU,EAClB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CA6BrB;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGlE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAG/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAkBvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CA+BhF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MessageCodec } from "../message.js";
|
|
2
|
+
export type HttpCodecOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* Scheme used to rebuild an absolute url on decode. HTTP/1.1 origin-form
|
|
5
|
+
* carries no scheme, so this is configuration, not wire data — a peer
|
|
6
|
+
* configured `http` rebuilds an `https` url as `http`. Accepted cost of
|
|
7
|
+
* decision 6; see ADR-0006.
|
|
8
|
+
*/
|
|
9
|
+
scheme?: "http" | "https";
|
|
10
|
+
/** Authority used when a url carries none. Also fills the mandatory Host header. */
|
|
11
|
+
host?: string;
|
|
12
|
+
/** Bound on the whole head section, start line included. Default 65536. */
|
|
13
|
+
maxHeaderBytes?: number;
|
|
14
|
+
};
|
|
15
|
+
export declare function newHttpCodec(options?: HttpCodecOptions): MessageCodec;
|
|
16
|
+
export declare const httpCodec: MessageCodec;
|
|
17
|
+
export { HttpParseError } from "./errors.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http1/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAKlD,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,YAAY,CAiBzE;AAED,eAAO,MAAM,SAAS,EAAE,YAA6B,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
export { defaultCodec } from "./codec-default.js";
|
|
1
2
|
export { DuplexSiteBuilder, type SiteHandler } from "./duplex-site-builder.js";
|
|
2
|
-
export { decodeMessage, encodeMessage, type RequestEnvelope, type ResponseEnvelope, } from "./envelope.js";
|
|
3
|
+
export { decodeMessage, encodeMessage, jsonEnvelopeCodec, type RequestEnvelope, type ResponseEnvelope, } from "./envelope.js";
|
|
3
4
|
export { fetchOverDuplex, serveFetchOverDuplex } from "./fetch.js";
|
|
4
|
-
export { type HttpDataHandler, type HttpDataHandlerResult, type HttpFetchResult, httpFetch, httpServe, } from "./http-data.js";
|
|
5
|
+
export { type HttpDataHandler, type HttpDataHandlerResult, type HttpDataOptions, type HttpFetchResult, httpFetch, httpServe, PEER_ERROR_HEADER, } from "./http-data.js";
|
|
5
6
|
export { HttpError, type HttpErrorOptions } from "./http-error.js";
|
|
6
7
|
export { type HttpHandler, newHttpClientStub, newHttpServerStub, type SerializedHttpEnvelope, type SerializedHttpRequest, type SerializedHttpResponse, } from "./http-stubs.js";
|
|
8
|
+
export { type HttpCodecOptions, HttpParseError, httpCodec, newHttpCodec, } from "./http1/index.js";
|
|
9
|
+
export type { ByteSource, DecodedRequest, DecodedResponse, MessageCodec, ResponseCodecOptions, } from "./message.js";
|
|
10
|
+
export { newSniffingCodec, type SniffingCodecOptions } from "./sniff.js";
|
|
7
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,aAAa,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,SAAS,EACT,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,SAAS,EACT,SAAS,EACT,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EACL,KAAK,WAAW,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,gBAAgB,EACrB,cAAc,EACd,SAAS,EACT,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACZ,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
|