word-to-markdown 0.1.0 → 0.3.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.
package/README.md CHANGED
@@ -1,6 +1,11 @@
1
1
  # Word to Markdown
2
2
 
3
- Convert Word documents to beautiful Markdown. Via command line or in your browser. An even better version of the original [`word-to-markdown`](https://github.com/benbalter/word-to-markdown).
3
+ [![npm version](https://img.shields.io/npm/v/word-to-markdown.svg)](https://www.npmjs.com/package/word-to-markdown)
4
+ [![npm downloads](https://img.shields.io/npm/dm/word-to-markdown.svg)](https://www.npmjs.com/package/word-to-markdown)
5
+ [![CI](https://github.com/benbalter/word-to-markdown-js/actions/workflows/ci.yml/badge.svg)](https://github.com/benbalter/word-to-markdown-js/actions/workflows/ci.yml)
6
+ [![License: ISC](https://img.shields.io/npm/l/word-to-markdown.svg)](https://github.com/benbalter/word-to-markdown-js/blob/main/LICENSE)
7
+
8
+ Convert Word documents to beautiful Markdown. Via command line, as a Node library, or in your browser. An even better version of the original [`word-to-markdown`](https://github.com/benbalter/word-to-markdown).
4
9
 
5
10
  Try it in your browser at [word2md.com](https://word2md.com), or use it from the command line — no clone required:
6
11
 
@@ -8,22 +13,38 @@ Try it in your browser at [word2md.com](https://word2md.com), or use it from the
8
13
  npx word-to-markdown input.docx > output.md
9
14
  ```
10
15
 
11
- ## Supports
16
+ ## What it converts
12
17
 
13
- - Paragraphs
14
- - Numbered lists
15
- - Bullet lists
16
- - Nested Lists
18
+ - Paragraphs and line breaks
17
19
  - Headings
18
- - Lists
20
+ - Bold, italic, and strikethrough
21
+ - Superscript and subscript — preserved as inline `<sup>`/`<sub>` tags
22
+ - Bullet lists, and numbered lists (kept as `1./2./3.` by default)
23
+ - Nested lists
19
24
  - Tables
20
- - Footnotes and endnotes
21
- - Images
22
- - Bold, italics, underlines, strikethrough, superscript and subscript.
23
25
  - Links
24
- - Line breaks
25
- - Text boxes
26
- - Comments
26
+ - Footnotes and endnotes
27
+ - Images — embedded inline as base64 data URIs, or extracted to files
28
+
29
+ ### Notes and limitations
30
+
31
+ - **Numbered lists** are kept as `1./2./3.` ordered lists. Pass
32
+ `{ numberedLists: 'bullets' }` (library) or `--bullet-lists` (CLI) to convert
33
+ them to bullet lists instead (matching the original word-to-markdown).
34
+ - **Images** are inlined as base64 data URIs by default. To extract them to
35
+ files with relative links instead, use `{ images: 'extract' }` (library — the
36
+ bytes come back on `ConvertResult.images`) or `--image-dir <dir>` (CLI). Drop
37
+ them entirely with `{ images: 'strip' }` / `--strip-images`. On the web,
38
+ documents with images offer a **Download .zip** (Markdown + an `images/`
39
+ folder). For full control, pass a custom [Mammoth image handler](https://github.com/mwilliamson/mammoth.js/#images)
40
+ via `options.mammoth`.
41
+ - **Underline** is dropped by default (Mammoth's default, since underlines are
42
+ easily confused with links). Pass `{ underline: 'preserve' }` (library) or
43
+ `--underline` (CLI) to keep it as an inline `<u>` tag.
44
+ - **Comments, text boxes, and equations are not converted** — Mammoth drops
45
+ them during the `.docx` → HTML step. When content is dropped this way,
46
+ `convertWithWarnings` surfaces a warning.
47
+ - Heading levels come from Word's paragraph styles, not from font size.
27
48
 
28
49
  ## How is this different from the original?
29
50
 
@@ -56,8 +77,21 @@ npm install -g word-to-markdown
56
77
  w2m path/to/your/file.docx > output.md
57
78
  ```
58
79
 
80
+ The converted Markdown is written to **stdout** and any document warnings (encryption, sensitivity labels, and the like) to **stderr**, so a redirect captures only the Markdown. The command exits with a non-zero status and a friendly message if the file is missing, unreadable, or not a valid `.docx`. Only `.docx` is supported — re-save older `.doc` files as `.docx` first.
81
+
82
+ Options:
83
+
84
+ - `--bullet-lists` — convert numbered lists to bullets instead of keeping `1./2./3.`.
85
+ - `--underline` — preserve underlined text as inline `<u>` tags (dropped by default).
86
+ - `--strip-images` — remove images instead of embedding them as base64 data URIs.
87
+ - `--image-dir <dir>` — extract images to `<dir>` and link them relatively, instead
88
+ of embedding base64. Links resolve relative to where you save the Markdown, e.g.
89
+ `w2m --image-dir images report.docx > report.md`.
90
+
59
91
  ## Use as a library
60
92
 
93
+ Published to npm as [`word-to-markdown`](https://www.npmjs.com/package/word-to-markdown). It ships as an ES module and requires Node 22.13 or later.
94
+
61
95
  ```console
62
96
  npm install word-to-markdown
63
97
  ```
@@ -74,7 +108,62 @@ const { markdown, warnings } = await convertWithWarnings(
74
108
  );
75
109
  ```
76
110
 
77
- In the browser, pass an `ArrayBuffer` instead of a file path.
111
+ Both functions accept either a file-path string (in Node) or an `ArrayBuffer` (in the browser), so the same code runs in either environment:
112
+
113
+ ```js
114
+ const { markdown } = await convertWithWarnings(arrayBuffer);
115
+ ```
116
+
117
+ ### API
118
+
119
+ - **`convert(input, options?): Promise<string>`** — resolves to the Markdown.
120
+ - **`convertWithWarnings(input, options?): Promise<{ markdown: string; warnings: string[]; images? }>`** — also returns human-readable warnings for encrypted, protected, or sensitivity-labeled documents, and (in `extract` mode) the extracted images.
121
+
122
+ `input` is a file-path `string` (Node) or an `ArrayBuffer` (browser). `options` is optional:
123
+
124
+ - **`images`** — `'inline'` (default) embeds images as base64 data URIs; `'strip'` removes them; `'extract'` replaces each with a relative `![](imageDir/imageN.ext)` link and returns the bytes on `ConvertResult.images` (use `convertWithWarnings` to retrieve them).
125
+ - **`imageDir`** — link/path prefix for extracted images (default `'images'`); only applies with `images: 'extract'`.
126
+ - **`numberedLists`** — `'ordered'` (default) keeps `1./2./3.`; `'bullets'` converts numbered lists to bullets.
127
+ - **`underline`** — `'ignore'` (default) drops underlines; `'preserve'` keeps them as inline `<u>` tags.
128
+ - **`mammoth`** / **`turndown`** — escape hatches forwarded to [Mammoth](https://github.com/mwilliamson/mammoth.js/) and [Turndown](https://github.com/mixmark-io/turndown) respectively.
129
+
130
+ ```js
131
+ // Extract images to files and write them out yourself:
132
+ const { markdown, images } = await convertWithWarnings('file.docx', {
133
+ images: 'extract',
134
+ });
135
+ // markdown → ![](images/image1.png); images → [{ path, contentType, bytes }]
136
+ ```
137
+
138
+ ### Error handling
139
+
140
+ Conversion throws typed errors so you can respond to each failure precisely:
141
+
142
+ ```js
143
+ import convert, {
144
+ UnsupportedFileError,
145
+ FileNotFoundError,
146
+ InvalidFileError,
147
+ FilePermissionError,
148
+ ConversionError,
149
+ } from 'word-to-markdown';
150
+
151
+ try {
152
+ const markdown = await convert('path/to/your/file.docx');
153
+ } catch (error) {
154
+ if (error instanceof UnsupportedFileError) {
155
+ // e.g. a .doc file — only .docx is supported
156
+ } else if (error instanceof FileNotFoundError) {
157
+ // the path doesn't exist
158
+ } else if (error instanceof InvalidFileError) {
159
+ // not a valid or parseable .docx
160
+ } else if (error instanceof FilePermissionError) {
161
+ // the file couldn't be read
162
+ } else if (error instanceof ConversionError) {
163
+ // something failed mid-conversion — see error.cause
164
+ }
165
+ }
166
+ ```
78
167
 
79
168
  ## Running Locally
80
169
 
@@ -98,7 +187,7 @@ To self-host the static site using Docker Compose:
98
187
 
99
188
  1. Clone the repository
100
189
  2. Run `npm install && npm run build`
101
- 3. Run `docker-compose up -d`
190
+ 3. Run `docker compose up -d`
102
191
  4. Access at http://localhost:3000
103
192
 
104
193
  ## More context
@@ -111,12 +200,12 @@ See the README of [the original Word to Markdown](https://github.com/benbalter/w
111
200
 
112
201
  1. Use [LibreOffice](https://www.libreoffice.org/) to convert the Word document to HTML.
113
202
  2. Use a bunch of RegEx to clean up the HTML
114
- 3. User [Premailer](https://github.com/premailer/premailer) to inline the CSS
203
+ 3. Use [Premailer](https://github.com/premailer/premailer) to inline the CSS
115
204
  4. Use [Nokogiri](https://nokogiri.org) to manipulate the HTML further
116
205
  5. Use [Reverse Markdown](https://github.com/xijo/reverse_markdown) to convert the HTML to Markdown
117
206
  6. Use a bunch of RegEx to clean up the Markdown
118
207
 
119
- Not only did this process require installing and shelling out to a huge binary (LibreOffice), but it was very fragile, and key projects like Reverse Markdown are no longer maintained. I tried experimenting with Pandoc, but it had many of the same limitation.
208
+ Not only did this process require installing and shelling out to a huge binary (LibreOffice), but it was very fragile, and key projects like Reverse Markdown are no longer maintained. I tried experimenting with Pandoc, but it had many of the same limitations.
120
209
 
121
210
  ### The new way
122
211
 
@@ -126,6 +215,6 @@ Not only did this process require installing and shelling out to a huge binary (
126
215
 
127
216
  All three of these projects are actively maintained and heavily used, and allows us to convert the document faster, and entirely in JavaScript. Heck, I think theoretically, this could run in the browser for added privacy.
128
217
 
129
- It's still in beta, but so far, I've found the output to be better, with much less manual cleanup required. Notice something is off? Please [open an issue](https://github.com/benbalter/word-to-markdown-js/issues/new).
218
+ It's still young, but so far, I've found the output to be better, with much less manual cleanup required. Notice something is off? Please [open an issue](https://github.com/benbalter/word-to-markdown-js/issues/new).
130
219
 
131
220
  One note: This project does not yet attempt to guess heading levels based on font size. It could, but it's not yet implemented.
package/build/cli.js CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { __awaiter } from "tslib";
3
3
  import { Command } from 'commander';
4
+ import { mkdir, writeFile } from 'fs/promises';
4
5
  import { convertWithWarnings, UnsupportedFileError, FileNotFoundError, InvalidFileError, FilePermissionError, ConversionError, } from './main.js';
5
6
  const program = new Command();
6
7
  program.name('w2m');
@@ -8,9 +9,32 @@ program.description('Convert Word documents to beautiful Markdown');
8
9
  program
9
10
  .command('convert', { isDefault: true })
10
11
  .argument('<file>', 'The Word document to convert')
11
- .action((file) => __awaiter(void 0, void 0, void 0, function* () {
12
+ .option('--strip-images', 'Remove images instead of embedding them as base64 data URIs')
13
+ .option('--image-dir <dir>', 'Extract images to <dir> and link them relatively, instead of embedding ' +
14
+ 'them as base64. Links resolve relative to where you save the Markdown.')
15
+ .option('--bullet-lists', 'Convert numbered lists to bullets rather than keeping them as 1./2./3.')
16
+ .option('--underline', 'Preserve underlined text as inline <u> tags (dropped by default)')
17
+ .action((file, options) => __awaiter(void 0, void 0, void 0, function* () {
12
18
  try {
13
- const result = yield convertWithWarnings(file);
19
+ // --image-dir (extract) takes precedence over --strip-images.
20
+ const images = options.imageDir
21
+ ? 'extract'
22
+ : options.stripImages
23
+ ? 'strip'
24
+ : 'inline';
25
+ const result = yield convertWithWarnings(file, {
26
+ images,
27
+ imageDir: options.imageDir,
28
+ numberedLists: options.bulletLists ? 'bullets' : 'ordered',
29
+ underline: options.underline ? 'preserve' : 'ignore',
30
+ });
31
+ // Write extracted images to disk before emitting the Markdown that links
32
+ // them. Paths are already prefixed with the requested directory.
33
+ if (result.images && result.images.length > 0) {
34
+ yield mkdir(options.imageDir, { recursive: true });
35
+ yield Promise.all(result.images.map((image) => writeFile(image.path, image.bytes)));
36
+ console.error(`Wrote ${result.images.length} image(s) to ${options.imageDir}/`);
37
+ }
14
38
  // Display warnings to stderr if any
15
39
  if (result.warnings.length > 0) {
16
40
  result.warnings.forEach((warning) => {
package/build/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,OAAO,CAAC,WAAW,CAAC,8CAA8C,CAAC,CAAC;AACpE,OAAO;KACJ,OAAO,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KACvC,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;KAClD,MAAM,CAAC,CAAO,IAAI,EAAE,EAAE;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAE/C,oCAAoC;QACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAClC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,4BAA4B;QACjD,CAAC;QAED,4BAA4B;QAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uDAAuD;QACvD,IACE,KAAK,YAAY,oBAAoB;YACrC,KAAK,YAAY,iBAAiB;YAClC,KAAK,YAAY,gBAAgB;YACjC,KAAK,YAAY,mBAAmB;YACpC,KAAK,YAAY,eAAe,EAChC,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,yDAAyD;QACzD,OAAO,CAAC,KAAK,CACX,QAAQ,EACR,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAA,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/build/main.js CHANGED
@@ -73,16 +73,15 @@ export function validateFileExtension(filePath) {
73
73
  throw new UnsupportedFileError('This tool only supports .docx files, not .doc files. Please save your document as a .docx file and try again.');
74
74
  }
75
75
  }
76
- // Validates that a file path is safe to use (Node.js only)
77
- // Prevents path traversal attacks by checking for parent directory references
76
+ // Validates that a file path is safe to use and returns the resolved path (Node.js only)
78
77
  function validateFilePath(filePath) {
79
- // Check for path traversal attempts
80
- if (filePath.includes('..')) {
81
- throw new Error('Invalid file path: path traversal not allowed');
82
- }
83
- // Resolve to absolute path to check for traversal
84
- // Note: This uses the path module which is Node.js-only, but this function
85
- // is only called in Node.js contexts (CLI, server, direct API use with file paths)
78
+ // Resolve to an absolute path first. path.resolve normalizes any `..`
79
+ // segments, so we deliberately do NOT reject paths that merely contain `..`:
80
+ // a relative path like `../report.docx`, or a filename like `notes..docx`, is
81
+ // legitimate CLI/library usage. (There is no sandbox to escape here — a local
82
+ // caller already has full filesystem access.)
83
+ // Note: the path module is Node.js-only, but this function is only called in
84
+ // Node.js contexts (CLI, direct API use with file paths).
86
85
  const resolvedPath = path.resolve(filePath);
87
86
  // Check for absolute paths to dangerous system directories (Unix-like systems)
88
87
  const dangerousPaths = ['/etc/', '/sys/', '/proc/', '/root/', '/boot/'];
@@ -98,6 +97,7 @@ function validateFilePath(filePath) {
98
97
  throw new Error('Invalid file path: access to system directories not allowed');
99
98
  }
100
99
  }
100
+ return resolvedPath;
101
101
  }
102
102
  // Map of common HTML entities to decode
103
103
  const decodeMap = {
@@ -122,6 +122,17 @@ const decodeMap = {
122
122
  };
123
123
  // Maximum iterations for decoding nested HTML entities to prevent infinite loops
124
124
  const MAX_DECODE_ITERATIONS = 10;
125
+ // Convert a numeric code point to a string, returning the original entity text
126
+ // for out-of-range values (fromCodePoint throws a RangeError on those, unlike
127
+ // the legacy fromCharCode which silently wrapped).
128
+ function codePointToString(codePoint, original) {
129
+ try {
130
+ return String.fromCodePoint(codePoint);
131
+ }
132
+ catch (_a) {
133
+ return original;
134
+ }
135
+ }
125
136
  // Decode HTML entities in text content
126
137
  function decodeHtmlEntities(html) {
127
138
  function decodeOnce(text) {
@@ -136,15 +147,16 @@ function decodeHtmlEntities(html) {
136
147
  if (decodeMap[entity]) {
137
148
  return decodeMap[entity];
138
149
  }
139
- // Handle numeric entities &#123;
150
+ // Handle numeric entities &#123; (fromCodePoint handles astral-plane
151
+ // code points > U+FFFF, e.g. emoji, which fromCharCode would truncate)
140
152
  const numericMatch = entity.match(/^&#(\d+);$/);
141
153
  if (numericMatch) {
142
- return String.fromCharCode(parseInt(numericMatch[1], 10));
154
+ return codePointToString(parseInt(numericMatch[1], 10), entity);
143
155
  }
144
156
  // Handle hex entities &#x1A;
145
157
  const hexMatch = entity.match(/^&#x([0-9a-fA-F]+);$/i);
146
158
  if (hexMatch) {
147
- return String.fromCharCode(parseInt(hexMatch[1], 16));
159
+ return codePointToString(parseInt(hexMatch[1], 16), entity);
148
160
  }
149
161
  // Return original if not recognized
150
162
  return entity;
@@ -170,10 +182,16 @@ function decodeHtmlEntities(html) {
170
182
  // Common unicode bullets that might appear in Word documents - compiled once
171
183
  const unicodeBullets = ['•', '◦', '▪', '▫', '‣', '⁃', '∙', '·'];
172
184
  const bulletRegex = new RegExp(`^\\s*[${unicodeBullets.map((b) => b.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('')}]\\s*`);
173
- // Process HTML in a single pass: convert table headers and remove unicode bullets
174
- // This is more efficient than parsing the HTML twice
175
- function processHtml(html) {
185
+ // Process HTML in a single pass: optionally strip images, convert table
186
+ // headers, and remove unicode bullets. This is more efficient than parsing the
187
+ // HTML twice.
188
+ function processHtml(html, opts = {}) {
176
189
  const root = parse(html);
190
+ // Remove images (Mammoth inlines them as base64 data URIs by default, which
191
+ // can bloat the output for image-heavy documents).
192
+ if (opts.stripImages) {
193
+ root.querySelectorAll('img').forEach((img) => img.remove());
194
+ }
177
195
  // Process tables - convert first row to table headers
178
196
  root.querySelectorAll('table').forEach((table) => {
179
197
  const firstRow = table.querySelector('tr');
@@ -215,11 +233,16 @@ function processHtml(html) {
215
233
  }
216
234
  // Reusable TurndownService instance to avoid recreating it for each conversion
217
235
  let turndownServiceInstance = null;
218
- function getTurndownService(options = {}) {
219
- // Create a new instance if options are provided, otherwise reuse the singleton
220
- if (Object.keys(options).length > 0) {
221
- const service = new TurndownService(Object.assign(Object.assign({}, options), defaultTurndownOptions));
236
+ function getTurndownService(options = {}, keepTags = []) {
237
+ // Create a new instance if options or keep-tags are provided; otherwise reuse
238
+ // the singleton. `keep()` mutates the instance, so it must never touch the
239
+ // shared singleton — a fresh service is required whenever keepTags is set.
240
+ if (Object.keys(options).length > 0 || keepTags.length > 0) {
241
+ const service = new TurndownService(Object.assign(Object.assign({}, defaultTurndownOptions), options));
222
242
  service.use(turndownPluginGfm.gfm);
243
+ if (keepTags.length > 0) {
244
+ service.keep(keepTags);
245
+ }
223
246
  return service;
224
247
  }
225
248
  if (!turndownServiceInstance) {
@@ -228,11 +251,13 @@ function getTurndownService(options = {}) {
228
251
  }
229
252
  return turndownServiceInstance;
230
253
  }
231
- // Convert HTML to GitHub-flavored Markdown
232
- export function htmlToMd(html, options = {}) {
254
+ // Convert HTML to GitHub-flavored Markdown. `keepTags` lists HTML tags to
255
+ // preserve verbatim as inline HTML (e.g. `['u']` to keep underlines) rather
256
+ // than let Turndown strip them to plain text.
257
+ export function htmlToMd(html, options = {}, keepTags = []) {
233
258
  // Decode HTML entities before conversion
234
259
  const decodedHtml = decodeHtmlEntities(html);
235
- const turndownService = getTurndownService(options);
260
+ const turndownService = getTurndownService(options, keepTags);
236
261
  return turndownService.turndown(decodedHtml).trim();
237
262
  }
238
263
  // Pre-compiled regex patterns for better performance
@@ -291,23 +316,10 @@ export function extractDocumentProperties(input) {
291
316
  let arrayBuffer;
292
317
  if (typeof input === 'string') {
293
318
  // Validate the file path to prevent path traversal attacks
294
- validateFilePath(input);
319
+ const safePath = validateFilePath(input);
295
320
  // Read file from path and convert to ArrayBuffer
296
- const fileBuffer = yield fs.readFile(input);
297
- const slicedBuffer = fileBuffer.buffer.slice(fileBuffer.byteOffset, fileBuffer.byteOffset + fileBuffer.byteLength);
298
- // Ensure we have an ArrayBuffer (not SharedArrayBuffer)
299
- // In practice, Node.js Buffer.buffer returns an ArrayBuffer, but TypeScript
300
- // can't guarantee this, so we handle both cases
301
- if (slicedBuffer instanceof ArrayBuffer) {
302
- arrayBuffer = slicedBuffer;
303
- }
304
- else {
305
- // Convert SharedArrayBuffer to ArrayBuffer by copying the data
306
- const uint8Array = new Uint8Array(slicedBuffer);
307
- const newArrayBuffer = new ArrayBuffer(uint8Array.byteLength);
308
- new Uint8Array(newArrayBuffer).set(uint8Array);
309
- arrayBuffer = newArrayBuffer;
310
- }
321
+ const fileBuffer = yield fs.readFile(safePath);
322
+ arrayBuffer = toArrayBuffer(fileBuffer.buffer.slice(fileBuffer.byteOffset, fileBuffer.byteOffset + fileBuffer.byteLength));
311
323
  }
312
324
  else {
313
325
  arrayBuffer = input;
@@ -391,128 +403,270 @@ export function generateWarnings(properties) {
391
403
  }
392
404
  return warnings;
393
405
  }
406
+ // Ensure we have an ArrayBuffer (not a SharedArrayBuffer) by copying if needed
407
+ function toArrayBuffer(buffer) {
408
+ if (buffer instanceof ArrayBuffer) {
409
+ return buffer;
410
+ }
411
+ const uint8Array = new Uint8Array(buffer);
412
+ const newArrayBuffer = new ArrayBuffer(uint8Array.byteLength);
413
+ new Uint8Array(newArrayBuffer).set(uint8Array);
414
+ return newArrayBuffer;
415
+ }
416
+ // Append the underline style-mapping to any caller-supplied Mammoth options.
417
+ // Mammoth ignores underlines unless the style map maps them; `u => u` emits a
418
+ // `<u>` element. The entry is appended (not replaced) so Mammoth's default
419
+ // mappings — including superscript/subscript — are preserved.
420
+ function withUnderlineStyleMap(mammothOptions) {
421
+ var _a;
422
+ const existing = (_a = mammothOptions === null || mammothOptions === void 0 ? void 0 : mammothOptions.styleMap) !== null && _a !== void 0 ? _a : [];
423
+ return Object.assign(Object.assign({}, mammothOptions), { styleMap: [...existing, 'u => u'] });
424
+ }
425
+ // Common image content types → file extension. Word most often embeds PNG and
426
+ // JPEG; the rest cover formats Mammoth may surface. EMF/WMF are extracted as
427
+ // bytes for completeness but browsers can't render them (Mammoth won't transcode).
428
+ const CONTENT_TYPE_EXTENSIONS = {
429
+ 'image/png': 'png',
430
+ 'image/jpeg': 'jpg',
431
+ 'image/jpg': 'jpg',
432
+ 'image/gif': 'gif',
433
+ 'image/tiff': 'tiff',
434
+ 'image/bmp': 'bmp',
435
+ 'image/webp': 'webp',
436
+ 'image/svg+xml': 'svg',
437
+ 'image/x-emf': 'emf',
438
+ 'image/x-wmf': 'wmf',
439
+ };
440
+ // Pick a file extension for an extracted image. Falls back to the content
441
+ // type's subtype when it's a clean alphanumeric token, else `bin`. Exported for
442
+ // unit testing since only a PNG fixture exists.
443
+ export function extensionForContentType(contentType) {
444
+ var _a;
445
+ const normalized = contentType.toLowerCase();
446
+ const known = CONTENT_TYPE_EXTENSIONS[normalized];
447
+ if (known)
448
+ return known;
449
+ const subtype = (_a = normalized.split('/')[1]) !== null && _a !== void 0 ? _a : '';
450
+ return /^[a-z0-9]+$/.test(subtype) ? subtype : 'bin';
451
+ }
452
+ // Decode a base64 string to bytes in both Node (Buffer) and the browser (atob).
453
+ // Mammoth's `image.read('base64')` is the one encoding available in every build.
454
+ function base64ToBytes(b64) {
455
+ if (typeof Buffer !== 'undefined') {
456
+ return new Uint8Array(Buffer.from(b64, 'base64'));
457
+ }
458
+ const binary = atob(b64);
459
+ const bytes = new Uint8Array(binary.length);
460
+ for (let i = 0; i < binary.length; i++)
461
+ bytes[i] = binary.charCodeAt(i);
462
+ return bytes;
463
+ }
464
+ // Build a Mammoth `convertImage` handler that pulls each image out into a byte
465
+ // array with a deterministic relative path (`imageDir/imageN.ext`) instead of
466
+ // inlining it as a base64 data URI. The collected images are exposed on the
467
+ // returned `images` array once conversion finishes.
468
+ function createImageExtractor(imageDir) {
469
+ const images = [];
470
+ const convertImage = mammoth.images.imgElement((image) => __awaiter(this, void 0, void 0, function* () {
471
+ const bytes = base64ToBytes(yield image.read('base64'));
472
+ const ext = extensionForContentType(image.contentType);
473
+ const path = `${imageDir}/image${images.length + 1}.${ext}`;
474
+ images.push({ path, contentType: image.contentType, bytes });
475
+ return { src: path };
476
+ }));
477
+ return { images, convertImage };
478
+ }
479
+ // The shared conversion pipeline: mammoth HTML -> cleaned, formatted Markdown.
480
+ // Returns mammoth's messages so callers can surface content-loss warnings, and
481
+ // (in extract mode) the extracted image assets.
482
+ function runConversionPipeline(mammothInput, options) {
483
+ return __awaiter(this, void 0, void 0, function* () {
484
+ var _a;
485
+ // Preserving underline requires cooperation at both ends of the pipeline:
486
+ // Mammoth must be told to emit `<u>` (it drops underlines by default), and
487
+ // Turndown must be told to keep that tag rather than flatten it to text.
488
+ const preserveUnderline = options.underline === 'preserve';
489
+ let mammothOptions = preserveUnderline
490
+ ? withUnderlineStyleMap(options.mammoth)
491
+ : options.mammoth;
492
+ // Extract mode swaps Mammoth's default base64 inliner for a collector that
493
+ // returns each image's bytes and rewrites the src to a relative path.
494
+ let extractor;
495
+ if (options.images === 'extract') {
496
+ extractor = createImageExtractor((_a = options.imageDir) !== null && _a !== void 0 ? _a : 'images');
497
+ mammothOptions = Object.assign(Object.assign({}, mammothOptions), { convertImage: extractor.convertImage });
498
+ }
499
+ const mammothResult = yield mammoth.convertToHtml(mammothInput, mammothOptions);
500
+ const processedHtml = processHtml(mammothResult.value, {
501
+ stripImages: options.images === 'strip',
502
+ });
503
+ const md = htmlToMd(processedHtml, options.turndown, preserveUnderline ? ['u'] : []);
504
+ // Numbered lists stay numbered by default; flatten to bullets on request.
505
+ const listMd = options.numberedLists === 'bullets'
506
+ ? convertNumberedListsToBullets(md)
507
+ : md;
508
+ const normalizedMd = normalizeText(listMd);
509
+ const cleanedMd = lint(normalizedMd);
510
+ const formattedMd = yield prettify(cleanedMd);
511
+ return {
512
+ markdown: formattedMd,
513
+ messages: mammothResult.messages,
514
+ images: extractor === null || extractor === void 0 ? void 0 : extractor.images,
515
+ };
516
+ });
517
+ }
518
+ // Substrings (lower-cased) that, in a thrown error's message, indicate the
519
+ // input isn't a readable .docx (invalid/corrupt/truncated ZIP, or a missing
520
+ // required part). Sourced from JSZip and mammoth, which throw untyped Errors.
521
+ const INVALID_DOCX_ERROR_PATTERNS = [
522
+ 'end of central directory', // JSZip: invalid ZIP structure
523
+ 'zip file', // JSZip: not a valid ZIP
524
+ 'corrupted zip', // JSZip: corrupted ZIP file
525
+ 'end of data reached', // JSZip: truncated file
526
+ 'could not find file', // mammoth: missing required file in .docx
527
+ ];
528
+ function isInvalidDocxError(message) {
529
+ const lower = message.toLowerCase();
530
+ return INVALID_DOCX_ERROR_PATTERNS.some((pattern) => lower.includes(pattern));
531
+ }
532
+ // Translate the errors thrown by the pipeline into our typed, user-facing
533
+ // error classes. Always throws (never returns normally).
534
+ function classifyConversionError(error, filePath) {
535
+ // Re-throw our custom errors as-is
536
+ if (error instanceof UnsupportedFileError ||
537
+ error instanceof FileNotFoundError ||
538
+ error instanceof InvalidFileError ||
539
+ error instanceof FilePermissionError ||
540
+ error instanceof ConversionError) {
541
+ throw error;
542
+ }
543
+ // Handle specific error types from underlying libraries
544
+ const errorMessage = error instanceof Error ? error.message : String(error);
545
+ const errorCode = error && typeof error === 'object' && 'code' in error
546
+ ? error.code
547
+ : undefined;
548
+ // File not found errors (only occur with file path inputs)
549
+ if (errorCode === 'ENOENT') {
550
+ throw new FileNotFoundError(filePath);
551
+ }
552
+ // Permission errors (only occur with file path inputs)
553
+ if (errorCode === 'EACCES' || errorCode === 'EPERM') {
554
+ throw new FilePermissionError(filePath);
555
+ }
556
+ // Invalid .docx file errors (from JSZip or mammoth during file parsing).
557
+ // JSZip/mammoth throw plain, untyped Errors with no error code, so message
558
+ // matching is the only signal available. Matching is case-insensitive so a
559
+ // minor wording/capitalization change upstream is less likely to slip through
560
+ // (see INVALID_DOCX_ERROR_PATTERNS). There is a small theoretical risk of
561
+ // matching document content, but these technical phrases are highly unlikely
562
+ // to appear in normal content.
563
+ if (isInvalidDocxError(errorMessage)) {
564
+ // Note: For ArrayBuffer inputs (e.g., web uploads), filePath will be
565
+ // undefined, so the message won't include the original filename.
566
+ throw new InvalidFileError(filePath);
567
+ }
568
+ // Wrap other errors with a general conversion error
569
+ throw new ConversionError('An error occurred while converting the document. Please ensure the file is a valid .docx file and try again.', error instanceof Error ? error : undefined);
570
+ }
571
+ // Turn mammoth's conversion messages into user-facing warnings. Mammoth is
572
+ // chatty and emits many cosmetic "unrecognised style" notices on ordinary
573
+ // documents; we surface only messages that indicate actual content loss
574
+ // (dropped/ignored elements or unconvertible images), de-duplicated.
575
+ export function extractMammothWarnings(messages) {
576
+ const seen = new Set();
577
+ const warnings = [];
578
+ for (const message of messages) {
579
+ if (message.type !== 'warning' && message.type !== 'error') {
580
+ continue;
581
+ }
582
+ const text = message.message.toLowerCase();
583
+ // Skip cosmetic style-mapping notices — they don't drop content
584
+ if (text.includes('style')) {
585
+ continue;
586
+ }
587
+ // Surface only messages that signal dropped or unconvertible content
588
+ const indicatesContentLoss = text.includes('ignored') ||
589
+ text.includes('unsupported') ||
590
+ text.includes('could not') ||
591
+ text.includes('image');
592
+ if (!indicatesContentLoss) {
593
+ continue;
594
+ }
595
+ const warning = `Warning: Some document content may not have converted cleanly (${message.message}).`;
596
+ if (!seen.has(warning)) {
597
+ seen.add(warning);
598
+ warnings.push(warning);
599
+ }
600
+ }
601
+ return warnings;
602
+ }
394
603
  // Converts a Word document to crisp, clean Markdown with warnings
395
604
  export function convertWithWarnings(input_1) {
396
605
  return __awaiter(this, arguments, void 0, function* (input, options = {}) {
397
- // Normalize input so that the underlying .docx content is read at most once
398
- let mammothInput;
399
- let propertiesInput = input;
400
- if (typeof input === 'string') {
401
- // Validate file extension for file path inputs
402
- validateFileExtension(input);
403
- // Validate the file path to prevent path traversal attacks
404
- validateFilePath(input);
405
- // Read the file once and share the buffer between
406
- // property extraction and Mammoth conversion to avoid
407
- // redundant disk reads for large documents
408
- const fileBuffer = yield fs.readFile(input);
409
- const slicedBuffer = fileBuffer.buffer.slice(fileBuffer.byteOffset, fileBuffer.byteOffset + fileBuffer.byteLength);
410
- // Ensure we have an ArrayBuffer (not SharedArrayBuffer) for property extraction
411
- let arrayBuffer;
412
- if (slicedBuffer instanceof ArrayBuffer) {
413
- arrayBuffer = slicedBuffer;
606
+ let filePath;
607
+ try {
608
+ // Normalize input so that the underlying .docx content is read at most once
609
+ let mammothInput;
610
+ let propertiesInput;
611
+ if (typeof input === 'string') {
612
+ filePath = input;
613
+ // Validate file extension for file path inputs
614
+ validateFileExtension(input);
615
+ // Validate the file path to prevent path traversal attacks
616
+ const safePath = validateFilePath(input);
617
+ // Read the file once and share the buffer between property extraction
618
+ // and Mammoth conversion to avoid redundant disk reads for large documents
619
+ const fileBuffer = yield fs.readFile(safePath);
620
+ propertiesInput = toArrayBuffer(fileBuffer.buffer.slice(fileBuffer.byteOffset, fileBuffer.byteOffset + fileBuffer.byteLength));
621
+ mammothInput = { buffer: fileBuffer };
414
622
  }
415
623
  else {
416
- // Convert SharedArrayBuffer to ArrayBuffer by copying the data
417
- const uint8Array = new Uint8Array(slicedBuffer);
418
- const newArrayBuffer = new ArrayBuffer(uint8Array.byteLength);
419
- new Uint8Array(newArrayBuffer).set(uint8Array);
420
- arrayBuffer = newArrayBuffer;
624
+ propertiesInput = input;
625
+ // In Node.js, mammoth expects { buffer }, in browser it expects { arrayBuffer }
626
+ // Check for Buffer availability to determine the environment
627
+ if (typeof Buffer !== 'undefined') {
628
+ mammothInput = { buffer: Buffer.from(input) };
629
+ }
630
+ else {
631
+ mammothInput = { arrayBuffer: input };
632
+ }
421
633
  }
422
- propertiesInput = arrayBuffer;
423
- mammothInput = { buffer: fileBuffer };
634
+ // Extract document properties to check for confidentiality flags
635
+ const properties = yield extractDocumentProperties(propertiesInput);
636
+ const warnings = generateWarnings(properties);
637
+ const { markdown, messages, images } = yield runConversionPipeline(mammothInput, options);
638
+ warnings.push(...extractMammothWarnings(messages));
639
+ return images ? { markdown, warnings, images } : { markdown, warnings };
424
640
  }
425
- else {
426
- propertiesInput = input;
427
- // In Node.js, mammoth expects { buffer }, in browser it expects { arrayBuffer }
428
- // Check for Buffer availability to determine the environment
429
- if (typeof Buffer !== 'undefined') {
430
- mammothInput = { buffer: Buffer.from(input) };
431
- }
432
- else {
433
- mammothInput = { arrayBuffer: input };
434
- }
641
+ catch (error) {
642
+ classifyConversionError(error, filePath);
435
643
  }
436
- // Extract document properties to check for confidentiality flags
437
- const properties = yield extractDocumentProperties(propertiesInput);
438
- const warnings = generateWarnings(properties);
439
- const mammothResult = yield mammoth.convertToHtml(mammothInput, options.mammoth);
440
- const processedHtml = processHtml(mammothResult.value);
441
- const md = htmlToMd(processedHtml, options.turndown);
442
- const mdWithBullets = convertNumberedListsToBullets(md);
443
- const normalizedMd = normalizeText(mdWithBullets);
444
- const cleanedMd = lint(normalizedMd);
445
- const formattedMd = yield prettify(cleanedMd);
446
- return {
447
- markdown: formattedMd,
448
- warnings,
449
- };
450
644
  });
451
645
  }
452
- // Converts a Word document to crisp, clean Markdown
646
+ // Converts a Word document to crisp, clean Markdown.
647
+ // Unlike convertWithWarnings, this skips document-property extraction (and its
648
+ // extra ZIP parse) so callers that only need the Markdown pay no overhead.
453
649
  export default function convert(input_1) {
454
650
  return __awaiter(this, arguments, void 0, function* (input, options = {}) {
455
- let inputObj;
456
651
  let filePath;
457
652
  try {
653
+ let mammothInput;
458
654
  if (typeof input === 'string') {
459
655
  filePath = input;
460
656
  // Validate file extension for file path inputs
461
657
  validateFileExtension(input);
462
- inputObj = { path: input };
658
+ // Validate the file path to prevent path traversal attacks
659
+ const safePath = validateFilePath(input);
660
+ mammothInput = { path: safePath };
463
661
  }
464
662
  else {
465
- inputObj = { arrayBuffer: input };
663
+ mammothInput = { arrayBuffer: input };
466
664
  }
467
- const mammothResult = yield mammoth.convertToHtml(inputObj, options.mammoth);
468
- const processedHtml = processHtml(mammothResult.value);
469
- const md = htmlToMd(processedHtml, options.turndown);
470
- const mdWithBullets = convertNumberedListsToBullets(md);
471
- const normalizedMd = normalizeText(mdWithBullets);
472
- const cleanedMd = lint(normalizedMd);
473
- const formattedMd = yield prettify(cleanedMd);
474
- return formattedMd;
665
+ const { markdown } = yield runConversionPipeline(mammothInput, options);
666
+ return markdown;
475
667
  }
476
668
  catch (error) {
477
- // Re-throw our custom errors as-is
478
- if (error instanceof UnsupportedFileError ||
479
- error instanceof FileNotFoundError ||
480
- error instanceof InvalidFileError ||
481
- error instanceof FilePermissionError ||
482
- error instanceof ConversionError) {
483
- throw error;
484
- }
485
- // Handle specific error types from underlying libraries
486
- const errorMessage = error instanceof Error ? error.message : String(error);
487
- const errorCode = error && typeof error === 'object' && 'code' in error
488
- ? error.code
489
- : undefined;
490
- // File not found errors (only occur with file path inputs)
491
- if (errorCode === 'ENOENT') {
492
- throw new FileNotFoundError(filePath);
493
- }
494
- // Permission errors (only occur with file path inputs)
495
- if (errorCode === 'EACCES' || errorCode === 'EPERM') {
496
- throw new FilePermissionError(filePath);
497
- }
498
- // Invalid .docx file errors (from JSZip or mammoth during file parsing)
499
- // These patterns typically come from JSZip/mammoth when parsing the file structure.
500
- // While there's a small theoretical risk of matching document content in unusual
501
- // scenarios (e.g., embedded error messages), these specific technical phrases are
502
- // highly unlikely to appear in normal document content.
503
- if (errorMessage.includes('end of central directory') || // JSZip: invalid ZIP structure
504
- errorMessage.includes('zip file') || // JSZip: not a valid ZIP
505
- errorMessage.includes('Corrupted zip') || // JSZip: corrupted ZIP file
506
- errorMessage.includes('End of data reached') || // JSZip: truncated file
507
- errorMessage.includes('Could not find file') // mammoth: missing required file in .docx
508
- ) {
509
- // Note: For ArrayBuffer inputs (e.g., web uploads), filePath will be undefined,
510
- // so the error message won't include the original filename. The web interface
511
- // could be enhanced to pass the filename separately if needed.
512
- throw new InvalidFileError(filePath);
513
- }
514
- // Wrap other errors with a general conversion error
515
- throw new ConversionError('An error occurred while converting the document. Please ensure the file is a valid .docx file and try again.', error instanceof Error ? error : undefined);
669
+ classifyConversionError(error, filePath);
516
670
  }
517
671
  });
518
672
  }
package/build/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,iBAAiB,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,gBAAgB,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAmBxB,kDAAkD;AAClD,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAED,wCAAwC;AACxC,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,QAAiB;QAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,KAAK,CACH,iBAAiB,QAAQ,8DAA8D,CACxF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED,iDAAiD;AACjD,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,QAAiB;QAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,KAAK,CACH,eAAe,QAAQ,iIAAiI,CACzJ,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,2CAA2C;AAC3C,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,QAAiB;QAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,KAAK,CACH,oBAAoB,QAAQ,wDAAwD,CACrF,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,mDAAmD;AACnD,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGxC,YAAY,OAAe,EAAE,aAAqB;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,yDAAyD;QACzD,8DAA8D;QAC9D,MAAM,gBAAgB,GAAG,KAAY,CAAC;QACtC,IAAI,OAAO,gBAAgB,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;YAC7D,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,gEAAgE;YAChE,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;QAC7B,CAAC;IACH,CAAC;CACF;AAQD,MAAM,sBAAsB,GAAoB;IAC9C,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,QAAQ;IACxB,gBAAgB,EAAE,GAAG;CACtB,CAAC;AAEF,iEAAiE;AACjE,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,mEAAmE;IACnE,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExE,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,oBAAoB,CAC5B,+GAA+G,CAChH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,8EAA8E;AAC9E,SAAS,gBAAgB,CAAC,QAAgB;IACxC,oCAAoC;IACpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,kDAAkD;IAClD,2EAA2E;IAC3E,mFAAmF;IACnF,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE5C,+EAA+E;IAC/E,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxE,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,MAAM,qBAAqB,GAAG,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IACvE,KAAK,MAAM,aAAa,IAAI,qBAAqB,EAAE,CAAC;QAClD,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,wCAAwC;AACxC,MAAM,SAAS,GAA8B;IAC3C,OAAO,EAAE,GAAG;IACZ,mDAAmD;IACnD,0DAA0D;IAC1D,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,SAAS,EAAE,GAAG;IACd,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;CACpB,CAAC;AAEF,iFAAiF;AACjF,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,uCAAuC;AACvC,SAAS,kBAAkB,CAAC,IAAY;IACtC,SAAS,UAAU,CAAC,IAAY;QAC9B,uEAAuE;QACvE,+BAA+B;QAC/B,mEAAmE;QACnE,8DAA8D;QAC9D,4EAA4E;QAC5E,kCAAkC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,yCAAyC,EAAE,CAAC,MAAM,EAAE,EAAE;YACxE,wBAAwB;YACxB,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC;YAED,iCAAiC;YACjC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAChD,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;YAED,6BAA6B;YAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;YAED,oCAAoC;YACpC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kFAAkF;IAClF,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,IAAI,WAAW,CAAC;IAChB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC;QACF,WAAW,GAAG,OAAO,CAAC;QACtB,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAC9B,UAAU,EAAE,CAAC;IACf,CAAC,QACC,OAAO,KAAK,WAAW;QACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QACrB,UAAU,GAAG,qBAAqB,EAClC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,qDAAqD;AACrD,oDAAoD;AACpD,uDAAuD;AACvD,4CAA4C;AAC5C,6EAA6E;AAC7E,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAChE,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,SAAS,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAC7F,CAAC;AAEF,kFAAkF;AAClF,qDAAqD;AACrD,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAEzB,sDAAsD;IACtD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,uDAAuD;QACvD,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,OAAO;QAEzC,sDAAsD;QACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GACX,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,CAAC,CAAA,MAAA,IAAI,CAAC,WAAW,0CAAE,IAAI,EAAE,CAAA,CAAA,EAAA,CAAC,CAAC;QAEzE,IAAI,OAAO,EAAE,CAAC;YACZ,qEAAqE;YACrE,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACrB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAClD,qEAAqE;QACrE,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC;QACvC,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;YACnC,QAAQ,CAAC,SAAS,GAAG,cAAc,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,+EAA+E;AAC/E,IAAI,uBAAuB,GAA2B,IAAI,CAAC;AAE3D,SAAS,kBAAkB,CAAC,UAAkB,EAAE;IAC9C,+EAA+E;IAC/E,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,eAAe,iCAC9B,OAAO,GACP,sBAAsB,EACzB,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7B,uBAAuB,GAAG,IAAI,eAAe,CAAC,sBAAsB,CAAC,CAAC;QACtE,uBAAuB,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,UAAkB,EAAE;IACzD,yCAAyC;IACzC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE7C,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpD,OAAO,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;AACtD,CAAC;AAED,qDAAqD;AACrD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC;AAC9C,MAAM,sBAAsB,GAAG,mCAAmC,CAAC;AACnE,MAAM,gBAAgB,GAAG,yCAAyC,CAAC;AAEnE,0CAA0C;AAC1C,MAAM,mBAAmB,GAA8B;IACrD,QAAQ,EAAE,GAAG,EAAE,qBAAqB;IACpC,QAAQ,EAAE,GAAG,EAAE,eAAe;IAC9B,QAAQ,EAAE,GAAG,EAAE,wBAAwB;IACvC,QAAQ,EAAE,EAAE,EAAE,8CAA8C;IAC5D,QAAQ,EAAE,EAAE,EAAE,kCAAkC;CACjD,CAAC;AAEF,mCAAmC;AACnC,MAAM,aAAa,GAA8B;IAC/C,QAAQ,EAAE,GAAG,EAAE,6BAA6B;IAC5C,QAAQ,EAAE,GAAG,EAAE,8BAA8B;IAC7C,QAAQ,EAAE,GAAG,EAAE,6BAA6B;IAC5C,QAAQ,EAAE,GAAG,EAAE,8BAA8B;IAC7C,QAAQ,EAAE,GAAG,EAAE,UAAU;IACzB,QAAQ,EAAE,GAAG,EAAE,UAAU;CAC1B,CAAC;AAEF,yCAAyC;AACzC,SAAS,6BAA6B,CAAC,EAAU;IAC/C,qDAAqD;IACrD,6FAA6F;IAC7F,OAAO,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED,wFAAwF;AACxF,SAAS,aAAa,CAAC,EAAU;IAC/B,OAAO,EAAE;SACN,OAAO,CAAC,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;SACpE,OAAO,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,2CAA2C;AAC3C,SAAS,IAAI,CAAC,EAAU;IACtB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC;AAED,oCAAoC;AACpC,SAAe,QAAQ,CAAC,EAAU;;QAChC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE;YAC1C,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,CAAC,gBAAgB,CAAC;SAC5B,CAAC,CAAC;QACH,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CAAA;AAED,gDAAgD;AAChD,MAAM,UAAgB,yBAAyB,CAC7C,KAA2B;;QAE3B,MAAM,UAAU,GAAuB,EAAE,CAAC;QAE1C,IAAI,CAAC;YACH,IAAI,WAAwB,CAAC;YAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,2DAA2D;gBAC3D,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAExB,iDAAiD;gBACjD,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAC1C,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAC9C,CAAC;gBACF,wDAAwD;gBACxD,4EAA4E;gBAC5E,gDAAgD;gBAChD,IAAI,YAAY,YAAY,WAAW,EAAE,CAAC;oBACxC,WAAW,GAAG,YAAY,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,+DAA+D;oBAC/D,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;oBAChD,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAC9D,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC/C,WAAW,GAAG,cAAc,CAAC;gBAC/B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,KAAK,CAAC;YACtB,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAE/C,kFAAkF;YAClF,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAClD,IAAI,cAAc,EAAE,CAAC;gBACnB,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;YAC/B,CAAC;YAED,8BAA8B;YAC9B,MAAM,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACpD,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACpD,oEAAoE;gBACpE,IACE,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAC9C,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC3C,CAAC;oBACD,UAAU,CAAC,eAAe,GAAG,6BAA6B,CAAC;gBAC7D,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,MAAM,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACxD,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACxD,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;gBAE/C,sEAAsE;gBACtE,2EAA2E;gBAC3E,wFAAwF;gBAExF,qEAAqE;gBACrE,6CAA6C;gBAC7C,6DAA6D;gBAC7D,gEAAgE;gBAChE,yFAAyF;gBACzF,sEAAsE;gBACtE,MAAM,kBAAkB,GACtB,sGAAsG,CAAC;gBAEzG,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAClE,MAAM,mBAAmB,GAAG,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBACpE,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAE3D,IAAI,sBAAsB,IAAI,YAAY,EAAE,CAAC;oBAC3C,UAAU,CAAC,WAAW,GAAG,+BAA+B,CAAC;gBAC3D,CAAC;gBAED,IAAI,mBAAmB,EAAE,CAAC;oBACxB,UAAU,CAAC,eAAe,GAAG,+BAA+B,CAAC;gBAC/D,CAAC;YACH,CAAC;YAED,gCAAgC;YAChC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACnD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACvD,IACE,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC;oBAC7C,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAC1C,CAAC;oBACD,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,6DAA6D;YAC7D,2EAA2E;YAC3E,qEAAqE;YACrE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CAAA;AAED,iDAAiD;AACjD,MAAM,UAAU,gBAAgB,CAAC,UAA8B;IAC7D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CACX,8GAA8G,CAC/G,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CACX,kDAAkD,UAAU,CAAC,WAAW,yEAAyE,CAClJ,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CACX,4DAA4D,UAAU,CAAC,eAAe,iDAAiD,CACxI,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CACX,iGAAiG,CAClG,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAgB,mBAAmB;yDACvC,KAA2B,EAC3B,UAA0B,EAAE;QAE5B,4EAA4E;QAC5E,IAAI,YAG4B,CAAC;QACjC,IAAI,eAAe,GAAyB,KAAK,CAAC;QAElD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,+CAA+C;YAC/C,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAE7B,2DAA2D;YAC3D,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAExB,kDAAkD;YAClD,sDAAsD;YACtD,2CAA2C;YAC3C,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAC1C,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAC9C,CAAC;YAEF,gFAAgF;YAChF,IAAI,WAAwB,CAAC;YAC7B,IAAI,YAAY,YAAY,WAAW,EAAE,CAAC;gBACxC,WAAW,GAAG,YAAY,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,+DAA+D;gBAC/D,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;gBAChD,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC9D,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC/C,WAAW,GAAG,cAAc,CAAC;YAC/B,CAAC;YAED,eAAe,GAAG,WAAW,CAAC;YAC9B,YAAY,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,eAAe,GAAG,KAAK,CAAC;YACxB,gFAAgF;YAChF,6DAA6D;YAC7D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,YAAY,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YACxC,CAAC;QACH,CAAC;QAED,iEAAiE;QACjE,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,eAAe,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAE9C,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,aAAa,CAC/C,YAAY,EACZ,OAAO,CAAC,OAAO,CAChB,CAAC;QACF,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,6BAA6B,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE9C,OAAO;YACL,QAAQ,EAAE,WAAW;YACrB,QAAQ;SACT,CAAC;IACJ,CAAC;CAAA;AAED,oDAAoD;AACpD,MAAM,CAAC,OAAO,UAAgB,OAAO;yDACnC,KAA2B,EAC3B,UAA0B,EAAE;QAE5B,IAAI,QAAyD,CAAC;QAC9D,IAAI,QAA4B,CAAC;QAEjC,IAAI,CAAC;YACH,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,QAAQ,GAAG,KAAK,CAAC;gBACjB,+CAA+C;gBAC/C,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,QAAQ,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YACpC,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,aAAa,CAC/C,QAAQ,EACR,OAAO,CAAC,OAAO,CAChB,CAAC;YACF,MAAM,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,6BAA6B,CAAC,EAAE,CAAC,CAAC;YACxD,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;YACrC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9C,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,mCAAmC;YACnC,IACE,KAAK,YAAY,oBAAoB;gBACrC,KAAK,YAAY,iBAAiB;gBAClC,KAAK,YAAY,gBAAgB;gBACjC,KAAK,YAAY,mBAAmB;gBACpC,KAAK,YAAY,eAAe,EAChC,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,wDAAwD;YACxD,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5E,MAAM,SAAS,GACb,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK;gBACnD,CAAC,CAAE,KAA0B,CAAC,IAAI;gBAClC,CAAC,CAAC,SAAS,CAAC;YAEhB,2DAA2D;YAC3D,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC3B,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC;YAED,uDAAuD;YACvD,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gBACpD,MAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,wEAAwE;YACxE,oFAAoF;YACpF,iFAAiF;YACjF,kFAAkF;YAClF,wDAAwD;YACxD,IACE,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,+BAA+B;gBACpF,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,yBAAyB;gBAC9D,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,4BAA4B;gBACtE,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,wBAAwB;gBACxE,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,0CAA0C;cACvF,CAAC;gBACD,gFAAgF;gBAChF,8EAA8E;gBAC9E,+DAA+D;gBAC/D,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;YAED,oDAAoD;YACpD,MAAM,IAAI,eAAe,CACvB,8GAA8G,EAC9G,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAC;QACJ,CAAC;IACH,CAAC;CAAA"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "word-to-markdown",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Convert Word documents to beautiful Markdown.",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -27,27 +27,33 @@
27
27
  "devDependencies": {
28
28
  "@astrojs/check": "^0.9.9",
29
29
  "@astrojs/sitemap": "^3.7.3",
30
- "@eslint/js": "^9.39.4",
31
- "@nuasite/checks": "^0.46.1",
32
- "@playwright/test": "^1.61.0",
30
+ "@eslint/js": "^10.0.1",
31
+ "@nuasite/checks": "^0.47.4",
32
+ "@playwright/test": "^1.61.1",
33
33
  "@tailwindcss/typography": "^0.5.20",
34
- "@tailwindcss/vite": "^4.3.1",
34
+ "@tailwindcss/vite": "^4.3.3",
35
35
  "@types/jest": "~30.0",
36
36
  "@types/node": "~26",
37
- "@types/turndown": "^5.0.6",
38
- "astro": "^7.0.0",
39
- "eslint": "^9.39.4",
37
+ "astro": "^7.1.3",
38
+ "clipboard": "^2.0.11",
39
+ "eslint": "^10.7.0",
40
40
  "eslint-config-prettier": "~10.1",
41
41
  "eslint-plugin-jest": "~29.15",
42
42
  "globals": "^17.7.0",
43
43
  "jest": "~30.4",
44
44
  "jest-util": "~30.4",
45
- "playwright": "^1.61.0",
46
- "tailwindcss": "^4.3.1",
45
+ "playwright": "^1.61.1",
46
+ "rehype-sanitize": "^6.0.0",
47
+ "rehype-stringify": "^10.0.1",
48
+ "remark-gfm": "^4.0.1",
49
+ "remark-parse": "^11.0.0",
50
+ "remark-rehype": "^11.1.2",
51
+ "tailwindcss": "^4.3.3",
47
52
  "ts-api-utils": "~2.5",
48
53
  "ts-jest": "~29.4",
49
54
  "typescript": "^6.0.3",
50
- "typescript-eslint": "^8.62.0"
55
+ "typescript-eslint": "^8.65.0",
56
+ "unified": "^11.0.5"
51
57
  },
52
58
  "scripts": {
53
59
  "fix": "eslint --fix . && prettier --write .",
@@ -70,21 +76,13 @@
70
76
  "dependencies": {
71
77
  "@joplin/turndown": "^4.0.85",
72
78
  "@joplin/turndown-plugin-gfm": "^1.0.67",
73
- "clipboard": "^2.0.11",
74
79
  "commander": "^15.0.0",
75
80
  "jszip": "^3.10.1",
76
81
  "mammoth": "^1.12.0",
77
- "markdownlint": "^0.41.0",
78
- "node-html-parser": "^7.0.1",
79
- "prettier": "~3.8",
80
- "rehype-sanitize": "^6.0.0",
81
- "rehype-stringify": "^10.0.1",
82
- "remark-gfm": "^4.0.1",
83
- "remark-parse": "^11.0.0",
84
- "remark-rehype": "^11.1.2",
85
- "tslib": "~2.8",
86
- "unified": "^11.0.5",
87
- "url": "^0.11.4"
82
+ "markdownlint": "^0.41.1",
83
+ "node-html-parser": "^9.0.0",
84
+ "prettier": "~3.9",
85
+ "tslib": "~2.8"
88
86
  },
89
87
  "volta": {
90
88
  "node": "22.13.0"