@vakra-dev/supermarkdown 0.0.2 → 0.0.4

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.
package/README.md ADDED
@@ -0,0 +1,711 @@
1
+ # supermarkdown
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@vakra-dev/supermarkdown.svg)](https://www.npmjs.com/package/@vakra-dev/supermarkdown)
4
+ [![crates.io](https://img.shields.io/crates/v/supermarkdown.svg)](https://crates.io/crates/supermarkdown)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
6
+
7
+ High-performance HTML to Markdown converter with full GitHub Flavored Markdown support. Written in Rust, available for Node.js and as a native Rust crate.
8
+
9
+ ## Features
10
+
11
+ - **Fast** - Written in Rust with O(n) algorithms, significantly faster than JavaScript alternatives
12
+ - **Full GFM Support** - Tables with alignment, strikethrough, autolinks, fenced code blocks
13
+ - **Accurate** - Handles malformed HTML gracefully via html5ever
14
+ - **Configurable** - Multiple heading styles, link styles, custom selectors
15
+ - **Zero Dependencies** - Single native binary, no JavaScript runtime overhead
16
+ - **Cross-Platform** - Pre-built binaries for Windows, macOS, and Linux (x64 & ARM64)
17
+ - **TypeScript Ready** - Full type definitions included
18
+ - **Async Support** - Non-blocking conversion for large documents
19
+
20
+ ## Installation
21
+
22
+ ### Node.js
23
+
24
+ ```bash
25
+ npm install @vakra-dev/supermarkdown
26
+ ```
27
+
28
+ ### Rust
29
+
30
+ ```bash
31
+ cargo add supermarkdown
32
+ ```
33
+
34
+ ### CLI
35
+
36
+ Install the CLI binary via cargo:
37
+
38
+ ```bash
39
+ cargo install supermarkdown-cli
40
+ ```
41
+
42
+ ## Command Line Usage
43
+
44
+ The CLI allows you to convert HTML files from the command line or via stdin:
45
+
46
+ ```bash
47
+ # Convert a file
48
+ supermarkdown page.html > page.md
49
+
50
+ # Pipe HTML from curl
51
+ curl -s https://example.com | supermarkdown
52
+
53
+ # Exclude navigation and ads
54
+ supermarkdown --exclude "nav,.ad,#sidebar" page.html
55
+
56
+ # Use setext-style headings and referenced links
57
+ supermarkdown --heading-style setext --link-style referenced page.html
58
+ ```
59
+
60
+ ### CLI Options
61
+
62
+ | Option | Description |
63
+ | ------ | ----------- |
64
+ | `-h, --help` | Print help message |
65
+ | `-v, --version` | Print version |
66
+ | `--heading-style <STYLE>` | `atx` (default) or `setext` |
67
+ | `--link-style <STYLE>` | `inline` (default) or `referenced` |
68
+ | `--code-fence <CHAR>` | `` ` `` (default) or `~` |
69
+ | `--bullet <CHAR>` | `-` (default), `*`, or `+` |
70
+ | `--exclude <SELECTORS>` | CSS selectors to exclude (comma-separated) |
71
+
72
+ ## Quick Start
73
+
74
+ ```javascript
75
+ import { convert } from "@vakra-dev/supermarkdown";
76
+
77
+ const html = `
78
+ <h1>Hello World</h1>
79
+ <p>This is a <strong>test</strong> with a <a href="https://example.com">link</a>.</p>
80
+ `;
81
+
82
+ const markdown = convert(html);
83
+ console.log(markdown);
84
+ // # Hello World
85
+ //
86
+ // This is a **test** with a [link](https://example.com).
87
+ ```
88
+
89
+ ## Common Use Cases
90
+
91
+ ### Cleaning Web Scrapes
92
+
93
+ When scraping websites, HTML often contains navigation, ads, and other non-content elements. Use selectors to extract only what you need:
94
+
95
+ ```javascript
96
+ import { convert } from "@vakra-dev/supermarkdown";
97
+
98
+ // Raw HTML from a web scrape
99
+ const scrapedHtml = await fetchPage("https://example.com/article");
100
+
101
+ // Clean conversion - remove nav, ads, sidebars
102
+ const markdown = convert(scrapedHtml, {
103
+ excludeSelectors: [
104
+ "nav",
105
+ "header",
106
+ "footer",
107
+ ".sidebar",
108
+ ".advertisement",
109
+ ".cookie-banner",
110
+ ".social-share",
111
+ ".comments",
112
+ "script",
113
+ "style",
114
+ ],
115
+ });
116
+ ```
117
+
118
+ ### Preparing Content for LLMs
119
+
120
+ When feeding web content to LLMs, you want clean, focused text without HTML artifacts:
121
+
122
+ ```javascript
123
+ import { convert } from "@vakra-dev/supermarkdown";
124
+
125
+ // Extract just the article content for RAG pipelines
126
+ const markdown = convert(html, {
127
+ excludeSelectors: [
128
+ "nav",
129
+ "header",
130
+ "footer",
131
+ "aside",
132
+ ".related-posts",
133
+ ".author-bio",
134
+ ],
135
+ includeSelectors: ["article", ".post-content", "main"],
136
+ });
137
+
138
+ // Now feed to your LLM
139
+ const response = await llm.chat({
140
+ messages: [
141
+ {
142
+ role: "user",
143
+ content: `Summarize this article:\n\n${markdown}`,
144
+ },
145
+ ],
146
+ });
147
+ ```
148
+
149
+ ### Processing Blog Posts
150
+
151
+ Convert blog HTML while preserving code blocks and formatting:
152
+
153
+ ```javascript
154
+ import { convert } from "@vakra-dev/supermarkdown";
155
+
156
+ const blogHtml = `
157
+ <article>
158
+ <h1>Getting Started with Rust</h1>
159
+ <p>Rust is a systems programming language focused on safety.</p>
160
+ <pre><code class="language-rust">fn main() {
161
+ println!("Hello, world!");
162
+ }</code></pre>
163
+ <p>The <code>println!</code> macro prints to stdout.</p>
164
+ </article>
165
+ `;
166
+
167
+ const markdown = convert(blogHtml);
168
+ // Output:
169
+ // # Getting Started with Rust
170
+ //
171
+ // Rust is a systems programming language focused on safety.
172
+ //
173
+ // ```rust
174
+ // fn main() {
175
+ // println!("Hello, world!");
176
+ // }
177
+ // ```
178
+ //
179
+ // The `println!` macro prints to stdout.
180
+ ```
181
+
182
+ ### Converting Documentation Pages
183
+
184
+ Handle tables, definition lists, and nested structures common in docs:
185
+
186
+ ```javascript
187
+ import { convert } from "@vakra-dev/supermarkdown";
188
+
189
+ const docsHtml = `
190
+ <h2>API Reference</h2>
191
+ <table>
192
+ <tr><th>Method</th><th>Description</th></tr>
193
+ <tr><td><code>convert()</code></td><td>Sync conversion</td></tr>
194
+ <tr><td><code>convertAsync()</code></td><td>Async conversion</td></tr>
195
+ </table>
196
+ <dl>
197
+ <dt>headingStyle</dt>
198
+ <dd>ATX (#) or Setext (underlines)</dd>
199
+ </dl>
200
+ `;
201
+
202
+ const markdown = convert(docsHtml);
203
+ // Output:
204
+ // ## API Reference
205
+ //
206
+ // | Method | Description |
207
+ // | --- | --- |
208
+ // | `convert()` | Sync conversion |
209
+ // | `convertAsync()` | Async conversion |
210
+ //
211
+ // headingStyle
212
+ // : ATX (#) or Setext (underlines)
213
+ ```
214
+
215
+ ### Batch Processing
216
+
217
+ Process multiple documents efficiently with async conversion:
218
+
219
+ ```javascript
220
+ import { convertAsync } from "@vakra-dev/supermarkdown";
221
+
222
+ const urls = [
223
+ "https://example.com/page1",
224
+ "https://example.com/page2",
225
+ "https://example.com/page3",
226
+ ];
227
+
228
+ // Fetch and convert in parallel
229
+ const markdownDocs = await Promise.all(
230
+ urls.map(async (url) => {
231
+ const html = await fetch(url).then((r) => r.text());
232
+ return convertAsync(html, {
233
+ excludeSelectors: ["nav", "footer"],
234
+ });
235
+ })
236
+ );
237
+ ```
238
+
239
+ ## Usage
240
+
241
+ ### Basic Conversion
242
+
243
+ ```javascript
244
+ import { convert } from "@vakra-dev/supermarkdown";
245
+
246
+ const markdown = convert("<h1>Title</h1><p>Paragraph</p>");
247
+ ```
248
+
249
+ ### With Options
250
+
251
+ ```javascript
252
+ import { convert } from "@vakra-dev/supermarkdown";
253
+
254
+ const markdown = convert(html, {
255
+ headingStyle: "setext", // 'atx' (default) or 'setext'
256
+ linkStyle: "referenced", // 'inline' (default) or 'referenced'
257
+ excludeSelectors: ["nav", ".sidebar", "#ads"],
258
+ includeSelectors: [".important"], // Override excludes for specific elements
259
+ });
260
+ ```
261
+
262
+ ### Async Conversion
263
+
264
+ For large documents, use `convertAsync` to avoid blocking the main thread:
265
+
266
+ ```javascript
267
+ import { convertAsync } from "@vakra-dev/supermarkdown";
268
+
269
+ const markdown = await convertAsync(largeHtml);
270
+
271
+ // Process multiple documents in parallel
272
+ const results = await Promise.all([
273
+ convertAsync(html1),
274
+ convertAsync(html2),
275
+ convertAsync(html3),
276
+ ]);
277
+ ```
278
+
279
+ ## API Reference
280
+
281
+ ### `convert(html, options?)`
282
+
283
+ Converts HTML to Markdown synchronously.
284
+
285
+ **Parameters:**
286
+
287
+ - `html` (string) - The HTML string to convert
288
+ - `options` (object, optional) - Conversion options
289
+
290
+ **Returns:** string - The converted Markdown
291
+
292
+ ### `convertAsync(html, options?)`
293
+
294
+ Converts HTML to Markdown asynchronously.
295
+
296
+ **Parameters:**
297
+
298
+ - `html` (string) - The HTML string to convert
299
+ - `options` (object, optional) - Conversion options
300
+
301
+ **Returns:** Promise<string> - The converted Markdown
302
+
303
+ ### Options
304
+
305
+ | Option | Type | Default | Description |
306
+ | ------------------ | ---------------------------- | ----------- | ------------------------------------------------ |
307
+ | `headingStyle` | `'atx'` \| `'setext'` | `'atx'` | ATX uses `#` prefix, Setext uses underlines |
308
+ | `linkStyle` | `'inline'` \| `'referenced'` | `'inline'` | Inline: `[text](url)`, Referenced: `[text][1]` |
309
+ | `codeFence` | `` '`' `` \| `'~'` | `` '`' `` | Character for fenced code blocks |
310
+ | `bulletMarker` | `'-'` \| `'*'` \| `'+'` | `'-'` | Character for unordered list items |
311
+ | `baseUrl` | `string` | `undefined` | Base URL for resolving relative links |
312
+ | `excludeSelectors` | `string[]` | `[]` | CSS selectors for elements to exclude |
313
+ | `includeSelectors` | `string[]` | `[]` | CSS selectors to force keep (overrides excludes) |
314
+
315
+ ## Supported Elements
316
+
317
+ ### Block Elements
318
+
319
+ | HTML | Markdown |
320
+ | -------------------------- | ---------------------------------------------- |
321
+ | `<h1>` - `<h6>` | `#` headings or setext underlines |
322
+ | `<p>` | Paragraphs with blank lines |
323
+ | `<blockquote>` | `>` quoted blocks (supports nesting) |
324
+ | `<ul>`, `<ol>` | `-` or `1.` lists (supports `start` attribute) |
325
+ | `<pre><code>` | Fenced code blocks with language detection |
326
+ | `<table>` | GFM tables with alignment and captions |
327
+ | `<hr>` | `---` horizontal rules |
328
+ | `<dl>`, `<dt>`, `<dd>` | Definition lists |
329
+ | `<details>`, `<summary>` | Collapsible sections |
330
+ | `<figure>`, `<figcaption>` | Images with captions |
331
+
332
+ ### Inline Elements
333
+
334
+ | HTML | Markdown |
335
+ | -------------------------- | --------------------------------------- |
336
+ | `<a>` | `[text](url)`, `[text][ref]`, or `<url>` (autolink) |
337
+ | `<img>` | `![alt](src)` |
338
+ | `<strong>`, `<b>` | `**bold**` |
339
+ | `<em>`, `<i>` | `*italic*` |
340
+ | `<code>` | `` `code` `` (handles nested backticks) |
341
+ | `<del>`, `<s>`, `<strike>` | `~~strikethrough~~` |
342
+ | `<sub>` | `<sub>subscript</sub>` |
343
+ | `<sup>` | `<sup>superscript</sup>` |
344
+ | `<br>` | Line breaks |
345
+
346
+ ### HTML Passthrough
347
+
348
+ Elements without Markdown equivalents are preserved as HTML:
349
+
350
+ - `<kbd>` - Keyboard input
351
+ - `<mark>` - Highlighted text
352
+ - `<abbr>` - Abbreviations (preserves `title` attribute)
353
+ - `<samp>` - Sample output
354
+ - `<var>` - Variables
355
+
356
+ ## Advanced Features
357
+
358
+ ### Table Alignment
359
+
360
+ Extracts alignment from `align` attribute or `text-align` style:
361
+
362
+ ```html
363
+ <table>
364
+ <tr>
365
+ <th align="left">Left</th>
366
+ <th align="center">Center</th>
367
+ <th align="right">Right</th>
368
+ </tr>
369
+ </table>
370
+ ```
371
+
372
+ Output:
373
+
374
+ ```markdown
375
+ | Left | Center | Right |
376
+ | :--- | :----: | ----: |
377
+ ```
378
+
379
+ ### Ordered List Start
380
+
381
+ Respects the `start` attribute on ordered lists:
382
+
383
+ ```html
384
+ <ol start="5">
385
+ <li>Fifth item</li>
386
+ <li>Sixth item</li>
387
+ </ol>
388
+ ```
389
+
390
+ Output:
391
+
392
+ ```markdown
393
+ 5. Fifth item
394
+ 6. Sixth item
395
+ ```
396
+
397
+ ### Autolinks
398
+
399
+ When a link's text matches its URL or email, autolink syntax is used:
400
+
401
+ ```html
402
+ <a href="https://example.com">https://example.com</a>
403
+ <a href="mailto:test@example.com">test@example.com</a>
404
+ ```
405
+
406
+ Output:
407
+
408
+ ```markdown
409
+ <https://example.com>
410
+ <test@example.com>
411
+ ```
412
+
413
+ ### Code Block Language Detection
414
+
415
+ Automatically detects language from class names:
416
+
417
+ - `language-*` (e.g., `language-rust`)
418
+ - `lang-*` (e.g., `lang-python`)
419
+ - `highlight-*` (e.g., `highlight-go`)
420
+ - `hljs-*` (highlight.js classes, excluding token classes like `hljs-keyword`)
421
+ - Bare language names (e.g., `javascript`, `python`) as fallback
422
+
423
+ ```html
424
+ <pre><code class="language-rust">fn main() {}</code></pre>
425
+ ```
426
+
427
+ Output:
428
+
429
+ ````markdown
430
+ ```rust
431
+ fn main() {}
432
+ ```
433
+ ````
434
+
435
+ Code blocks containing backticks automatically use more backticks as delimiters.
436
+
437
+ ### Line Number Handling
438
+
439
+ Line number gutters are automatically stripped from code blocks. Elements with these class patterns are skipped:
440
+
441
+ - `gutter`
442
+ - `line-number`
443
+ - `line-numbers`
444
+ - `lineno`
445
+ - `linenumber`
446
+
447
+ ### URL Encoding
448
+
449
+ Spaces and parentheses in URLs are automatically percent-encoded:
450
+
451
+ ```javascript
452
+ // <a href="https://example.com/path (1)">link</a>
453
+ // → [link](https://example.com/path%20%281%29)
454
+ ```
455
+
456
+ ### Selector-Based Filtering
457
+
458
+ Remove unwanted elements like navigation, ads, or sidebars:
459
+
460
+ ```javascript
461
+ const markdown = convert(html, {
462
+ excludeSelectors: [
463
+ "nav",
464
+ "header",
465
+ "footer",
466
+ ".sidebar",
467
+ ".advertisement",
468
+ "#cookie-banner",
469
+ ],
470
+ includeSelectors: [".main-content"],
471
+ });
472
+ ```
473
+
474
+ ## Limitations
475
+
476
+ Some HTML features cannot be fully represented in Markdown:
477
+
478
+ | Feature | Behavior |
479
+ | ----------------------- | ------------------------------------------ |
480
+ | Table colspan/rowspan | Content placed in first cell |
481
+ | Nested tables | Inner tables converted inline |
482
+ | Form elements | Skipped |
483
+ | iframe/video/audio | Skipped (no standard Markdown equivalent) |
484
+ | CSS styling | Ignored (except `text-align` for tables) |
485
+ | Empty elements | Removed from output |
486
+
487
+ ## Edge Cases
488
+
489
+ supermarkdown handles many edge cases gracefully:
490
+
491
+ ### Malformed HTML
492
+
493
+ Invalid or malformed HTML is parsed via html5ever, which applies browser-like error recovery:
494
+
495
+ ```javascript
496
+ // Missing closing tags, nested issues - all handled
497
+ const html = "<p>Unclosed paragraph<div>Mixed<p>nesting</div>";
498
+ const markdown = convert(html); // Produces sensible output
499
+ ```
500
+
501
+ ### Deeply Nested Lists
502
+
503
+ Nested lists maintain proper indentation:
504
+
505
+ ```javascript
506
+ const html = `
507
+ <ul>
508
+ <li>Level 1
509
+ <ul>
510
+ <li>Level 2
511
+ <ul>
512
+ <li>Level 3</li>
513
+ </ul>
514
+ </li>
515
+ </ul>
516
+ </li>
517
+ </ul>`;
518
+ // Output:
519
+ // - Level 1
520
+ // - Level 2
521
+ // - Level 3
522
+ ```
523
+
524
+ ### Code Blocks with Backticks
525
+
526
+ When code contains backticks, the fence automatically uses more backticks:
527
+
528
+ ```javascript
529
+ const html = "<pre><code>Use `backticks` for code</code></pre>";
530
+ // Output uses 4 backticks as fence:
531
+ // ````
532
+ // Use `backticks` for code
533
+ // ````
534
+ ```
535
+
536
+ ### Empty Elements
537
+
538
+ Empty paragraphs, divs, and spans are stripped to avoid blank lines:
539
+
540
+ ```javascript
541
+ const html = "<p></p><p>Real content</p><p> </p>";
542
+ const markdown = convert(html);
543
+ // Output: "Real content" (empty paragraphs removed)
544
+ ```
545
+
546
+ ### Special Characters in URLs
547
+
548
+ Spaces, parentheses, and other special characters in URLs are percent-encoded:
549
+
550
+ ```javascript
551
+ const html = '<a href="https://example.com/file (1).pdf">Download</a>';
552
+ // Output: [Download](https://example.com/file%20%281%29.pdf)
553
+ ```
554
+
555
+ ### Tables Without Headers
556
+
557
+ Tables missing `<thead>` use the first row as header:
558
+
559
+ ```javascript
560
+ const html = `
561
+ <table>
562
+ <tr><td>A</td><td>B</td></tr>
563
+ <tr><td>1</td><td>2</td></tr>
564
+ </table>`;
565
+ // Output:
566
+ // | A | B |
567
+ // | --- | --- |
568
+ // | 1 | 2 |
569
+ ```
570
+
571
+ ### Mixed Content in Lists
572
+
573
+ List items with mixed block/inline content are handled:
574
+
575
+ ```javascript
576
+ const html = `
577
+ <ul>
578
+ <li>Simple item</li>
579
+ <li>
580
+ <p>Paragraph in list</p>
581
+ <pre><code>code block</code></pre>
582
+ </li>
583
+ </ul>`;
584
+ // Outputs proper markdown with preserved formatting
585
+ ```
586
+
587
+ ## Troubleshooting
588
+
589
+ ### Empty or Minimal Output
590
+
591
+ **Problem:** `convert()` returns empty string or very little content.
592
+
593
+ **Causes & Solutions:**
594
+
595
+ 1. **Content is in excluded elements** - Check if your content is inside `nav`, `header`, etc. that might match default patterns
596
+ ```javascript
597
+ // Try without selectors first
598
+ const markdown = convert(html);
599
+ ```
600
+
601
+ 2. **JavaScript-rendered content** - supermarkdown converts static HTML only. If the page uses client-side rendering, you need to render it first (e.g., with Puppeteer or Playwright)
602
+
603
+ 3. **Content in iframes** - iframe content is not extracted. Fetch iframe src separately if needed
604
+
605
+ ### Missing Code Block Language
606
+
607
+ **Problem:** Code blocks don't have language annotation.
608
+
609
+ **Solution:** supermarkdown looks for `language-*`, `lang-*`, or `highlight-*` class patterns. Ensure your HTML uses standard class naming:
610
+
611
+ ```html
612
+ <!-- Detected -->
613
+ <pre><code class="language-python">...</code></pre>
614
+ <pre><code class="lang-js">...</code></pre>
615
+
616
+ <!-- Not detected -->
617
+ <pre><code class="python-code">...</code></pre>
618
+ ```
619
+
620
+ ### Tables Not Rendering Correctly
621
+
622
+ **Problem:** Tables appear as plain text or are malformed.
623
+
624
+ **Causes & Solutions:**
625
+
626
+ 1. **Missing table structure** - Ensure proper `<table>`, `<tr>`, `<td>` structure
627
+ 2. **Nested tables** - GFM doesn't support nested tables; inner tables are flattened
628
+ 3. **colspan/rowspan** - These are not supported in GFM; content goes in first cell
629
+
630
+ ### Links Missing or Broken
631
+
632
+ **Problem:** Links don't appear or have wrong URLs.
633
+
634
+ **Solutions:**
635
+
636
+ 1. **Relative URLs** - Use `baseUrl` option to resolve relative links:
637
+ ```javascript
638
+ convert(html, { baseUrl: "https://example.com" });
639
+ ```
640
+
641
+ 2. **Links in excluded elements** - Navigation links are often in `<nav>` which may be excluded
642
+
643
+ ### Performance Issues with Large Documents
644
+
645
+ **Problem:** Conversion is slow for very large HTML files.
646
+
647
+ **Solutions:**
648
+
649
+ 1. **Use async** - `convertAsync()` won't block the event loop
650
+ 2. **Pre-filter HTML** - Remove obvious non-content before conversion
651
+ 3. **Stream processing** - For very large docs, consider splitting into sections
652
+
653
+ ### Special Characters Appearing Wrong
654
+
655
+ **Problem:** Characters like `<`, `>`, `&` appear as entities.
656
+
657
+ **Solution:** This is usually correct behavior - these characters need escaping in markdown. If you're seeing `&amp;` where you expect `&`, the source HTML may have double-encoded entities.
658
+
659
+ ## Rust Usage
660
+
661
+ Add to your `Cargo.toml`:
662
+
663
+ ```toml
664
+ [dependencies]
665
+ supermarkdown = "0.0.2"
666
+ ```
667
+
668
+ ```rust
669
+ use supermarkdown::{convert, convert_with_options, Options, HeadingStyle};
670
+
671
+ // Basic conversion
672
+ let markdown = convert("<h1>Hello</h1>");
673
+
674
+ // With options
675
+ let options = Options::new()
676
+ .heading_style(HeadingStyle::Setext)
677
+ .exclude_selectors(vec!["nav".to_string()]);
678
+
679
+ let markdown = convert_with_options("<h1>Hello</h1>", &options);
680
+ ```
681
+
682
+ ## Performance
683
+
684
+ supermarkdown is designed for high performance:
685
+
686
+ - **Single-pass parsing** - O(n) HTML traversal
687
+ - **Pre-computed metadata** - List indices and CSS selectors computed in one pass
688
+ - **Zero-copy where possible** - Minimal string allocations
689
+ - **Native code** - No JavaScript runtime overhead
690
+
691
+ ## Contributing
692
+
693
+ Contributions are welcome! Please feel free to submit a Pull Request.
694
+
695
+ ```bash
696
+ # Clone the repository
697
+ git clone https://github.com/vakra-dev/supermarkdown.git
698
+ cd supermarkdown
699
+
700
+ # Run tests
701
+ cargo test
702
+
703
+ # Build Node.js bindings
704
+ cd crates/supermarkdown-napi
705
+ npm install
706
+ npm run build
707
+ ```
708
+
709
+ ## License
710
+
711
+ MIT License - see [LICENSE](LICENSE) for details.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vakra-dev/supermarkdown",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "High-performance HTML to Markdown converter with full GFM support",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -26,7 +26,8 @@
26
26
  "files": [
27
27
  "index.js",
28
28
  "index.d.ts",
29
- "*.node"
29
+ "*.node",
30
+ "README.md"
30
31
  ],
31
32
  "napi": {
32
33
  "name": "supermarkdown",
@@ -61,13 +62,13 @@
61
62
  "timeout": "3m"
62
63
  },
63
64
  "optionalDependencies": {
64
- "@vakra-dev/supermarkdown-win32-x64-msvc": "0.0.2",
65
- "@vakra-dev/supermarkdown-darwin-x64": "0.0.2",
66
- "@vakra-dev/supermarkdown-linux-x64-gnu": "0.0.2",
67
- "@vakra-dev/supermarkdown-linux-x64-musl": "0.0.2",
68
- "@vakra-dev/supermarkdown-linux-arm64-gnu": "0.0.2",
69
- "@vakra-dev/supermarkdown-linux-arm64-musl": "0.0.2",
70
- "@vakra-dev/supermarkdown-darwin-arm64": "0.0.2",
71
- "@vakra-dev/supermarkdown-win32-arm64-msvc": "0.0.2"
65
+ "@vakra-dev/supermarkdown-win32-x64-msvc": "0.0.4",
66
+ "@vakra-dev/supermarkdown-darwin-x64": "0.0.4",
67
+ "@vakra-dev/supermarkdown-linux-x64-gnu": "0.0.4",
68
+ "@vakra-dev/supermarkdown-linux-x64-musl": "0.0.4",
69
+ "@vakra-dev/supermarkdown-linux-arm64-gnu": "0.0.4",
70
+ "@vakra-dev/supermarkdown-linux-arm64-musl": "0.0.4",
71
+ "@vakra-dev/supermarkdown-darwin-arm64": "0.0.4",
72
+ "@vakra-dev/supermarkdown-win32-arm64-msvc": "0.0.4"
72
73
  }
73
74
  }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file