@md2do/core 0.4.0 → 0.5.1

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 (57) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +6 -6
  3. package/package.json +1 -1
  4. package/coverage/base.css +0 -224
  5. package/coverage/block-navigation.js +0 -87
  6. package/coverage/coverage-final.json +0 -11
  7. package/coverage/favicon.png +0 -0
  8. package/coverage/index.html +0 -221
  9. package/coverage/lcov-report/base.css +0 -224
  10. package/coverage/lcov-report/block-navigation.js +0 -87
  11. package/coverage/lcov-report/favicon.png +0 -0
  12. package/coverage/lcov-report/index.html +0 -221
  13. package/coverage/lcov-report/prettify.css +0 -1
  14. package/coverage/lcov-report/prettify.js +0 -2
  15. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  16. package/coverage/lcov-report/sorter.js +0 -210
  17. package/coverage/lcov-report/src/filters/index.html +0 -116
  18. package/coverage/lcov-report/src/filters/index.ts.html +0 -1156
  19. package/coverage/lcov-report/src/index.html +0 -116
  20. package/coverage/lcov-report/src/index.ts.html +0 -166
  21. package/coverage/lcov-report/src/parser/index.html +0 -131
  22. package/coverage/lcov-report/src/parser/index.ts.html +0 -1270
  23. package/coverage/lcov-report/src/parser/patterns.ts.html +0 -670
  24. package/coverage/lcov-report/src/scanner/index.html +0 -116
  25. package/coverage/lcov-report/src/scanner/index.ts.html +0 -733
  26. package/coverage/lcov-report/src/sorting/index.html +0 -116
  27. package/coverage/lcov-report/src/sorting/index.ts.html +0 -736
  28. package/coverage/lcov-report/src/utils/dates.ts.html +0 -643
  29. package/coverage/lcov-report/src/utils/id.ts.html +0 -169
  30. package/coverage/lcov-report/src/utils/index.html +0 -131
  31. package/coverage/lcov-report/src/warnings/filter.ts.html +0 -364
  32. package/coverage/lcov-report/src/warnings/index.html +0 -116
  33. package/coverage/lcov-report/src/writer/index.html +0 -116
  34. package/coverage/lcov-report/src/writer/index.ts.html +0 -1093
  35. package/coverage/lcov.info +0 -2542
  36. package/coverage/prettify.css +0 -1
  37. package/coverage/prettify.js +0 -2
  38. package/coverage/sort-arrow-sprite.png +0 -0
  39. package/coverage/sorter.js +0 -210
  40. package/coverage/src/filters/index.html +0 -116
  41. package/coverage/src/filters/index.ts.html +0 -1156
  42. package/coverage/src/index.html +0 -116
  43. package/coverage/src/index.ts.html +0 -166
  44. package/coverage/src/parser/index.html +0 -131
  45. package/coverage/src/parser/index.ts.html +0 -1270
  46. package/coverage/src/parser/patterns.ts.html +0 -670
  47. package/coverage/src/scanner/index.html +0 -116
  48. package/coverage/src/scanner/index.ts.html +0 -733
  49. package/coverage/src/sorting/index.html +0 -116
  50. package/coverage/src/sorting/index.ts.html +0 -736
  51. package/coverage/src/utils/dates.ts.html +0 -643
  52. package/coverage/src/utils/id.ts.html +0 -169
  53. package/coverage/src/utils/index.html +0 -131
  54. package/coverage/src/warnings/filter.ts.html +0 -364
  55. package/coverage/src/warnings/index.html +0 -116
  56. package/coverage/src/writer/index.html +0 -116
  57. package/coverage/src/writer/index.ts.html +0 -1093
