@nanocollective/get-md 1.0.0 → 1.0.2

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 (40) hide show
  1. package/LICENSE +3 -3
  2. package/dist/extractors/metadata-extractor.spec.d.ts +2 -0
  3. package/dist/extractors/metadata-extractor.spec.d.ts.map +1 -0
  4. package/dist/extractors/metadata-extractor.spec.js +486 -0
  5. package/dist/extractors/metadata-extractor.spec.js.map +1 -0
  6. package/dist/index.spec.d.ts +2 -0
  7. package/dist/index.spec.d.ts.map +1 -0
  8. package/dist/index.spec.js +518 -0
  9. package/dist/index.spec.js.map +1 -0
  10. package/dist/optimizers/html-cleaner.js +15 -2
  11. package/dist/optimizers/html-cleaner.js.map +1 -1
  12. package/dist/optimizers/html-cleaner.spec.d.ts +2 -0
  13. package/dist/optimizers/html-cleaner.spec.d.ts.map +1 -0
  14. package/dist/optimizers/html-cleaner.spec.js +351 -0
  15. package/dist/optimizers/html-cleaner.spec.js.map +1 -0
  16. package/dist/optimizers/llm-formatter.spec.d.ts +2 -0
  17. package/dist/optimizers/llm-formatter.spec.d.ts.map +1 -0
  18. package/dist/optimizers/llm-formatter.spec.js +276 -0
  19. package/dist/optimizers/llm-formatter.spec.js.map +1 -0
  20. package/dist/optimizers/structure-enhancer.spec.d.ts +2 -0
  21. package/dist/optimizers/structure-enhancer.spec.d.ts.map +1 -0
  22. package/dist/optimizers/structure-enhancer.spec.js +331 -0
  23. package/dist/optimizers/structure-enhancer.spec.js.map +1 -0
  24. package/dist/parsers/markdown-parser.d.ts +1 -0
  25. package/dist/parsers/markdown-parser.d.ts.map +1 -1
  26. package/dist/parsers/markdown-parser.js +52 -0
  27. package/dist/parsers/markdown-parser.js.map +1 -1
  28. package/dist/parsers/markdown-parser.spec.d.ts +2 -0
  29. package/dist/parsers/markdown-parser.spec.d.ts.map +1 -0
  30. package/dist/parsers/markdown-parser.spec.js +622 -0
  31. package/dist/parsers/markdown-parser.spec.js.map +1 -0
  32. package/dist/utils/url-fetcher.spec.d.ts +2 -0
  33. package/dist/utils/url-fetcher.spec.d.ts.map +1 -0
  34. package/dist/utils/url-fetcher.spec.js +206 -0
  35. package/dist/utils/url-fetcher.spec.js.map +1 -0
  36. package/dist/utils/validators.spec.d.ts +2 -0
  37. package/dist/utils/validators.spec.d.ts.map +1 -0
  38. package/dist/utils/validators.spec.js +290 -0
  39. package/dist/utils/validators.spec.js.map +1 -0
  40. package/package.json +1 -1
