floatnote 1.0.0 → 1.0.5

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 (68) hide show
  1. package/bin/floatnote.js +16 -0
  2. package/package.json +13 -5
  3. package/.beads/config.json +0 -6
  4. package/.beads/issues/floatnote-1.md +0 -21
  5. package/.beads/issues/floatnote-10.md +0 -28
  6. package/.beads/issues/floatnote-11.md +0 -36
  7. package/.beads/issues/floatnote-12.md +0 -25
  8. package/.beads/issues/floatnote-13.md +0 -37
  9. package/.beads/issues/floatnote-14.md +0 -22
  10. package/.beads/issues/floatnote-15.md +0 -22
  11. package/.beads/issues/floatnote-16.md +0 -20
  12. package/.beads/issues/floatnote-17.md +0 -20
  13. package/.beads/issues/floatnote-18.md +0 -21
  14. package/.beads/issues/floatnote-19.md +0 -19
  15. package/.beads/issues/floatnote-2.md +0 -32
  16. package/.beads/issues/floatnote-20.md +0 -22
  17. package/.beads/issues/floatnote-3.md +0 -50
  18. package/.beads/issues/floatnote-4.md +0 -31
  19. package/.beads/issues/floatnote-5.md +0 -28
  20. package/.beads/issues/floatnote-6.md +0 -30
  21. package/.beads/issues/floatnote-7.md +0 -38
  22. package/.beads/issues/floatnote-8.md +0 -29
  23. package/.beads/issues/floatnote-9.md +0 -32
  24. package/CLAUDE.md +0 -61
  25. package/coverage/base.css +0 -224
  26. package/coverage/bin/floatnote.js.html +0 -739
  27. package/coverage/bin/index.html +0 -116
  28. package/coverage/block-navigation.js +0 -87
  29. package/coverage/favicon.png +0 -0
  30. package/coverage/index.html +0 -131
  31. package/coverage/lcov-report/base.css +0 -224
  32. package/coverage/lcov-report/bin/floatnote.js.html +0 -739
  33. package/coverage/lcov-report/bin/index.html +0 -116
  34. package/coverage/lcov-report/block-navigation.js +0 -87
  35. package/coverage/lcov-report/favicon.png +0 -0
  36. package/coverage/lcov-report/index.html +0 -131
  37. package/coverage/lcov-report/prettify.css +0 -1
  38. package/coverage/lcov-report/prettify.js +0 -2
  39. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  40. package/coverage/lcov-report/sorter.js +0 -210
  41. package/coverage/lcov-report/src/index.html +0 -146
  42. package/coverage/lcov-report/src/main.js.html +0 -1483
  43. package/coverage/lcov-report/src/preload.js.html +0 -361
  44. package/coverage/lcov-report/src/renderer.js.html +0 -8767
  45. package/coverage/lcov.info +0 -3273
  46. package/coverage/prettify.css +0 -1
  47. package/coverage/prettify.js +0 -2
  48. package/coverage/sort-arrow-sprite.png +0 -0
  49. package/coverage/sorter.js +0 -210
  50. package/coverage/src/index.html +0 -146
  51. package/coverage/src/main.js.html +0 -1483
  52. package/coverage/src/preload.js.html +0 -361
  53. package/coverage/src/renderer.js.html +0 -8767
  54. package/jest.config.js +0 -48
  55. package/src/icon-template.png +0 -0
  56. package/src/index.html +0 -296
  57. package/src/main.js +0 -494
  58. package/src/preload.js +0 -96
  59. package/src/renderer.js +0 -3203
  60. package/src/styles.css +0 -1448
  61. package/tests/cli/floatnote.test.js +0 -167
  62. package/tests/main/main.test.js +0 -287
  63. package/tests/mocks/electron.js +0 -126
  64. package/tests/mocks/fs.js +0 -17
  65. package/tests/preload/preload.test.js +0 -218
  66. package/tests/renderer/history.test.js +0 -234
  67. package/tests/renderer/notes.test.js +0 -262
  68. package/tests/renderer/settings.test.js +0 -178
