nous 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.agents/skills/verify-nous/SKILL.md +6 -0
  3. data/CHANGELOG.md +75 -1
  4. data/CODING_STANDARDS.md +203 -0
  5. data/README.md +175 -17
  6. data/Rakefile +2 -0
  7. data/docs/setup/defuddle.md +38 -0
  8. data/docs/setup/verification.md +21 -0
  9. data/docs/verification/README.md +77 -0
  10. data/docs/verification/defuddle.md +45 -0
  11. data/docs/verification/failure-propagation.md +37 -0
  12. data/docs/verification/retained-html.md +37 -0
  13. data/javascript/build.mjs +24 -0
  14. data/javascript/defuddle.mjs +28 -0
  15. data/lib/nous/cli.rb +3 -3
  16. data/lib/nous/crawler/async_page_fetcher.rb +43 -11
  17. data/lib/nous/crawler/recursive_page_fetcher.rb +34 -26
  18. data/lib/nous/crawler/single_page_fetcher.rb +49 -9
  19. data/lib/nous/decode_html.rb +80 -0
  20. data/lib/nous/extract_html.rb +109 -0
  21. data/lib/nous/extractor/default/client.rb +30 -12
  22. data/lib/nous/extractor/default.rb +2 -4
  23. data/lib/nous/extractor/defuddle/client.rb +57 -0
  24. data/lib/nous/extractor/defuddle/run_process.rb +104 -0
  25. data/lib/nous/extractor/defuddle.rb +23 -0
  26. data/lib/nous/extractor/extraction_error.rb +7 -0
  27. data/lib/nous/fetcher/extraction_runner.rb +26 -11
  28. data/lib/nous/fetcher/page_extractor.rb +27 -12
  29. data/lib/nous/fetcher.rb +46 -10
  30. data/lib/nous/primitives/configuration.rb +1 -0
  31. data/lib/nous/primitives/fetch_record.rb +26 -0
  32. data/lib/nous/primitives/fetch_result.rb +21 -0
  33. data/lib/nous/primitives/page.rb +1 -1
  34. data/lib/nous/serializer.rb +9 -1
  35. data/lib/nous/version.rb +1 -1
  36. data/lib/nous.rb +2 -2
  37. data/package-lock.json +858 -0
  38. data/package.json +15 -0
  39. data/tasks/verification.rake +23 -0
  40. data/vendor/THIRD_PARTY_LICENSES.txt +518 -0
  41. data/vendor/defuddle.mjs +403 -0
  42. data/vendor/defuddle.mjs.LEGAL.txt +10 -0
  43. metadata +25 -4
  44. data/lib/nous/extractor/jina/client.rb +0 -59
  45. data/lib/nous/extractor/jina.rb +0 -26
  46. data/lib/nous/primitives/raw_page.rb +0 -5