@@ -1,733 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/scanner/index.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">src/scanner</a> index.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">97.22% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>210/216</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">79.31% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>23/29</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>4/4</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">97.22% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>210/216</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
283
- <span class="cline-any cline-yes">1x</span>
284
- <span class="cline-any cline-yes">1x</span>
285
- <span class="cline-any cline-yes">1x</span>
286
- <span class="cline-any cline-yes">1x</span>
287
- <span class="cline-any cline-yes">1x</span>
288
- <span class="cline-any cline-yes">1x</span>
289
- <span class="cline-any cline-yes">1x</span>
290
- <span class="cline-any cline-yes">1x</span>
291
- <span class="cline-any cline-yes">1x</span>
292
- <span class="cline-any cline-yes">1x</span>
293
- <span class="cline-any cline-yes">1x</span>
294
- <span class="cline-any cline-yes">1x</span>
295
- <span class="cline-any cline-yes">1x</span>
296
- <span class="cline-any cline-yes">1x</span>
297
- <span class="cline-any cline-yes">1x</span>
298
- <span class="cline-any cline-yes">1x</span>
299
- <span class="cline-any cline-yes">1x</span>
300
- <span class="cline-any cline-yes">51x</span>
301
- <span class="cline-any cline-yes">51x</span>
302
- <span class="cline-any cline-yes">51x</span>
303
- <span class="cline-any cline-yes">1x</span>
304
- <span class="cline-any cline-yes">1x</span>
305
- <span class="cline-any cline-yes">1x</span>
306
- <span class="cline-any cline-yes">1x</span>
307
- <span class="cline-any cline-yes">1x</span>
308
- <span class="cline-any cline-yes">1x</span>
309
- <span class="cline-any cline-yes">1x</span>
310
- <span class="cline-any cline-yes">1x</span>
311
- <span class="cline-any cline-yes">1x</span>
312
- <span class="cline-any cline-yes">1x</span>
313
- <span class="cline-any cline-yes">1x</span>
314
- <span class="cline-any cline-yes">1x</span>
315
- <span class="cline-any cline-yes">1x</span>
316
- <span class="cline-any cline-yes">1x</span>
317
- <span class="cline-any cline-yes">1x</span>
318
- <span class="cline-any cline-yes">50x</span>
319
- <span class="cline-any cline-yes">50x</span>
320
- <span class="cline-any cline-yes">50x</span>
321
- <span class="cline-any cline-yes">50x</span>
322
- <span class="cline-any cline-yes">50x</span>
323
- <span class="cline-any cline-yes">1x</span>
324
- <span class="cline-any cline-yes">1x</span>
325
- <span class="cline-any cline-yes">1x</span>
326
- <span class="cline-any cline-yes">1x</span>
327
- <span class="cline-any cline-yes">1x</span>
328
- <span class="cline-any cline-yes">1x</span>
329
- <span class="cline-any cline-yes">1x</span>
330
- <span class="cline-any cline-yes">1x</span>
331
- <span class="cline-any cline-yes">1x</span>
332
- <span class="cline-any cline-yes">1x</span>
333
- <span class="cline-any cline-yes">1x</span>
334
- <span class="cline-any cline-yes">1x</span>
335
- <span class="cline-any cline-yes">1x</span>
336
- <span class="cline-any cline-yes">1x</span>
337
- <span class="cline-any cline-yes">1x</span>
338
- <span class="cline-any cline-yes">1x</span>
339
- <span class="cline-any cline-yes">1x</span>
340
- <span class="cline-any cline-yes">1x</span>
341
- <span class="cline-any cline-yes">1x</span>
342
- <span class="cline-any cline-yes">1x</span>
343
- <span class="cline-any cline-yes">1x</span>
344
- <span class="cline-any cline-yes">1x</span>
345
- <span class="cline-any cline-yes">1x</span>
346
- <span class="cline-any cline-yes">1x</span>
347
- <span class="cline-any cline-yes">1x</span>
348
- <span class="cline-any cline-yes">1x</span>
349
- <span class="cline-any cline-yes">1x</span>
350
- <span class="cline-any cline-yes">44x</span>
351
- <span class="cline-any cline-yes">44x</span>
352
- <span class="cline-any cline-yes">44x</span>
353
- <span class="cline-any cline-yes">44x</span>
354
- <span class="cline-any cline-yes">44x</span>
355
- <span class="cline-any cline-yes">44x</span>
356
- <span class="cline-any cline-yes">44x</span>
357
- <span class="cline-any cline-yes">44x</span>
358
- <span class="cline-any cline-yes">44x</span>
359
- <span class="cline-any cline-yes">44x</span>
360
- <span class="cline-any cline-yes">44x</span>
361
- <span class="cline-any cline-yes">44x</span>
362
- <span class="cline-any cline-yes">44x</span>
363
- <span class="cline-any cline-yes">44x</span>
364
- <span class="cline-any cline-yes">44x</span>
365
- <span class="cline-any cline-yes">44x</span>
366
- <span class="cline-any cline-yes">44x</span>
367
- <span class="cline-any cline-yes">44x</span>
368
- <span class="cline-any cline-yes">44x</span>
369
- <span class="cline-any cline-yes">44x</span>
370
- <span class="cline-any cline-yes">44x</span>
371
- <span class="cline-any cline-yes">44x</span>
372
- <span class="cline-any cline-yes">44x</span>
373
- <span class="cline-any cline-yes">44x</span>
374
- <span class="cline-any cline-yes">44x</span>
375
- <span class="cline-any cline-yes">44x</span>
376
- <span class="cline-any cline-yes">44x</span>
377
- <span class="cline-any cline-yes">44x</span>
378
- <span class="cline-any cline-no">&nbsp;</span>
379
- <span class="cline-any cline-no">&nbsp;</span>
380
- <span class="cline-any cline-yes">44x</span>
381
- <span class="cline-any cline-no">&nbsp;</span>
382
- <span class="cline-any cline-no">&nbsp;</span>
383
- <span class="cline-any cline-yes">44x</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
385
- <span class="cline-any cline-no">&nbsp;</span>
386
- <span class="cline-any cline-yes">44x</span>
387
- <span class="cline-any cline-yes">44x</span>
388
- <span class="cline-any cline-yes">44x</span>
389
- <span class="cline-any cline-yes">44x</span>
390
- <span class="cline-any cline-yes">44x</span>
391
- <span class="cline-any cline-yes">133x</span>
392
- <span class="cline-any cline-yes">133x</span>
393
- <span class="cline-any cline-yes">105x</span>
394
- <span class="cline-any cline-yes">105x</span>
395
- <span class="cline-any cline-yes">105x</span>
396
- <span class="cline-any cline-yes">105x</span>
397
- <span class="cline-any cline-yes">105x</span>
398
- <span class="cline-any cline-yes">133x</span>
399
- <span class="cline-any cline-yes">13x</span>
400
- <span class="cline-any cline-yes">13x</span>
401
- <span class="cline-any cline-yes">13x</span>
402
- <span class="cline-any cline-yes">13x</span>
403
- <span class="cline-any cline-yes">92x</span>
404
- <span class="cline-any cline-yes">92x</span>
405
- <span class="cline-any cline-yes">92x</span>
406
- <span class="cline-any cline-yes">92x</span>
407
- <span class="cline-any cline-yes">133x</span>
408
- <span class="cline-any cline-yes">75x</span>
409
- <span class="cline-any cline-yes">75x</span>
410
- <span class="cline-any cline-yes">75x</span>
411
- <span class="cline-any cline-yes">75x</span>
412
- <span class="cline-any cline-yes">18x</span>
413
- <span class="cline-any cline-yes">18x</span>
414
- <span class="cline-any cline-yes">5x</span>
415
- <span class="cline-any cline-yes">5x</span>
416
- <span class="cline-any cline-yes">5x</span>
417
- <span class="cline-any cline-yes">5x</span>
418
- <span class="cline-any cline-yes">5x</span>
419
- <span class="cline-any cline-yes">5x</span>
420
- <span class="cline-any cline-yes">5x</span>
421
- <span class="cline-any cline-yes">5x</span>
422
- <span class="cline-any cline-yes">5x</span>
423
- <span class="cline-any cline-yes">5x</span>
424
- <span class="cline-any cline-yes">18x</span>
425
- <span class="cline-any cline-yes">13x</span>
426
- <span class="cline-any cline-yes">13x</span>
427
- <span class="cline-any cline-yes">13x</span>
428
- <span class="cline-any cline-yes">13x</span>
429
- <span class="cline-any cline-yes">13x</span>
430
- <span class="cline-any cline-yes">18x</span>
431
- <span class="cline-any cline-yes">75x</span>
432
- <span class="cline-any cline-yes">92x</span>
433
- <span class="cline-any cline-yes">133x</span>
434
- <span class="cline-any cline-yes">34x</span>
435
- <span class="cline-any cline-yes">34x</span>
436
- <span class="cline-any cline-yes">133x</span>
437
- <span class="cline-any cline-yes">44x</span>
438
- <span class="cline-any cline-yes">44x</span>
439
- <span class="cline-any cline-yes">44x</span>
440
- <span class="cline-any cline-yes">1x</span>
441
- <span class="cline-any cline-yes">1x</span>
442
- <span class="cline-any cline-yes">1x</span>
443
- <span class="cline-any cline-yes">1x</span>
444
- <span class="cline-any cline-yes">1x</span>
445
- <span class="cline-any cline-yes">1x</span>
446
- <span class="cline-any cline-yes">1x</span>
447
- <span class="cline-any cline-yes">1x</span>
448
- <span class="cline-any cline-yes">1x</span>
449
- <span class="cline-any cline-yes">1x</span>
450
- <span class="cline-any cline-yes">1x</span>
451
- <span class="cline-any cline-yes">5x</span>
452
- <span class="cline-any cline-yes">5x</span>
453
- <span class="cline-any cline-yes">5x</span>
454
- <span class="cline-any cline-yes">5x</span>
455
- <span class="cline-any cline-yes">5x</span>
456
- <span class="cline-any cline-yes">5x</span>
457
- <span class="cline-any cline-yes">5x</span>
458
- <span class="cline-any cline-yes">5x</span>
459
- <span class="cline-any cline-yes">5x</span>
460
- <span class="cline-any cline-yes">5x</span>
461
- <span class="cline-any cline-yes">9x</span>
462
- <span class="cline-any cline-yes">9x</span>
463
- <span class="cline-any cline-yes">9x</span>
464
- <span class="cline-any cline-yes">9x</span>
465
- <span class="cline-any cline-yes">9x</span>
466
- <span class="cline-any cline-yes">9x</span>
467
- <span class="cline-any cline-yes">9x</span>
468
- <span class="cline-any cline-yes">2x</span>
469
- <span class="cline-any cline-yes">2x</span>
470
- <span class="cline-any cline-yes">1x</span>
471
- <span class="cline-any cline-yes">1x</span>
472
- <span class="cline-any cline-yes">1x</span>
473
- <span class="cline-any cline-yes">1x</span>
474
- <span class="cline-any cline-yes">1x</span>
475
- <span class="cline-any cline-yes">1x</span>
476
- <span class="cline-any cline-yes">1x</span>
477
- <span class="cline-any cline-yes">1x</span>
478
- <span class="cline-any cline-yes">1x</span>
479
- <span class="cline-any cline-yes">1x</span>
480
- <span class="cline-any cline-yes">1x</span>
481
- <span class="cline-any cline-yes">1x</span>
482
- <span class="cline-any cline-yes">1x</span>
483
- <span class="cline-any cline-yes">1x</span>
484
- <span class="cline-any cline-yes">1x</span>
485
- <span class="cline-any cline-yes">1x</span>
486
- <span class="cline-any cline-yes">1x</span>
487
- <span class="cline-any cline-yes">1x</span>
488
- <span class="cline-any cline-yes">2x</span>
489
- <span class="cline-any cline-yes">9x</span>
490
- <span class="cline-any cline-yes">9x</span>
491
- <span class="cline-any cline-yes">5x</span>
492
- <span class="cline-any cline-yes">5x</span>
493
- <span class="cline-any cline-yes">5x</span>
494
- <span class="cline-any cline-yes">5x</span>
495
- <span class="cline-any cline-yes">5x</span>
496
- <span class="cline-any cline-yes">5x</span>
497
- <span class="cline-any cline-yes">1x</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { Task, ParsingContext, Warning } from '../types/index.js';
499
- import { parseTask } from '../parser/index.js';
500
- import { extractDateFromHeading } from '../utils/dates.js';
501
- &nbsp;
502
- /**
503
- * Extract project name from file path
504
- *
505
- * Looks for "projects/" directory in path and returns the
506
- * immediate subdirectory name.
507
- *
508
- * @param filePath - Relative file path
509
- * @returns Project name or undefined
510
- *
511
- * @example
512
- * extractProjectFromPath('projects/acme-app/notes.md') // =&gt; 'acme-app'
513
- * extractProjectFromPath('1-1s/jane.md') // =&gt; undefined
514
- */
515
- export function extractProjectFromPath(filePath: string): string | undefined {
516
- const match = filePath.match(/projects\/([^/]+)/);
517
- return match?.[1];
518
- }
519
- &nbsp;
520
- /**
521
- * Extract person name from file path
522
- *
523
- * Looks for "1-1s/" directory in path and extracts the filename
524
- * (without extension) as the person identifier.
525
- *
526
- * @param filePath - Relative file path
527
- * @returns Person identifier or undefined
528
- *
529
- * @example
530
- * extractPersonFromFilename('1-1s/jane-doe.md') // =&gt; 'jane-doe'
531
- * extractPersonFromFilename('projects/acme/notes.md') // =&gt; undefined
532
- */
533
- export function extractPersonFromFilename(
534
- filePath: string,
535
- ): string | undefined {
536
- const match = filePath.match(/1-1s\/([^/]+)\.md$/);
537
- return match?.[1];
538
- }
539
- &nbsp;
540
- /**
541
- * MarkdownScanner scans markdown file content and extracts tasks
542
- *
543
- * Key features:
544
- * - Context tracking: Maintains project, person, and heading date context
545
- * - Pure function: No I/O, just string processing
546
- * - Warning collection: Reports issues like relative dates without context
547
- *
548
- * @example
549
- * const scanner = new MarkdownScanner();
550
- * const result = scanner.scanFile('projects/acme-app/notes.md', fileContent);
551
- * console.log(result.tasks); // Array of Task objects
552
- * console.log(result.warnings); // Array of Warning objects
553
- */
554
- export class MarkdownScanner {
555
- /**
556
- * Scan a single markdown file's content
557
- *
558
- * Processes the file line-by-line, tracking context and extracting tasks.
559
- *
560
- * @param filePath - Relative file path (for context extraction)
561
- * @param content - File content as string
562
- * @param options - Optional scanner options including workday config
563
- * @returns Object containing tasks and warnings
564
- */
565
- scanFile(
566
- filePath: string,
567
- content: string,
568
- options?: {
569
- workdayStartTime?: string;
570
- workdayEndTime?: string;
571
- defaultDueTime?: 'start' | 'end';
572
- },
573
- ): {
574
- tasks: Task[];
575
- warnings: Warning[];
576
- } {
577
- const tasks: Task[] = [];
578
- const warnings: Warning[] = [];
579
- &nbsp;
580
- // Track Todoist IDs to detect duplicates
581
- const todoistIds = new Map&lt;string, { file: string; line: number }&gt;();
582
- &nbsp;
583
- // Initialize context from file path
584
- const context: ParsingContext = {};
585
- &nbsp;
586
- const project = extractProjectFromPath(filePath);
587
- if (project !== undefined) context.project = project;
588
- &nbsp;
589
- const person = extractPersonFromFilename(filePath);
590
- if (person !== undefined) context.person = person;
591
- &nbsp;
592
- // Add workday config to context if provided
593
- if (<span class="branch-0 cbranch-no" title="branch not covered" >options?.workdayStartTime) <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
594
- <span class="cstat-no" title="statement not covered" > context.workdayStartTime = options.workdayStartTime;</span>
595
- <span class="cstat-no" title="statement not covered" > }</span>
596
- if (<span class="branch-0 cbranch-no" title="branch not covered" >options?.workdayEndTime) <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
597
- <span class="cstat-no" title="statement not covered" > context.workdayEndTime = options.workdayEndTime;</span>
598
- <span class="cstat-no" title="statement not covered" > }</span>
599
- if (<span class="branch-0 cbranch-no" title="branch not covered" >options?.defaultDueTime) <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
600
- <span class="cstat-no" title="statement not covered" > context.defaultDueTime = options.defaultDueTime;</span>
601
- <span class="cstat-no" title="statement not covered" > }</span>
602
- &nbsp;
603
- // Process file line by line
604
- const lines = content.split('\n');
605
- &nbsp;
606
- for (let i = 0; i &lt; lines.length; i++) {
607
- const line = lines[i];
608
- if (!line) continue; // Skip undefined lines
609
- &nbsp;
610
- const lineNumber = i + 1; // 1-indexed
611
- &nbsp;
612
- // Check if line is a heading with a date
613
- const headingDate = extractDateFromHeading(line);
614
- if (headingDate) {
615
- context.currentDate = headingDate;
616
- context.currentHeading = line.trim();
617
- continue; // Headings are not tasks
618
- }
619
- &nbsp;
620
- // Try to parse as task
621
- const result = parseTask(line, lineNumber, filePath, context);
622
- &nbsp;
623
- if (result.task) {
624
- tasks.push(result.task);
625
- &nbsp;
626
- // Check for duplicate Todoist IDs
627
- if (result.task.todoistId) {
628
- const existing = todoistIds.get(result.task.todoistId);
629
- if (existing) {
630
- warnings.push({
631
- severity: 'error',
632
- source: 'md2do',
633
- ruleId: 'duplicate-todoist-id',
634
- file: filePath,
635
- line: lineNumber,
636
- text: result.task.text,
637
- message: `Duplicate Todoist ID [todoist:${result.task.todoistId}]. Also found at ${existing.file}:${existing.line}.`,
638
- reason: `Duplicate Todoist ID [todoist:${result.task.todoistId}]. Also found at ${existing.file}:${existing.line}.`,
639
- });
640
- } else {
641
- todoistIds.set(result.task.todoistId, {
642
- file: filePath,
643
- line: lineNumber,
644
- });
645
- }
646
- }
647
- }
648
- &nbsp;
649
- if (result.warnings.length &gt; 0) {
650
- warnings.push(...result.warnings);
651
- }
652
- }
653
- &nbsp;
654
- return { tasks, warnings };
655
- }
656
- &nbsp;
657
- /**
658
- * Scan multiple files
659
- *
660
- * Note: This method expects file contents to be provided by the caller.
661
- * File I/O should be handled in the CLI package using fast-glob.
662
- *
663
- * @param files - Array of {path, content} objects
664
- * @returns Combined scan results from all files
665
- */
666
- scanFiles(files: Array&lt;{ path: string; content: string }&gt;): {
667
- tasks: Task[];
668
- warnings: Warning[];
669
- } {
670
- const allTasks: Task[] = [];
671
- const allWarnings: Warning[] = [];
672
- &nbsp;
673
- // Track Todoist IDs across all files
674
- const todoistIds = new Map&lt;string, { file: string; line: number }&gt;();
675
- &nbsp;
676
- for (const file of files) {
677
- const result = this.scanFile(file.path, file.content);
678
- allTasks.push(...result.tasks);
679
- allWarnings.push(...result.warnings);
680
- &nbsp;
681
- // Check for duplicate Todoist IDs across files
682
- for (const task of result.tasks) {
683
- if (task.todoistId) {
684
- const existing = todoistIds.get(task.todoistId);
685
- if (existing &amp;&amp; existing.file !== task.file) {
686
- // Only add warning if duplicate is in a different file
687
- // (same-file duplicates are already caught by scanFile)
688
- allWarnings.push({
689
- severity: 'error',
690
- source: 'md2do',
691
- ruleId: 'duplicate-todoist-id',
692
- file: task.file,
693
- line: task.line,
694
- text: task.text,
695
- message: `Duplicate Todoist ID [todoist:${task.todoistId}] across files. Also found at ${existing.file}:${existing.line}.`,
696
- reason: `Duplicate Todoist ID [todoist:${task.todoistId}] across files. Also found at ${existing.file}:${existing.line}.`,
697
- });
698
- } else if (!existing) {
699
- todoistIds.set(task.todoistId, {
700
- file: task.file,
701
- line: task.line,
702
- });
703
- }
704
- }
705
- }
706
- }
707
- &nbsp;
708
- return {
709
- tasks: allTasks,
710
- warnings: allWarnings,
711
- };
712
- }
713
- }
714
- &nbsp;</pre></td></tr></table></pre>
715
-
716
- <div class='push'></div><!-- for sticky footer -->
717
- </div><!-- /wrapper -->
718
- <div class='footer quiet pad2 space-top1 center small'>
719
- Code coverage generated by
720
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
721
- at 2026-02-05T05:58:13.685Z
722
- </div>
723
- <script src="../../prettify.js"></script>
724
- <script>
725
- window.onload = function () {
726
- prettyPrint();
727
- };
728
- </script>
729
- <script src="../../sorter.js"></script>
730
- <script src="../../block-navigation.js"></script>
731
- </body>
732
- </html>
733
-