@social-mail/shared 1.0.29 → 1.1.4
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/.gitlab-ci.yml +3 -3
- package/.vscode/settings.json +1 -1
- package/dist/.tsbuildinfo +1 -0
- package/dist/QueryIterator.d.ts +1 -9
- package/dist/QueryIterator.d.ts.map +1 -1
- package/dist/QueryIterator.js +3 -14
- package/dist/QueryIterator.js.map +1 -1
- package/dist/ical-parser/Calender.js +36 -92
- package/dist/ical-parser/Calender.js.map +1 -1
- package/dist/ical-parser/parseDate.js +1 -5
- package/dist/ical-parser/parseDate.js.map +1 -1
- package/dist/mime-parser/AttachmentFile.d.ts +5 -11
- package/dist/mime-parser/AttachmentFile.d.ts.map +1 -1
- package/dist/mime-parser/AttachmentFile.js +3 -8
- package/dist/mime-parser/AttachmentFile.js.map +1 -1
- package/dist/mime-parser/HeaderContactList.d.ts +15 -0
- package/dist/mime-parser/HeaderContactList.d.ts.map +1 -0
- package/dist/mime-parser/HeaderContactList.js +37 -0
- package/dist/mime-parser/HeaderContactList.js.map +1 -0
- package/dist/mime-parser/HeaderContentDisposition.d.ts +6 -6
- package/dist/mime-parser/HeaderContentDisposition.d.ts.map +1 -1
- package/dist/mime-parser/HeaderContentDisposition.js +5 -10
- package/dist/mime-parser/HeaderContentDisposition.js.map +1 -1
- package/dist/mime-parser/HeaderContentType.d.ts +6 -6
- package/dist/mime-parser/HeaderContentType.d.ts.map +1 -1
- package/dist/mime-parser/HeaderContentType.js +5 -10
- package/dist/mime-parser/HeaderContentType.js.map +1 -1
- package/dist/mime-parser/HeaderEmailAddress.d.ts +10 -0
- package/dist/mime-parser/HeaderEmailAddress.d.ts.map +1 -0
- package/dist/mime-parser/HeaderEmailAddress.js +27 -0
- package/dist/mime-parser/HeaderEmailAddress.js.map +1 -0
- package/dist/mime-parser/HeaderLinks.d.ts +9 -0
- package/dist/mime-parser/HeaderLinks.d.ts.map +1 -0
- package/dist/mime-parser/HeaderLinks.js +42 -0
- package/dist/mime-parser/HeaderLinks.js.map +1 -0
- package/dist/mime-parser/MimeEmailAddressParser.d.ts +13 -0
- package/dist/mime-parser/MimeEmailAddressParser.d.ts.map +1 -0
- package/dist/mime-parser/MimeEmailAddressParser.js +17 -0
- package/dist/mime-parser/MimeEmailAddressParser.js.map +1 -0
- package/dist/mime-parser/MimeHeaders.d.ts +19 -0
- package/dist/mime-parser/MimeHeaders.d.ts.map +1 -0
- package/dist/mime-parser/MimeHeaders.js +47 -0
- package/dist/mime-parser/MimeHeaders.js.map +1 -0
- package/dist/mime-parser/MimeMessage.d.ts +44 -11
- package/dist/mime-parser/MimeMessage.d.ts.map +1 -1
- package/dist/mime-parser/MimeMessage.js +81 -73
- package/dist/mime-parser/MimeMessage.js.map +1 -1
- package/dist/mime-parser/MimeNode.d.ts +32 -39
- package/dist/mime-parser/MimeNode.d.ts.map +1 -1
- package/dist/mime-parser/MimeNode.js +166 -298
- package/dist/mime-parser/MimeNode.js.map +1 -1
- package/dist/mime-parser/RegexGenerator.d.ts +9 -0
- package/dist/mime-parser/RegexGenerator.d.ts.map +1 -0
- package/dist/mime-parser/RegexGenerator.js +40 -0
- package/dist/mime-parser/RegexGenerator.js.map +1 -0
- package/dist/mime-parser/encoder/RawBuffer.d.ts +5 -5
- package/dist/mime-parser/encoder/RawBuffer.d.ts.map +1 -1
- package/dist/mime-parser/encoder/RawBuffer.js +7 -13
- package/dist/mime-parser/encoder/RawBuffer.js.map +1 -1
- package/dist/mime-parser/encoder/base64-to-blob.d.ts +1 -7
- package/dist/mime-parser/encoder/base64-to-blob.d.ts.map +1 -1
- package/dist/mime-parser/encoder/base64-to-blob.js +0 -6
- package/dist/mime-parser/encoder/base64-to-blob.js.map +1 -1
- package/dist/mime-parser/encoder/quoted-printable.d.ts +5 -8
- package/dist/mime-parser/encoder/quoted-printable.d.ts.map +1 -1
- package/dist/mime-parser/encoder/quoted-printable.js +3 -34
- package/dist/mime-parser/encoder/quoted-printable.js.map +1 -1
- package/dist/mime-parser/encoder/word-encoding.d.ts +4 -6
- package/dist/mime-parser/encoder/word-encoding.d.ts.map +1 -1
- package/dist/mime-parser/encoder/word-encoding.js +4 -5
- package/dist/mime-parser/encoder/word-encoding.js.map +1 -1
- package/dist/mime-parser/parsePairs.d.ts +1 -1
- package/dist/mime-parser/parsePairs.d.ts.map +1 -1
- package/dist/mime-parser/parsePairs.js +3 -7
- package/dist/mime-parser/parsePairs.js.map +1 -1
- package/dist/mime-parser/stream/LineStream.d.ts +10 -16
- package/dist/mime-parser/stream/LineStream.d.ts.map +1 -1
- package/dist/mime-parser/stream/LineStream.js +59 -94
- package/dist/mime-parser/stream/LineStream.js.map +1 -1
- package/dist/mime-parser/stream/TextWriter.d.ts +5 -3
- package/dist/mime-parser/stream/TextWriter.d.ts.map +1 -1
- package/dist/mime-parser/stream/TextWriter.js +15 -3
- package/dist/mime-parser/stream/TextWriter.js.map +1 -1
- package/dist/mime-parser/tokenizer.d.ts +3 -3
- package/dist/mime-parser/tokenizer.d.ts.map +1 -1
- package/dist/mime-parser/tokenizer.js +10 -17
- package/dist/mime-parser/tokenizer.js.map +1 -1
- package/package.json +3 -3
- package/src/{QueryIterator.js → QueryIterator.ts} +11 -12
- package/src/ical-parser/Calender.ts +1 -1
- package/src/mime-parser/AttachmentFile.ts +24 -0
- package/src/mime-parser/HeaderContactList.ts +41 -0
- package/src/mime-parser/HeaderContentDisposition.ts +21 -0
- package/src/mime-parser/HeaderContentType.ts +22 -0
- package/src/mime-parser/HeaderEmailAddress.ts +38 -0
- package/src/mime-parser/HeaderLinks.ts +48 -0
- package/src/mime-parser/MimeEmailAddressParser.ts +22 -0
- package/src/mime-parser/MimeHeaders.ts +62 -0
- package/src/mime-parser/MimeMessage.ts +134 -0
- package/src/mime-parser/{MimeNode.js → MimeNode.ts} +92 -159
- package/src/mime-parser/RegexGenerator.ts +42 -0
- package/src/mime-parser/encoder/{RawBuffer.js → RawBuffer.ts} +15 -17
- package/src/mime-parser/encoder/{base64-to-blob.js → base64-to-blob.ts} +8 -8
- package/src/mime-parser/encoder/{quoted-printable.js → quoted-printable.ts} +9 -11
- package/src/mime-parser/encoder/{word-encoding.js → word-encoding.ts} +6 -6
- package/src/mime-parser/{parsePairs.js → parsePairs.ts} +5 -4
- package/src/mime-parser/stream/{LineStream.js → LineStream.ts} +12 -19
- package/src/mime-parser/stream/TextWriter.ts +36 -0
- package/src/mime-parser/{tokenizer.js → tokenizer.ts} +24 -21
- package/tsconfig.json +30 -9
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/mime-parser/AttachmentFile.js +0 -29
- package/src/mime-parser/HeaderContentDisposition.js +0 -32
- package/src/mime-parser/HeaderContentType.js +0 -34
- package/src/mime-parser/MimeMessage.js +0 -105
- package/src/mime-parser/stream/TextWriter.js +0 -27
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export default class RegexGenerator {
|
|
2
|
+
constructor(regex) {
|
|
3
|
+
this.regex = regex;
|
|
4
|
+
}
|
|
5
|
+
*groups(text) {
|
|
6
|
+
if (!text) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const { regex } = this;
|
|
10
|
+
regex.lastIndex = 0;
|
|
11
|
+
let m;
|
|
12
|
+
while ((m = regex.exec(text)) !== null) {
|
|
13
|
+
if (m.index === regex.lastIndex) {
|
|
14
|
+
regex.lastIndex++;
|
|
15
|
+
}
|
|
16
|
+
if (m?.length) {
|
|
17
|
+
yield m;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
*all(text) {
|
|
22
|
+
if (!text) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const { regex } = this;
|
|
26
|
+
regex.lastIndex = 0;
|
|
27
|
+
let m;
|
|
28
|
+
while ((m = regex.exec(text)) !== null) {
|
|
29
|
+
if (m.index === regex.lastIndex) {
|
|
30
|
+
regex.lastIndex++;
|
|
31
|
+
}
|
|
32
|
+
if (m?.length) {
|
|
33
|
+
yield { matched: m };
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
;
|
|
40
|
+
//# sourceMappingURL=RegexGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegexGenerator.js","sourceRoot":"","sources":["../../src/mime-parser/RegexGenerator.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,cAAc;IAE/B,YAA4B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAEzC,CAAC;IAED,CAAC,MAAM,CAAC,IAAY;QAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,CAAC;QACN,OAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC9B,KAAK,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAoB,CAAC;YAC/B,CAAC;QACL,CAAC;IACL,CAAC;IAED,CAAC,GAAG,CAAC,IAAY;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,CAAC;QACN,OAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC9B,KAAK,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;gBACZ,MAAM,EAAE,OAAO,EAAE,CAAoB,EAAE,CAAC;gBACxC,SAAS;YACb,CAAC;QACL,CAAC;IACL,CAAC;CAEJ;AAAA,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
1
|
+
export declare const RawBuffer: {
|
|
2
|
+
decode(bytesAsString: string, encoding?: string): string;
|
|
3
|
+
encode(text: string, encoding?: string): string;
|
|
4
|
+
toBase64Async(blob: Blob, asDataUrl?: boolean): Promise<string>;
|
|
5
|
+
};
|
|
6
6
|
//# sourceMappingURL=RawBuffer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RawBuffer.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/encoder/RawBuffer.
|
|
1
|
+
{"version":3,"file":"RawBuffer.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/encoder/RawBuffer.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,SAAS;0BAEC,MAAM,aACX,MAAM,GACjB,MAAM;iBASC,MAAM,aACF,MAAM,GACjB,MAAM;wBAcC,IAAI,cACC,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC;CAkBrB,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
const toBuffer = (
|
|
2
|
-
/** @type {string} */ text) => {
|
|
1
|
+
const toBuffer = (text) => {
|
|
3
2
|
const bytes = new Uint8Array(text.length);
|
|
4
3
|
for (let index = 0; index < text.length; index++) {
|
|
5
4
|
bytes[index] = text.charCodeAt(index);
|
|
@@ -7,19 +6,15 @@ const toBuffer = (
|
|
|
7
6
|
return bytes.buffer;
|
|
8
7
|
};
|
|
9
8
|
export const RawBuffer = {
|
|
10
|
-
decode
|
|
11
|
-
/** @type {string} */ bytesAsString,
|
|
12
|
-
/** @type {string} */ encoding = "utf-8") => {
|
|
9
|
+
decode(bytesAsString, encoding = "utf-8") {
|
|
13
10
|
if (!encoding) {
|
|
14
11
|
return bytesAsString;
|
|
15
12
|
}
|
|
16
13
|
const te = new TextDecoder(encoding);
|
|
17
14
|
return te.decode(toBuffer(bytesAsString));
|
|
18
15
|
},
|
|
19
|
-
encode
|
|
20
|
-
|
|
21
|
-
/** @type {string} */ encoding = "utf-8") => {
|
|
22
|
-
if (!(/utf\-?8/i.test(encoding))) {
|
|
16
|
+
encode(text, encoding = "utf-8") {
|
|
17
|
+
if (!/utf\-?8/i.test(encoding)) {
|
|
23
18
|
throw new Error(`Encoding ${encoding} not supported`);
|
|
24
19
|
}
|
|
25
20
|
const te = new TextEncoder();
|
|
@@ -30,15 +25,14 @@ export const RawBuffer = {
|
|
|
30
25
|
}
|
|
31
26
|
return a.join("");
|
|
32
27
|
},
|
|
33
|
-
toBase64Async(
|
|
34
|
-
|
|
35
|
-
return new Promise < string > ((resolve, reject) => {
|
|
28
|
+
toBase64Async(blob, asDataUrl = false) {
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
36
30
|
const reader = new FileReader();
|
|
37
31
|
reader.onerror = () => {
|
|
38
32
|
reject(reader.error);
|
|
39
33
|
};
|
|
40
34
|
reader.onload = () => {
|
|
41
|
-
const
|
|
35
|
+
const text = reader.result;
|
|
42
36
|
if (asDataUrl) {
|
|
43
37
|
resolve(text);
|
|
44
38
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RawBuffer.js","sourceRoot":"","sources":["../../../src/mime-parser/encoder/RawBuffer.
|
|
1
|
+
{"version":3,"file":"RawBuffer.js","sourceRoot":"","sources":["../../../src/mime-parser/encoder/RawBuffer.ts"],"names":[],"mappings":"AAAA,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAe,EAAE;IAC3C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,MAAM,CACF,aAAqB,EACrB,WAAmB,OAAO;QAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,aAAa,CAAC;QACzB,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;QACrC,OAAO,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CACF,IAAY,EACZ,WAAmB,OAAO;QAE1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,gBAAgB,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAa,EAAE,CAAC;QACvB,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC3B,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,aAAa,CACT,IAAU,EACV,YAAqB,KAAK;QAE1B,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/C,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;gBAClB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC,CAAC;YACF,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;gBACb,MAAM,IAAI,GAAW,MAAM,CAAC,MAAgB,CAAC;gBACjD,IAAI,SAAS,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,CAAC;oBACd,OAAO;gBACX,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC;YACF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC"}
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
* @param {string} base64Data
|
|
4
|
-
* @param {string} contentType
|
|
5
|
-
* @returns
|
|
6
|
-
*/
|
|
7
|
-
export function base64toBlob(base64Data: string, contentType: string): any;
|
|
1
|
+
export declare function base64toBlob(base64Data: string, contentType: string): Blob;
|
|
8
2
|
//# sourceMappingURL=base64-to-blob.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base64-to-blob.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/encoder/base64-to-blob.
|
|
1
|
+
{"version":3,"file":"base64-to-blob.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/encoder/base64-to-blob.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAmB1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base64-to-blob.js","sourceRoot":"","sources":["../../../src/mime-parser/encoder/base64-to-blob.
|
|
1
|
+
{"version":3,"file":"base64-to-blob.js","sourceRoot":"","sources":["../../../src/mime-parser/encoder/base64-to-blob.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,WAAmB;IAChE,WAAW,GAAG,WAAW,IAAI,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC;IACvB,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IACvD,MAAM,UAAU,GAAiB,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAExD,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,WAAW,CAAC,CAAC;QAErD,MAAM,KAAK,GAAa,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;QAC/C,KAAK,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;YAC1D,KAAK,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,UAAiB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
declare function encode(text: any): string;
|
|
7
|
-
declare function decode(input: any): any;
|
|
8
|
-
export {};
|
|
1
|
+
export declare const quotedPrintable: {
|
|
2
|
+
encode: (text: string) => string;
|
|
3
|
+
decode: (input: string) => string;
|
|
4
|
+
version: string;
|
|
5
|
+
};
|
|
9
6
|
//# sourceMappingURL=quoted-printable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quoted-printable.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/encoder/quoted-printable.
|
|
1
|
+
{"version":3,"file":"quoted-printable.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/encoder/quoted-printable.ts"],"names":[],"mappings":"AA+GA,eAAO,MAAM,eAAe;mBA9EE,MAAM,KAAG,MAAM;oBA7Bd,MAAM,KAAG,MAAM;;CA+G7C,CAAC"}
|
|
@@ -1,35 +1,20 @@
|
|
|
1
|
-
// Original Source Code: https://github.com/mathiasbynens/quoted-printable/blob/master/quoted-printable.js
|
|
2
1
|
const stringFromCharCode = String.fromCharCode;
|
|
3
2
|
const decode = function (input) {
|
|
4
3
|
return input
|
|
5
|
-
// https://tools.ietf.org/html/rfc2045#section-6.7, rule 3:
|
|
6
|
-
// “Therefore, when decoding a `Quoted-Printable` body, any trailing white
|
|
7
|
-
// space on a line must be deleted, as it will necessarily have been added
|
|
8
|
-
// by intermediate transport agents.”
|
|
9
4
|
.replace(/[\t\x20]$/gm, '')
|
|
10
|
-
// Remove hard line breaks preceded by `=`. Proper `Quoted-Printable`-
|
|
11
|
-
// encoded data only contains CRLF line endings, but for compatibility
|
|
12
|
-
// reasons we support separate CR and LF too.
|
|
13
5
|
.replace(/=(?:\r\n?|\n|$)/g, '')
|
|
14
|
-
// Decode escape sequences of the form `=XX` where `XX` is any
|
|
15
|
-
// combination of two hexidecimal digits. For optimal compatibility,
|
|
16
|
-
// lowercase hexadecimal digits are supported as well. See
|
|
17
|
-
// https://tools.ietf.org/html/rfc2045#section-6.7, note 1.
|
|
18
6
|
.replace(/=([a-fA-F0-9]{2})/g, function ($0, $1) {
|
|
19
7
|
const codePoint = parseInt($1, 16);
|
|
20
8
|
return stringFromCharCode(codePoint);
|
|
21
9
|
});
|
|
22
10
|
};
|
|
23
|
-
const handleTrailingCharacters = function (
|
|
24
|
-
/** @type {string} */
|
|
25
|
-
text) {
|
|
11
|
+
const handleTrailingCharacters = function (text) {
|
|
26
12
|
return text
|
|
27
|
-
.replace(/\x20$/, '=20')
|
|
28
|
-
.replace(/\t$/, '=09');
|
|
13
|
+
.replace(/\x20$/, '=20')
|
|
14
|
+
.replace(/\t$/, '=09');
|
|
29
15
|
};
|
|
30
16
|
const regexUnsafeSymbols = /[\0-\x08\n-\x1F=\x7F-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
|
31
17
|
const encode = function (text) {
|
|
32
|
-
// Encode symbols that are definitely unsafe (i.e. unsafe in any context).
|
|
33
18
|
const encoded = text.replace(regexUnsafeSymbols, function (symbol) {
|
|
34
19
|
if (symbol > '\xFF') {
|
|
35
20
|
throw RangeError('`quotedPrintable.encode()` expects extended ASCII input only. ' +
|
|
@@ -41,7 +26,6 @@ const encode = function (text) {
|
|
|
41
26
|
return '=' + ('0' + hexadecimal).slice(-2);
|
|
42
27
|
});
|
|
43
28
|
const LINE_LENGTH = 75;
|
|
44
|
-
// Limit lines to 76 characters (not counting the CRLF line endings).
|
|
45
29
|
const lines = encoded.split(/\r\n?|\n/g);
|
|
46
30
|
let lineIndex = -1;
|
|
47
31
|
const lineCount = lines.length;
|
|
@@ -49,14 +33,10 @@ const encode = function (text) {
|
|
|
49
33
|
let buffer;
|
|
50
34
|
while (++lineIndex < lineCount) {
|
|
51
35
|
const line = lines[lineIndex];
|
|
52
|
-
// Leave room for the trailing `=` for soft line breaks.
|
|
53
36
|
let index = 0;
|
|
54
37
|
const length = line.length;
|
|
55
38
|
while (index < length) {
|
|
56
39
|
buffer = encoded.slice(index, index + LINE_LENGTH);
|
|
57
|
-
// If this line ends with `=`, optionally followed by a single uppercase
|
|
58
|
-
// hexadecimal digit, we broke an escape sequence in half. Fix it by
|
|
59
|
-
// moving these characters to the next line.
|
|
60
40
|
if (/=$/.test(buffer)) {
|
|
61
41
|
buffer = buffer.slice(0, LINE_LENGTH - 1);
|
|
62
42
|
index += LINE_LENGTH - 1;
|
|
@@ -71,27 +51,16 @@ const encode = function (text) {
|
|
|
71
51
|
result.push(buffer);
|
|
72
52
|
}
|
|
73
53
|
}
|
|
74
|
-
// Encode space and tab characters at the end of encoded lines. Note that
|
|
75
|
-
// with the current implementation, this can only occur at the very end of
|
|
76
|
-
// the encoded string — every other line ends with `=` anyway.
|
|
77
54
|
const lastLineLength = buffer.length;
|
|
78
55
|
if (/[\t\x20]$/.test(buffer)) {
|
|
79
|
-
// There’s a space or a tab at the end of the last encoded line. Remove
|
|
80
|
-
// this line from the `result` array, as it needs to change.
|
|
81
56
|
result.pop();
|
|
82
57
|
if (lastLineLength + 2 <= LINE_LENGTH + 1) {
|
|
83
|
-
// It’s possible to encode the character without exceeding the line
|
|
84
|
-
// length limit.
|
|
85
58
|
result.push(handleTrailingCharacters(buffer));
|
|
86
59
|
}
|
|
87
60
|
else {
|
|
88
|
-
// It’s not possible to encode the character without exceeding the line
|
|
89
|
-
// length limit. Remvoe the character from the line, and insert a new
|
|
90
|
-
// line that contains only the encoded character.
|
|
91
61
|
result.push(buffer.slice(0, lastLineLength - 1), handleTrailingCharacters(buffer.slice(lastLineLength - 1, lastLineLength)));
|
|
92
62
|
}
|
|
93
63
|
}
|
|
94
|
-
// `Quoted-Printable` uses CRLF.
|
|
95
64
|
return result.join('=\r\n');
|
|
96
65
|
};
|
|
97
66
|
export const quotedPrintable = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quoted-printable.js","sourceRoot":"","sources":["../../../src/mime-parser/encoder/quoted-printable.
|
|
1
|
+
{"version":3,"file":"quoted-printable.js","sourceRoot":"","sources":["../../../src/mime-parser/encoder/quoted-printable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
declare function decode(text: string): string;
|
|
6
|
-
export {};
|
|
1
|
+
export declare const wordEncoding: {
|
|
2
|
+
decode: (text: string) => string;
|
|
3
|
+
encode: (word: string, ifNeeded?: boolean) => string;
|
|
4
|
+
};
|
|
7
5
|
//# sourceMappingURL=word-encoding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"word-encoding.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/encoder/word-encoding.
|
|
1
|
+
{"version":3,"file":"word-encoding.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/encoder/word-encoding.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,YAAY;mBArBf,MAAM,KACb,MAAM;mBAuBU,MAAM,aAAY,OAAO,KAAW,MAAM;CAW5D,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { RawBuffer } from "./RawBuffer.js";
|
|
2
2
|
const isEncodedRegEx = /\=\?([^\?\s]+)\?([^\?\s]{1})\?([^\s\?]+)\?\=\s*/gm;
|
|
3
3
|
const hexToUnicode = /(\=([0-9a-f]{2}))|(\_)/gmi;
|
|
4
|
-
const decode = (
|
|
5
|
-
|
|
6
|
-
return text.replace(isEncodedRegEx, (matched, encoding, format, /** @type {string} */ buffer) => {
|
|
4
|
+
const decode = (text) => {
|
|
5
|
+
return text.replace(isEncodedRegEx, (matched, encoding, format, buffer) => {
|
|
7
6
|
if (/b/i.test(format)) {
|
|
8
7
|
return RawBuffer.decode(atob(buffer), encoding);
|
|
9
8
|
}
|
|
10
9
|
if (/q/i.test(format)) {
|
|
11
|
-
const replaced = buffer.replace(hexToUnicode, (m, group,
|
|
10
|
+
const replaced = buffer.replace(hexToUnicode, (m, group, code) => {
|
|
12
11
|
if (m === "_") {
|
|
13
12
|
return " ";
|
|
14
13
|
}
|
|
@@ -22,7 +21,7 @@ const decode = (
|
|
|
22
21
|
const isSimpleText = /[0-9a-zA-Z\x20]/;
|
|
23
22
|
export const wordEncoding = {
|
|
24
23
|
decode,
|
|
25
|
-
encode: (
|
|
24
|
+
encode: (word, ifNeeded = false) => {
|
|
26
25
|
if (ifNeeded) {
|
|
27
26
|
if (isSimpleText.test(word)) {
|
|
28
27
|
return word;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"word-encoding.js","sourceRoot":"","sources":["../../../src/mime-parser/encoder/word-encoding.
|
|
1
|
+
{"version":3,"file":"word-encoding.js","sourceRoot":"","sources":["../../../src/mime-parser/encoder/word-encoding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,cAAc,GAAG,mDAAmD,CAAC;AAE3E,MAAM,YAAY,GAAG,2BAA2B,CAAC;AAEjD,MAAM,MAAM,GAAG,CACX,IAAY,EACN,EAAE;IACR,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,OAAe,EAAE,QAAgB,EAAE,MAAc,EAAE,MAAc,EAAU,EAAE;QAC9G,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAS,EAAE,KAAa,EAAE,IAAY,EAAU,EAAE;gBAC7F,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;oBACZ,OAAO,GAAG,CAAC;gBACf,CAAC;gBACD,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAEvC,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,MAAM;IAEN,MAAM,EAAE,CAAC,IAAY,EAAE,WAAoB,KAAK,EAAU,EAAE;QAExD,IAAG,QAAQ,EAAE,CAAC;YACV,IAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACvC,CAAC;CACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsePairs.d.ts","sourceRoot":"","sources":["../../src/mime-parser/parsePairs.
|
|
1
|
+
{"version":3,"file":"parsePairs.d.ts","sourceRoot":"","sources":["../../src/mime-parser/parsePairs.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,GACnB,MAAM,MAAM,EACZ,YAAY,MAAM,KACnB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAAE,QAAQ,IAAI,MAAM,CAAA;CA6B/C,CAAC"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { tokenize, tokenizeMax } from "./tokenizer.js";
|
|
2
|
-
export const parsePairs = (
|
|
3
|
-
/** @type {string} */ text,
|
|
4
|
-
/** @type {string} */ emptyName) => {
|
|
2
|
+
export const parsePairs = (text, emptyName) => {
|
|
5
3
|
const pairs = {
|
|
6
4
|
toString() {
|
|
7
5
|
return text;
|
|
@@ -16,17 +14,15 @@ export const parsePairs = (
|
|
|
16
14
|
let [key, value] = items;
|
|
17
15
|
if (items.length === 1) {
|
|
18
16
|
value = key;
|
|
19
|
-
key = emptyName
|
|
17
|
+
key = emptyName ?? key;
|
|
20
18
|
}
|
|
21
19
|
try {
|
|
22
20
|
if (value.startsWith('"')) {
|
|
23
21
|
value = JSON.parse(value);
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
|
-
catch
|
|
27
|
-
// ignore
|
|
24
|
+
catch {
|
|
28
25
|
}
|
|
29
|
-
// pairs[key] = wordEncoding.decode(value);
|
|
30
26
|
pairs[key] = value;
|
|
31
27
|
}
|
|
32
28
|
return pairs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsePairs.js","sourceRoot":"","sources":["../../src/mime-parser/parsePairs.
|
|
1
|
+
{"version":3,"file":"parsePairs.js","sourceRoot":"","sources":["../../src/mime-parser/parsePairs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAG,CACtB,IAAY,EACZ,SAAkB,EAC6B,EAAE;IACjD,MAAM,KAAK,GAAG;QACV,QAAQ;YACJ,OAAO,IAAI,CAAC;QAChB,CAAC;KAC+C,CAAC;IAErD,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM;QACV,CAAC;QACD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,KAAK,GAAG,GAAG,CAAC;YACZ,GAAG,GAAG,SAAS,IAAI,GAAG,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -1,24 +1,18 @@
|
|
|
1
1
|
export default class LineStream {
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @returns {AsyncGenerator<string, any, any>}
|
|
5
|
-
*/
|
|
2
|
+
protected g?: AsyncGenerator<string, any, any>;
|
|
6
3
|
read(): AsyncGenerator<string, any, any>;
|
|
7
|
-
/**
|
|
8
|
-
* @returns {AsyncGenerator<string, any, any>}
|
|
9
|
-
*/
|
|
10
4
|
readRFCHeaders(): AsyncGenerator<string, any, any>;
|
|
11
|
-
|
|
12
|
-
lines(): AsyncGenerator<string, any, any>;
|
|
5
|
+
protected lines(): AsyncGenerator<string, any, any>;
|
|
13
6
|
}
|
|
14
|
-
export class StringLineStream extends LineStream {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
export declare class StringLineStream extends LineStream {
|
|
8
|
+
protected text: string;
|
|
9
|
+
protected trimR?: boolean;
|
|
10
|
+
constructor(text: string, trimR?: boolean);
|
|
11
|
+
lines(): AsyncGenerator<string, any, any>;
|
|
18
12
|
}
|
|
19
|
-
export class ReadableLineStream extends LineStream {
|
|
13
|
+
export declare class ReadableLineStream extends LineStream {
|
|
14
|
+
protected readable: ReadableStream;
|
|
20
15
|
constructor(readable: ReadableStream);
|
|
21
|
-
|
|
22
|
-
readable: ReadableStream;
|
|
16
|
+
lines(): AsyncGenerator<string, any, any>;
|
|
23
17
|
}
|
|
24
18
|
//# sourceMappingURL=LineStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineStream.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/stream/LineStream.
|
|
1
|
+
{"version":3,"file":"LineStream.d.ts","sourceRoot":"","sources":["../../../src/mime-parser/stream/LineStream.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,UAAU;IAC3B,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAKxC,IAAI,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;IAcxC,cAAc,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;IAuBzD,SAAS,CAAC,KAAK,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;CAGtD;AAED,qBAAa,gBAAiB,SAAQ,UAAU;IAGxC,SAAS,CAAC,IAAI,EAAE,MAAM;IACtB,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO;gBADf,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,OAAO;IAMtB,KAAK,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;CAWnD;AAED,qBAAa,kBAAmB,SAAQ,UAAU;IAC9C,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC;gBAEvB,QAAQ,EAAE,cAAc;IAM7B,KAAK,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;CA8BnD"}
|
|
@@ -1,124 +1,89 @@
|
|
|
1
|
-
var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
|
|
2
|
-
var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
|
|
3
|
-
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
|
|
4
|
-
var g = generator.apply(thisArg, _arguments || []), i, q = [];
|
|
5
|
-
return i = {}, verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
|
|
6
|
-
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
|
|
7
|
-
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
|
|
8
|
-
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
|
|
9
|
-
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
|
|
10
|
-
function fulfill(value) { resume("next", value); }
|
|
11
|
-
function reject(value) { resume("throw", value); }
|
|
12
|
-
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
|
|
13
|
-
};
|
|
14
1
|
import { tokenize } from "../tokenizer.js";
|
|
15
2
|
export default class LineStream {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const g = (_a = this.g) !== null && _a !== void 0 ? _a : (this.g = this.lines());
|
|
23
|
-
for (;;) {
|
|
24
|
-
const { value, done } = yield __await(g.next());
|
|
25
|
-
if (done) {
|
|
26
|
-
break;
|
|
27
|
-
}
|
|
28
|
-
yield yield __await(value);
|
|
3
|
+
async *read() {
|
|
4
|
+
const g = this.g ??= this.lines();
|
|
5
|
+
for (;;) {
|
|
6
|
+
const { value, done } = await g.next();
|
|
7
|
+
if (done) {
|
|
8
|
+
break;
|
|
29
9
|
}
|
|
30
|
-
|
|
10
|
+
yield value;
|
|
11
|
+
}
|
|
31
12
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
if (/^\s+/i.test(value)) {
|
|
46
|
-
last += value.trimStart();
|
|
47
|
-
continue;
|
|
48
|
-
}
|
|
49
|
-
if (last) {
|
|
50
|
-
yield yield __await(last);
|
|
51
|
-
}
|
|
52
|
-
last = value;
|
|
13
|
+
async *readRFCHeaders() {
|
|
14
|
+
let last;
|
|
15
|
+
const g = this.g ??= this.lines();
|
|
16
|
+
for (;;) {
|
|
17
|
+
const { value, done } = await g.next();
|
|
18
|
+
if (done) {
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
if (/^\s+/i.test(value)) {
|
|
22
|
+
last = last + value.trimStart();
|
|
23
|
+
continue;
|
|
53
24
|
}
|
|
54
25
|
if (last) {
|
|
55
|
-
yield
|
|
26
|
+
yield last;
|
|
56
27
|
}
|
|
57
|
-
|
|
28
|
+
last = value;
|
|
29
|
+
}
|
|
30
|
+
if (last) {
|
|
31
|
+
yield last;
|
|
32
|
+
}
|
|
58
33
|
}
|
|
59
|
-
/** @returns {AsyncGenerator<string, any,any>} */
|
|
60
34
|
lines() {
|
|
61
35
|
throw new Error("Not Implemented");
|
|
62
36
|
}
|
|
63
37
|
}
|
|
64
38
|
export class StringLineStream extends LineStream {
|
|
65
|
-
constructor(
|
|
66
|
-
/** @type {string} */ text,
|
|
67
|
-
/** @type {boolean} */ trimR) {
|
|
39
|
+
constructor(text, trimR) {
|
|
68
40
|
super();
|
|
69
41
|
this.text = text;
|
|
70
42
|
this.trimR = trimR;
|
|
71
43
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return __asyncGenerator(this, arguments, function* lines_1() {
|
|
75
|
-
if (this.trimR) {
|
|
76
|
-
for (const iterator of tokenize(this.text, "\n")) {
|
|
77
|
-
yield yield __await(iterator.replace(/\r*$/, ""));
|
|
78
|
-
}
|
|
79
|
-
return yield __await(void 0);
|
|
80
|
-
}
|
|
44
|
+
async *lines() {
|
|
45
|
+
if (this.trimR) {
|
|
81
46
|
for (const iterator of tokenize(this.text, "\n")) {
|
|
82
|
-
yield
|
|
47
|
+
yield iterator.replace(/\r*$/, "");
|
|
83
48
|
}
|
|
84
|
-
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
for (const iterator of tokenize(this.text, "\n")) {
|
|
52
|
+
yield iterator;
|
|
53
|
+
}
|
|
85
54
|
}
|
|
86
55
|
}
|
|
87
56
|
export class ReadableLineStream extends LineStream {
|
|
88
|
-
constructor(
|
|
57
|
+
constructor(readable) {
|
|
89
58
|
super();
|
|
90
59
|
this.readable = readable;
|
|
91
60
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (readerDone) {
|
|
105
|
-
break;
|
|
106
|
-
}
|
|
107
|
-
const remainder = chunk.substr(startIndex);
|
|
108
|
-
({ value: chunk, done: readerDone } = yield __await(reader.read()));
|
|
109
|
-
chunk =
|
|
110
|
-
remainder + (chunk ? utf8Decoder.decode(chunk, { stream: true }) : "");
|
|
111
|
-
startIndex = re.lastIndex = 0;
|
|
112
|
-
continue;
|
|
61
|
+
async *lines() {
|
|
62
|
+
const utf8Decoder = new TextDecoder("utf-8");
|
|
63
|
+
const reader = this.readable.getReader();
|
|
64
|
+
let { value: chunk, done: readerDone } = await reader.read();
|
|
65
|
+
chunk = chunk ? utf8Decoder.decode(chunk, { stream: true }) : "";
|
|
66
|
+
const re = /\r\n|\n|\r/gm;
|
|
67
|
+
let startIndex = 0;
|
|
68
|
+
for (;;) {
|
|
69
|
+
const result = re.exec(chunk);
|
|
70
|
+
if (!result) {
|
|
71
|
+
if (readerDone) {
|
|
72
|
+
break;
|
|
113
73
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
74
|
+
const remainder = chunk.substr(startIndex);
|
|
75
|
+
({ value: chunk, done: readerDone } = await reader.read());
|
|
76
|
+
chunk =
|
|
77
|
+
remainder + (chunk ? utf8Decoder.decode(chunk, { stream: true }) : "");
|
|
78
|
+
startIndex = re.lastIndex = 0;
|
|
79
|
+
continue;
|
|
120
80
|
}
|
|
121
|
-
|
|
81
|
+
yield chunk.substring(startIndex, result.index);
|
|
82
|
+
startIndex = re.lastIndex;
|
|
83
|
+
}
|
|
84
|
+
if (startIndex < chunk.length) {
|
|
85
|
+
yield chunk.substr(startIndex);
|
|
86
|
+
}
|
|
122
87
|
}
|
|
123
88
|
}
|
|
124
89
|
//# sourceMappingURL=LineStream.js.map
|