imapflow 1.7.8 → 2.0.0

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 (296) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +8 -2
  3. package/dist/cjs/charsets.d.ts +1 -0
  4. package/dist/cjs/charsets.js +294 -0
  5. package/dist/cjs/commands/append.d.ts +22 -0
  6. package/dist/cjs/commands/append.js +151 -0
  7. package/dist/cjs/commands/authenticate.d.ts +24 -0
  8. package/dist/cjs/commands/authenticate.js +223 -0
  9. package/dist/cjs/commands/capability.d.ts +8 -0
  10. package/dist/cjs/commands/capability.js +32 -0
  11. package/dist/cjs/commands/close.d.ts +8 -0
  12. package/dist/cjs/commands/close.js +39 -0
  13. package/dist/cjs/commands/compress.d.ts +8 -0
  14. package/dist/cjs/commands/compress.js +56 -0
  15. package/dist/cjs/commands/copy.d.ts +13 -0
  16. package/dist/cjs/commands/copy.js +44 -0
  17. package/dist/cjs/commands/copyuid-parser.d.ts +11 -0
  18. package/dist/cjs/commands/copyuid-parser.js +32 -0
  19. package/dist/cjs/commands/create.d.ts +11 -0
  20. package/dist/cjs/commands/create.js +80 -0
  21. package/dist/cjs/commands/delete.d.ts +11 -0
  22. package/dist/cjs/commands/delete.js +40 -0
  23. package/dist/cjs/commands/enable.d.ts +9 -0
  24. package/dist/cjs/commands/enable.js +61 -0
  25. package/dist/cjs/commands/esearch-parser.d.ts +17 -0
  26. package/dist/cjs/commands/esearch-parser.js +91 -0
  27. package/dist/cjs/commands/expunge.d.ts +12 -0
  28. package/dist/cjs/commands/expunge.js +60 -0
  29. package/dist/cjs/commands/fetch.d.ts +30 -0
  30. package/dist/cjs/commands/fetch.js +241 -0
  31. package/dist/cjs/commands/id.d.ts +10 -0
  32. package/dist/cjs/commands/id.js +80 -0
  33. package/dist/cjs/commands/idle.d.ts +9 -0
  34. package/dist/cjs/commands/idle.js +347 -0
  35. package/dist/cjs/commands/list.d.ts +16 -0
  36. package/dist/cjs/commands/list.js +518 -0
  37. package/dist/cjs/commands/login.d.ts +11 -0
  38. package/dist/cjs/commands/login.js +42 -0
  39. package/dist/cjs/commands/logout.d.ts +8 -0
  40. package/dist/cjs/commands/logout.js +47 -0
  41. package/dist/cjs/commands/move.d.ts +13 -0
  42. package/dist/cjs/commands/move.js +57 -0
  43. package/dist/cjs/commands/namespace.d.ts +25 -0
  44. package/dist/cjs/commands/namespace.js +139 -0
  45. package/dist/cjs/commands/noop.d.ts +8 -0
  46. package/dist/cjs/commands/noop.js +22 -0
  47. package/dist/cjs/commands/quota.d.ts +10 -0
  48. package/dist/cjs/commands/quota.js +119 -0
  49. package/dist/cjs/commands/rename.d.ts +12 -0
  50. package/dist/cjs/commands/rename.js +48 -0
  51. package/dist/cjs/commands/search.d.ts +15 -0
  52. package/dist/cjs/commands/search.js +228 -0
  53. package/dist/cjs/commands/select.d.ts +25 -0
  54. package/dist/cjs/commands/select.js +250 -0
  55. package/dist/cjs/commands/starttls.d.ts +8 -0
  56. package/dist/cjs/commands/starttls.js +30 -0
  57. package/dist/cjs/commands/status-fields.d.ts +14 -0
  58. package/dist/cjs/commands/status-fields.js +61 -0
  59. package/dist/cjs/commands/status.d.ts +12 -0
  60. package/dist/cjs/commands/status.js +108 -0
  61. package/dist/cjs/commands/store.d.ts +19 -0
  62. package/dist/cjs/commands/store.js +93 -0
  63. package/dist/cjs/commands/subscribe.d.ts +9 -0
  64. package/dist/cjs/commands/subscribe.js +31 -0
  65. package/dist/cjs/commands/unsubscribe.d.ts +9 -0
  66. package/dist/cjs/commands/unsubscribe.js +31 -0
  67. package/dist/cjs/connection-deadline.d.ts +49 -0
  68. package/dist/cjs/connection-deadline.js +91 -0
  69. package/dist/cjs/errors.d.ts +83 -0
  70. package/dist/cjs/errors.js +13 -0
  71. package/dist/cjs/handler/imap-compiler.d.ts +24 -0
  72. package/dist/cjs/handler/imap-compiler.js +285 -0
  73. package/dist/cjs/handler/imap-formal-syntax.d.ts +28 -0
  74. package/dist/cjs/handler/imap-formal-syntax.js +121 -0
  75. package/dist/cjs/handler/imap-handler.d.ts +9 -0
  76. package/dist/cjs/handler/imap-handler.js +10 -0
  77. package/dist/cjs/handler/imap-parser.d.ts +16 -0
  78. package/dist/cjs/handler/imap-parser.js +90 -0
  79. package/dist/cjs/handler/imap-stream.d.ts +181 -0
  80. package/dist/cjs/handler/imap-stream.js +446 -0
  81. package/dist/cjs/handler/limits.d.ts +25 -0
  82. package/dist/cjs/handler/limits.js +51 -0
  83. package/dist/cjs/handler/parser-instance.d.ts +68 -0
  84. package/dist/cjs/handler/parser-instance.js +223 -0
  85. package/dist/cjs/handler/token-parser.d.ts +91 -0
  86. package/dist/cjs/handler/token-parser.js +673 -0
  87. package/dist/cjs/handler/types.d.ts +91 -0
  88. package/dist/cjs/handler/types.js +4 -0
  89. package/dist/cjs/imap-commands.d.ts +16 -0
  90. package/dist/cjs/imap-commands.js +74 -0
  91. package/dist/cjs/imap-flow.d.ts +676 -0
  92. package/dist/cjs/imap-flow.js +3949 -0
  93. package/dist/cjs/jp-decoder.d.ts +12 -0
  94. package/dist/cjs/jp-decoder.js +79 -0
  95. package/dist/cjs/limited-passthrough.d.ts +25 -0
  96. package/dist/cjs/limited-passthrough.js +54 -0
  97. package/dist/cjs/logger.d.ts +3 -0
  98. package/dist/cjs/logger.js +11 -0
  99. package/dist/cjs/package-info.d.ts +3 -0
  100. package/dist/cjs/package-info.js +7 -0
  101. package/dist/cjs/package.json +3 -0
  102. package/dist/cjs/proxy-connection.d.ts +33 -0
  103. package/dist/cjs/proxy-connection.js +392 -0
  104. package/dist/cjs/search-compiler.d.ts +34 -0
  105. package/dist/cjs/search-compiler.js +476 -0
  106. package/dist/cjs/special-use.d.ts +22 -0
  107. package/dist/cjs/special-use.js +911 -0
  108. package/dist/cjs/tools.d.ts +427 -0
  109. package/dist/cjs/tools.js +1496 -0
  110. package/{lib/imap-flow.d.ts → dist/cjs/types.d.ts} +386 -516
  111. package/dist/cjs/types.js +5 -0
  112. package/dist/esm/charsets.d.ts +1 -0
  113. package/{lib → dist/esm}/charsets.js +1 -6
  114. package/dist/esm/commands/append.d.ts +22 -0
  115. package/{lib → dist/esm}/commands/append.js +22 -52
  116. package/dist/esm/commands/authenticate.d.ts +24 -0
  117. package/{lib → dist/esm}/commands/authenticate.js +62 -87
  118. package/dist/esm/commands/capability.d.ts +8 -0
  119. package/{lib → dist/esm}/commands/capability.js +6 -9
  120. package/dist/esm/commands/close.d.ts +8 -0
  121. package/{lib → dist/esm}/commands/close.js +6 -10
  122. package/dist/esm/commands/compress.d.ts +8 -0
  123. package/{lib → dist/esm}/commands/compress.js +7 -11
  124. package/dist/esm/commands/copy.d.ts +13 -0
  125. package/{lib → dist/esm}/commands/copy.js +12 -20
  126. package/dist/esm/commands/copyuid-parser.d.ts +11 -0
  127. package/{lib → dist/esm}/commands/copyuid-parser.js +9 -15
  128. package/dist/esm/commands/create.d.ts +11 -0
  129. package/{lib → dist/esm}/commands/create.js +13 -27
  130. package/dist/esm/commands/delete.d.ts +11 -0
  131. package/{lib → dist/esm}/commands/delete.js +9 -14
  132. package/dist/esm/commands/enable.d.ts +9 -0
  133. package/{lib → dist/esm}/commands/enable.js +23 -30
  134. package/dist/esm/commands/esearch-parser.d.ts +17 -0
  135. package/dist/esm/commands/esearch-parser.js +88 -0
  136. package/dist/esm/commands/expunge.d.ts +12 -0
  137. package/{lib → dist/esm}/commands/expunge.js +17 -22
  138. package/dist/esm/commands/fetch.d.ts +30 -0
  139. package/{lib → dist/esm}/commands/fetch.js +32 -64
  140. package/dist/esm/commands/id.d.ts +10 -0
  141. package/{lib → dist/esm}/commands/id.js +17 -23
  142. package/dist/esm/commands/idle.d.ts +9 -0
  143. package/{lib → dist/esm}/commands/idle.js +47 -81
  144. package/dist/esm/commands/list.d.ts +16 -0
  145. package/{lib → dist/esm}/commands/list.js +56 -121
  146. package/dist/esm/commands/login.d.ts +11 -0
  147. package/{lib → dist/esm}/commands/login.js +10 -15
  148. package/dist/esm/commands/logout.d.ts +8 -0
  149. package/{lib → dist/esm}/commands/logout.js +9 -11
  150. package/dist/esm/commands/move.d.ts +13 -0
  151. package/{lib → dist/esm}/commands/move.js +13 -21
  152. package/dist/esm/commands/namespace.d.ts +25 -0
  153. package/{lib → dist/esm}/commands/namespace.js +34 -44
  154. package/dist/esm/commands/noop.d.ts +8 -0
  155. package/{lib → dist/esm}/commands/noop.js +6 -7
  156. package/dist/esm/commands/quota.d.ts +10 -0
  157. package/{lib → dist/esm}/commands/quota.js +18 -36
  158. package/dist/esm/commands/rename.d.ts +12 -0
  159. package/{lib → dist/esm}/commands/rename.js +10 -15
  160. package/dist/esm/commands/search.d.ts +15 -0
  161. package/{lib → dist/esm}/commands/search.js +36 -135
  162. package/dist/esm/commands/select.d.ts +25 -0
  163. package/{lib → dist/esm}/commands/select.js +33 -64
  164. package/dist/esm/commands/starttls.d.ts +8 -0
  165. package/{lib → dist/esm}/commands/starttls.js +6 -8
  166. package/dist/esm/commands/status-fields.d.ts +14 -0
  167. package/{lib → dist/esm}/commands/status-fields.js +5 -16
  168. package/dist/esm/commands/status.d.ts +12 -0
  169. package/{lib → dist/esm}/commands/status.js +18 -29
  170. package/dist/esm/commands/store.d.ts +19 -0
  171. package/{lib → dist/esm}/commands/store.js +24 -37
  172. package/dist/esm/commands/subscribe.d.ts +9 -0
  173. package/{lib → dist/esm}/commands/subscribe.js +8 -12
  174. package/dist/esm/commands/unsubscribe.d.ts +9 -0
  175. package/{lib → dist/esm}/commands/unsubscribe.js +8 -12
  176. package/dist/esm/connection-deadline.d.ts +49 -0
  177. package/{lib → dist/esm}/connection-deadline.js +14 -25
  178. package/dist/esm/errors.d.ts +83 -0
  179. package/dist/esm/errors.js +9 -0
  180. package/dist/esm/handler/imap-compiler.d.ts +24 -0
  181. package/{lib → dist/esm}/handler/imap-compiler.js +22 -80
  182. package/dist/esm/handler/imap-formal-syntax.d.ts +28 -0
  183. package/dist/esm/handler/imap-formal-syntax.js +117 -0
  184. package/dist/esm/handler/imap-handler.d.ts +9 -0
  185. package/dist/esm/handler/imap-handler.js +9 -0
  186. package/dist/esm/handler/imap-parser.d.ts +16 -0
  187. package/{lib → dist/esm}/handler/imap-parser.js +31 -44
  188. package/dist/esm/handler/imap-stream.d.ts +181 -0
  189. package/{lib → dist/esm}/handler/imap-stream.js +29 -121
  190. package/dist/esm/handler/limits.d.ts +25 -0
  191. package/{lib → dist/esm}/handler/limits.js +13 -22
  192. package/dist/esm/handler/parser-instance.d.ts +68 -0
  193. package/{lib → dist/esm}/handler/parser-instance.js +19 -47
  194. package/dist/esm/handler/token-parser.d.ts +91 -0
  195. package/{lib → dist/esm}/handler/token-parser.js +71 -155
  196. package/dist/esm/handler/types.d.ts +91 -0
  197. package/dist/esm/handler/types.js +3 -0
  198. package/dist/esm/imap-commands.d.ts +16 -0
  199. package/dist/esm/imap-commands.js +67 -0
  200. package/dist/esm/imap-flow.d.ts +676 -0
  201. package/{lib → dist/esm}/imap-flow.js +761 -1789
  202. package/dist/esm/jp-decoder.d.ts +12 -0
  203. package/{lib → dist/esm}/jp-decoder.js +6 -21
  204. package/dist/esm/limited-passthrough.d.ts +25 -0
  205. package/{lib → dist/esm}/limited-passthrough.js +7 -20
  206. package/dist/esm/logger.d.ts +3 -0
  207. package/dist/esm/logger.js +4 -0
  208. package/dist/esm/package-info.d.ts +3 -0
  209. package/dist/esm/package-info.js +4 -0
  210. package/dist/esm/package.json +3 -0
  211. package/dist/esm/proxy-connection.d.ts +33 -0
  212. package/{lib → dist/esm}/proxy-connection.js +56 -127
  213. package/dist/esm/search-compiler.d.ts +34 -0
  214. package/{lib → dist/esm}/search-compiler.js +54 -110
  215. package/dist/esm/special-use.d.ts +22 -0
  216. package/dist/esm/special-use.js +907 -0
  217. package/dist/esm/tools.d.ts +427 -0
  218. package/dist/esm/tools.js +1446 -0
  219. package/dist/esm/types.d.ts +828 -0
  220. package/dist/esm/types.js +4 -0
  221. package/package.json +60 -20
  222. package/.gitattributes +0 -1
  223. package/.github/CODE_OF_CONDUCT.md +0 -76
  224. package/.github/FUNDING.yml +0 -4
  225. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -40
  226. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -19
  227. package/.github/contributing.md +0 -17
  228. package/.github/workflows/release.yaml +0 -36
  229. package/.github/workflows/stale.yml +0 -29
  230. package/.github/workflows/test.yml +0 -51
  231. package/.ncurc.js +0 -4
  232. package/.prettierignore +0 -4
  233. package/.prettierrc.js +0 -8
  234. package/.release-please-manifest.json +0 -3
  235. package/CLAUDE.md +0 -104
  236. package/Gruntfile.js +0 -23
  237. package/eslint.config.js +0 -45
  238. package/lib/handler/imap-formal-syntax.js +0 -189
  239. package/lib/handler/imap-handler.js +0 -17
  240. package/lib/imap-commands.js +0 -45
  241. package/lib/logger.js +0 -5
  242. package/lib/special-use.js +0 -923
  243. package/lib/tools.js +0 -1612
  244. package/release-please-config.json +0 -10
  245. package/test/authentication-test.js +0 -101
  246. package/test/auto-idle-test.js +0 -470
  247. package/test/bodystructure-test.js +0 -899
  248. package/test/charsets-test.js +0 -161
  249. package/test/commands-branches-test.js +0 -1095
  250. package/test/commands-integration-test.js +0 -11124
  251. package/test/commands-test.js +0 -73
  252. package/test/connection-edge-cases-test.js +0 -1828
  253. package/test/connection-test.js +0 -162
  254. package/test/copyuid-parser-test.js +0 -173
  255. package/test/fetch-generator-test.js +0 -218
  256. package/test/fixtures/fake-timers.js +0 -115
  257. package/test/fixtures/serialized-mimetorture.js +0 -2738
  258. package/test/fixtures/test-client.js +0 -101
  259. package/test/fixtures/test-tls.js +0 -8
  260. package/test/handler-branches-test.js +0 -310
  261. package/test/idle-polling-test.js +0 -518
  262. package/test/imap-compiler-test.js +0 -809
  263. package/test/imap-flow-compress-test.js +0 -166
  264. package/test/imap-flow-coverage-test.js +0 -612
  265. package/test/imap-flow-fetch-download-test.js +0 -909
  266. package/test/imap-flow-internals-test.js +0 -725
  267. package/test/imap-flow-methods-test.js +0 -889
  268. package/test/imap-flow-proxy-paths-test.js +0 -366
  269. package/test/imap-flow-secure-test.js +0 -573
  270. package/test/imap-flow-server-test.js +0 -1474
  271. package/test/imap-formal-syntax-test.js +0 -293
  272. package/test/imap-parser-test.js +0 -1474
  273. package/test/imap-stream-edge-cases-test.js +0 -666
  274. package/test/imap-stream-test.js +0 -177
  275. package/test/imapflow-test.js +0 -258
  276. package/test/integration/README.md +0 -52
  277. package/test/integration/dovecot-test.conf +0 -27
  278. package/test/integration/rev2-live-test.js +0 -431
  279. package/test/integration/run-rev2-tests.sh +0 -75
  280. package/test/integration-test.js +0 -83
  281. package/test/jp-decoder-test.js +0 -304
  282. package/test/limited-passthrough-test.js +0 -299
  283. package/test/memory-cleanup-test.js +0 -144
  284. package/test/memory-leak-test.js +0 -667
  285. package/test/parser-limits-test.js +0 -292
  286. package/test/proxy-connection-test.js +0 -738
  287. package/test/reliability-improvements-test.js +0 -548
  288. package/test/search-compiler-test.js +0 -1300
  289. package/test/search-test.js +0 -329
  290. package/test/special-use-test.js +0 -418
  291. package/test/starttls-injection-test.js +0 -181
  292. package/test/tag-correlation-test.js +0 -333
  293. package/test/timer-policy-test.js +0 -227
  294. package/test/token-parser-test.js +0 -456
  295. package/test/tools-test.js +0 -2013
  296. package/test/unhandled-rejection-test.js +0 -661