data/package-lock.json ADDED
@@ -0,0 +1,858 @@
1
+ {
2
+ "name": "nous-extraction-bridge",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {
6
+ "": {
7
+ "name": "nous-extraction-bridge",
8
+ "dependencies": {
9
+ "defuddle": "0.19.6",
10
+ "linkedom": "0.18.14"
11
+ },
12
+ "devDependencies": {
13
+ "esbuild": "0.25.12"
14
+ }
15
+ },
16
+ "node_modules/@acemir/cssom": {
17
+ "version": "0.9.32",
18
+ "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.32.tgz",
19
+ "integrity": "sha512-OijrAUu7rrJhSIoHNg6LMPS5e344nwUHA+1EFYYjrh64D+GmytUsfBQjci45TjT+rd5Spsp8B5xsZDT+TgyXXQ==",
20
+ "license": "MIT"
21
+ },
22
+ "node_modules/@esbuild/aix-ppc64": {
23
+ "version": "0.25.12",
24
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
25
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
26
+ "cpu": [
27
+ "ppc64"
28
+ ],
29
+ "dev": true,
30
+ "license": "MIT",
31
+ "optional": true,
32
+ "os": [
33
+ "aix"
34
+ ],
35
+ "engines": {
36
+ "node": ">=18"
37
+ }
38
+ },
39
+ "node_modules/@esbuild/android-arm": {
40
+ "version": "0.25.12",
41
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
42
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
43
+ "cpu": [
44
+ "arm"
45
+ ],
46
+ "dev": true,
47
+ "license": "MIT",
48
+ "optional": true,
49
+ "os": [
50
+ "android"
51
+ ],
52
+ "engines": {
53
+ "node": ">=18"
54
+ }
55
+ },
56
+ "node_modules/@esbuild/android-arm64": {
57
+ "version": "0.25.12",
58
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
59
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
60
+ "cpu": [
61
+ "arm64"
62
+ ],
63
+ "dev": true,
64
+ "license": "MIT",
65
+ "optional": true,
66
+ "os": [
67
+ "android"
68
+ ],
69
+ "engines": {
70
+ "node": ">=18"
71
+ }
72
+ },
73
+ "node_modules/@esbuild/android-x64": {
74
+ "version": "0.25.12",
75
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
76
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
77
+ "cpu": [
78
+ "x64"
79
+ ],
80
+ "dev": true,
81
+ "license": "MIT",
82
+ "optional": true,
83
+ "os": [
84
+ "android"
85
+ ],
86
+ "engines": {
87
+ "node": ">=18"
88
+ }
89
+ },
90
+ "node_modules/@esbuild/darwin-arm64": {
91
+ "version": "0.25.12",
92
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
93
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
94
+ "cpu": [
95
+ "arm64"
96
+ ],
97
+ "dev": true,
98
+ "license": "MIT",
99
+ "optional": true,
100
+ "os": [
101
+ "darwin"
102
+ ],
103
+ "engines": {
104
+ "node": ">=18"
105
+ }
106
+ },
107
+ "node_modules/@esbuild/darwin-x64": {
108
+ "version": "0.25.12",
109
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
110
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
111
+ "cpu": [
112
+ "x64"
113
+ ],
114
+ "dev": true,
115
+ "license": "MIT",
116
+ "optional": true,
117
+ "os": [
118
+ "darwin"
119
+ ],
120
+ "engines": {
121
+ "node": ">=18"
122
+ }
123
+ },
124
+ "node_modules/@esbuild/freebsd-arm64": {
125
+ "version": "0.25.12",
126
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
127
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
128
+ "cpu": [
129
+ "arm64"
130
+ ],
131
+ "dev": true,
132
+ "license": "MIT",
133
+ "optional": true,
134
+ "os": [
135
+ "freebsd"
136
+ ],
137
+ "engines": {
138
+ "node": ">=18"
139
+ }
140
+ },
141
+ "node_modules/@esbuild/freebsd-x64": {
142
+ "version": "0.25.12",
143
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
144
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
145
+ "cpu": [
146
+ "x64"
147
+ ],
148
+ "dev": true,
149
+ "license": "MIT",
150
+ "optional": true,
151
+ "os": [
152
+ "freebsd"
153
+ ],
154
+ "engines": {
155
+ "node": ">=18"
156
+ }
157
+ },
158
+ "node_modules/@esbuild/linux-arm": {
159
+ "version": "0.25.12",
160
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
161
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
162
+ "cpu": [
163
+ "arm"
164
+ ],
165
+ "dev": true,
166
+ "license": "MIT",
167
+ "optional": true,
168
+ "os": [
169
+ "linux"
170
+ ],
171
+ "engines": {
172
+ "node": ">=18"
173
+ }
174
+ },
175
+ "node_modules/@esbuild/linux-arm64": {
176
+ "version": "0.25.12",
177
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
178
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
179
+ "cpu": [
180
+ "arm64"
181
+ ],
182
+ "dev": true,
183
+ "license": "MIT",
184
+ "optional": true,
185
+ "os": [
186
+ "linux"
187
+ ],
188
+ "engines": {
189
+ "node": ">=18"
190
+ }
191
+ },
192
+ "node_modules/@esbuild/linux-ia32": {
193
+ "version": "0.25.12",
194
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
195
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
196
+ "cpu": [
197
+ "ia32"
198
+ ],
199
+ "dev": true,
200
+ "license": "MIT",
201
+ "optional": true,
202
+ "os": [
203
+ "linux"
204
+ ],
205
+ "engines": {
206
+ "node": ">=18"
207
+ }
208
+ },
209
+ "node_modules/@esbuild/linux-loong64": {
210
+ "version": "0.25.12",
211
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
212
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
213
+ "cpu": [
214
+ "loong64"
215
+ ],
216
+ "dev": true,
217
+ "license": "MIT",
218
+ "optional": true,
219
+ "os": [
220
+ "linux"
221
+ ],
222
+ "engines": {
223
+ "node": ">=18"
224
+ }
225
+ },
226
+ "node_modules/@esbuild/linux-mips64el": {
227
+ "version": "0.25.12",
228
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
229
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
230
+ "cpu": [
231
+ "mips64el"
232
+ ],
233
+ "dev": true,
234
+ "license": "MIT",
235
+ "optional": true,
236
+ "os": [
237
+ "linux"
238
+ ],
239
+ "engines": {
240
+ "node": ">=18"
241
+ }
242
+ },
243
+ "node_modules/@esbuild/linux-ppc64": {
244
+ "version": "0.25.12",
245
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
246
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
247
+ "cpu": [
248
+ "ppc64"
249
+ ],
250
+ "dev": true,
251
+ "license": "MIT",
252
+ "optional": true,
253
+ "os": [
254
+ "linux"
255
+ ],
256
+ "engines": {
257
+ "node": ">=18"
258
+ }
259
+ },
260
+ "node_modules/@esbuild/linux-riscv64": {
261
+ "version": "0.25.12",
262
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
263
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
264
+ "cpu": [
265
+ "riscv64"
266
+ ],
267
+ "dev": true,
268
+ "license": "MIT",
269
+ "optional": true,
270
+ "os": [
271
+ "linux"
272
+ ],
273
+ "engines": {
274
+ "node": ">=18"
275
+ }
276
+ },
277
+ "node_modules/@esbuild/linux-s390x": {
278
+ "version": "0.25.12",
279
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
280
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
281
+ "cpu": [
282
+ "s390x"
283
+ ],
284
+ "dev": true,
285
+ "license": "MIT",
286
+ "optional": true,
287
+ "os": [
288
+ "linux"
289
+ ],
290
+ "engines": {
291
+ "node": ">=18"
292
+ }
293
+ },
294
+ "node_modules/@esbuild/linux-x64": {
295
+ "version": "0.25.12",
296
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
297
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
298
+ "cpu": [
299
+ "x64"
300
+ ],
301
+ "dev": true,
302
+ "license": "MIT",
303
+ "optional": true,
304
+ "os": [
305
+ "linux"
306
+ ],
307
+ "engines": {
308
+ "node": ">=18"
309
+ }
310
+ },
311
+ "node_modules/@esbuild/netbsd-arm64": {
312
+ "version": "0.25.12",
313
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
314
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
315
+ "cpu": [
316
+ "arm64"
317
+ ],
318
+ "dev": true,
319
+ "license": "MIT",
320
+ "optional": true,
321
+ "os": [
322
+ "netbsd"
323
+ ],
324
+ "engines": {
325
+ "node": ">=18"
326
+ }
327
+ },
328
+ "node_modules/@esbuild/netbsd-x64": {
329
+ "version": "0.25.12",
330
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
331
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
332
+ "cpu": [
333
+ "x64"
334
+ ],
335
+ "dev": true,
336
+ "license": "MIT",
337
+ "optional": true,
338
+ "os": [
339
+ "netbsd"
340
+ ],
341
+ "engines": {
342
+ "node": ">=18"
343
+ }
344
+ },
345
+ "node_modules/@esbuild/openbsd-arm64": {
346
+ "version": "0.25.12",
347
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
348
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
349
+ "cpu": [
350
+ "arm64"
351
+ ],
352
+ "dev": true,
353
+ "license": "MIT",
354
+ "optional": true,
355
+ "os": [
356
+ "openbsd"
357
+ ],
358
+ "engines": {
359
+ "node": ">=18"
360
+ }
361
+ },
362
+ "node_modules/@esbuild/openbsd-x64": {
363
+ "version": "0.25.12",
364
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
365
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
366
+ "cpu": [
367
+ "x64"
368
+ ],
369
+ "dev": true,
370
+ "license": "MIT",
371
+ "optional": true,
372
+ "os": [
373
+ "openbsd"
374
+ ],
375
+ "engines": {
376
+ "node": ">=18"
377
+ }
378
+ },
379
+ "node_modules/@esbuild/openharmony-arm64": {
380
+ "version": "0.25.12",
381
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
382
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
383
+ "cpu": [
384
+ "arm64"
385
+ ],
386
+ "dev": true,
387
+ "license": "MIT",
388
+ "optional": true,
389
+ "os": [
390
+ "openharmony"
391
+ ],
392
+ "engines": {
393
+ "node": ">=18"
394
+ }
395
+ },
396
+ "node_modules/@esbuild/sunos-x64": {
397
+ "version": "0.25.12",
398
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
399
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
400
+ "cpu": [
401
+ "x64"
402
+ ],
403
+ "dev": true,
404
+ "license": "MIT",
405
+ "optional": true,
406
+ "os": [
407
+ "sunos"
408
+ ],
409
+ "engines": {
410
+ "node": ">=18"
411
+ }
412
+ },
413
+ "node_modules/@esbuild/win32-arm64": {
414
+ "version": "0.25.12",
415
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
416
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
417
+ "cpu": [
418
+ "arm64"
419
+ ],
420
+ "dev": true,
421
+ "license": "MIT",
422
+ "optional": true,
423
+ "os": [
424
+ "win32"
425
+ ],
426
+ "engines": {
427
+ "node": ">=18"
428
+ }
429
+ },
430
+ "node_modules/@esbuild/win32-ia32": {
431
+ "version": "0.25.12",
432
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
433
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
434
+ "cpu": [
435
+ "ia32"
436
+ ],
437
+ "dev": true,
438
+ "license": "MIT",
439
+ "optional": true,
440
+ "os": [
441
+ "win32"
442
+ ],
443
+ "engines": {
444
+ "node": ">=18"
445
+ }
446
+ },
447
+ "node_modules/@esbuild/win32-x64": {
448
+ "version": "0.25.12",
449
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
450
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
451
+ "cpu": [
452
+ "x64"
453
+ ],
454
+ "dev": true,
455
+ "license": "MIT",
456
+ "optional": true,
457
+ "os": [
458
+ "win32"
459
+ ],
460
+ "engines": {
461
+ "node": ">=18"
462
+ }
463
+ },
464
+ "node_modules/@mixmark-io/domino": {
465
+ "version": "2.2.0",
466
+ "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz",
467
+ "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==",
468
+ "license": "BSD-2-Clause",
469
+ "optional": true
470
+ },
471
+ "node_modules/@xmldom/xmldom": {
472
+ "version": "0.9.12",
473
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.12.tgz",
474
+ "integrity": "sha512-5AXjrcMClTryPe9LgZrygpB1lj7s0S9E0+W+AHaVKAVyHanafK86iPSvG5xHVSp/jC+VH1UXu0TAEmY279xH7A==",
475
+ "license": "MIT",
476
+ "engines": {
477
+ "node": ">=14.6"
478
+ }
479
+ },
480
+ "node_modules/boolbase": {
481
+ "version": "2.0.0",
482
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-2.0.0.tgz",
483
+ "integrity": "sha512-DkVaaQHymRhpYEYo9x1oo7Q7B0Y6KJUsjm3c9eTyFDby4MHLBTwZ6ZDWBel5zrYxj1WsZgC5oLpiz+93MluXeA==",
484
+ "license": "ISC",
485
+ "engines": {
486
+ "node": ">=20.19.0"
487
+ },
488
+ "funding": {
489
+ "type": "github",
490
+ "url": "https://github.com/sponsors/fb55"
491
+ }
492
+ },
493
+ "node_modules/commander": {
494
+ "version": "12.1.0",
495
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
496
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
497
+ "license": "MIT",
498
+ "engines": {
499
+ "node": ">=18"
500
+ }
501
+ },
502
+ "node_modules/css-select": {
503
+ "version": "7.0.0",
504
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-7.0.0.tgz",
505
+ "integrity": "sha512-snmjEVXy+1LnwXdxhYvTMj1d9tOh4HxkA1YmoayVBeeyR2C14Pum7fcxJIm4SswYspVy866eYNwlH6xC3/VH5g==",
506
+ "license": "BSD-2-Clause",
507
+ "dependencies": {
508
+ "boolbase": "^2.0.0",
509
+ "css-what": "^8.0.0",
510
+ "domhandler": "^6.0.1",
511
+ "domutils": "^4.0.2",
512
+ "nth-check": "^3.0.1"
513
+ },
514
+ "engines": {
515
+ "node": ">=20.19.0"
516
+ },
517
+ "funding": {
518
+ "type": "github",
519
+ "url": "https://github.com/sponsors/fb55"
520
+ }
521
+ },
522
+ "node_modules/css-what": {
523
+ "version": "8.0.0",
524
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-8.0.0.tgz",
525
+ "integrity": "sha512-DH0Bqq3DNp5tdOReuNyAA+Ev4Y2GS5FMbZpeTLP6C4CDi0h5nL0BmUPChXw3o/qbHLDWHl49sbNqQVY7bMSDdw==",
526
+ "license": "BSD-2-Clause",
527
+ "engines": {
528
+ "node": ">=20.19.0"
529
+ },
530
+ "funding": {
531
+ "type": "github",
532
+ "url": "https://github.com/sponsors/fb55"
533
+ }
534
+ },
535
+ "node_modules/defuddle": {
536
+ "version": "0.19.6",
537
+ "resolved": "https://registry.npmjs.org/defuddle/-/defuddle-0.19.6.tgz",
538
+ "integrity": "sha512-VzIOHD5iKABZVQg2xcPYD/181rgfCO4Mtqay9rfYyXXewMSX+fI+XU3COMpi4YEW34EJuf0WC6f/52NlW9akIw==",
539
+ "license": "MIT",
540
+ "dependencies": {
541
+ "commander": "^12.1.0",
542
+ "mathml-to-latex": "^1.8.0"
543
+ },
544
+ "bin": {
545
+ "defuddle": "dist/cli.js"
546
+ },
547
+ "optionalDependencies": {
548
+ "linkedom": "^0.18.12",
549
+ "temml": "^0.13.3",
550
+ "turndown": "^7.2.0"
551
+ }
552
+ },
553
+ "node_modules/dom-serializer": {
554
+ "version": "3.1.1",
555
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-3.1.1.tgz",
556
+ "integrity": "sha512-4MEa38/QexBob6gFNwu+EGdWvhJ1OKuNwdYY3Y3NyeWDQfnGeDYQUDfIRzWu5B5gsv03so2Uxd28YC6zrsx3Lw==",
557
+ "license": "MIT",
558
+ "dependencies": {
559
+ "domelementtype": "^3.0.0",
560
+ "domhandler": "^6.0.0",
561
+ "entities": "^8.0.0"
562
+ },
563
+ "engines": {
564
+ "node": ">=20.19.0"
565
+ },
566
+ "funding": {
567
+ "type": "github",
568
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
569
+ }
570
+ },
571
+ "node_modules/domelementtype": {
572
+ "version": "3.0.0",
573
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-3.0.0.tgz",
574
+ "integrity": "sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==",
575
+ "funding": [
576
+ {
577
+ "type": "github",
578
+ "url": "https://github.com/sponsors/fb55"
579
+ }
580
+ ],
581
+ "license": "BSD-2-Clause",
582
+ "engines": {
583
+ "node": ">=20.19.0"
584
+ }
585
+ },
586
+ "node_modules/domhandler": {
587
+ "version": "6.0.1",
588
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-6.0.1.tgz",
589
+ "integrity": "sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==",
590
+ "license": "BSD-2-Clause",
591
+ "dependencies": {
592
+ "domelementtype": "^3.0.0"
593
+ },
594
+ "engines": {
595
+ "node": ">=20.19.0"
596
+ },
597
+ "funding": {
598
+ "type": "github",
599
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
600
+ }
601
+ },
602
+ "node_modules/domutils": {
603
+ "version": "4.0.2",
604
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-4.0.2.tgz",
605
+ "integrity": "sha512-qI4JLRKnSzqFqr7hAlS5xQDusBCjKSEG4t4+7aNrIQMHBcsC2TGEhuyABJdYkgSewL57PNLYEiibY2iPKhKpaA==",
606
+ "license": "BSD-2-Clause",
607
+ "dependencies": {
608
+ "dom-serializer": "^3.0.0",
609
+ "domelementtype": "^3.0.0",
610
+ "domhandler": "^6.0.0"
611
+ },
612
+ "engines": {
613
+ "node": ">=20.19.0"
614
+ },
615
+ "funding": {
616
+ "type": "github",
617
+ "url": "https://github.com/fb55/domutils?sponsor=1"
618
+ }
619
+ },
620
+ "node_modules/entities": {
621
+ "version": "8.1.0",
622
+ "resolved": "https://registry.npmjs.org/entities/-/entities-8.1.0.tgz",
623
+ "integrity": "sha512-kxL7msIffSuh9aaFAMD7rxAIuTRMAHMeBtgHW2yUdWw732ZNh4MehkF2gdjvtdmikkaIP9bFDDJOPlsvm7avrA==",
624
+ "license": "BSD-2-Clause",
625
+ "engines": {
626
+ "node": ">=20.19.0"
627
+ },
628
+ "funding": {
629
+ "url": "https://github.com/fb55/entities?sponsor=1"
630
+ }
631
+ },
632
+ "node_modules/esbuild": {
633
+ "version": "0.25.12",
634
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
635
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
636
+ "dev": true,
637
+ "hasInstallScript": true,
638
+ "license": "MIT",
639
+ "bin": {
640
+ "esbuild": "bin/esbuild"
641
+ },
642
+ "engines": {
643
+ "node": ">=18"
644
+ },
645
+ "optionalDependencies": {
646
+ "@esbuild/aix-ppc64": "0.25.12",
647
+ "@esbuild/android-arm": "0.25.12",
648
+ "@esbuild/android-arm64": "0.25.12",
649
+ "@esbuild/android-x64": "0.25.12",
650
+ "@esbuild/darwin-arm64": "0.25.12",
651
+ "@esbuild/darwin-x64": "0.25.12",
652
+ "@esbuild/freebsd-arm64": "0.25.12",
653
+ "@esbuild/freebsd-x64": "0.25.12",
654
+ "@esbuild/linux-arm": "0.25.12",
655
+ "@esbuild/linux-arm64": "0.25.12",
656
+ "@esbuild/linux-ia32": "0.25.12",
657
+ "@esbuild/linux-loong64": "0.25.12",
658
+ "@esbuild/linux-mips64el": "0.25.12",
659
+ "@esbuild/linux-ppc64": "0.25.12",
660
+ "@esbuild/linux-riscv64": "0.25.12",
661
+ "@esbuild/linux-s390x": "0.25.12",
662
+ "@esbuild/linux-x64": "0.25.12",
663
+ "@esbuild/netbsd-arm64": "0.25.12",
664
+ "@esbuild/netbsd-x64": "0.25.12",
665
+ "@esbuild/openbsd-arm64": "0.25.12",
666
+ "@esbuild/openbsd-x64": "0.25.12",
667
+ "@esbuild/openharmony-arm64": "0.25.12",
668
+ "@esbuild/sunos-x64": "0.25.12",
669
+ "@esbuild/win32-arm64": "0.25.12",
670
+ "@esbuild/win32-ia32": "0.25.12",
671
+ "@esbuild/win32-x64": "0.25.12"
672
+ }
673
+ },
674
+ "node_modules/html-escaper": {
675
+ "version": "3.0.3",
676
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz",
677
+ "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
678
+ "license": "MIT"
679
+ },
680
+ "node_modules/htmlparser2": {
681
+ "version": "10.1.0",
682
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz",
683
+ "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==",
684
+ "funding": [
685
+ "https://github.com/fb55/htmlparser2?sponsor=1",
686
+ {
687
+ "type": "github",
688
+ "url": "https://github.com/sponsors/fb55"
689
+ }
690
+ ],
691
+ "license": "MIT",
692
+ "dependencies": {
693
+ "domelementtype": "^2.3.0",
694
+ "domhandler": "^5.0.3",
695
+ "domutils": "^3.2.2",
696
+ "entities": "^7.0.1"
697
+ }
698
+ },
699
+ "node_modules/htmlparser2/node_modules/dom-serializer": {
700
+ "version": "2.0.0",
701
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
702
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
703
+ "license": "MIT",
704
+ "dependencies": {
705
+ "domelementtype": "^2.3.0",
706
+ "domhandler": "^5.0.2",
707
+ "entities": "^4.2.0"
708
+ },
709
+ "funding": {
710
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
711
+ }
712
+ },
713
+ "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": {
714
+ "version": "4.5.0",
715
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
716
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
717
+ "license": "BSD-2-Clause",
718
+ "engines": {
719
+ "node": ">=0.12"
720
+ },
721
+ "funding": {
722
+ "url": "https://github.com/fb55/entities?sponsor=1"
723
+ }
724
+ },
725
+ "node_modules/htmlparser2/node_modules/domelementtype": {
726
+ "version": "2.3.0",
727
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
728
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
729
+ "funding": [
730
+ {
731
+ "type": "github",
732
+ "url": "https://github.com/sponsors/fb55"
733
+ }
734
+ ],
735
+ "license": "BSD-2-Clause"
736
+ },
737
+ "node_modules/htmlparser2/node_modules/domhandler": {
738
+ "version": "5.0.3",
739
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
740
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
741
+ "license": "BSD-2-Clause",
742
+ "dependencies": {
743
+ "domelementtype": "^2.3.0"
744
+ },
745
+ "engines": {
746
+ "node": ">= 4"
747
+ },
748
+ "funding": {
749
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
750
+ }
751
+ },
752
+ "node_modules/htmlparser2/node_modules/domutils": {
753
+ "version": "3.2.2",
754
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
755
+ "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
756
+ "license": "BSD-2-Clause",
757
+ "dependencies": {
758
+ "dom-serializer": "^2.0.0",
759
+ "domelementtype": "^2.3.0",
760
+ "domhandler": "^5.0.3"
761
+ },
762
+ "funding": {
763
+ "url": "https://github.com/fb55/domutils?sponsor=1"
764
+ }
765
+ },
766
+ "node_modules/htmlparser2/node_modules/entities": {
767
+ "version": "7.0.1",
768
+ "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
769
+ "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
770
+ "license": "BSD-2-Clause",
771
+ "engines": {
772
+ "node": ">=0.12"
773
+ },
774
+ "funding": {
775
+ "url": "https://github.com/fb55/entities?sponsor=1"
776
+ }
777
+ },
778
+ "node_modules/linkedom": {
779
+ "version": "0.18.14",
780
+ "resolved": "https://registry.npmjs.org/linkedom/-/linkedom-0.18.14.tgz",
781
+ "integrity": "sha512-BRUnkOm4YR5vo+qI3j0EbungB0vZPSCue5AdnTQRaxAGSbsOZiBFRO0rh4zlo8qXUhli8pxvnpEXDklMnlq2Rg==",
782
+ "license": "ISC",
783
+ "dependencies": {
784
+ "@acemir/cssom": "^0.9.32",
785
+ "css-select": "^7.0.0",
786
+ "html-escaper": "^3.0.3",
787
+ "htmlparser2": "^10.1.0",
788
+ "uhyphen": "^0.2.0"
789
+ },
790
+ "engines": {
791
+ "node": ">=16"
792
+ },
793
+ "peerDependencies": {
794
+ "canvas": ">= 2"
795
+ },
796
+ "peerDependenciesMeta": {
797
+ "canvas": {
798
+ "optional": true
799
+ }
800
+ }
801
+ },
802
+ "node_modules/mathml-to-latex": {
803
+ "version": "1.8.0",
804
+ "resolved": "https://registry.npmjs.org/mathml-to-latex/-/mathml-to-latex-1.8.0.tgz",
805
+ "integrity": "sha512-gQ0uK3zqB8HwlfaXJkEL5rgaZNbKUiBMmBP/B/W+b+t6KcseLSuYb1b0BjLgS9ZiQa24ePkqTX8/6FaQuDL7wQ==",
806
+ "license": "MIT",
807
+ "dependencies": {
808
+ "@xmldom/xmldom": "^0.9.10"
809
+ }
810
+ },
811
+ "node_modules/nth-check": {
812
+ "version": "3.0.1",
813
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-3.0.1.tgz",
814
+ "integrity": "sha512-GX0gsdbGVCgnRgbeGaubfjpBXyYRWOOCVeYh08bSQvDZqxz5ndXs1OTfAt/h36G1xvI94YIspsI0sVFqAV9+RQ==",
815
+ "license": "BSD-2-Clause",
816
+ "dependencies": {
817
+ "boolbase": "^2.0.0"
818
+ },
819
+ "engines": {
820
+ "node": ">=20.19.0"
821
+ },
822
+ "funding": {
823
+ "type": "github",
824
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
825
+ }
826
+ },
827
+ "node_modules/temml": {
828
+ "version": "0.13.5",
829
+ "resolved": "https://registry.npmjs.org/temml/-/temml-0.13.5.tgz",
830
+ "integrity": "sha512-aPkDDgunanpLNL0ql32HbolqLep+w8DRcVXRql7rWrMt/PhczdLgL4UBYYVU3BYjCNjkGq4EqwIicu/zWr1iOg==",
831
+ "license": "MIT",
832
+ "optional": true,
833
+ "engines": {
834
+ "node": ">=18.13.0"
835
+ }
836
+ },
837
+ "node_modules/turndown": {
838
+ "version": "7.2.4",
839
+ "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.4.tgz",
840
+ "integrity": "sha512-I8yFsfRzmzK0WV1pNNOA4A7y4RDfFxPRxb3t+e3ui14qSGOxGtiSP6GjeX+Y6CHb7HYaFj7ECUD7VE5kQMZWGQ==",
841
+ "license": "MIT",
842
+ "optional": true,
843
+ "dependencies": {
844
+ "@mixmark-io/domino": "^2.2.0"
845
+ },
846
+ "engines": {
847
+ "node": ">=18",
848
+ "npm": ">=9"
849
+ }
850
+ },
851
+ "node_modules/uhyphen": {
852
+ "version": "0.2.0",
853
+ "resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.2.0.tgz",
854
+ "integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==",
855
+ "license": "ISC"
856
+ }
857
+ }
858
+ }