@@ -0,0 +1,518 @@
1
+ // src/index.spec.ts
2
+ import test from "ava";
3
+ import { convertToMarkdown, hasContent } from "./index.js";
4
+ // Add cleanup hook to force exit after tests complete
5
+ // This is necessary because network fetch operations can keep the event loop alive
6
+ test.after.always("cleanup", () => {
7
+ // Give a brief moment for cleanup, then force exit
8
+ setTimeout(() => {
9
+ process.exit(0);
10
+ }, 100);
11
+ });
12
+ // Test HTML fixtures
13
+ const SIMPLE_HTML = `
14
+ <!DOCTYPE html>
15
+ <html>
16
+ <head>
17
+ <title>Test Page</title>
18
+ <meta name="description" content="A test description">
19
+ </head>
20
+ <body>
21
+ <h1>Hello World</h1>
22
+ <p>This is a test paragraph with enough content to be processed.</p>
23
+ </body>
24
+ </html>
25
+ `;
26
+ const COMPLEX_HTML = `
27
+ <!DOCTYPE html>
28
+ <html lang="en">
29
+ <head>
30
+ <title>Complex Page</title>
31
+ <meta name="author" content="John Doe">
32
+ </head>
33
+ <body>
34
+ <nav>Navigation</nav>
35
+ <article>
36
+ <h1>Main Article</h1>
37
+ <p>This is the main content with substantial text to ensure proper extraction by Readability.</p>
38
+ <img src="test.jpg" alt="Test image">
39
+ <a href="https://example.com">Example Link</a>
40
+ <pre><code class="language-javascript">const x = 42;</code></pre>
41
+ </article>
42
+ <footer>Footer</footer>
43
+ </body>
44
+ </html>
45
+ `;
46
+ const HTML_WITH_ALL_FEATURES = `
47
+ <!DOCTYPE html>
48
+ <html>
49
+ <body>
50
+ <h1>Features Test</h1>
51
+ <p>Text content</p>
52
+ <img src="/image.jpg" alt="Image">
53
+ <a href="/link">Link</a>
54
+ <table>
55
+ <tr>
56
+ <th>Header</th>
57
+ </tr>
58
+ <tr>
59
+ <td>Cell</td>
60
+ </tr>
61
+ </table>
62
+ </body>
63
+ </html>
64
+ `;
65
+ const MINIMAL_HTML = `<html><body><p>Short text.</p></body></html>`;
66
+ const EMPTY_HTML = `<html><body></body></html>`;
67
+ const HTML_WITH_NOISE = `
68
+ <!DOCTYPE html>
69
+ <html>
70
+ <head>
71
+ <script>console.log('noise');</script>
72
+ <style>.noise { display: none; }</style>
73
+ </head>
74
+ <body>
75
+ <nav>Navigation menu</nav>
76
+ <aside>Sidebar content</aside>
77
+ <article>
78
+ <h1>Main Content</h1>
79
+ <p>This is the primary article content with substantial text to ensure Readability extraction works correctly. We need enough content here to meet the threshold requirements.</p>
80
+ </article>
81
+ <footer>Footer information</footer>
82
+ </body>
83
+ </html>
84
+ `;
85
+ // Basic conversion tests
86
+ test("convertToMarkdown: converts HTML string to markdown", async (t) => {
87
+ const result = await convertToMarkdown(SIMPLE_HTML);
88
+ t.truthy(result);
89
+ t.is(typeof result.markdown, "string");
90
+ t.true(result.markdown.length > 0);
91
+ t.truthy(result.metadata);
92
+ t.truthy(result.stats);
93
+ });
94
+ test("convertToMarkdown: returns proper MarkdownResult structure", async (t) => {
95
+ const result = await convertToMarkdown(SIMPLE_HTML);
96
+ // Check markdown field
97
+ t.is(typeof result.markdown, "string");
98
+ // Check metadata field
99
+ t.truthy(result.metadata);
100
+ t.is(typeof result.metadata, "object");
101
+ // Check stats field
102
+ t.truthy(result.stats);
103
+ t.is(typeof result.stats.inputLength, "number");
104
+ t.is(typeof result.stats.outputLength, "number");
105
+ t.is(typeof result.stats.processingTime, "number");
106
+ t.is(typeof result.stats.readabilitySuccess, "boolean");
107
+ t.is(typeof result.stats.imageCount, "number");
108
+ t.is(typeof result.stats.linkCount, "number");
109
+ });
110
+ test("convertToMarkdown: converts complex HTML with proper content extraction", async (t) => {
111
+ const result = await convertToMarkdown(COMPLEX_HTML);
112
+ t.true(result.markdown.includes("Main Article"));
113
+ t.true(result.markdown.includes("main content"));
114
+ t.truthy(result.metadata);
115
+ });
116
+ test("convertToMarkdown: handles empty HTML", async (t) => {
117
+ const result = await convertToMarkdown(EMPTY_HTML);
118
+ t.is(typeof result.markdown, "string");
119
+ t.truthy(result.metadata);
120
+ t.truthy(result.stats);
121
+ });
122
+ test("convertToMarkdown: handles minimal HTML", async (t) => {
123
+ const result = await convertToMarkdown(MINIMAL_HTML);
124
+ t.true(result.markdown.includes("Short text"));
125
+ t.truthy(result.stats);
126
+ });
127
+ // Options tests
128
+ test("convertToMarkdown: respects extractContent option", async (t) => {
129
+ const result = await convertToMarkdown(HTML_WITH_NOISE, {
130
+ extractContent: false,
131
+ });
132
+ // Should include navigation and footer when not extracting
133
+ t.true(result.markdown.includes("Navigation") ||
134
+ result.markdown.includes("Footer"));
135
+ t.is(result.stats.readabilitySuccess, false);
136
+ });
137
+ test("convertToMarkdown: respects includeMeta option", async (t) => {
138
+ const resultWithMeta = await convertToMarkdown(SIMPLE_HTML, {
139
+ includeMeta: true,
140
+ });
141
+ const resultWithoutMeta = await convertToMarkdown(SIMPLE_HTML, {
142
+ includeMeta: false,
143
+ });
144
+ // With meta should start with YAML frontmatter
145
+ t.true(resultWithMeta.markdown.startsWith("---"));
146
+ // Without meta should not start with frontmatter
147
+ t.false(resultWithoutMeta.markdown.startsWith("---"));
148
+ });
149
+ test("convertToMarkdown: respects includeImages option", async (t) => {
150
+ const withImages = await convertToMarkdown(HTML_WITH_ALL_FEATURES, {
151
+ includeImages: true,
152
+ });
153
+ const withoutImages = await convertToMarkdown(HTML_WITH_ALL_FEATURES, {
154
+ includeImages: false,
155
+ });
156
+ t.true(withImages.markdown.includes("![") || withImages.markdown.includes("Image"));
157
+ t.false(withoutImages.markdown.includes("!["));
158
+ t.is(withoutImages.stats.imageCount, 0);
159
+ });
160
+ test("convertToMarkdown: respects includeLinks option", async (t) => {
161
+ const withLinks = await convertToMarkdown(HTML_WITH_ALL_FEATURES, {
162
+ includeLinks: true,
163
+ });
164
+ const withoutLinks = await convertToMarkdown(HTML_WITH_ALL_FEATURES, {
165
+ includeLinks: false,
166
+ });
167
+ t.true(withLinks.markdown.includes("[") && withLinks.markdown.includes("]("));
168
+ // When links are disabled, text should remain but not as markdown links
169
+ t.true(withoutLinks.markdown.includes("Link"));
170
+ t.is(withoutLinks.stats.linkCount, 0);
171
+ });
172
+ test("convertToMarkdown: respects includeTables option", async (t) => {
173
+ const withTables = await convertToMarkdown(HTML_WITH_ALL_FEATURES, {
174
+ includeTables: true,
175
+ });
176
+ const withoutTables = await convertToMarkdown(HTML_WITH_ALL_FEATURES, {
177
+ includeTables: false,
178
+ });
179
+ t.true(withTables.markdown.includes("|"));
180
+ t.false(withoutTables.markdown.includes("| Header"));
181
+ });
182
+ test("convertToMarkdown: respects maxLength option", async (t) => {
183
+ const longHtml = `
184
+ <html><body>
185
+ ${Array(500)
186
+ .fill(0)
187
+ .map((_, i) => `<p>Paragraph ${i} with content.</p>`)
188
+ .join("\n")}
189
+ </body></html>
190
+ `;
191
+ const result = await convertToMarkdown(longHtml, { maxLength: 500 });
192
+ t.true(result.markdown.length <= 550); // Some margin for truncation message
193
+ t.true(result.markdown.includes("[Content truncated]"));
194
+ });
195
+ test("convertToMarkdown: respects baseUrl option for relative links", async (t) => {
196
+ const html = '<html><body><a href="/page">Link</a></body></html>';
197
+ const result = await convertToMarkdown(html, {
198
+ baseUrl: "https://example.com",
199
+ });
200
+ t.true(result.markdown.includes("https://example.com/page") ||
201
+ result.markdown.includes("example.com/page"));
202
+ });
203
+ test("convertToMarkdown: accepts custom rules", async (t) => {
204
+ const customRules = [
205
+ {
206
+ name: "customStrong",
207
+ filter: "strong",
208
+ replacement: (content) => `**CUSTOM:${content}**`,
209
+ },
210
+ ];
211
+ const html = "<html><body><strong>Bold</strong></body></html>";
212
+ const result = await convertToMarkdown(html, { customRules });
213
+ t.true(result.markdown.includes("CUSTOM:Bold"));
214
+ });
215
+ test("convertToMarkdown: applies multiple options together", async (t) => {
216
+ const result = await convertToMarkdown(HTML_WITH_ALL_FEATURES, {
217
+ includeImages: false,
218
+ includeLinks: false,
219
+ includeTables: false,
220
+ includeMeta: false,
221
+ extractContent: false,
222
+ });
223
+ t.false(result.markdown.includes("!["));
224
+ t.false(result.markdown.includes("]("));
225
+ t.false(result.markdown.includes("| Header"));
226
+ t.false(result.markdown.startsWith("---\n"));
227
+ });
228
+ // URL handling tests
229
+ test.serial("convertToMarkdown: detects and fetches valid HTTP URLs", async (t) => {
230
+ // Note: This test requires network access
231
+ const url = "https://example.com";
232
+ // Test that it recognizes as URL and fetches successfully
233
+ const result = await convertToMarkdown(url);
234
+ // Should successfully fetch and convert
235
+ t.truthy(result);
236
+ t.is(typeof result.markdown, "string");
237
+ t.true(result.markdown.length > 0);
238
+ t.truthy(result.metadata);
239
+ t.truthy(result.stats);
240
+ });
241
+ test.serial("convertToMarkdown: detects and fetches valid HTTPS URLs", async (t) => {
242
+ // Note: This test requires network access
243
+ const url = "https://example.com";
244
+ // Test that it recognizes as URL and fetches
245
+ const result = await convertToMarkdown(url);
246
+ t.truthy(result);
247
+ t.is(typeof result.markdown, "string");
248
+ t.true(result.markdown.length > 0);
249
+ });
250
+ test("convertToMarkdown: forces URL mode with isUrl option", async (t) => {
251
+ // This should try to treat the input as a URL even if it doesn't have protocol
252
+ const input = "example.com";
253
+ await t.throwsAsync(async () => {
254
+ await convertToMarkdown(input, { isUrl: true });
255
+ }, undefined, "Should treat as URL when isUrl is true");
256
+ });
257
+ test("convertToMarkdown: treats non-URL as HTML by default", async (t) => {
258
+ const input = "example.com";
259
+ // Without isUrl, should treat as HTML string
260
+ const result = await convertToMarkdown(input);
261
+ t.truthy(result);
262
+ t.is(typeof result.markdown, "string");
263
+ });
264
+ test.serial("convertToMarkdown: passes fetch options for URL requests", async (t) => {
265
+ // Note: This test requires network access
266
+ const url = "https://example.com";
267
+ const options = {
268
+ timeout: 10000,
269
+ followRedirects: true,
270
+ maxRedirects: 3,
271
+ userAgent: "Custom User Agent",
272
+ };
273
+ // Should successfully fetch with custom options
274
+ const result = await convertToMarkdown(url, options);
275
+ t.truthy(result);
276
+ t.is(typeof result.markdown, "string");
277
+ t.true(result.markdown.length > 0);
278
+ });
279
+ test("convertToMarkdown: sets baseUrl to fetched URL automatically", async (t) => {
280
+ // When fetching a URL, baseUrl should be set to that URL
281
+ // This is tested indirectly through the URL fetching behavior
282
+ const html = SIMPLE_HTML;
283
+ const result = await convertToMarkdown(html, {
284
+ baseUrl: "https://example.com",
285
+ });
286
+ // Should have baseUrl set in the conversion
287
+ t.truthy(result);
288
+ t.truthy(result.markdown);
289
+ });
290
+ test.serial("convertToMarkdown: preserves custom baseUrl option for URL fetch", async (t) => {
291
+ // Note: This test requires network access
292
+ const url = "https://example.com";
293
+ // Should use custom baseUrl if provided (though url will be used as fallback)
294
+ const result = await convertToMarkdown(url, {
295
+ baseUrl: "https://custom-base.com",
296
+ });
297
+ t.truthy(result);
298
+ t.is(typeof result.markdown, "string");
299
+ t.true(result.markdown.length > 0);
300
+ });
301
+ // hasContent function tests
302
+ test("hasContent: returns true for HTML with sufficient content", (t) => {
303
+ const html = `
304
+ <html>
305
+ <body>
306
+ <p>This is a paragraph with more than 100 characters of text content to ensure that the hasContent function returns true for this HTML string.</p>
307
+ </body>
308
+ </html>
309
+ `;
310
+ t.true(hasContent(html));
311
+ });
312
+ test("hasContent: returns false for HTML with insufficient content", (t) => {
313
+ const html = "<html><body><p>Short.</p></body></html>";
314
+ t.false(hasContent(html));
315
+ });
316
+ test("hasContent: returns false for empty HTML", (t) => {
317
+ const html = "<html><body></body></html>";
318
+ t.false(hasContent(html));
319
+ });
320
+ test("hasContent: returns false for empty string", (t) => {
321
+ t.false(hasContent(""));
322
+ });
323
+ test("hasContent: returns false for null/undefined input", (t) => {
324
+ // @ts-expect-error - Testing invalid input
325
+ t.false(hasContent(null));
326
+ // @ts-expect-error - Testing invalid input
327
+ t.false(hasContent(undefined));
328
+ });
329
+ test("hasContent: ignores scripts, styles, and noise elements", (t) => {
330
+ const html = `
331
+ <html>
332
+ <head>
333
+ <script>console.log('This is a very long script with lots of code that should be ignored');</script>
334
+ <style>body { color: red; /* This is a very long style block with lots of CSS that should be ignored */ }</style>
335
+ </head>
336
+ <body>
337
+ <nav>Navigation that should be ignored</nav>
338
+ <p>Short content.</p>
339
+ <footer>Footer that should be ignored</footer>
340
+ </body>
341
+ </html>
342
+ `;
343
+ t.false(hasContent(html));
344
+ });
345
+ test("hasContent: counts only body text content", (t) => {
346
+ const html = `
347
+ <html>
348
+ <body>
349
+ <p>This is the main content of the body that contains sufficient text to be considered valid content by the hasContent validator function.</p>
350
+ </body>
351
+ </html>
352
+ `;
353
+ t.true(hasContent(html));
354
+ });
355
+ test("hasContent: handles malformed HTML gracefully", (t) => {
356
+ const malformed = "<html><body><p>Some text<div>Nested</p></div>";
357
+ // Should not throw, should return based on content
358
+ t.notThrows(() => hasContent(malformed));
359
+ });
360
+ test("hasContent: trims whitespace before checking length", (t) => {
361
+ const html = `
362
+ <html>
363
+ <body>
364
+ <p>
365
+
366
+
367
+ Too short
368
+
369
+
370
+ </p>
371
+ </body>
372
+ </html>
373
+ `;
374
+ t.false(hasContent(html));
375
+ });
376
+ // Type export tests
377
+ test("types: MarkdownOptions interface is exported", (t) => {
378
+ const options = {
379
+ extractContent: true,
380
+ includeMeta: false,
381
+ };
382
+ t.is(typeof options.extractContent, "boolean");
383
+ t.is(typeof options.includeMeta, "boolean");
384
+ });
385
+ test("types: MarkdownResult interface is exported", (t) => {
386
+ // This test verifies the type is available at compile time
387
+ // Runtime check would be redundant, but we can verify structure
388
+ const result = {
389
+ markdown: "# Test",
390
+ metadata: {
391
+ title: "Test",
392
+ },
393
+ stats: {
394
+ inputLength: 100,
395
+ outputLength: 50,
396
+ processingTime: 10,
397
+ readabilitySuccess: true,
398
+ imageCount: 0,
399
+ linkCount: 0,
400
+ },
401
+ };
402
+ t.is(typeof result.markdown, "string");
403
+ t.is(typeof result.metadata, "object");
404
+ t.is(typeof result.stats, "object");
405
+ });
406
+ // Edge cases
407
+ test("convertToMarkdown: handles HTML with special characters", async (t) => {
408
+ const html = `
409
+ <html>
410
+ <body>
411
+ <p>Price: $100 &amp; €50</p>
412
+ <p>Math: 1 &lt; 2 &gt; 0</p>
413
+ </body>
414
+ </html>
415
+ `;
416
+ const result = await convertToMarkdown(html);
417
+ t.true(result.markdown.includes("$100"));
418
+ t.true(result.markdown.includes("€50") || result.markdown.includes("&"));
419
+ });
420
+ test("convertToMarkdown: handles nested HTML structures", async (t) => {
421
+ const html = `
422
+ <html>
423
+ <body>
424
+ <div>
425
+ <section>
426
+ <article>
427
+ <p><strong>Bold <em>and italic</em></strong></p>
428
+ </article>
429
+ </section>
430
+ </div>
431
+ </body>
432
+ </html>
433
+ `;
434
+ const result = await convertToMarkdown(html);
435
+ t.true(result.markdown.includes("**"));
436
+ t.true(result.markdown.includes("*"));
437
+ });
438
+ test("convertToMarkdown: preserves code blocks correctly", async (t) => {
439
+ const html = `
440
+ <html>
441
+ <body>
442
+ <pre><code class="language-typescript">
443
+ function test(): string {
444
+ return "hello";
445
+ }
446
+ </code></pre>
447
+ </body>
448
+ </html>
449
+ `;
450
+ const result = await convertToMarkdown(html);
451
+ t.true(result.markdown.includes("```"));
452
+ t.true(result.markdown.includes("function test"));
453
+ });
454
+ test("convertToMarkdown: statistics are accurate", async (t) => {
455
+ const html = SIMPLE_HTML;
456
+ const result = await convertToMarkdown(html);
457
+ // Input length should match HTML length
458
+ t.is(result.stats.inputLength, html.length);
459
+ // Output length should match markdown length
460
+ t.is(result.stats.outputLength, result.markdown.length);
461
+ // Processing time should be non-negative
462
+ t.true(result.stats.processingTime >= 0);
463
+ // Processing time should be reasonable (under 10 seconds)
464
+ t.true(result.stats.processingTime < 10000);
465
+ });
466
+ test("convertToMarkdown: handles HTML without head tag", async (t) => {
467
+ const html = "<html><body><h1>Title</h1><p>Content</p></body></html>";
468
+ const result = await convertToMarkdown(html);
469
+ t.truthy(result);
470
+ t.true(result.markdown.includes("Title"));
471
+ t.true(result.markdown.includes("Content"));
472
+ });
473
+ test("convertToMarkdown: handles HTML without html tag", async (t) => {
474
+ const html = "<body><h1>Title</h1><p>Content</p></body>";
475
+ const result = await convertToMarkdown(html);
476
+ t.truthy(result);
477
+ t.is(typeof result.markdown, "string");
478
+ });
479
+ test("convertToMarkdown: handles very long HTML efficiently", async (t) => {
480
+ const longHtml = `
481
+ <html>
482
+ <body>
483
+ <article>
484
+ ${Array(100)
485
+ .fill(0)
486
+ .map((_, i) => `<p>Paragraph ${i} with some substantial content to ensure proper processing.</p>`)
487
+ .join("\n")}
488
+ </article>
489
+ </body>
490
+ </html>
491
+ `;
492
+ const startTime = Date.now();
493
+ const result = await convertToMarkdown(longHtml);
494
+ const endTime = Date.now();
495
+ t.truthy(result);
496
+ t.true(result.markdown.length > 0);
497
+ // Should complete in reasonable time (under 5 seconds)
498
+ t.true(endTime - startTime < 5000);
499
+ });
500
+ test("hasContent: handles very long HTML efficiently", (t) => {
501
+ const longHtml = `
502
+ <html>
503
+ <body>
504
+ ${Array(1000)
505
+ .fill(0)
506
+ .map(() => "<p>Paragraph with content.</p>")
507
+ .join("\n")}
508
+ </body>
509
+ </html>
510
+ `;
511
+ const startTime = Date.now();
512
+ const result = hasContent(longHtml);
513
+ const endTime = Date.now();
514
+ t.true(result);
515
+ // Should complete quickly (under 1 second)
516
+ t.true(endTime - startTime < 1000);
517
+ });
518
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../src/index.spec.ts"],"names":[],"mappings":"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"}
@@ -136,9 +136,22 @@ function cleanAttributes($) {
136
136
  const attrs = $el.attr();
137
137
  if (attrs) {
138
138
  Object.keys(attrs).forEach((attr) => {
139
- if (!keepAttributes.has(attr)) {
140
- $el.removeAttr(attr);
139
+ // Keep attributes in the keepAttributes set
140
+ if (keepAttributes.has(attr)) {
141
+ return;
141
142
  }
143
+ // Also preserve data- attributes on pre/code elements and their containers
144
+ // These often contain clean code content (GitHub, GitLab, etc.)
145
+ const tagName = el.tagName?.toLowerCase();
146
+ if (attr.startsWith("data-") &&
147
+ (tagName === "pre" ||
148
+ tagName === "code" ||
149
+ tagName === "div" ||
150
+ tagName === "figure")) {
151
+ return;
152
+ }
153
+ // Remove all other attributes
154
+ $el.removeAttr(attr);
142
155
  });
143
156
  }
144
157
  });
@@ -1 +1 @@
1
- {"version":3,"file":"html-cleaner.js","sourceRoot":"","sources":["../../src/optimizers/html-cleaner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-cleaner.js","sourceRoot":"","sources":["../../src/optimizers/html-cleaner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=html-cleaner.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-cleaner.spec.d.ts","sourceRoot":"","sources":["../../src/optimizers/html-cleaner.spec.ts"],"names":[],"mappings":""}