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 +107 -18
- package/build/cli.js +26 -2
- package/build/cli.js.map +1 -1
- package/build/main.js +291 -137
- package/build/main.js.map +1 -1
- package/package.json +21 -23
package/README.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# Word to Markdown
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/word-to-markdown)
|
|
4
|
+
[](https://www.npmjs.com/package/word-to-markdown)
|
|
5
|
+
[](https://github.com/benbalter/word-to-markdown-js/actions/workflows/ci.yml)
|
|
6
|
+
[](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
|
-
##
|
|
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
|
-
-
|
|
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
|
-
-
|
|
25
|
-
-
|
|
26
|
-
|
|
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
|
-
|
|
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 `` 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 → [{ 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
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
.
|
|
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
|
-
|
|
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;
|
|
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
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
//
|
|
84
|
-
// Note:
|
|
85
|
-
//
|
|
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 {
|
|
150
|
+
// Handle numeric entities { (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
|
|
154
|
+
return codePointToString(parseInt(numericMatch[1], 10), entity);
|
|
143
155
|
}
|
|
144
156
|
// Handle hex entities 
|
|
145
157
|
const hexMatch = entity.match(/^&#x([0-9a-fA-F]+);$/i);
|
|
146
158
|
if (hexMatch) {
|
|
147
|
-
return
|
|
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:
|
|
174
|
-
// This is more efficient than parsing the
|
|
175
|
-
|
|
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
|
|
220
|
-
|
|
221
|
-
|
|
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
|
-
|
|
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(
|
|
297
|
-
|
|
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
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
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
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
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
|
-
|
|
423
|
-
|
|
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
|
-
|
|
426
|
-
|
|
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
|
-
|
|
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
|
-
|
|
663
|
+
mammothInput = { arrayBuffer: input };
|
|
466
664
|
}
|
|
467
|
-
const
|
|
468
|
-
|
|
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
|
-
|
|
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":"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"}
|
|
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.
|
|
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": "^
|
|
31
|
-
"@nuasite/checks": "^0.
|
|
32
|
-
"@playwright/test": "^1.61.
|
|
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.
|
|
34
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
35
35
|
"@types/jest": "~30.0",
|
|
36
36
|
"@types/node": "~26",
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"eslint": "^
|
|
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.
|
|
46
|
-
"
|
|
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.
|
|
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.
|
|
78
|
-
"node-html-parser": "^
|
|
79
|
-
"prettier": "~3.
|
|
80
|
-
"
|
|
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"
|