@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
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { tokenize } from "../tokenizer.js";
|
|
2
2
|
|
|
3
3
|
export default class LineStream {
|
|
4
|
-
|
|
5
|
-
/** @type {AsyncGenerator<string, any, any>} */ g;
|
|
4
|
+
protected g?: AsyncGenerator<string, any, any>;
|
|
6
5
|
|
|
7
6
|
/**
|
|
8
7
|
* @returns {AsyncGenerator<string, any, any>}
|
|
9
8
|
*/
|
|
10
|
-
async *read() {
|
|
9
|
+
async *read(): AsyncGenerator<string, any, any> {
|
|
11
10
|
const g = this.g ??= this.lines();
|
|
12
11
|
for(;;) {
|
|
13
12
|
const { value , done } = await g.next();
|
|
@@ -21,8 +20,8 @@ export default class LineStream {
|
|
|
21
20
|
/**
|
|
22
21
|
* @returns {AsyncGenerator<string, any, any>}
|
|
23
22
|
*/
|
|
24
|
-
async *readRFCHeaders() {
|
|
25
|
-
let last;
|
|
23
|
+
async *readRFCHeaders(): AsyncGenerator<string, any, any> {
|
|
24
|
+
let last: string | undefined;
|
|
26
25
|
const g = this.g ??= this.lines();
|
|
27
26
|
for(;;) {
|
|
28
27
|
const { value , done } = await g.next();
|
|
@@ -30,7 +29,7 @@ export default class LineStream {
|
|
|
30
29
|
break;
|
|
31
30
|
}
|
|
32
31
|
if (/^\s+/i.test(value)) {
|
|
33
|
-
last
|
|
32
|
+
last = last + value.trimStart();
|
|
34
33
|
continue;
|
|
35
34
|
}
|
|
36
35
|
if (last) {
|
|
@@ -44,26 +43,22 @@ export default class LineStream {
|
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
/** @returns {AsyncGenerator<string, any,any>} */
|
|
47
|
-
lines() {
|
|
46
|
+
protected lines(): AsyncGenerator<string, any, any> {
|
|
48
47
|
throw new Error("Not Implemented");
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
|
|
52
51
|
export class StringLineStream extends LineStream {
|
|
53
52
|
|
|
54
|
-
/** @type {string} */ text;
|
|
55
|
-
|
|
56
53
|
constructor(
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
protected text: string,
|
|
55
|
+
protected trimR?: boolean
|
|
59
56
|
) {
|
|
60
57
|
super();
|
|
61
|
-
this.text = text;
|
|
62
|
-
this.trimR = trimR;
|
|
63
58
|
}
|
|
64
59
|
|
|
65
60
|
/** @returns {AsyncGenerator<string, any, any>} */
|
|
66
|
-
async *lines() {
|
|
61
|
+
async *lines(): AsyncGenerator<string, any, any> {
|
|
67
62
|
if (this.trimR) {
|
|
68
63
|
for (const iterator of tokenize(this.text, "\n")) {
|
|
69
64
|
yield iterator.replace(/\r*$/, "");
|
|
@@ -77,17 +72,15 @@ export class StringLineStream extends LineStream {
|
|
|
77
72
|
}
|
|
78
73
|
|
|
79
74
|
export class ReadableLineStream extends LineStream {
|
|
75
|
+
protected readable: ReadableStream;
|
|
80
76
|
|
|
81
|
-
|
|
82
|
-
readable;
|
|
83
|
-
|
|
84
|
-
constructor( /** @type {ReadableStream} */ readable) {
|
|
77
|
+
constructor(readable: ReadableStream) {
|
|
85
78
|
super();
|
|
86
79
|
this.readable = readable;
|
|
87
80
|
}
|
|
88
81
|
|
|
89
82
|
/** @returns {AsyncGenerator<string, any, any>} */
|
|
90
|
-
async *lines() {
|
|
83
|
+
async *lines(): AsyncGenerator<string, any, any> {
|
|
91
84
|
const utf8Decoder = new TextDecoder("utf-8");
|
|
92
85
|
const reader = this.readable.getReader();
|
|
93
86
|
let { value: chunk, done: readerDone } = await reader.read();
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export default class TextWriter {
|
|
2
|
+
writeLine(line: string): void {
|
|
3
|
+
throw new Error("Not Implemented");
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
writeLineMax80Chars(line: string, padPrefix = "") {
|
|
7
|
+
let prefix = "";
|
|
8
|
+
for(;;) {
|
|
9
|
+
if (line.length <= 80) {
|
|
10
|
+
this.writeLine(prefix + line);
|
|
11
|
+
break;
|
|
12
|
+
}
|
|
13
|
+
const firstSegment = line.substring(0, 80);
|
|
14
|
+
this.writeLine(prefix + firstSegment);
|
|
15
|
+
line = line.substring(80);
|
|
16
|
+
prefix = padPrefix;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class BlobWriter extends TextWriter {
|
|
22
|
+
lines: string[] = [];
|
|
23
|
+
|
|
24
|
+
writeLine(line: string): void {
|
|
25
|
+
this.lines.push(line);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
toBlob(): Blob {
|
|
29
|
+
const all = this.lines.join("\n");
|
|
30
|
+
return new Blob([all], {});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
toString(): string {
|
|
34
|
+
return this.lines.join("\n");
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export function
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
export function* tokenize(
|
|
2
|
+
text: string,
|
|
3
|
+
sep: string = ","
|
|
4
|
+
): Generator<string> {
|
|
4
5
|
let start = 0;
|
|
5
|
-
for(;;) {
|
|
6
|
+
for (;;) {
|
|
6
7
|
const index = text.indexOf(sep, start);
|
|
7
8
|
if (index === -1) {
|
|
8
9
|
break;
|
|
@@ -11,43 +12,45 @@ export function *tokenize (
|
|
|
11
12
|
start = index + 1;
|
|
12
13
|
}
|
|
13
14
|
yield text.substring(start);
|
|
14
|
-
}
|
|
15
|
+
}
|
|
15
16
|
|
|
16
|
-
export function
|
|
17
|
-
|
|
18
|
-
) {
|
|
17
|
+
export function* tokenizeRFCHeaders(
|
|
18
|
+
text: string
|
|
19
|
+
): Generator<string> {
|
|
19
20
|
let start = 0;
|
|
20
21
|
const sep = "\n";
|
|
21
|
-
let last;
|
|
22
|
-
let stop =
|
|
22
|
+
let last: string | null = null;
|
|
23
|
+
let stop = false;
|
|
23
24
|
do {
|
|
24
25
|
const index = text.indexOf(sep, start);
|
|
25
26
|
stop = index === -1;
|
|
26
27
|
const line = stop ? text.substring(start) : text.substring(start, index);
|
|
27
28
|
if (/^\s+/i.test(line)) {
|
|
28
|
-
last
|
|
29
|
+
if (last !== null) {
|
|
30
|
+
last += line.trimStart();
|
|
31
|
+
}
|
|
29
32
|
continue;
|
|
30
33
|
}
|
|
31
|
-
if (last) {
|
|
34
|
+
if (last !== null) {
|
|
32
35
|
yield last;
|
|
33
36
|
}
|
|
34
37
|
last = line;
|
|
35
38
|
start = index + 1;
|
|
36
39
|
} while (stop);
|
|
37
|
-
if (last) {
|
|
40
|
+
if (last !== null) {
|
|
38
41
|
yield last;
|
|
39
42
|
}
|
|
40
|
-
}
|
|
41
|
-
|
|
43
|
+
}
|
|
42
44
|
|
|
43
45
|
export function tokenizeMax(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
text: string,
|
|
47
|
+
sep: string,
|
|
48
|
+
max: number = Number.MAX_SAFE_INTEGER
|
|
49
|
+
): string[] {
|
|
47
50
|
let start = 0;
|
|
48
|
-
const items = [];
|
|
51
|
+
const items: string[] = [];
|
|
49
52
|
max--;
|
|
50
|
-
for(;;) {
|
|
53
|
+
for (;;) {
|
|
51
54
|
const index = text.indexOf(sep, start);
|
|
52
55
|
if (index === -1) {
|
|
53
56
|
break;
|
|
@@ -60,4 +63,4 @@ export function tokenizeMax(
|
|
|
60
63
|
}
|
|
61
64
|
items.push(text.substring(start));
|
|
62
65
|
return items;
|
|
63
|
-
}
|
|
66
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"compilerOptions": {
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"outDir": "dist",
|
|
7
|
-
"target": "ES6",
|
|
8
|
-
"module": "ES2022",
|
|
9
|
-
"sourceMap": true,
|
|
3
|
+
"target": "es2022",
|
|
4
|
+
"module":"es2022",
|
|
5
|
+
"rootDir": "./src/",
|
|
10
6
|
"incremental": true,
|
|
11
|
-
"
|
|
7
|
+
"sourceMap": true,
|
|
12
8
|
"declaration": true,
|
|
13
9
|
"declarationMap": true,
|
|
10
|
+
"moduleResolution": "bundler",
|
|
11
|
+
"outDir": "dist",
|
|
12
|
+
"strict": false,
|
|
13
|
+
"tsBuildInfoFile": "./dist/.tsbuildinfo",
|
|
14
|
+
"experimentalDecorators": true,
|
|
15
|
+
"emitDecoratorMetadata": true,
|
|
16
|
+
"allowSyntheticDefaultImports": true,
|
|
17
|
+
"useDefineForClassFields": false,
|
|
18
|
+
"forceConsistentCasingInFileNames": true,
|
|
19
|
+
"removeComments": true,
|
|
20
|
+
"importHelpers": true,
|
|
21
|
+
"skipLibCheck": true,
|
|
22
|
+
"noUnusedLocals": true,
|
|
23
|
+
"jsx": "react",
|
|
24
|
+
"jsxFactory": "XNode.create",
|
|
25
|
+
"types": ["node"],
|
|
14
26
|
"lib": [
|
|
15
|
-
"
|
|
27
|
+
"es6",
|
|
28
|
+
"dom",
|
|
29
|
+
"ES2020",
|
|
30
|
+
"ES2017.String",
|
|
31
|
+
"ESNext.Disposable",
|
|
32
|
+
"ES2021.WeakRef"
|
|
16
33
|
]
|
|
17
34
|
},
|
|
18
35
|
"include": [
|
|
19
36
|
"src/**/*"
|
|
37
|
+
],
|
|
38
|
+
"exclude": [
|
|
39
|
+
"node_modules",
|
|
40
|
+
"tests"
|
|
20
41
|
]
|
|
21
42
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"program":{"fileNames":["../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es5.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.decorators.d.ts","../../../../../../../../usr/lib/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/QueryIterator.js","../src/mime-parser/tokenizer.js","../src/mime-parser/stream/LineStream.js","../src/ical-parser/ics.ts","../src/ical-parser/parseDate.ts","../src/ical-parser/Calender.ts","../src/mime-parser/parsePairs.js","../src/mime-parser/HeaderContentType.js","../src/mime-parser/encoder/RawBuffer.js","../src/mime-parser/encoder/word-encoding.js","../src/mime-parser/HeaderContentDisposition.js","../src/mime-parser/encoder/base64-to-blob.js","../src/mime-parser/encoder/quoted-printable.js","../src/mime-parser/stream/TextWriter.js","../src/mime-parser/MimeNode.js","../src/mime-parser/AttachmentFile.js","../src/mime-parser/MimeMessage.js","../src/tests/ical-parser/cal.test.js","../src/tests/mime/lines-test.js","../src/tests/mime/message1.js","../src/tests/mime/message2.js","../src/tests/mime/message3.js","../src/tests/mime/pairs.js","../src/tests/mime/parse-headers.js","../src/tests/mime/parse-headers2.js","../src/tests/mime/word-encoding-test.js"],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4",{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"d78c310bfde534f8aef330e72d30fd96a07fa76364a5aa6f363a8760396475d0","signature":"574ed5b8a381ec55fe8052462bfc53437d2234c743f1b00b29c8fc8e46c77142"},{"version":"4f29f7c3d451d06d7ad03c87a4669feb88d40cd76e12196939bb4b64b3467dd4","signature":"aaedc1d2ee9a532850eb3c6473f0b14e4ac7316d90e4e3e3791e6bb1b82144db"},{"version":"a6f9da310a124da5f41b7875ec0c718d01281a2cb9f7d7683758b0167f243eac","signature":"462cf03736edfaf03de39c354b82f35b520a12b33f9fe9961093a2478d13601f"},{"version":"79125c55179c3fed1cff5f1a8ad63677cec615ecaa231746001dd3ad86099316","signature":"a063960f4bceb7a575b9064394cd44e907b62b144bf30fa877d7f593a4d9dfae"},{"version":"e52e80bf274dc8192d7bf320b8e6478f1d1b0578db8bb5524a49a474106bfdc5","signature":"14eb4be0762dfc364626ae7b02afee2e5deae62cd65d474d6c7b4d4da6bd9bf5"},{"version":"9c46b104d57705a5b9d11bee7dafc73646db74da4b2eb33b827685f09f09c594","signature":"1e2534356310a96bb124f505fe3eca547458a678f0f5eb4411fa4ebe13cde6ff"},{"version":"5a723fbf595f0207e35536889aeb6b644b0a71d0a16e434d3744880e312a99c0","signature":"afa45927c01d1168c72b47d88f35784a711ca30ec5b5666778d86165909b35b1"},{"version":"e95e3dff8b1cd0c17f9a71d71ab1a98e607ea2c95cee06a39682aae69e396504","signature":"72fe18ca34ce75033901b3cfb0ebe0baf88ee17911617e6dc75d652457ff48e7"},{"version":"b1ac01473d7b59a511d03771465b45888ccef606c559aea2ed295ddf30e8cde8","signature":"a45a481378470805da3fa7ce8cf33691ba25f16e3c032deda875b88a91ecaaa9"},{"version":"fcbd8cef267c42627c36f166fd39018060cea39d66cdb91c9663eae7b64ac508","signature":"1b9195f02cf202a581081fbfdc420ea20450bb8eb63f2795d764a6dec46ca06e"},{"version":"890078d31cdc373d6380968af312d2b7ef7431545683533f06fed5b459ca63d1","signature":"95046d1643075e9c571c8c0eadf0cd66de3a685b003110c3557f375eacc5bcb8"},{"version":"e8b930f9788e5d77e44989c0f752ceba5416bca71475887f838f81f80b1ef25e","signature":"695020a5b5f7120ded875ba31480f5ebb76e749f48fac1c3d36fc20da5910591"},{"version":"99439990bd6f9b0bca332c03be7b04de34605d4b3dcfe2ee7f5fc3a1d7531297","signature":"af8c62c1249888ecfd4698be40ff50964dff5e850840b4c618d3b3b456c695f7"},{"version":"fba98c766168655d4efce14edbd3582274fa29cbf674ceb21879c46593ffa318","signature":"17131504d505e8e22e3aa7646417b58d55e962108c214d72b71d3c7d181e3ef4"},{"version":"25fdcb657464f4f1c2a6c4d0b1f629207758773aee17eb874a6003da9e0cb390","signature":"c2af2b752155bd30dcc44dffeaaabe37793c45874800096694a34bce5aa3b09f"},{"version":"6eb51e78c64c343a9fa1f788df2d55d6a86caa07d924853ee283b8b27ae7894c","signature":"0299b47c4b21c7b6c71c8f6392e33d4f4690da763b56ee3b894541b5e89897c7"},{"version":"9a8fffce071de96d02ee972d30b233418f444f4191cf76facabb2b63fadae0c6","signature":"a880271a10585cbcbed58fac991d716f5a2555366d1a0bd10b9a1606528eeb9d"},{"version":"9c65a98fd9ef3f1d770b5c20ea61862fbe7518ba1a77106891ae55b732e442c0","signature":"f7869333ff40017ca7c4a34473e68f902f6c6014891b58bfd452691696d0c72c"},{"version":"a48e6bd95e59152b69542e9251a3e8fed0c750cf3583307080c444c5f3fdbc25","signature":"1bdfaf1b6406e1b827be5487a79a1e10b86f2ff62a3cf05e7d03ee246f667ba6"},{"version":"dbc342f59aab0b7ccfeb1d9812128ea15542c2a5f64aa96e47cd2b4a41df5ff6","signature":"f7869333ff40017ca7c4a34473e68f902f6c6014891b58bfd452691696d0c72c"},{"version":"76fda9cdc01cb86c6c76cd91289b6abbcbddbaebb38abcbf61439460ebb14db0","signature":"f7869333ff40017ca7c4a34473e68f902f6c6014891b58bfd452691696d0c72c"},{"version":"c58f8a2de9aead7cfcec56588f647fa6f2cd40d7c02d07ea6d89e3212fc0d293","signature":"f7869333ff40017ca7c4a34473e68f902f6c6014891b58bfd452691696d0c72c"},{"version":"5c4df6ee2462a3f0508423c5c05f829c087174748345947f0ae9ace7ec965b1d","signature":"1bdfaf1b6406e1b827be5487a79a1e10b86f2ff62a3cf05e7d03ee246f667ba6"},{"version":"544eb3f9b9d8f8b3e6e34023fb648016d03683d736954adb4614372cc2b13253","signature":"f7869333ff40017ca7c4a34473e68f902f6c6014891b58bfd452691696d0c72c"},{"version":"f796a1ae605b610c7ac3bdf77b3d446bb7ff36409d76cc70e04b6caa2fadb1ca","signature":"f7869333ff40017ca7c4a34473e68f902f6c6014891b58bfd452691696d0c72c"},{"version":"994c0994ce06d4f5bd25386338d30085f9a8da84af83cdd09cc67b0b14065cad","signature":"1bdfaf1b6406e1b827be5487a79a1e10b86f2ff62a3cf05e7d03ee246f667ba6"}],"root":[[14,39]],"options":{"allowJs":true,"declaration":true,"declarationMap":true,"module":7,"outDir":"./","skipDefaultLibCheck":true,"skipLibCheck":true,"sourceMap":true,"target":2},"fileIdsList":[[15,16,17,18],[28],[20,23],[20],[16,27,28,29],[16,21,22,23,24,25,26,27,29],[22],[15],[16,19],[16,28],[16,27,28],[23]],"referencedMap":[[19,1],[29,2],[24,3],[21,4],[30,5],[28,6],[23,7],[20,8],[16,8],[31,9],[32,8],[33,10],[34,11],[35,11],[36,4],[37,10],[38,10],[39,12]]},"version":"5.5.3"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { MimeNode } from "./MimeNode.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export class AttachmentFile extends File {
|
|
6
|
-
|
|
7
|
-
/** @type {"inline" | "attachment"} */
|
|
8
|
-
disposition;
|
|
9
|
-
|
|
10
|
-
/** @type {string} */
|
|
11
|
-
contentId;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Associated mime node if any
|
|
15
|
-
* @type {MimeNode}
|
|
16
|
-
*/
|
|
17
|
-
node;
|
|
18
|
-
|
|
19
|
-
constructor(
|
|
20
|
-
/** @type {BlobPart[]} */ fileBits,
|
|
21
|
-
/** @type {string} */ fileName,
|
|
22
|
-
/** @type {FilePropertyBag & { disposition?: "inline" | "attachment"; contentId?: string; }} */
|
|
23
|
-
options) {
|
|
24
|
-
super(fileBits, fileName, options);
|
|
25
|
-
this.contentId = options.contentId;
|
|
26
|
-
this.disposition = options.disposition;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { wordEncoding } from "./encoder/word-encoding.js";
|
|
2
|
-
import { parsePairs } from "./parsePairs.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export class HeaderContentDisposition {
|
|
6
|
-
|
|
7
|
-
/** @type {string} */ type;
|
|
8
|
-
/** @type {string} */ filename;
|
|
9
|
-
/** @type {string} */ name;
|
|
10
|
-
|
|
11
|
-
constructor(
|
|
12
|
-
/** @type {string} */ type,
|
|
13
|
-
/** @type {string} */ filename,
|
|
14
|
-
/** @type {string} */ name
|
|
15
|
-
) {
|
|
16
|
-
this.type = type;
|
|
17
|
-
this.filename = filename;
|
|
18
|
-
this.name = name;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
parse(/** @type {string} */ text) {
|
|
22
|
-
const items = parsePairs(text, "type");
|
|
23
|
-
this.type = items.type;
|
|
24
|
-
this.filename = items.filename;
|
|
25
|
-
this.name = items.name;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
toString() {
|
|
29
|
-
return `${this.type};\r\n\t\tfilename="${wordEncoding.encode( this.filename)}";`;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { parsePairs } from "./parsePairs.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export class HeaderContentType {
|
|
5
|
-
|
|
6
|
-
/** @type {string} */ type;
|
|
7
|
-
/** @type {string} */ charset;
|
|
8
|
-
/** @type {string} */ boundary;
|
|
9
|
-
|
|
10
|
-
constructor(
|
|
11
|
-
/** @type {string} */ type,
|
|
12
|
-
/** @type {string} */ charset = "UTF-8",
|
|
13
|
-
/** @type {string} */ boundary
|
|
14
|
-
) {
|
|
15
|
-
this.type = type;
|
|
16
|
-
this.charset = charset;
|
|
17
|
-
this.boundary = boundary;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
parse( /** @type {string} */ text) {
|
|
21
|
-
const items = parsePairs(text, "type");
|
|
22
|
-
this.type = items.type;
|
|
23
|
-
this.charset = items.charset;
|
|
24
|
-
this.boundary = items.boundary;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
toString() {
|
|
28
|
-
if (this.boundary) {
|
|
29
|
-
return `${this.type}; charset="${this.charset}"; boundary="${this.boundary}";`;
|
|
30
|
-
}
|
|
31
|
-
return `${this.type}; charset="${this.charset}";`;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { MimeNode } from "./MimeNode.js";
|
|
2
|
-
import { AttachmentFile } from "./AttachmentFile.js";
|
|
3
|
-
import LineStream, { ReadableLineStream, StringLineStream } from "./stream/LineStream.js";
|
|
4
|
-
import { BlobWriter } from "./stream/TextWriter.js";
|
|
5
|
-
|
|
6
|
-
export default class MimeMessage {
|
|
7
|
-
|
|
8
|
-
static async load(
|
|
9
|
-
/** @type {ReadableStream | LineStream | string} */ reader,
|
|
10
|
-
/** @type {string} */ name,
|
|
11
|
-
/** @type {boolean} */ inline
|
|
12
|
-
) {
|
|
13
|
-
const node = new MimeNode();
|
|
14
|
-
if (name) {
|
|
15
|
-
node.setHeader("X-Name", name);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const stream = typeof reader === "string"
|
|
19
|
-
? new StringLineStream(reader)
|
|
20
|
-
: (reader instanceof LineStream
|
|
21
|
-
? reader
|
|
22
|
-
: new ReadableLineStream(reader));
|
|
23
|
-
|
|
24
|
-
await node.parse(stream);
|
|
25
|
-
const attachments = await node.attachments();
|
|
26
|
-
|
|
27
|
-
// we should inline the images and remove them from attachments array for simplicity
|
|
28
|
-
// this should be done when templates are imported from somewhere else
|
|
29
|
-
|
|
30
|
-
const msg = new MimeMessage(node, attachments);
|
|
31
|
-
if (inline) {
|
|
32
|
-
await msg.inlineImages();
|
|
33
|
-
}
|
|
34
|
-
return msg;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
get name() {
|
|
38
|
-
return this.node.header("x-name");
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
get html() {
|
|
42
|
-
const alternative = this.node.getFirstChild("multipart/alternative");
|
|
43
|
-
return alternative?.getFirstChild("text/html")?.text ?? "";
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
set html(/** @type {string} */ v) {
|
|
47
|
-
const alternative = this.node.getFirstChild("multipart/alternative", true);
|
|
48
|
-
const htmlMime = alternative.getFirstChild("text/html", true);
|
|
49
|
-
htmlMime.contentTransferEncoding = "quoted-printable";
|
|
50
|
-
htmlMime.text = v;
|
|
51
|
-
htmlMime.contentType.charset = "UTF-8";
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
get text() {
|
|
55
|
-
const alternative = this.node.getFirstChild("multipart/alternative");
|
|
56
|
-
return alternative?.getFirstChild("text/plain")?.text ?? "";
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
set text(/** @type {string} */ v) {
|
|
60
|
-
const alternative = this.node.getFirstChild("multipart/alternative", true);
|
|
61
|
-
const htmlMime = alternative.getFirstChild("text/plain", true);
|
|
62
|
-
htmlMime.contentTransferEncoding = "quoted-printable";
|
|
63
|
-
htmlMime.text = v;
|
|
64
|
-
htmlMime.contentType.charset = "UTF-8";
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
get subject() {
|
|
68
|
-
return this.node.header("subject") ?? "";
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
set subject(/** @type {string} */ v) {
|
|
72
|
-
this.node.setHeader("subject", v);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/** @type {MimeNode} */ node;
|
|
76
|
-
/** @type {AttachmentFile[]} */ attachments;
|
|
77
|
-
|
|
78
|
-
constructor(
|
|
79
|
-
/** @type {MimeNode} */ node = new MimeNode("multipart/mixed"),
|
|
80
|
-
/** @type {AttachmentFile[]} */ attachments = []) {
|
|
81
|
-
this.node = node;
|
|
82
|
-
this.attachments = attachments;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
async save() {
|
|
86
|
-
const blobWriter = new BlobWriter();
|
|
87
|
-
await this.node.save(blobWriter);
|
|
88
|
-
return blobWriter.toBlob();
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
async inlineImages() {
|
|
92
|
-
let text = this.html;
|
|
93
|
-
if (!text) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
for (const iterator of this.attachments) {
|
|
98
|
-
if (iterator.contentId) {
|
|
99
|
-
const encoded = iterator.node.encoded;
|
|
100
|
-
text = text.split(`cid:${iterator.contentId}`).join(`data://${iterator.type},${encoded}`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export default class TextWriter {
|
|
2
|
-
|
|
3
|
-
writeLine(/** @type {string} */ line) {
|
|
4
|
-
throw new Error("Not Implemented");
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export class BlobWriter extends TextWriter {
|
|
10
|
-
|
|
11
|
-
/** @type {string[]} */
|
|
12
|
-
lines = [];
|
|
13
|
-
|
|
14
|
-
writeLine(/** @type {string} */line) {
|
|
15
|
-
this.lines.push(line);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
toBlob() {
|
|
19
|
-
const all = this.lines.join("\n");
|
|
20
|
-
return new Blob([all], {});
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
toString() {
|
|
24
|
-
return this.lines.join("\n");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
}
|