@@ -1,293 +0,0 @@
1
- /* eslint new-cap: 0 */
2
- 'use strict';
3
-
4
- const imapFormalSyntax = require('../lib/handler/imap-formal-syntax');
5
-
6
- // ---------------------------------------------------------------------------
7
- // CHAR
8
- // ---------------------------------------------------------------------------
9
-
10
- module.exports['Formal Syntax: CHAR() has length 127'] = test => {
11
- test.equal(imapFormalSyntax.CHAR().length, 127);
12
- test.done();
13
- };
14
-
15
- module.exports['Formal Syntax: CHAR() includes A'] = test => {
16
- test.ok(imapFormalSyntax.CHAR().includes('A'));
17
- test.done();
18
- };
19
-
20
- module.exports['Formal Syntax: CHAR() excludes NUL (0x00)'] = test => {
21
- test.ok(!imapFormalSyntax.CHAR().includes('\x00'));
22
- test.done();
23
- };
24
-
25
- module.exports['Formal Syntax: CHAR() excludes 0x80'] = test => {
26
- test.ok(!imapFormalSyntax.CHAR().includes('\x80'));
27
- test.done();
28
- };
29
-
30
- // ---------------------------------------------------------------------------
31
- // CHAR8
32
- // ---------------------------------------------------------------------------
33
-
34
- module.exports['Formal Syntax: CHAR8() has length 255'] = test => {
35
- test.equal(imapFormalSyntax.CHAR8().length, 255);
36
- test.done();
37
- };
38
-
39
- module.exports['Formal Syntax: CHAR8() includes 0xFF'] = test => {
40
- test.ok(imapFormalSyntax.CHAR8().includes('\xFF'));
41
- test.done();
42
- };
43
-
44
- // ---------------------------------------------------------------------------
45
- // SP
46
- // ---------------------------------------------------------------------------
47
-
48
- module.exports['Formal Syntax: SP() equals a single space'] = test => {
49
- test.equal(imapFormalSyntax.SP(), ' ');
50
- test.done();
51
- };
52
-
53
- module.exports['Formal Syntax: SP() has length 1'] = test => {
54
- test.equal(imapFormalSyntax.SP().length, 1);
55
- test.done();
56
- };
57
-
58
- // ---------------------------------------------------------------------------
59
- // CTL
60
- // ---------------------------------------------------------------------------
61
-
62
- module.exports['Formal Syntax: CTL() includes NUL (0x00)'] = test => {
63
- test.ok(imapFormalSyntax.CTL().includes('\x00'));
64
- test.done();
65
- };
66
-
67
- module.exports['Formal Syntax: CTL() includes 0x1F'] = test => {
68
- test.ok(imapFormalSyntax.CTL().includes('\x1F'));
69
- test.done();
70
- };
71
-
72
- module.exports['Formal Syntax: CTL() includes DEL (0x7F)'] = test => {
73
- test.ok(imapFormalSyntax.CTL().includes('\x7F'));
74
- test.done();
75
- };
76
-
77
- module.exports['Formal Syntax: CTL() excludes space (0x20)'] = test => {
78
- test.ok(!imapFormalSyntax.CTL().includes(' '));
79
- test.done();
80
- };
81
-
82
- // ---------------------------------------------------------------------------
83
- // ALPHA
84
- // ---------------------------------------------------------------------------
85
-
86
- module.exports['Formal Syntax: ALPHA() has length 52'] = test => {
87
- test.equal(imapFormalSyntax.ALPHA().length, 52);
88
- test.done();
89
- };
90
-
91
- module.exports['Formal Syntax: ALPHA() includes A'] = test => {
92
- test.ok(imapFormalSyntax.ALPHA().includes('A'));
93
- test.done();
94
- };
95
-
96
- module.exports['Formal Syntax: ALPHA() includes z'] = test => {
97
- test.ok(imapFormalSyntax.ALPHA().includes('z'));
98
- test.done();
99
- };
100
-
101
- module.exports['Formal Syntax: ALPHA() excludes 0'] = test => {
102
- test.ok(!imapFormalSyntax.ALPHA().includes('0'));
103
- test.done();
104
- };
105
-
106
- // ---------------------------------------------------------------------------
107
- // DIGIT
108
- // ---------------------------------------------------------------------------
109
-
110
- module.exports['Formal Syntax: DIGIT() has length 10'] = test => {
111
- test.equal(imapFormalSyntax.DIGIT().length, 10);
112
- test.done();
113
- };
114
-
115
- module.exports['Formal Syntax: DIGIT() includes 0'] = test => {
116
- test.ok(imapFormalSyntax.DIGIT().includes('0'));
117
- test.done();
118
- };
119
-
120
- module.exports['Formal Syntax: DIGIT() includes 9'] = test => {
121
- test.ok(imapFormalSyntax.DIGIT().includes('9'));
122
- test.done();
123
- };
124
-
125
- module.exports['Formal Syntax: DIGIT() excludes a'] = test => {
126
- test.ok(!imapFormalSyntax.DIGIT().includes('a'));
127
- test.done();
128
- };
129
-
130
- // ---------------------------------------------------------------------------
131
- // ATOM-CHAR
132
- // ---------------------------------------------------------------------------
133
-
134
- module.exports['Formal Syntax: ATOM-CHAR() includes A'] = test => {
135
- test.ok(imapFormalSyntax['ATOM-CHAR']().includes('A'));
136
- test.done();
137
- };
138
-
139
- module.exports['Formal Syntax: ATOM-CHAR() excludes open paren'] = test => {
140
- test.ok(!imapFormalSyntax['ATOM-CHAR']().includes('('));
141
- test.done();
142
- };
143
-
144
- module.exports['Formal Syntax: ATOM-CHAR() excludes close paren'] = test => {
145
- test.ok(!imapFormalSyntax['ATOM-CHAR']().includes(')'));
146
- test.done();
147
- };
148
-
149
- module.exports['Formal Syntax: ATOM-CHAR() excludes open brace'] = test => {
150
- test.ok(!imapFormalSyntax['ATOM-CHAR']().includes('{'));
151
- test.done();
152
- };
153
-
154
- module.exports['Formal Syntax: ATOM-CHAR() excludes space'] = test => {
155
- test.ok(!imapFormalSyntax['ATOM-CHAR']().includes(' '));
156
- test.done();
157
- };
158
-
159
- module.exports['Formal Syntax: ATOM-CHAR() excludes double quote'] = test => {
160
- test.ok(!imapFormalSyntax['ATOM-CHAR']().includes('"'));
161
- test.done();
162
- };
163
-
164
- module.exports['Formal Syntax: ATOM-CHAR() excludes backslash'] = test => {
165
- test.ok(!imapFormalSyntax['ATOM-CHAR']().includes('\\'));
166
- test.done();
167
- };
168
-
169
- // ---------------------------------------------------------------------------
170
- // ASTRING-CHAR
171
- // ---------------------------------------------------------------------------
172
-
173
- module.exports['Formal Syntax: ASTRING-CHAR() includes close bracket (resp-special)'] = test => {
174
- test.ok(imapFormalSyntax['ASTRING-CHAR']().includes(']'));
175
- test.done();
176
- };
177
-
178
- // ---------------------------------------------------------------------------
179
- // TEXT-CHAR
180
- // ---------------------------------------------------------------------------
181
-
182
- module.exports['Formal Syntax: TEXT-CHAR() includes A'] = test => {
183
- test.ok(imapFormalSyntax['TEXT-CHAR']().includes('A'));
184
- test.done();
185
- };
186
-
187
- module.exports['Formal Syntax: TEXT-CHAR() includes space'] = test => {
188
- test.ok(imapFormalSyntax['TEXT-CHAR']().includes(' '));
189
- test.done();
190
- };
191
-
192
- module.exports['Formal Syntax: TEXT-CHAR() excludes CR'] = test => {
193
- test.ok(!imapFormalSyntax['TEXT-CHAR']().includes('\r'));
194
- test.done();
195
- };
196
-
197
- module.exports['Formal Syntax: TEXT-CHAR() excludes LF'] = test => {
198
- test.ok(!imapFormalSyntax['TEXT-CHAR']().includes('\n'));
199
- test.done();
200
- };
201
-
202
- // ---------------------------------------------------------------------------
203
- // tag
204
- // ---------------------------------------------------------------------------
205
-
206
- module.exports['Formal Syntax: tag() excludes plus sign'] = test => {
207
- test.ok(!imapFormalSyntax.tag().includes('+'));
208
- test.done();
209
- };
210
-
211
- module.exports['Formal Syntax: tag() includes A'] = test => {
212
- test.ok(imapFormalSyntax.tag().includes('A'));
213
- test.done();
214
- };
215
-
216
- module.exports['Formal Syntax: tag() includes close bracket'] = test => {
217
- test.ok(imapFormalSyntax.tag().includes(']'));
218
- test.done();
219
- };
220
-
221
- // ---------------------------------------------------------------------------
222
- // command
223
- // ---------------------------------------------------------------------------
224
-
225
- module.exports['Formal Syntax: command() includes A'] = test => {
226
- test.ok(imapFormalSyntax.command().includes('A'));
227
- test.done();
228
- };
229
-
230
- module.exports['Formal Syntax: command() includes 0'] = test => {
231
- test.ok(imapFormalSyntax.command().includes('0'));
232
- test.done();
233
- };
234
-
235
- module.exports['Formal Syntax: command() includes hyphen'] = test => {
236
- test.ok(imapFormalSyntax.command().includes('-'));
237
- test.done();
238
- };
239
-
240
- module.exports['Formal Syntax: command() excludes asterisk'] = test => {
241
- test.ok(!imapFormalSyntax.command().includes('*'));
242
- test.done();
243
- };
244
-
245
- // ---------------------------------------------------------------------------
246
- // verify()
247
- // ---------------------------------------------------------------------------
248
-
249
- module.exports['Formal Syntax: verify() returns -1 when all characters are valid'] = test => {
250
- test.equal(imapFormalSyntax.verify('ABC', 'ABCDEF'), -1);
251
- test.done();
252
- };
253
-
254
- module.exports['Formal Syntax: verify() returns index of first invalid character'] = test => {
255
- test.equal(imapFormalSyntax.verify('ABXC', 'ABC'), 2);
256
- test.done();
257
- };
258
-
259
- module.exports['Formal Syntax: verify() returns 0 when first character is invalid'] = test => {
260
- test.equal(imapFormalSyntax.verify('!A', 'ABC'), 0);
261
- test.done();
262
- };
263
-
264
- // ---------------------------------------------------------------------------
265
- // Memoization
266
- // ---------------------------------------------------------------------------
267
-
268
- module.exports['Formal Syntax: CHAR() returns same string reference on repeated calls (memoized)'] = test => {
269
- // After the first call, the method is replaced with a closure that returns
270
- // the cached value, so subsequent calls must return the exact same string object.
271
- const first = imapFormalSyntax.CHAR();
272
- const second = imapFormalSyntax.CHAR();
273
- test.strictEqual(first, second);
274
- test.done();
275
- };
276
-
277
- // Memoization: the second invocation must return the cached value via the
278
- // rewritten getter (covers the memoized inner functions).
279
- module.exports['Formal Syntax: atom-specials is memoized across calls'] = test => {
280
- let first = imapFormalSyntax['atom-specials']();
281
- let second = imapFormalSyntax['atom-specials']();
282
- test.equal(first, second);
283
- test.ok(second.includes('('));
284
- test.done();
285
- };
286
-
287
- module.exports['Formal Syntax: quoted-specials is memoized across calls'] = test => {
288
- let first = imapFormalSyntax['quoted-specials']();
289
- let second = imapFormalSyntax['quoted-specials']();
290
- test.equal(first, second);
291
- test.ok(second.includes('"'));
292
- test.done();
293
- };