@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.
Files changed (116) hide show
  1. package/.gitlab-ci.yml +3 -3
  2. package/.vscode/settings.json +1 -1
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/QueryIterator.d.ts +1 -9
  5. package/dist/QueryIterator.d.ts.map +1 -1
  6. package/dist/QueryIterator.js +3 -14
  7. package/dist/QueryIterator.js.map +1 -1
  8. package/dist/ical-parser/Calender.js +36 -92
  9. package/dist/ical-parser/Calender.js.map +1 -1
  10. package/dist/ical-parser/parseDate.js +1 -5
  11. package/dist/ical-parser/parseDate.js.map +1 -1
  12. package/dist/mime-parser/AttachmentFile.d.ts +5 -11
  13. package/dist/mime-parser/AttachmentFile.d.ts.map +1 -1
  14. package/dist/mime-parser/AttachmentFile.js +3 -8
  15. package/dist/mime-parser/AttachmentFile.js.map +1 -1
  16. package/dist/mime-parser/HeaderContactList.d.ts +15 -0
  17. package/dist/mime-parser/HeaderContactList.d.ts.map +1 -0
  18. package/dist/mime-parser/HeaderContactList.js +37 -0
  19. package/dist/mime-parser/HeaderContactList.js.map +1 -0
  20. package/dist/mime-parser/HeaderContentDisposition.d.ts +6 -6
  21. package/dist/mime-parser/HeaderContentDisposition.d.ts.map +1 -1
  22. package/dist/mime-parser/HeaderContentDisposition.js +5 -10
  23. package/dist/mime-parser/HeaderContentDisposition.js.map +1 -1
  24. package/dist/mime-parser/HeaderContentType.d.ts +6 -6
  25. package/dist/mime-parser/HeaderContentType.d.ts.map +1 -1
  26. package/dist/mime-parser/HeaderContentType.js +5 -10
  27. package/dist/mime-parser/HeaderContentType.js.map +1 -1
  28. package/dist/mime-parser/HeaderEmailAddress.d.ts +10 -0
  29. package/dist/mime-parser/HeaderEmailAddress.d.ts.map +1 -0
  30. package/dist/mime-parser/HeaderEmailAddress.js +27 -0
  31. package/dist/mime-parser/HeaderEmailAddress.js.map +1 -0
  32. package/dist/mime-parser/HeaderLinks.d.ts +9 -0
  33. package/dist/mime-parser/HeaderLinks.d.ts.map +1 -0
  34. package/dist/mime-parser/HeaderLinks.js +42 -0
  35. package/dist/mime-parser/HeaderLinks.js.map +1 -0
  36. package/dist/mime-parser/MimeEmailAddressParser.d.ts +13 -0
  37. package/dist/mime-parser/MimeEmailAddressParser.d.ts.map +1 -0
  38. package/dist/mime-parser/MimeEmailAddressParser.js +17 -0
  39. package/dist/mime-parser/MimeEmailAddressParser.js.map +1 -0
  40. package/dist/mime-parser/MimeHeaders.d.ts +19 -0
  41. package/dist/mime-parser/MimeHeaders.d.ts.map +1 -0
  42. package/dist/mime-parser/MimeHeaders.js +47 -0
  43. package/dist/mime-parser/MimeHeaders.js.map +1 -0
  44. package/dist/mime-parser/MimeMessage.d.ts +44 -11
  45. package/dist/mime-parser/MimeMessage.d.ts.map +1 -1
  46. package/dist/mime-parser/MimeMessage.js +81 -73
  47. package/dist/mime-parser/MimeMessage.js.map +1 -1
  48. package/dist/mime-parser/MimeNode.d.ts +32 -39
  49. package/dist/mime-parser/MimeNode.d.ts.map +1 -1
  50. package/dist/mime-parser/MimeNode.js +166 -298
  51. package/dist/mime-parser/MimeNode.js.map +1 -1
  52. package/dist/mime-parser/RegexGenerator.d.ts +9 -0
  53. package/dist/mime-parser/RegexGenerator.d.ts.map +1 -0
  54. package/dist/mime-parser/RegexGenerator.js +40 -0
  55. package/dist/mime-parser/RegexGenerator.js.map +1 -0
  56. package/dist/mime-parser/encoder/RawBuffer.d.ts +5 -5
  57. package/dist/mime-parser/encoder/RawBuffer.d.ts.map +1 -1
  58. package/dist/mime-parser/encoder/RawBuffer.js +7 -13
  59. package/dist/mime-parser/encoder/RawBuffer.js.map +1 -1
  60. package/dist/mime-parser/encoder/base64-to-blob.d.ts +1 -7
  61. package/dist/mime-parser/encoder/base64-to-blob.d.ts.map +1 -1
  62. package/dist/mime-parser/encoder/base64-to-blob.js +0 -6
  63. package/dist/mime-parser/encoder/base64-to-blob.js.map +1 -1
  64. package/dist/mime-parser/encoder/quoted-printable.d.ts +5 -8
  65. package/dist/mime-parser/encoder/quoted-printable.d.ts.map +1 -1
  66. package/dist/mime-parser/encoder/quoted-printable.js +3 -34
  67. package/dist/mime-parser/encoder/quoted-printable.js.map +1 -1
  68. package/dist/mime-parser/encoder/word-encoding.d.ts +4 -6
  69. package/dist/mime-parser/encoder/word-encoding.d.ts.map +1 -1
  70. package/dist/mime-parser/encoder/word-encoding.js +4 -5
  71. package/dist/mime-parser/encoder/word-encoding.js.map +1 -1
  72. package/dist/mime-parser/parsePairs.d.ts +1 -1
  73. package/dist/mime-parser/parsePairs.d.ts.map +1 -1
  74. package/dist/mime-parser/parsePairs.js +3 -7
  75. package/dist/mime-parser/parsePairs.js.map +1 -1
  76. package/dist/mime-parser/stream/LineStream.d.ts +10 -16
  77. package/dist/mime-parser/stream/LineStream.d.ts.map +1 -1
  78. package/dist/mime-parser/stream/LineStream.js +59 -94
  79. package/dist/mime-parser/stream/LineStream.js.map +1 -1
  80. package/dist/mime-parser/stream/TextWriter.d.ts +5 -3
  81. package/dist/mime-parser/stream/TextWriter.d.ts.map +1 -1
  82. package/dist/mime-parser/stream/TextWriter.js +15 -3
  83. package/dist/mime-parser/stream/TextWriter.js.map +1 -1
  84. package/dist/mime-parser/tokenizer.d.ts +3 -3
  85. package/dist/mime-parser/tokenizer.d.ts.map +1 -1
  86. package/dist/mime-parser/tokenizer.js +10 -17
  87. package/dist/mime-parser/tokenizer.js.map +1 -1
  88. package/package.json +3 -3
  89. package/src/{QueryIterator.js → QueryIterator.ts} +11 -12
  90. package/src/ical-parser/Calender.ts +1 -1
  91. package/src/mime-parser/AttachmentFile.ts +24 -0
  92. package/src/mime-parser/HeaderContactList.ts +41 -0
  93. package/src/mime-parser/HeaderContentDisposition.ts +21 -0
  94. package/src/mime-parser/HeaderContentType.ts +22 -0
  95. package/src/mime-parser/HeaderEmailAddress.ts +38 -0
  96. package/src/mime-parser/HeaderLinks.ts +48 -0
  97. package/src/mime-parser/MimeEmailAddressParser.ts +22 -0
  98. package/src/mime-parser/MimeHeaders.ts +62 -0
  99. package/src/mime-parser/MimeMessage.ts +134 -0
  100. package/src/mime-parser/{MimeNode.js → MimeNode.ts} +92 -159
  101. package/src/mime-parser/RegexGenerator.ts +42 -0
  102. package/src/mime-parser/encoder/{RawBuffer.js → RawBuffer.ts} +15 -17
  103. package/src/mime-parser/encoder/{base64-to-blob.js → base64-to-blob.ts} +8 -8
  104. package/src/mime-parser/encoder/{quoted-printable.js → quoted-printable.ts} +9 -11
  105. package/src/mime-parser/encoder/{word-encoding.js → word-encoding.ts} +6 -6
  106. package/src/mime-parser/{parsePairs.js → parsePairs.ts} +5 -4
  107. package/src/mime-parser/stream/{LineStream.js → LineStream.ts} +12 -19
  108. package/src/mime-parser/stream/TextWriter.ts +36 -0
  109. package/src/mime-parser/{tokenizer.js → tokenizer.ts} +24 -21
  110. package/tsconfig.json +30 -9
  111. package/dist/tsconfig.tsbuildinfo +0 -1
  112. package/src/mime-parser/AttachmentFile.js +0 -29
  113. package/src/mime-parser/HeaderContentDisposition.js +0 -32
  114. package/src/mime-parser/HeaderContentType.js +0 -34
  115. package/src/mime-parser/MimeMessage.js +0 -105
  116. 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 += value.trimStart();
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
- /** @type {string} */ text,
58
- /** @type {boolean} */ trimR
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
- /** @type {ReadableStream} */
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 *tokenize (
2
- /** @type {string} */ text,
3
- /** @type {string} */ sep = ",") {
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 *tokenizeRFCHeaders (
17
- /** @type {string} */ text
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 = 0;
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 += line.trimStart();
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
- /** @type {string} */ text,
45
- /** @type {string} */ sep,
46
- /** @type {number} */ max = Number.MAX_SAFE_INTEGER) {
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
- "allowJs": true,
4
- "skipLibCheck": true,
5
- "skipDefaultLibCheck": true,
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
- "moduleResolution": "Bundler",
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
- "ES2015"
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
- }