@md2do/todoist 0.2.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.
@@ -0,0 +1,760 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for mapper.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> mapper.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>225/225</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">97.43% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>38/39</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'>6/6</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>225/225</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>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a></td><td class="line-coverage quiet"><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">8x</span>
301
+ <span class="cline-any cline-yes">8x</span>
302
+ <span class="cline-any cline-yes">2x</span>
303
+ <span class="cline-any cline-yes">8x</span>
304
+ <span class="cline-any cline-yes">1x</span>
305
+ <span class="cline-any cline-yes">8x</span>
306
+ <span class="cline-any cline-yes">1x</span>
307
+ <span class="cline-any cline-yes">8x</span>
308
+ <span class="cline-any cline-yes">8x</span>
309
+ <span class="cline-any cline-yes">4x</span>
310
+ <span class="cline-any cline-yes">8x</span>
311
+ <span class="cline-any cline-yes">8x</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">8x</span>
315
+ <span class="cline-any cline-yes">8x</span>
316
+ <span class="cline-any cline-yes">2x</span>
317
+ <span class="cline-any cline-yes">8x</span>
318
+ <span class="cline-any cline-yes">1x</span>
319
+ <span class="cline-any cline-yes">8x</span>
320
+ <span class="cline-any cline-yes">1x</span>
321
+ <span class="cline-any cline-yes">8x</span>
322
+ <span class="cline-any cline-yes">3x</span>
323
+ <span class="cline-any cline-yes">8x</span>
324
+ <span class="cline-any cline-yes">1x</span>
325
+ <span class="cline-any cline-yes">8x</span>
326
+ <span class="cline-any cline-yes">8x</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">10x</span>
334
+ <span class="cline-any cline-yes">10x</span>
335
+ <span class="cline-any cline-yes">10x</span>
336
+ <span class="cline-any cline-yes">10x</span>
337
+ <span class="cline-any cline-yes">10x</span>
338
+ <span class="cline-any cline-yes">10x</span>
339
+ <span class="cline-any cline-yes">10x</span>
340
+ <span class="cline-any cline-yes">10x</span>
341
+ <span class="cline-any cline-yes">10x</span>
342
+ <span class="cline-any cline-yes">10x</span>
343
+ <span class="cline-any cline-yes">10x</span>
344
+ <span class="cline-any cline-yes">10x</span>
345
+ <span class="cline-any cline-yes">10x</span>
346
+ <span class="cline-any cline-yes">10x</span>
347
+ <span class="cline-any cline-yes">10x</span>
348
+ <span class="cline-any cline-yes">10x</span>
349
+ <span class="cline-any cline-yes">10x</span>
350
+ <span class="cline-any cline-yes">1x</span>
351
+ <span class="cline-any cline-yes">1x</span>
352
+ <span class="cline-any cline-yes">1x</span>
353
+ <span class="cline-any cline-yes">1x</span>
354
+ <span class="cline-any cline-yes">1x</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">11x</span>
357
+ <span class="cline-any cline-yes">11x</span>
358
+ <span class="cline-any cline-yes">11x</span>
359
+ <span class="cline-any cline-yes">11x</span>
360
+ <span class="cline-any cline-yes">11x</span>
361
+ <span class="cline-any cline-yes">11x</span>
362
+ <span class="cline-any cline-yes">11x</span>
363
+ <span class="cline-any cline-yes">11x</span>
364
+ <span class="cline-any cline-yes">11x</span>
365
+ <span class="cline-any cline-yes">11x</span>
366
+ <span class="cline-any cline-yes">11x</span>
367
+ <span class="cline-any cline-yes">11x</span>
368
+ <span class="cline-any cline-yes">11x</span>
369
+ <span class="cline-any cline-yes">3x</span>
370
+ <span class="cline-any cline-yes">3x</span>
371
+ <span class="cline-any cline-yes">11x</span>
372
+ <span class="cline-any cline-yes">11x</span>
373
+ <span class="cline-any cline-yes">11x</span>
374
+ <span class="cline-any cline-yes">3x</span>
375
+ <span class="cline-any cline-yes">11x</span>
376
+ <span class="cline-any cline-yes">1x</span>
377
+ <span class="cline-any cline-yes">8x</span>
378
+ <span class="cline-any cline-yes">1x</span>
379
+ <span class="cline-any cline-yes">1x</span>
380
+ <span class="cline-any cline-yes">11x</span>
381
+ <span class="cline-any cline-yes">11x</span>
382
+ <span class="cline-any cline-yes">11x</span>
383
+ <span class="cline-any cline-yes">3x</span>
384
+ <span class="cline-any cline-yes">3x</span>
385
+ <span class="cline-any cline-yes">11x</span>
386
+ <span class="cline-any cline-yes">11x</span>
387
+ <span class="cline-any cline-yes">11x</span>
388
+ <span class="cline-any cline-yes">3x</span>
389
+ <span class="cline-any cline-yes">3x</span>
390
+ <span class="cline-any cline-yes">3x</span>
391
+ <span class="cline-any cline-yes">3x</span>
392
+ <span class="cline-any cline-yes">3x</span>
393
+ <span class="cline-any cline-yes">3x</span>
394
+ <span class="cline-any cline-yes">11x</span>
395
+ <span class="cline-any cline-yes">11x</span>
396
+ <span class="cline-any cline-yes">11x</span>
397
+ <span class="cline-any cline-yes">5x</span>
398
+ <span class="cline-any cline-yes">5x</span>
399
+ <span class="cline-any cline-yes">11x</span>
400
+ <span class="cline-any cline-yes">11x</span>
401
+ <span class="cline-any cline-yes">11x</span>
402
+ <span class="cline-any cline-yes">1x</span>
403
+ <span class="cline-any cline-yes">1x</span>
404
+ <span class="cline-any cline-yes">1x</span>
405
+ <span class="cline-any cline-yes">1x</span>
406
+ <span class="cline-any cline-yes">1x</span>
407
+ <span class="cline-any cline-yes">1x</span>
408
+ <span class="cline-any cline-yes">1x</span>
409
+ <span class="cline-any cline-yes">1x</span>
410
+ <span class="cline-any cline-yes">1x</span>
411
+ <span class="cline-any cline-yes">1x</span>
412
+ <span class="cline-any cline-yes">1x</span>
413
+ <span class="cline-any cline-yes">1x</span>
414
+ <span class="cline-any cline-yes">1x</span>
415
+ <span class="cline-any cline-yes">1x</span>
416
+ <span class="cline-any cline-yes">3x</span>
417
+ <span class="cline-any cline-yes">3x</span>
418
+ <span class="cline-any cline-yes">3x</span>
419
+ <span class="cline-any cline-yes">3x</span>
420
+ <span class="cline-any cline-yes">3x</span>
421
+ <span class="cline-any cline-yes">3x</span>
422
+ <span class="cline-any cline-yes">3x</span>
423
+ <span class="cline-any cline-yes">3x</span>
424
+ <span class="cline-any cline-yes">3x</span>
425
+ <span class="cline-any cline-yes">3x</span>
426
+ <span class="cline-any cline-yes">1x</span>
427
+ <span class="cline-any cline-yes">1x</span>
428
+ <span class="cline-any cline-yes">3x</span>
429
+ <span class="cline-any cline-yes">3x</span>
430
+ <span class="cline-any cline-yes">3x</span>
431
+ <span class="cline-any cline-yes">1x</span>
432
+ <span class="cline-any cline-yes">1x</span>
433
+ <span class="cline-any cline-yes">1x</span>
434
+ <span class="cline-any cline-yes">1x</span>
435
+ <span class="cline-any cline-yes">1x</span>
436
+ <span class="cline-any cline-yes">1x</span>
437
+ <span class="cline-any cline-yes">3x</span>
438
+ <span class="cline-any cline-yes">3x</span>
439
+ <span class="cline-any cline-yes">3x</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">3x</span>
443
+ <span class="cline-any cline-yes">3x</span>
444
+ <span class="cline-any cline-yes">3x</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">1x</span>
452
+ <span class="cline-any cline-yes">1x</span>
453
+ <span class="cline-any cline-yes">1x</span>
454
+ <span class="cline-any cline-yes">1x</span>
455
+ <span class="cline-any cline-yes">1x</span>
456
+ <span class="cline-any cline-yes">1x</span>
457
+ <span class="cline-any cline-yes">1x</span>
458
+ <span class="cline-any cline-yes">1x</span>
459
+ <span class="cline-any cline-yes">3x</span>
460
+ <span class="cline-any cline-yes">3x</span>
461
+ <span class="cline-any cline-yes">3x</span>
462
+ <span class="cline-any cline-yes">3x</span>
463
+ <span class="cline-any cline-yes">3x</span>
464
+ <span class="cline-any cline-yes">3x</span>
465
+ <span class="cline-any cline-yes">1x</span>
466
+ <span class="cline-any cline-yes">2x</span>
467
+ <span class="cline-any cline-yes">3x</span>
468
+ <span class="cline-any cline-yes">3x</span>
469
+ <span class="cline-any cline-yes">3x</span>
470
+ <span class="cline-any cline-yes">3x</span>
471
+ <span class="cline-any cline-yes">3x</span>
472
+ <span class="cline-any cline-yes">3x</span>
473
+ <span class="cline-any cline-yes">3x</span>
474
+ <span class="cline-any cline-yes">3x</span>
475
+ <span class="cline-any cline-yes">3x</span>
476
+ <span class="cline-any cline-yes">3x</span>
477
+ <span class="cline-any cline-yes">3x</span>
478
+ <span class="cline-any cline-yes">3x</span>
479
+ <span class="cline-any cline-yes">3x</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">3x</span>
483
+ <span class="cline-any cline-yes">3x</span>
484
+ <span class="cline-any cline-yes">3x</span>
485
+ <span class="cline-any cline-yes">3x</span>
486
+ <span class="cline-any cline-yes">3x</span>
487
+ <span class="cline-any cline-yes">3x</span>
488
+ <span class="cline-any cline-yes">1x</span>
489
+ <span class="cline-any cline-yes">1x</span>
490
+ <span class="cline-any cline-yes">3x</span>
491
+ <span class="cline-any cline-yes">3x</span>
492
+ <span class="cline-any cline-yes">1x</span>
493
+ <span class="cline-any cline-yes">1x</span>
494
+ <span class="cline-any cline-yes">3x</span>
495
+ <span class="cline-any cline-yes">3x</span>
496
+ <span class="cline-any cline-yes">3x</span>
497
+ <span class="cline-any cline-yes">3x</span>
498
+ <span class="cline-any cline-yes">3x</span>
499
+ <span class="cline-any cline-yes">3x</span>
500
+ <span class="cline-any cline-yes">3x</span>
501
+ <span class="cline-any cline-yes">3x</span>
502
+ <span class="cline-any cline-yes">3x</span>
503
+ <span class="cline-any cline-yes">3x</span>
504
+ <span class="cline-any cline-yes">3x</span>
505
+ <span class="cline-any cline-yes">3x</span>
506
+ <span class="cline-any cline-yes">3x</span>
507
+ <span class="cline-any cline-yes">1x</span>
508
+ <span class="cline-any cline-yes">1x</span>
509
+ <span class="cline-any cline-yes">3x</span>
510
+ <span class="cline-any cline-yes">3x</span>
511
+ <span class="cline-any cline-yes">1x</span>
512
+ <span class="cline-any cline-yes">1x</span>
513
+ <span class="cline-any cline-yes">3x</span>
514
+ <span class="cline-any cline-yes">3x</span>
515
+ <span class="cline-any cline-yes">3x</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import type { Task } from '@md2do/core';
517
+ import type { Task as TodoistTask } from '@doist/todoist-api-typescript';
518
+ &nbsp;
519
+ /**
520
+ * Priority mapping between md2do and Todoist
521
+ * md2do: urgent (!!!) / high (!!) / normal (!) / low (none)
522
+ * Todoist: 4 / 3 / 2 / 1
523
+ */
524
+ export function md2doToTodoistPriority(priority?: string): number {
525
+ switch (priority) {
526
+ case 'urgent':
527
+ return 4;
528
+ case 'high':
529
+ return 3;
530
+ case 'normal':
531
+ return 2;
532
+ case 'low':
533
+ default:
534
+ return 1;
535
+ }
536
+ }
537
+ &nbsp;
538
+ export function todoistToMd2doPriority(priority: number): string | undefined {
539
+ switch (priority) {
540
+ case 4:
541
+ return 'urgent';
542
+ case 3:
543
+ return 'high';
544
+ case 2:
545
+ return 'normal';
546
+ case 1:
547
+ return 'low';
548
+ default:
549
+ return undefined;
550
+ }
551
+ }
552
+ &nbsp;
553
+ /**
554
+ * Extract task content without metadata for Todoist
555
+ * Removes: assignee, priority markers, tags, dates, todoist ID
556
+ */
557
+ export function extractTaskContent(text: string): string {
558
+ return (
559
+ text
560
+ // Remove assignee @username
561
+ .replace(/@\w+/g, '')
562
+ // Remove priority markers
563
+ .replace(/!+/g, '')
564
+ // Remove tags
565
+ .replace(/#\w+/g, '')
566
+ // Remove dates in parentheses
567
+ .replace(/\(\d{4}-\d{2}-\d{2}\)/g, '')
568
+ // Remove Todoist ID
569
+ .replace(/\[todoist:\s*\d+\]/gi, '')
570
+ // Clean up extra whitespace
571
+ .replace(/\s+/g, ' ')
572
+ .trim()
573
+ );
574
+ }
575
+ &nbsp;
576
+ /**
577
+ * Format Todoist task content for markdown
578
+ * Adds back assignee, priority, tags, and due date
579
+ */
580
+ export function formatTaskContent(
581
+ content: string,
582
+ options: {
583
+ assignee?: string;
584
+ priority?: string;
585
+ tags?: string[];
586
+ due?: Date;
587
+ todoistId?: string;
588
+ },
589
+ ): string {
590
+ let result = content;
591
+ &nbsp;
592
+ // Add assignee
593
+ if (options.assignee) {
594
+ result += ` @${options.assignee}`;
595
+ }
596
+ &nbsp;
597
+ // Add priority markers
598
+ if (options.priority === 'urgent') {
599
+ result += ' !!!';
600
+ } else if (options.priority === 'high') {
601
+ result += ' !!';
602
+ } else if (options.priority === 'normal') {
603
+ result += ' !';
604
+ }
605
+ &nbsp;
606
+ // Add tags
607
+ if (options.tags &amp;&amp; options.tags.length &gt; 0) {
608
+ result += ' ' + options.tags.map((tag) =&gt; `#${tag}`).join(' ');
609
+ }
610
+ &nbsp;
611
+ // Add due date
612
+ if (options.due) {
613
+ // Format date in UTC to avoid timezone issues
614
+ const year = options.due.getUTCFullYear();
615
+ const month = String(options.due.getUTCMonth() + 1).padStart(2, '0');
616
+ const day = String(options.due.getUTCDate()).padStart(2, '0');
617
+ result += ` (${year}-${month}-${day})`;
618
+ }
619
+ &nbsp;
620
+ // Add Todoist ID
621
+ if (options.todoistId) {
622
+ result += ` [todoist:${options.todoistId}]`;
623
+ }
624
+ &nbsp;
625
+ return result;
626
+ }
627
+ &nbsp;
628
+ /**
629
+ * Convert md2do task to Todoist task creation parameters
630
+ */
631
+ export interface TodoistTaskParams {
632
+ content: string;
633
+ priority: number;
634
+ labels?: string[];
635
+ due_date?: string;
636
+ due_string?: string;
637
+ project_id?: string;
638
+ }
639
+ &nbsp;
640
+ export function md2doToTodoist(
641
+ task: Task,
642
+ projectId?: string,
643
+ ): TodoistTaskParams {
644
+ const params: TodoistTaskParams = {
645
+ content: extractTaskContent(task.text),
646
+ priority: md2doToTodoistPriority(task.priority),
647
+ };
648
+ &nbsp;
649
+ // Add labels from tags
650
+ if (task.tags &amp;&amp; task.tags.length &gt; 0) {
651
+ params.labels = task.tags;
652
+ }
653
+ &nbsp;
654
+ // Add due date
655
+ if (task.dueDate) {
656
+ // Format date in UTC to avoid timezone issues
657
+ const year = task.dueDate.getUTCFullYear();
658
+ const month = String(task.dueDate.getUTCMonth() + 1).padStart(2, '0');
659
+ const day = String(task.dueDate.getUTCDate()).padStart(2, '0');
660
+ params.due_date = `${year}-${month}-${day}`;
661
+ }
662
+ &nbsp;
663
+ // Add project ID
664
+ if (projectId) {
665
+ params.project_id = projectId;
666
+ }
667
+ &nbsp;
668
+ return params;
669
+ }
670
+ &nbsp;
671
+ /**
672
+ * Convert Todoist task to md2do task update data
673
+ */
674
+ export interface Md2doTaskUpdate {
675
+ text: string;
676
+ completed: boolean;
677
+ todoistId: string;
678
+ priority?: string;
679
+ tags?: string[];
680
+ due?: Date;
681
+ }
682
+ &nbsp;
683
+ export function todoistToMd2do(
684
+ todoistTask: TodoistTask,
685
+ assignee?: string,
686
+ ): Md2doTaskUpdate {
687
+ const priority = todoistToMd2doPriority(todoistTask.priority);
688
+ // Parse date string as UTC to avoid timezone issues
689
+ const due = todoistTask.due?.date
690
+ ? new Date(`${todoistTask.due.date}T00:00:00.000Z`)
691
+ : undefined;
692
+ &nbsp;
693
+ // Build format options with only defined values
694
+ const formatOptions: {
695
+ assignee?: string;
696
+ priority?: string;
697
+ tags?: string[];
698
+ due?: Date;
699
+ todoistId?: string;
700
+ } = {
701
+ todoistId: todoistTask.id,
702
+ };
703
+ &nbsp;
704
+ if (assignee !== undefined) {
705
+ formatOptions.assignee = assignee;
706
+ }
707
+ &nbsp;
708
+ if (priority !== undefined) {
709
+ formatOptions.priority = priority;
710
+ }
711
+ &nbsp;
712
+ if (todoistTask.labels.length &gt; 0) {
713
+ formatOptions.tags = todoistTask.labels;
714
+ }
715
+ &nbsp;
716
+ if (due !== undefined) {
717
+ formatOptions.due = due;
718
+ }
719
+ &nbsp;
720
+ const update: Md2doTaskUpdate = {
721
+ text: formatTaskContent(todoistTask.content, formatOptions),
722
+ completed: todoistTask.<span class="branch-0 cbranch-no" title="branch not covered" >isCompleted ?? false,</span>
723
+ todoistId: todoistTask.id,
724
+ };
725
+ &nbsp;
726
+ // Add optional properties only if they have values
727
+ if (priority !== undefined) {
728
+ update.priority = priority;
729
+ }
730
+ &nbsp;
731
+ if (todoistTask.labels.length &gt; 0) {
732
+ update.tags = todoistTask.labels;
733
+ }
734
+ &nbsp;
735
+ if (due !== undefined) {
736
+ update.due = due;
737
+ }
738
+ &nbsp;
739
+ return update;
740
+ }
741
+ &nbsp;</pre></td></tr></table></pre>
742
+
743
+ <div class='push'></div><!-- for sticky footer -->
744
+ </div><!-- /wrapper -->
745
+ <div class='footer quiet pad2 space-top1 center small'>
746
+ Code coverage generated by
747
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
748
+ at 2026-01-22T01:16:23.009Z
749
+ </div>
750
+ <script src="prettify.js"></script>
751
+ <script>
752
+ window.onload = function () {
753
+ prettyPrint();
754
+ };
755
+ </script>
756
+ <script src="sorter.js"></script>
757
+ <script src="block-navigation.js"></script>
758
+ </body>
759
+ </html>
760
+