@@ -1,739 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for bin/floatnote.js</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">bin</a> floatnote.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>0/112</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>0/55</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>0/18</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>0/109</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 low'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-neutral">&nbsp;</span>
286
- <span class="cline-any cline-no">&nbsp;</span>
287
- <span class="cline-any cline-no">&nbsp;</span>
288
- <span class="cline-any cline-no">&nbsp;</span>
289
- <span class="cline-any cline-no">&nbsp;</span>
290
- <span class="cline-any cline-no">&nbsp;</span>
291
- <span class="cline-any cline-no">&nbsp;</span>
292
- <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-no">&nbsp;</span>
294
- <span class="cline-any cline-no">&nbsp;</span>
295
- <span class="cline-any cline-no">&nbsp;</span>
296
- <span class="cline-any cline-no">&nbsp;</span>
297
- <span class="cline-any cline-no">&nbsp;</span>
298
- <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-no">&nbsp;</span>
301
- <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-no">&nbsp;</span>
305
- <span class="cline-any cline-no">&nbsp;</span>
306
- <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-neutral">&nbsp;</span>
309
- <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-no">&nbsp;</span>
312
- <span class="cline-any cline-no">&nbsp;</span>
313
- <span class="cline-any cline-no">&nbsp;</span>
314
- <span class="cline-any cline-no">&nbsp;</span>
315
- <span class="cline-any cline-neutral">&nbsp;</span>
316
- <span class="cline-any cline-no">&nbsp;</span>
317
- <span class="cline-any cline-no">&nbsp;</span>
318
- <span class="cline-any cline-no">&nbsp;</span>
319
- <span class="cline-any cline-no">&nbsp;</span>
320
- <span class="cline-any cline-no">&nbsp;</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-no">&nbsp;</span>
323
- <span class="cline-any cline-neutral">&nbsp;</span>
324
- <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-no">&nbsp;</span>
326
- <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-neutral">&nbsp;</span>
329
- <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-neutral">&nbsp;</span>
331
- <span class="cline-any cline-no">&nbsp;</span>
332
- <span class="cline-any cline-no">&nbsp;</span>
333
- <span class="cline-any cline-no">&nbsp;</span>
334
- <span class="cline-any cline-no">&nbsp;</span>
335
- <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-neutral">&nbsp;</span>
337
- <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-no">&nbsp;</span>
341
- <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-no">&nbsp;</span>
343
- <span class="cline-any cline-no">&nbsp;</span>
344
- <span class="cline-any cline-no">&nbsp;</span>
345
- <span class="cline-any cline-neutral">&nbsp;</span>
346
- <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-no">&nbsp;</span>
348
- <span class="cline-any cline-no">&nbsp;</span>
349
- <span class="cline-any cline-no">&nbsp;</span>
350
- <span class="cline-any cline-neutral">&nbsp;</span>
351
- <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-no">&nbsp;</span>
353
- <span class="cline-any cline-no">&nbsp;</span>
354
- <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-no">&nbsp;</span>
356
- <span class="cline-any cline-no">&nbsp;</span>
357
- <span class="cline-any cline-no">&nbsp;</span>
358
- <span class="cline-any cline-no">&nbsp;</span>
359
- <span class="cline-any cline-no">&nbsp;</span>
360
- <span class="cline-any cline-no">&nbsp;</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-no">&nbsp;</span>
364
- <span class="cline-any cline-no">&nbsp;</span>
365
- <span class="cline-any cline-no">&nbsp;</span>
366
- <span class="cline-any cline-no">&nbsp;</span>
367
- <span class="cline-any cline-neutral">&nbsp;</span>
368
- <span class="cline-any cline-no">&nbsp;</span>
369
- <span class="cline-any cline-no">&nbsp;</span>
370
- <span class="cline-any cline-no">&nbsp;</span>
371
- <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-neutral">&nbsp;</span>
373
- <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-no">&nbsp;</span>
376
- <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-neutral">&nbsp;</span>
378
- <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-neutral">&nbsp;</span>
380
- <span class="cline-any cline-no">&nbsp;</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-neutral">&nbsp;</span>
384
- <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-neutral">&nbsp;</span>
387
- <span class="cline-any cline-no">&nbsp;</span>
388
- <span class="cline-any cline-no">&nbsp;</span>
389
- <span class="cline-any cline-no">&nbsp;</span>
390
- <span class="cline-any cline-no">&nbsp;</span>
391
- <span class="cline-any cline-no">&nbsp;</span>
392
- <span class="cline-any cline-neutral">&nbsp;</span>
393
- <span class="cline-any cline-no">&nbsp;</span>
394
- <span class="cline-any cline-no">&nbsp;</span>
395
- <span class="cline-any cline-neutral">&nbsp;</span>
396
- <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-neutral">&nbsp;</span>
398
- <span class="cline-any cline-neutral">&nbsp;</span>
399
- <span class="cline-any cline-neutral">&nbsp;</span>
400
- <span class="cline-any cline-neutral">&nbsp;</span>
401
- <span class="cline-any cline-neutral">&nbsp;</span>
402
- <span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-neutral">&nbsp;</span>
404
- <span class="cline-any cline-neutral">&nbsp;</span>
405
- <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-neutral">&nbsp;</span>
407
- <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-neutral">&nbsp;</span>
410
- <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-no">&nbsp;</span>
413
- <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-no">&nbsp;</span>
416
- <span class="cline-any cline-no">&nbsp;</span>
417
- <span class="cline-any cline-no">&nbsp;</span>
418
- <span class="cline-any cline-no">&nbsp;</span>
419
- <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-no">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-no">&nbsp;</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-no">&nbsp;</span>
427
- <span class="cline-any cline-no">&nbsp;</span>
428
- <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-no">&nbsp;</span>
431
- <span class="cline-any cline-no">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-no">&nbsp;</span>
435
- <span class="cline-any cline-no">&nbsp;</span>
436
- <span class="cline-any cline-no">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-no">&nbsp;</span>
439
- <span class="cline-any cline-no">&nbsp;</span>
440
- <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-no">&nbsp;</span>
443
- <span class="cline-any cline-no">&nbsp;</span>
444
- <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-no">&nbsp;</span>
450
- <span class="cline-any cline-no">&nbsp;</span>
451
- <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-no">&nbsp;</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-no">&nbsp;</span>
457
- <span class="cline-any cline-no">&nbsp;</span>
458
- <span class="cline-any cline-no">&nbsp;</span>
459
- <span class="cline-any cline-no">&nbsp;</span>
460
- <span class="cline-any cline-no">&nbsp;</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-neutral">&nbsp;</span>
464
- <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-no">&nbsp;</span>
466
- <span class="cline-any cline-no">&nbsp;</span>
467
- <span class="cline-any cline-no">&nbsp;</span>
468
- <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-no">&nbsp;</span>
470
- <span class="cline-any cline-no">&nbsp;</span>
471
- <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-no">&nbsp;</span>
474
- <span class="cline-any cline-no">&nbsp;</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-no">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-no">&nbsp;</span>
480
- <span class="cline-any cline-no">&nbsp;</span>
481
- <span class="cline-any cline-no">&nbsp;</span>
482
- <span class="cline-any cline-no">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-no">&nbsp;</span>
486
- <span class="cline-any cline-neutral">&nbsp;</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-no">&nbsp;</span>
490
- <span class="cline-any cline-no">&nbsp;</span>
491
- <span class="cline-any cline-no">&nbsp;</span>
492
- <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-no">&nbsp;</span>
494
- <span class="cline-any cline-no">&nbsp;</span>
495
- <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-no">&nbsp;</span>
499
- <span class="cline-any cline-no">&nbsp;</span>
500
- <span class="cline-any cline-no">&nbsp;</span>
501
- <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">#!/usr/bin/env node
503
- &nbsp;
504
- const { spawn } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
505
- const fs = <span class="cstat-no" title="statement not covered" >require('fs');</span>
506
- const path = <span class="cstat-no" title="statement not covered" >require('path');</span>
507
- const https = <span class="cstat-no" title="statement not covered" >require('https');</span>
508
- const { createWriteStream, mkdirSync, existsSync, rmSync, unlinkSync, readFileSync, writeFileSync } = <span class="cstat-no" title="statement not covered" >require('fs');</span>
509
- const { execSync } = <span class="cstat-no" title="statement not covered" >require('child_process');</span>
510
- &nbsp;
511
- const APP_NAME = <span class="cstat-no" title="statement not covered" >'Floatnote';</span>
512
- const GITHUB_REPO = <span class="cstat-no" title="statement not covered" >'josmanvis/floatnote';</span>
513
- const APP_DIR = <span class="cstat-no" title="statement not covered" >path.join(process.env.HOME, '.floatnote');</span>
514
- const APP_PATH = <span class="cstat-no" title="statement not covered" >path.join(APP_DIR, `${APP_NAME}.app`);</span>
515
- const VERSION_FILE = <span class="cstat-no" title="statement not covered" >path.join(APP_DIR, 'version');</span>
516
- &nbsp;
517
- function <span class="fstat-no" title="function not covered" >log(</span>message) {
518
- <span class="cstat-no" title="statement not covered" > console.log(`[floatnote] ${message}`);</span>
519
- }
520
- &nbsp;
521
- async function <span class="fstat-no" title="function not covered" >getLatestRelease(</span>) {
522
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
523
- const options = <span class="cstat-no" title="statement not covered" >{</span>
524
- hostname: 'api.github.com',
525
- path: `/repos/${GITHUB_REPO}/releases/latest`,
526
- headers: { 'User-Agent': 'floatnote-cli' }
527
- };
528
- &nbsp;
529
- <span class="cstat-no" title="statement not covered" > https.get(options, <span class="fstat-no" title="function not covered" >(r</span>es) =&gt; {</span>
530
- <span class="cstat-no" title="statement not covered" > if (res.statusCode === 404) {</span>
531
- <span class="cstat-no" title="statement not covered" > reject(new Error('No releases found. Please wait for the first release to be published.'));</span>
532
- <span class="cstat-no" title="statement not covered" > return;</span>
533
- }
534
- let data = <span class="cstat-no" title="statement not covered" >'';</span>
535
- <span class="cstat-no" title="statement not covered" > res.on('data', <span class="fstat-no" title="function not covered" >ch</span>unk =&gt; <span class="cstat-no" title="statement not covered" >data += chunk)</span>;</span>
536
- <span class="cstat-no" title="statement not covered" > res.on('end', <span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
537
- <span class="cstat-no" title="statement not covered" > try {</span>
538
- <span class="cstat-no" title="statement not covered" > resolve(JSON.parse(data));</span>
539
- } catch (e) {
540
- <span class="cstat-no" title="statement not covered" > reject(new Error('Failed to parse release data'));</span>
541
- }
542
- });
543
- <span class="cstat-no" title="statement not covered" > res.on('error', reject);</span>
544
- }).on('error', reject);
545
- });
546
- }
547
- &nbsp;
548
- async function <span class="fstat-no" title="function not covered" >downloadFile(</span>url, dest, onProgress) {
549
- <span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) =&gt; {</span>
550
- const makeRequest = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(r</span>equestUrl) =&gt; {</span>
551
- const parsedUrl = <span class="cstat-no" title="statement not covered" >new URL(requestUrl);</span>
552
- const options = <span class="cstat-no" title="statement not covered" >{</span>
553
- hostname: parsedUrl.hostname,
554
- path: parsedUrl.pathname + parsedUrl.search,
555
- headers: { 'User-Agent': 'floatnote-cli' }
556
- };
557
- &nbsp;
558
- <span class="cstat-no" title="statement not covered" > https.get(options, <span class="fstat-no" title="function not covered" >(r</span>es) =&gt; {</span>
559
- // Handle redirects
560
- <span class="cstat-no" title="statement not covered" > if (res.statusCode === 302 || res.statusCode === 301) {</span>
561
- <span class="cstat-no" title="statement not covered" > makeRequest(res.headers.location);</span>
562
- <span class="cstat-no" title="statement not covered" > return;</span>
563
- }
564
- &nbsp;
565
- <span class="cstat-no" title="statement not covered" > if (res.statusCode !== 200) {</span>
566
- <span class="cstat-no" title="statement not covered" > reject(new Error(`Download failed with status ${res.statusCode}`));</span>
567
- <span class="cstat-no" title="statement not covered" > return;</span>
568
- }
569
- &nbsp;
570
- const totalSize = <span class="cstat-no" title="statement not covered" >parseInt(res.headers['content-length'], 10);</span>
571
- let downloadedSize = <span class="cstat-no" title="statement not covered" >0;</span>
572
- &nbsp;
573
- const file = <span class="cstat-no" title="statement not covered" >createWriteStream(dest);</span>
574
- <span class="cstat-no" title="statement not covered" > res.on('data', <span class="fstat-no" title="function not covered" >(c</span>hunk) =&gt; {</span>
575
- <span class="cstat-no" title="statement not covered" > downloadedSize += chunk.length;</span>
576
- <span class="cstat-no" title="statement not covered" > if (onProgress &amp;&amp; totalSize) {</span>
577
- const percent = <span class="cstat-no" title="statement not covered" >Math.round((downloadedSize / totalSize) * 100);</span>
578
- <span class="cstat-no" title="statement not covered" > onProgress(percent, downloadedSize, totalSize);</span>
579
- }
580
- });
581
- <span class="cstat-no" title="statement not covered" > res.pipe(file);</span>
582
- <span class="cstat-no" title="statement not covered" > file.on('finish', <span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
583
- <span class="cstat-no" title="statement not covered" > file.close();</span>
584
- <span class="cstat-no" title="statement not covered" > resolve();</span>
585
- });
586
- <span class="cstat-no" title="statement not covered" > file.on('error', <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; {</span>
587
- <span class="cstat-no" title="statement not covered" > unlinkSync(dest);</span>
588
- <span class="cstat-no" title="statement not covered" > reject(err);</span>
589
- });
590
- }).on('error', reject);
591
- };
592
- &nbsp;
593
- <span class="cstat-no" title="statement not covered" > makeRequest(url);</span>
594
- });
595
- }
596
- &nbsp;
597
- function <span class="fstat-no" title="function not covered" >formatBytes(</span>bytes) {
598
- <span class="cstat-no" title="statement not covered" > if (bytes &lt; 1024) <span class="cstat-no" title="statement not covered" >return bytes + ' B';</span></span>
599
- <span class="cstat-no" title="statement not covered" > if (bytes &lt; 1024 * 1024) <span class="cstat-no" title="statement not covered" >return (bytes / 1024).toFixed(1) + ' KB';</span></span>
600
- <span class="cstat-no" title="statement not covered" > return (bytes / (1024 * 1024)).toFixed(1) + ' MB';</span>
601
- }
602
- &nbsp;
603
- async function <span class="fstat-no" title="function not covered" >main(</span>) {
604
- // Handle command line arguments
605
- const args = <span class="cstat-no" title="statement not covered" >process.argv.slice(2);</span>
606
- <span class="cstat-no" title="statement not covered" > if (args.includes('--version') || args.includes('-v')) {</span>
607
- const pkg = <span class="cstat-no" title="statement not covered" >require('../package.json');</span>
608
- <span class="cstat-no" title="statement not covered" > console.log(`floatnote v${pkg.version}`);</span>
609
- <span class="cstat-no" title="statement not covered" > return;</span>
610
- }
611
- <span class="cstat-no" title="statement not covered" > if (args.includes('--help') || args.includes('-h')) {</span>
612
- <span class="cstat-no" title="statement not covered" > console.log(`</span>
613
- Floatnote - Transparent drawing overlay for macOS
614
- &nbsp;
615
- Usage: floatnote [options]
616
- &nbsp;
617
- Options:
618
- -v, --version Show version number
619
- -h, --help Show this help message
620
- --update Force update to latest version
621
- --uninstall Remove Floatnote from your system
622
- &nbsp;
623
- Keyboard shortcuts (when app is running):
624
- Cmd+Shift+G Toggle Floatnote
625
- Alt+Space Quick toggle
626
- Ctrl+\` Quick toggle
627
- Cmd+, Settings
628
- [ / ] Navigate notes
629
- `);
630
- <span class="cstat-no" title="statement not covered" > return;</span>
631
- }
632
- &nbsp;
633
- <span class="cstat-no" title="statement not covered" > if (args.includes('--uninstall')) {</span>
634
- <span class="cstat-no" title="statement not covered" > if (existsSync(APP_DIR)) {</span>
635
- <span class="cstat-no" title="statement not covered" > rmSync(APP_DIR, { recursive: true });</span>
636
- <span class="cstat-no" title="statement not covered" > log('Floatnote has been uninstalled.');</span>
637
- } else {
638
- <span class="cstat-no" title="statement not covered" > log('Floatnote is not installed.');</span>
639
- }
640
- <span class="cstat-no" title="statement not covered" > return;</span>
641
- }
642
- &nbsp;
643
- // Create app directory
644
- <span class="cstat-no" title="statement not covered" > if (!existsSync(APP_DIR)) {</span>
645
- <span class="cstat-no" title="statement not covered" > mkdirSync(APP_DIR, { recursive: true });</span>
646
- }
647
- &nbsp;
648
- const forceUpdate = <span class="cstat-no" title="statement not covered" >args.includes('--update');</span>
649
- let currentVersion = <span class="cstat-no" title="statement not covered" >existsSync(VERSION_FILE) ? readFileSync(VERSION_FILE, 'utf8').trim() : null;</span>
650
- &nbsp;
651
- // Check for updates
652
- <span class="cstat-no" title="statement not covered" > try {</span>
653
- <span class="cstat-no" title="statement not covered" > log('Checking for updates...');</span>
654
- const release = <span class="cstat-no" title="statement not covered" >await getLatestRelease();</span>
655
- &nbsp;
656
- <span class="cstat-no" title="statement not covered" > if (forceUpdate || !currentVersion || currentVersion !== release.tag_name || !existsSync(APP_PATH)) {</span>
657
- <span class="cstat-no" title="statement not covered" > log(`Downloading Floatnote ${release.tag_name}...`);</span>
658
- &nbsp;
659
- // Find the zip asset for macOS
660
- const zipAsset = <span class="cstat-no" title="statement not covered" >release.assets.find(<span class="fstat-no" title="function not covered" >a </span>=&gt;</span>
661
- <span class="cstat-no" title="statement not covered" > a.name.includes('mac') &amp;&amp; a.name.endsWith('.zip') ||</span>
662
- a.name === `${APP_NAME}-${release.tag_name.replace('v', '')}-mac.zip` ||
663
- a.name === `${APP_NAME}.zip` ||
664
- a.name.endsWith('.zip')
665
- );
666
- &nbsp;
667
- <span class="cstat-no" title="statement not covered" > if (!zipAsset) {</span>
668
- <span class="cstat-no" title="statement not covered" > throw new Error('No macOS build found in the latest release.');</span>
669
- }
670
- &nbsp;
671
- const zipPath = <span class="cstat-no" title="statement not covered" >path.join(APP_DIR, 'floatnote.zip');</span>
672
- &nbsp;
673
- // Download with progress
674
- let lastPercent = <span class="cstat-no" title="statement not covered" >0;</span>
675
- <span class="cstat-no" title="statement not covered" > await downloadFile(zipAsset.browser_download_url, zipPath, <span class="fstat-no" title="function not covered" >(p</span>ercent, downloaded, total) =&gt; {</span>
676
- <span class="cstat-no" title="statement not covered" > if (percent !== lastPercent &amp;&amp; percent % 10 === 0) {</span>
677
- <span class="cstat-no" title="statement not covered" > log(`Progress: ${percent}% (${formatBytes(downloaded)} / ${formatBytes(total)})`);</span>
678
- <span class="cstat-no" title="statement not covered" > lastPercent = percent;</span>
679
- }
680
- });
681
- &nbsp;
682
- // Extract
683
- <span class="cstat-no" title="statement not covered" > log('Extracting...');</span>
684
- <span class="cstat-no" title="statement not covered" > if (existsSync(APP_PATH)) {</span>
685
- <span class="cstat-no" title="statement not covered" > rmSync(APP_PATH, { recursive: true });</span>
686
- }
687
- <span class="cstat-no" title="statement not covered" > execSync(`unzip -q -o "${zipPath}" -d "${APP_DIR}"`, { stdio: 'pipe' });</span>
688
- <span class="cstat-no" title="statement not covered" > unlinkSync(zipPath);</span>
689
- &nbsp;
690
- // Save version
691
- <span class="cstat-no" title="statement not covered" > writeFileSync(VERSION_FILE, release.tag_name);</span>
692
- <span class="cstat-no" title="statement not covered" > log(`Floatnote ${release.tag_name} installed successfully!`);</span>
693
- } else {
694
- <span class="cstat-no" title="statement not covered" > log(`Floatnote ${currentVersion} is up to date.`);</span>
695
- }
696
- } catch (err) {
697
- <span class="cstat-no" title="statement not covered" > if (!existsSync(APP_PATH)) {</span>
698
- <span class="cstat-no" title="statement not covered" > console.error(`Error: ${err.message}`);</span>
699
- <span class="cstat-no" title="statement not covered" > console.error('Make sure the GitHub repository has published releases.');</span>
700
- <span class="cstat-no" title="statement not covered" > process.exit(1);</span>
701
- }
702
- // If app exists, we can still launch it
703
- <span class="cstat-no" title="statement not covered" > log(`Could not check for updates: ${err.message}`);</span>
704
- }
705
- &nbsp;
706
- // Launch the app
707
- <span class="cstat-no" title="statement not covered" > if (existsSync(APP_PATH)) {</span>
708
- <span class="cstat-no" title="statement not covered" > log('Launching Floatnote...');</span>
709
- <span class="cstat-no" title="statement not covered" > spawn('open', [APP_PATH], { detached: true, stdio: 'ignore' }).unref();</span>
710
- } else {
711
- <span class="cstat-no" title="statement not covered" > console.error('Error: Floatnote app not found. Please try running with --update flag.');</span>
712
- <span class="cstat-no" title="statement not covered" > process.exit(1);</span>
713
- }
714
- }
715
- &nbsp;
716
- <span class="cstat-no" title="statement not covered" >main().catch(<span class="fstat-no" title="function not covered" >er</span>r =&gt; {</span>
717
- <span class="cstat-no" title="statement not covered" > console.error('Error:', err.message);</span>
718
- <span class="cstat-no" title="statement not covered" > process.exit(1);</span>
719
- });
720
- &nbsp;</pre></td></tr></table></pre>
721
-
722
- <div class='push'></div><!-- for sticky footer -->
723
- </div><!-- /wrapper -->
724
- <div class='footer quiet pad2 space-top1 center small'>
725
- Code coverage generated by
726
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
727
- at 2026-01-15T14:08:22.213Z
728
- </div>
729
- <script src="../prettify.js"></script>
730
- <script>
731
- window.onload = function () {
732
- prettyPrint();
733
- };
734
- </script>
735
- <script src="../sorter.js"></script>
736
- <script src="../block-navigation.js"></script>
737
- </body>
738
- </html>
739
-