@zaowu-labs/doc 1.0.6 → 1.1.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
@@ -19,7 +19,7 @@ canvas warning during the dynamic import. This is a contained, documented
19
19
  workaround.
20
20
 
21
21
  Long-term we would prefer a pure-JS text-only PDF extractor that does not
22
- require these shims. See the source comments in `src/index.ts` (functions
22
+ require these shims. See the source comments in `src/pdf.ts` (functions
23
23
  `ensurePdfTextRuntime` and `importPdfParse`) for the full explanation and
24
24
  the class names used for the shims.
25
25
 
@@ -28,3 +28,30 @@ Safety:
28
28
  - Document conversion previews by default when an output path is supplied.
29
29
  - Confirmed writes refuse unsafe overwrites.
30
30
  - Format support should stay explicit in command help and docs.
31
+
32
+ ## Extraction contract and limits
33
+
34
+ DOCX uses the existing focused JSZip and xmldom libraries directly, removing
35
+ Mammoth and its unused CLI dependency chain. It preserves main-body paragraphs,
36
+ heading styles (including inherited/strict namespaces), list structure, tables,
37
+ and HTTP(S)/mailto hyperlinks. It never follows external relationships, extracts
38
+ archives to disk, or runs macros. Literal Word text is escaped for Markdown.
39
+ Footnotes, images/OCR, complex layout, embedded objects, and tracked deletions
40
+ are outside this text extraction contract. Re-export complex documents as text
41
+ when exact visual fidelity matters.
42
+
43
+ Input files are limited to 20 MiB; requested DOCX XML parts to 8 MiB each and
44
+ 2,000 archive entries; extracted text to two million characters. DTD/entity
45
+ XML and excessive nesting are rejected. XML budgets apply to actual inflated
46
+ bytes. PDF extraction with no text layer explains how to use OCR rather than
47
+ returning a misleading successful empty summary. Concurrent PDF extraction
48
+ serializes temporary runtime shims and restores the original globals.
49
+
50
+ `summary` explicitly reports `method: "extractive"`: it takes the first three
51
+ prose lines, without calling a model. Frontmatter, fenced code, and headings do
52
+ not become summary prose; fenced examples do not create false outline headings.
53
+ See [the report-to-model recipe](../../docs/WORKFLOWS.md).
54
+
55
+ Confirmation execution also checks the freshly prepared content against the
56
+ already verified plan immediately before the write/request. Changes between
57
+ reads fail with `OPERATION_PLAN_MISMATCH` and produce no write or network call.
package/dist/docx.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const extractDocx: (buffer: Buffer, format: "markdown" | "text") => Promise<string>;
2
+ //# sourceMappingURL=docx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx.d.ts","sourceRoot":"","sources":["../src/docx.ts"],"names":[],"mappings":"AA+FA,eAAO,MAAM,WAAW,GAAU,QAAQ,MAAM,EAAE,QAAQ,UAAU,GAAG,MAAM,KAAG,OAAO,CAAC,MAAM,CAmI7F,CAAC"}
package/dist/docx.js ADDED
@@ -0,0 +1,226 @@
1
+ import JSZip from 'jszip';
2
+ import { DOMParser } from '@xmldom/xmldom';
3
+ import { ZaoWuError } from '@zaowu-labs/core';
4
+ const WORD_NAMESPACES = new Set([
5
+ 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
6
+ 'http://purl.oclc.org/ooxml/wordprocessingml/main',
7
+ ]);
8
+ const MAX_XML_BYTES = 8 * 1024 * 1024;
9
+ const MAX_DEPTH = 100;
10
+ const invalidDocx = () => new Error('Invalid or unsupported DOCX XML.');
11
+ const tooLarge = () => new ZaoWuError({
12
+ code: 'DOCUMENT_INPUT_TOO_LARGE',
13
+ message: 'Document is too large to extract safely.',
14
+ why: 'A DOCX XML part exceeds 8 MiB, the archive exceeds 2,000 entries, or XML nesting exceeds 100 levels.',
15
+ fix: 'Split the document or export a smaller text-only copy.',
16
+ });
17
+ const children = (element) => {
18
+ const result = [];
19
+ for (let node = element.firstChild; node; node = node.nextSibling) {
20
+ if (node.nodeType === 1)
21
+ result.push(node);
22
+ }
23
+ return result;
24
+ };
25
+ const word = (node, name) => WORD_NAMESPACES.has(node.namespaceURI ?? '') && node.localName === name;
26
+ const child = (node, name) => node && children(node).find((item) => word(item, name));
27
+ const attr = (node, name) => {
28
+ if (!node)
29
+ return '';
30
+ for (const ns of WORD_NAMESPACES) {
31
+ if (node.hasAttributeNS(ns, name))
32
+ return node.getAttributeNS(ns, name) ?? '';
33
+ }
34
+ return '';
35
+ };
36
+ /** Pause the decompressor on actual inflated bytes, not ZIP size claims. */
37
+ const readXml = async (zip, name, required = false) => {
38
+ const entry = zip.file(name);
39
+ if (!entry) {
40
+ if (required)
41
+ throw invalidDocx();
42
+ return undefined;
43
+ }
44
+ const xml = await new Promise((resolve, reject) => {
45
+ let size = 0;
46
+ const chunks = [];
47
+ const stream = entry.nodeStream('nodebuffer');
48
+ stream.on('data', (chunk) => {
49
+ size += chunk.length;
50
+ if (size > MAX_XML_BYTES) {
51
+ stream.pause();
52
+ reject(tooLarge());
53
+ return;
54
+ }
55
+ chunks.push(chunk);
56
+ });
57
+ stream.on('error', reject);
58
+ stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
59
+ stream.resume();
60
+ });
61
+ if (/<!\s*(?:DOCTYPE|ENTITY)\b/i.test(xml))
62
+ throw invalidDocx();
63
+ let malformed = false;
64
+ const document = new DOMParser({
65
+ errorHandler: () => {
66
+ malformed = true;
67
+ },
68
+ }).parseFromString(xml, 'application/xml');
69
+ if (malformed || !document.documentElement)
70
+ throw invalidDocx();
71
+ const stack = [[document.documentElement, 1]];
72
+ while (stack.length) {
73
+ const [element, depth] = stack.pop();
74
+ if (depth > MAX_DEPTH)
75
+ throw tooLarge();
76
+ for (const elementChild of children(element))
77
+ stack.push([elementChild, depth + 1]);
78
+ }
79
+ return document;
80
+ };
81
+ const safeLink = (target) => {
82
+ try {
83
+ const url = new URL(target);
84
+ if (!['https:', 'http:', 'mailto:'].includes(url.protocol))
85
+ return undefined;
86
+ if (url.username || url.password)
87
+ return undefined;
88
+ return url.toString().replaceAll('(', '%28').replaceAll(')', '%29');
89
+ }
90
+ catch {
91
+ return undefined;
92
+ }
93
+ };
94
+ export const extractDocx = async (buffer, format) => {
95
+ const zip = await JSZip.loadAsync(buffer);
96
+ if (Object.keys(zip.files).length > 2_000)
97
+ throw tooLarge();
98
+ // Read only known parts. Never follow internal paths or external relationships.
99
+ const document = await readXml(zip, 'word/document.xml', true);
100
+ const styles = await readXml(zip, 'word/styles.xml');
101
+ const numbering = await readXml(zip, 'word/numbering.xml');
102
+ const relationships = await readXml(zip, 'word/_rels/document.xml.rels');
103
+ const root = document.documentElement;
104
+ if (!word(root, 'document'))
105
+ throw invalidDocx();
106
+ const body = child(root, 'body');
107
+ if (!body)
108
+ throw invalidDocx();
109
+ const links = new Map();
110
+ if (relationships) {
111
+ for (const rel of children(relationships.documentElement)) {
112
+ if (rel.localName !== 'Relationship' || rel.getAttribute('TargetMode') !== 'External')
113
+ continue;
114
+ if (!(rel.getAttribute('Type') ?? '').endsWith('/hyperlink'))
115
+ continue;
116
+ const target = safeLink(rel.getAttribute('Target') ?? '');
117
+ if (target)
118
+ links.set(rel.getAttribute('Id') ?? '', target);
119
+ }
120
+ }
121
+ const styleMap = new Map();
122
+ if (styles) {
123
+ for (const style of children(styles.documentElement)) {
124
+ if (!word(style, 'style'))
125
+ continue;
126
+ const id = attr(style, 'styleId');
127
+ const outline = attr(child(child(style, 'pPr'), 'outlineLvl'), 'val');
128
+ const name = attr(child(style, 'name'), 'val');
129
+ const match = /^(?:heading|标题)\s*([1-6])$/i.exec(name || id);
130
+ const level = outline && /^[0-5]$/.test(outline)
131
+ ? Number(outline) + 1
132
+ : match
133
+ ? Number(match[1])
134
+ : undefined;
135
+ styleMap.set(id, { level, basedOn: attr(child(style, 'basedOn'), 'val') });
136
+ }
137
+ }
138
+ const styleLevel = (id, seen = new Set()) => {
139
+ if (seen.has(id) || seen.size >= MAX_DEPTH)
140
+ return undefined;
141
+ seen.add(id);
142
+ const style = styleMap.get(id);
143
+ return (style?.level ??
144
+ (style?.basedOn ? styleLevel(style.basedOn, seen) : undefined) ??
145
+ (/^Heading([1-6])$/i.test(id) ? Number(id.slice(-1)) : undefined));
146
+ };
147
+ const numIds = new Map();
148
+ const numFormats = new Map();
149
+ if (numbering) {
150
+ for (const item of children(numbering.documentElement)) {
151
+ if (word(item, 'num'))
152
+ numIds.set(attr(item, 'numId'), attr(child(item, 'abstractNumId'), 'val'));
153
+ if (word(item, 'abstractNum')) {
154
+ for (const level of children(item).filter((node) => word(node, 'lvl'))) {
155
+ numFormats.set(`${attr(item, 'abstractNumId')}:${attr(level, 'ilvl')}`, attr(child(level, 'numFmt'), 'val'));
156
+ }
157
+ }
158
+ }
159
+ }
160
+ const inline = (element) => {
161
+ if (word(element, 'del') || word(element, 'instrText') || word(element, 'pPr'))
162
+ return '';
163
+ if (word(element, 't')) {
164
+ const text = element.textContent ?? '';
165
+ return format === 'markdown' ? text.replace(/[\\`*_[\]<>#]/g, '\\$&') : text;
166
+ }
167
+ if (word(element, 'tab'))
168
+ return '\t';
169
+ if (word(element, 'br') || word(element, 'cr'))
170
+ return '\n';
171
+ let text = children(element).map(inline).join('');
172
+ if (format === 'markdown' && word(element, 'hyperlink')) {
173
+ const id = element.getAttribute('r:id') ||
174
+ element.getAttributeNS('http://schemas.openxmlformats.org/officeDocument/2006/relationships', 'id');
175
+ const target = links.get(id ?? '');
176
+ if (target && text)
177
+ text = `[${text}](${target})`;
178
+ }
179
+ return text;
180
+ };
181
+ const paragraph = (element) => {
182
+ const text = inline(element).trim();
183
+ if (!text || format === 'text')
184
+ return text;
185
+ const properties = child(element, 'pPr');
186
+ const outline = attr(child(properties, 'outlineLvl'), 'val');
187
+ const level = /^[0-5]$/.test(outline)
188
+ ? Number(outline) + 1
189
+ : styleLevel(attr(child(properties, 'pStyle'), 'val'));
190
+ if (level)
191
+ return `${'#'.repeat(level)} ${text}`;
192
+ const numPr = child(properties, 'numPr');
193
+ const numId = attr(child(numPr, 'numId'), 'val');
194
+ if (numId && numId !== '0') {
195
+ const ilvl = attr(child(numPr, 'ilvl'), 'val') || '0';
196
+ const indent = ' '.repeat(Math.min(8, Number(ilvl) || 0));
197
+ const marker = numFormats.get(`${numIds.get(numId)}:${ilvl}`) === 'bullet' ? '-' : '1.';
198
+ return `${indent}${marker} ${text}`;
199
+ }
200
+ return text;
201
+ };
202
+ const blocks = (element) => children(element).flatMap((item) => {
203
+ if (word(item, 'p'))
204
+ return [paragraph(item)];
205
+ if (word(item, 'del'))
206
+ return [];
207
+ if (word(item, 'tbl')) {
208
+ const rows = children(item)
209
+ .filter((node) => word(node, 'tr'))
210
+ .map((row) => children(row)
211
+ .filter((node) => word(node, 'tc'))
212
+ .map((cell) => blocks(cell).filter(Boolean).join(' ')));
213
+ if (format === 'text')
214
+ return rows.map((row) => row.join('\t'));
215
+ const width = rows.reduce((max, row) => Math.max(max, row.length), 0);
216
+ const lines = rows.map((row) => `| ${Array.from({ length: width }, (_, i) => (row[i] ?? '').replaceAll('|', '\\|').replaceAll('\n', ' ')).join(' | ')} |`);
217
+ if (lines.length)
218
+ lines.splice(1, 0, `| ${Array(width).fill('---').join(' | ')} |`);
219
+ return lines;
220
+ }
221
+ // Structured document tags and inserted content may wrap normal blocks.
222
+ return blocks(item);
223
+ });
224
+ return blocks(body).join('\n').trim();
225
+ };
226
+ //# sourceMappingURL=docx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx.js","sourceRoot":"","sources":["../src/docx.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { type DomainDefinition } from '@zaowu-labs/core';
2
2
  export interface DocumentSummary {
3
+ method: 'extractive';
3
4
  schemaVersion: 1;
4
5
  status: 'ok';
5
6
  filePath: string;
@@ -57,5 +58,6 @@ export declare const convertDocument: (inputPath: string, options?: {
57
58
  outputPath?: string;
58
59
  format?: "markdown" | "text";
59
60
  yes?: boolean;
61
+ expectedContent?: string;
60
62
  }) => Promise<DocumentConversion>;
61
63
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,eAAO,MAAM,UAAU,EAAE,gBAmCxB,CAAC;AA4XF,eAAO,MAAM,iBAAiB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,eAAe,CAejF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,eAAe,CAe/E,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,eAAe,CAS/E,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,SAAS,MAAM,KACd,OAAO,CAAC,oBAAoB,CA6B9B,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,UAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,KACjF,OAAO,CAAC,kBAAkB,CAqC5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAOL,KAAK,gBAAgB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,IAAI,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,eAAO,MAAM,UAAU,EAAE,gBAmCxB,CAAC;AA6NF,eAAO,MAAM,iBAAiB,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,eAAe,CAgBjF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,eAAe,CAkB/E,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,eAAe,CAS/E,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,SAAS,MAAM,KACd,OAAO,CAAC,oBAAoB,CA6B9B,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,UAAS;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CACrB,KACL,OAAO,CAAC,kBAAkB,CA+C5B,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
- import { readFile } from 'node:fs/promises';
2
1
  import path from 'node:path';
3
- import { assertSafeOutputPath, createCapabilityLedger, stripUtf8Bom, writeTextFileExclusive, ZaoWuError, } from '@zaowu-labs/core';
2
+ import { extractDocx } from './docx.js';
3
+ import { extractPdf } from './pdf.js';
4
+ import { scanMarkdown } from './markdown.js';
5
+ import { assertSafeOutputPath, createCapabilityLedger, stripUtf8Bom, readBoundedFile, writeTextFileExclusive, ZaoWuError, } from '@zaowu-labs/core';
4
6
  export const DOC_DOMAIN = {
5
7
  name: 'doc',
6
8
  summary: 'Document workflows for summary, extraction, and conversion',
@@ -50,93 +52,6 @@ const SUPPORTED_TEXT_EXTENSIONS = new Set([
50
52
  '.html',
51
53
  '.htm',
52
54
  ]);
53
- const PDF_SHIM_KEYS = ['DOMMatrix', 'ImageData', 'Path2D'];
54
- let pdfParseModulePromise;
55
- const ensurePdfTextRuntime = () => {
56
- const runtime = globalThis;
57
- // Minimal DOMMatrix shim sufficient for pdf-parse text extraction.
58
- runtime.DOMMatrix ??= class ZaoWuPdfDomMatrix {
59
- a = 1;
60
- b = 0;
61
- c = 0;
62
- d = 1;
63
- e = 0;
64
- f = 0;
65
- constructor(init) {
66
- if (Array.isArray(init) && init.length >= 6) {
67
- [this.a, this.b, this.c, this.d, this.e, this.f] = init.map(Number).slice(0, 6);
68
- }
69
- }
70
- multiplySelf() {
71
- return this;
72
- }
73
- preMultiplySelf() {
74
- return this;
75
- }
76
- translateSelf() {
77
- return this;
78
- }
79
- scaleSelf() {
80
- return this;
81
- }
82
- rotateSelf() {
83
- return this;
84
- }
85
- invertSelf() {
86
- return this;
87
- }
88
- transformPoint(point = {}) {
89
- return {
90
- x: point.x ?? 0,
91
- y: point.y ?? 0,
92
- z: point.z ?? 0,
93
- w: point.w ?? 1,
94
- };
95
- }
96
- };
97
- // Minimal ImageData shim.
98
- runtime.ImageData ??= class ZaoWuPdfImageData {
99
- data;
100
- width;
101
- height;
102
- constructor(dataOrWidth, width = 0, height = 0) {
103
- this.width = typeof dataOrWidth === 'number' ? dataOrWidth : width;
104
- this.height = height;
105
- this.data =
106
- dataOrWidth instanceof Uint8ClampedArray
107
- ? dataOrWidth
108
- : new Uint8ClampedArray(dataOrWidth * width * 4);
109
- }
110
- };
111
- // Path2D is referenced but never actually used in our text-only path.
112
- runtime.Path2D ??= class ZaoWuPdfPath2D {
113
- };
114
- };
115
- const importPdfParse = async () => {
116
- ensurePdfTextRuntime();
117
- if (!pdfParseModulePromise) {
118
- const originalWarn = console.warn;
119
- // Only suppress the specific canvas-missing warning that pdf-parse emits
120
- // when it can't find its optional native module. Everything else is passed
121
- // through so we don't accidentally hide real problems.
122
- console.warn = (...values) => {
123
- const message = values.map(String).join(' ');
124
- if (message.includes('Cannot load "@napi-rs/canvas" package')) {
125
- return;
126
- }
127
- originalWarn(...values);
128
- };
129
- pdfParseModulePromise = import('pdf-parse')
130
- .catch((error) => {
131
- pdfParseModulePromise = undefined;
132
- throw error;
133
- })
134
- .finally(() => {
135
- console.warn = originalWarn;
136
- });
137
- }
138
- return pdfParseModulePromise;
139
- };
140
55
  const assertSupportedDocument = (filePath) => {
141
56
  const extension = path.extname(filePath).toLowerCase();
142
57
  if (!SUPPORTED_TEXT_EXTENSIONS.has(extension)) {
@@ -148,16 +63,48 @@ const assertSupportedDocument = (filePath) => {
148
63
  });
149
64
  }
150
65
  };
66
+ const stripHtmlBlocks = (html) => {
67
+ const uncommented = [];
68
+ let cursor = 0;
69
+ while (true) {
70
+ const start = html.indexOf('<!--', cursor);
71
+ if (start < 0) {
72
+ uncommented.push(html.slice(cursor));
73
+ break;
74
+ }
75
+ uncommented.push(html.slice(cursor, start));
76
+ const end = html.indexOf('-->', start + 4);
77
+ if (end < 0)
78
+ break;
79
+ cursor = end + 3;
80
+ }
81
+ const content = uncommented.join('');
82
+ const chunks = [];
83
+ const open = /<(head|script|style)\b[^<>]*>/gi;
84
+ cursor = 0;
85
+ let match;
86
+ while ((match = open.exec(content))) {
87
+ chunks.push(content.slice(cursor, match.index));
88
+ const close = new RegExp(`</${match[1]}\\s*>`, 'gi');
89
+ close.lastIndex = open.lastIndex;
90
+ const end = close.exec(content);
91
+ cursor = end ? close.lastIndex : content.length;
92
+ open.lastIndex = cursor;
93
+ if (!end)
94
+ break;
95
+ }
96
+ chunks.push(content.slice(cursor));
97
+ return chunks.join('');
98
+ };
151
99
  const stripHtmlTags = (html) => {
152
- let clean = html.replace(/<!--[\s\S]*?-->/g, '');
153
- clean = clean.replace(/<(head|script|style)\b[^>]*>([\s\S]*?)<\/\1>/gi, '');
154
- clean = clean.replace(/<h([1-6])\b[^>]*>/gi, (_match, level) => `${'#'.repeat(Number(level))} `);
100
+ let clean = stripHtmlBlocks(html);
101
+ clean = clean.replace(/<h([1-6])\b[^<>]*>/gi, (_match, level) => `${'#'.repeat(Number(level))} `);
155
102
  clean = clean.replace(/<\/h[1-6]>\s*/gi, '\n');
156
103
  clean = clean.replace(/<\/t[dh]>\s*/gi, ' | ');
157
104
  clean = clean.replace(/<\/tr>\s*/gi, '\n');
158
105
  clean = clean.replace(/<\/(p|div|li)>\s*/gi, '\n');
159
106
  clean = clean.replace(/<br\s*\/?>\s*/gi, '\n');
160
- clean = clean.replace(/<[^>]+>/g, ' ');
107
+ clean = clean.replace(/<[^<>]*>/g, ' ');
161
108
  const decodeCodePoint = (match, codePoint) => {
162
109
  if (!Number.isInteger(codePoint) || codePoint <= 0 || codePoint > 0x10ffff) {
163
110
  return match;
@@ -193,75 +140,56 @@ const stripHtmlTags = (html) => {
193
140
  const readTextDocument = async (filePath, format) => {
194
141
  assertSupportedDocument(filePath);
195
142
  const extension = path.extname(filePath).toLowerCase();
143
+ const buffer = await readBoundedFile(filePath, 20 * 1024 * 1024, {
144
+ failed: {
145
+ code: 'DOCUMENT_READ_FAILED',
146
+ message: 'Could not read document.',
147
+ why: `ZaoWu could not read \`${filePath}\` as a regular file.`,
148
+ fix: 'Check the path and file permissions, then run the command again.',
149
+ },
150
+ tooLarge: {
151
+ code: 'DOCUMENT_INPUT_TOO_LARGE',
152
+ message: 'Document is too large to extract safely.',
153
+ why: 'Document inputs are limited to 20 MiB.',
154
+ fix: 'Split the document or export a smaller text-only copy.',
155
+ },
156
+ });
196
157
  try {
197
- if (extension === '.pdf') {
198
- const runtime = globalThis;
199
- // Snapshot each shim slot before parsing: restore the previous value if
200
- // one existed, and delete the key entirely if it was absent — a shim key
201
- // left behind as `undefined` would still shadow `'key' in runtime`.
202
- const saved = PDF_SHIM_KEYS.map((key) => ({
203
- key,
204
- had: key in runtime,
205
- old: runtime[key],
206
- }));
207
- try {
208
- const { PDFParse } = await importPdfParse();
209
- const parser = new PDFParse({
210
- data: new Uint8Array(await readFile(filePath)),
211
- });
212
- try {
213
- const parsed = await parser.getText();
214
- return stripUtf8Bom(parsed.text ?? '');
215
- }
216
- finally {
217
- await parser.destroy();
218
- }
219
- }
220
- finally {
221
- for (const { key, had, old } of saved) {
222
- if (!had) {
223
- delete runtime[key];
224
- }
225
- else {
226
- runtime[key] = old;
227
- }
228
- }
229
- }
230
- }
231
- if (extension === '.docx') {
232
- const mammoth = await import('mammoth');
233
- const mammothModule = mammoth;
234
- // convertToMarkdown is a version-dependent mammoth export. Distinguish a
235
- // missing capability from an unreadable file so the error is actionable.
236
- if (format !== 'text' && typeof mammothModule.convertToMarkdown !== 'function') {
237
- throw new ZaoWuError({
238
- code: 'DOCUMENT_FORMAT_UNSUPPORTED',
239
- message: 'DOCX markdown conversion is not available.',
240
- why: 'The installed mammoth build does not provide `convertToMarkdown`, so ZaoWu cannot produce Markdown from this DOCX.',
241
- fix: 'Use `--format text` for raw text extraction, or update the `mammoth` dependency to a build with markdown support.',
242
- });
243
- }
244
- const parsed = format === 'text'
245
- ? await mammothModule.extractRawText({
246
- buffer: await readFile(filePath),
247
- })
248
- : await mammothModule.convertToMarkdown({
249
- buffer: await readFile(filePath),
250
- });
251
- return stripUtf8Bom(parsed.value);
158
+ let content;
159
+ if (extension === '.pdf')
160
+ content = await extractPdf(buffer);
161
+ else if (extension === '.docx')
162
+ content = await extractDocx(buffer, format ?? 'markdown');
163
+ else if (extension === '.html' || extension === '.htm')
164
+ content = stripHtmlTags(buffer.toString('utf8'));
165
+ else
166
+ content = buffer.toString('utf8');
167
+ if (content.length > 2_000_000) {
168
+ throw new ZaoWuError({
169
+ code: 'DOCUMENT_INPUT_TOO_LARGE',
170
+ message: 'Extracted document text is too large.',
171
+ why: 'Extracted text exceeds two million characters.',
172
+ fix: 'Split the document into smaller parts.',
173
+ });
252
174
  }
253
- if (extension === '.html' || extension === '.htm') {
254
- const rawHtml = await readFile(filePath, 'utf8');
255
- return stripUtf8Bom(stripHtmlTags(rawHtml));
175
+ if (extension === '.pdf' && !content.replace(/-- \d+ of \d+ --/g, '').trim()) {
176
+ throw new ZaoWuError({
177
+ code: 'DOCUMENT_TEXT_UNAVAILABLE',
178
+ message: 'PDF has no extractable text.',
179
+ why: 'The PDF may contain scanned images rather than a text layer. ZaoWu does not perform OCR.',
180
+ fix: 'Run OCR in your PDF editor and export a searchable PDF or text file, then try again.',
181
+ });
256
182
  }
257
- return stripUtf8Bom(await readFile(filePath, 'utf8'));
183
+ return stripUtf8Bom(content);
258
184
  }
259
- catch {
185
+ catch (error) {
186
+ if (error instanceof ZaoWuError)
187
+ throw error;
260
188
  throw new ZaoWuError({
261
189
  code: 'DOCUMENT_READ_FAILED',
262
190
  message: 'Could not read document.',
263
- why: `ZaoWu tried to read \`${filePath}\`, but the file was not readable.`,
264
- fix: 'Check the path and file permissions, then run the command again.',
191
+ why: `ZaoWu could not extract text from \`${filePath}\`. The file may be corrupt, encrypted, or contain unsupported document structures.`,
192
+ fix: 'Open the file in its original editor, remove password protection if appropriate, and re-export it as PDF, DOCX, or plain text.',
265
193
  });
266
194
  }
267
195
  };
@@ -281,11 +209,7 @@ const assertSafeDocumentOutputPath = (inputPath, outputPath) => assertSafeOutput
281
209
  });
282
210
  const getTitle = (content, filePath) => parseHeadings(content).find((heading) => heading.level === 1)?.title ?? path.basename(filePath);
283
211
  const getWords = (content) => content.match(/[\p{L}\p{N}_-]+/gu) ?? [];
284
- const getFirstMeaningfulLines = (content, count) => content
285
- .split(/\r?\n/)
286
- .map((line) => line.trim())
287
- .filter((line) => line && !line.startsWith('#'))
288
- .slice(0, count);
212
+ const getFirstMeaningfulLines = (content, count) => scanMarkdown(content).prose.slice(0, count);
289
213
  const getFrontmatter = (content) => {
290
214
  const lines = content.split(/\r?\n/);
291
215
  if (lines[0] !== '---') {
@@ -304,19 +228,7 @@ const getFrontmatter = (content) => {
304
228
  }
305
229
  return frontmatter;
306
230
  };
307
- const parseHeadings = (content) => content
308
- .split(/\r?\n/)
309
- .map((line, index) => {
310
- const match = /^(#{1,6})\s+(.+)$/.exec(line.trim());
311
- return match
312
- ? {
313
- level: match[1].length,
314
- title: match[2].trim(),
315
- line: index + 1,
316
- }
317
- : null;
318
- })
319
- .filter((item) => Boolean(item));
231
+ const parseHeadings = (content) => scanMarkdown(content).headings;
320
232
  export const summarizeDocument = async (filePath) => {
321
233
  const content = await readTextDocument(filePath);
322
234
  const lines = content.split(/\r?\n/);
@@ -326,6 +238,7 @@ export const summarizeDocument = async (filePath) => {
326
238
  schemaVersion: 1,
327
239
  status: 'ok',
328
240
  filePath,
241
+ method: 'extractive',
329
242
  title: getTitle(content, filePath),
330
243
  lineCount: lines.length,
331
244
  wordCount: words.length,
@@ -334,9 +247,10 @@ export const summarizeDocument = async (filePath) => {
334
247
  };
335
248
  export const extractDocument = async (filePath) => {
336
249
  const content = await readTextDocument(filePath);
337
- const headings = [...content.matchAll(/^#{1,6}\s+(.+)$/gmu)].map((match) => match[1].trim());
338
- const links = [...content.matchAll(/\[[^\]]+\]\(([^)]+)\)/gmu)].map((match) => match[1].trim());
339
- const codeBlockCount = [...content.matchAll(/^```/gmu)].length / 2;
250
+ const scan = scanMarkdown(content);
251
+ const headings = scan.headings.map((heading) => heading.title);
252
+ const links = [...content.matchAll(/(?<!\\)\[(?:\\.|[^[\]\\])+\]\(([^)]+)\)/gmu)].map((match) => match[1].trim());
253
+ const codeBlockCount = scan.codeBlockCount;
340
254
  return {
341
255
  schemaVersion: 1,
342
256
  status: 'ok',
@@ -387,10 +301,20 @@ export const convertDocument = async (inputPath, options = {}) => {
387
301
  const format = options.format ??
388
302
  (path.extname(options.outputPath ?? '').toLowerCase() === '.txt' ? 'text' : 'markdown');
389
303
  const content = await readTextDocument(inputPath, format);
390
- const converted = format === 'text'
391
- ? content.replace(/^#{1,6}\s+/gmu, '').replace(/\[([^\]]+)\]\([^)]+\)/gmu, '$1')
304
+ const converted = format === 'text' &&
305
+ ['.md', '.markdown', '.html', '.htm'].includes(path.extname(inputPath).toLowerCase())
306
+ ? content
307
+ .replace(/^#{1,6}\s+/gmu, '')
308
+ .replace(/(?<!\\)\[([^[\]\r\n]+)\]\([^)\r\n]+\)/gmu, '$1')
392
309
  : content;
393
310
  if (options.outputPath && options.yes) {
311
+ if (options.expectedContent !== undefined && converted !== options.expectedContent)
312
+ throw new ZaoWuError({
313
+ code: 'OPERATION_PLAN_MISMATCH',
314
+ message: 'Document content changed after plan verification.',
315
+ why: 'The converted output no longer matches the content authorized by the operation plan. No file was written.',
316
+ fix: 'Run the preview again and confirm its new fingerprint.',
317
+ });
394
318
  await assertSafeDocumentOutputPath(inputPath, options.outputPath);
395
319
  await writeTextFileExclusive(options.outputPath, converted, {
396
320
  exists: {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface MarkdownScan {
2
+ headings: Array<{
3
+ level: number;
4
+ title: string;
5
+ line: number;
6
+ }>;
7
+ prose: string[];
8
+ codeBlockCount: number;
9
+ }
10
+ /** Only real headings/prose participate: YAML metadata and fenced code do not. */
11
+ export declare const scanMarkdown: (content: string) => MarkdownScan;
12
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,kFAAkF;AAClF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,YA+B9C,CAAC"}
@@ -0,0 +1,35 @@
1
+ /** Only real headings/prose participate: YAML metadata and fenced code do not. */
2
+ export const scanMarkdown = (content) => {
3
+ const result = { headings: [], prose: [], codeBlockCount: 0 };
4
+ const lines = content.split(/\r?\n/);
5
+ const frontmatterEnd = lines[0] === '---' ? lines.indexOf('---', 1) : -1;
6
+ let fence;
7
+ for (let index = 0; index < lines.length; index++) {
8
+ if (frontmatterEnd > 0 && index <= frontmatterEnd)
9
+ continue;
10
+ const line = lines[index];
11
+ const marker = /^ {0,3}(`{3,}|~{3,})(.*)$/.exec(line);
12
+ if (fence) {
13
+ if (marker &&
14
+ marker[1][0] === fence.marker &&
15
+ marker[1].length >= fence.length &&
16
+ !marker[2].trim())
17
+ fence = undefined;
18
+ continue;
19
+ }
20
+ if (marker) {
21
+ fence = { marker: marker[1][0], length: marker[1].length };
22
+ result.codeBlockCount++;
23
+ continue;
24
+ }
25
+ if (/^(?: {4}|\t)/.test(line))
26
+ continue;
27
+ const heading = /^ {0,3}(#{1,6})\s+(.+?)(?:\s+#+)?\s*$/.exec(line);
28
+ if (heading)
29
+ result.headings.push({ level: heading[1].length, title: heading[2].trim(), line: index + 1 });
30
+ else if (line.trim())
31
+ result.prose.push(line.trim());
32
+ }
33
+ return result;
34
+ };
35
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAMA,kFAAkF;AAClF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAgB,EAAE;IAC5D,MAAM,MAAM,GAAiB,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;IAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,KAAqD,CAAC;IAC1D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,IAAI,cAAc,GAAG,CAAC,IAAI,KAAK,IAAI,cAAc;YAAE,SAAS;QAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,KAAK,EAAE,CAAC;YACV,IACE,MAAM;gBACN,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM;gBAC7B,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM;gBAChC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAEjB,KAAK,GAAG,SAAS,CAAC;YACpB,SAAS;QACX,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3D,MAAM,CAAC,cAAc,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACxC,MAAM,OAAO,GAAG,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,OAAO;YACT,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;aAC3F,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
package/dist/pdf.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * PDF text extraction runtime shims (foundation-phase workaround).
3
+ *
4
+ * pdf-parse (the library we use for .pdf -> text) has a hard/optional dependency
5
+ * on @napi-rs/canvas for its full rendering pipeline. Even when we only request
6
+ * text extraction, in many Node.js environments the module will:
7
+ * - log a noisy warning about the missing canvas package, and/or
8
+ * - assume certain DOM types (DOMMatrix, ImageData, Path2D) exist on the global.
9
+ *
10
+ * We therefore:
11
+ * 1. Provide minimal, no-op shims for those three types **only if they are
12
+ * not already present** on globalThis. This is the smallest possible
13
+ * intervention that makes pdf-parse's text path work.
14
+ * 2. Temporarily silence the exact canvas warning during the dynamic import.
15
+ *
16
+ * This is deliberately a "clever" but contained hack. It violates the spirit of
17
+ * "readable code over clever code" and "no magic without control". A proper
18
+ * long-term fix would be to replace pdf-parse with a pure-JS text extractor
19
+ * (pdf.js node build, unpdf, or similar) that has no canvas requirement.
20
+ *
21
+ * The shims are intentionally named with a ZaoWu prefix inside the class
22
+ * definitions so that stack traces / debug output make the origin obvious.
23
+ *
24
+ * See also: packages/doc/README.md (workaround documented).
25
+ */
26
+ export declare const extractPdf: (buffer: Buffer) => Promise<string>;
27
+ //# sourceMappingURL=pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../src/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA0IH,eAAO,MAAM,UAAU,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,MAAM,CAY/D,CAAC"}
package/dist/pdf.js ADDED
@@ -0,0 +1,153 @@
1
+ /**
2
+ * PDF text extraction runtime shims (foundation-phase workaround).
3
+ *
4
+ * pdf-parse (the library we use for .pdf -> text) has a hard/optional dependency
5
+ * on @napi-rs/canvas for its full rendering pipeline. Even when we only request
6
+ * text extraction, in many Node.js environments the module will:
7
+ * - log a noisy warning about the missing canvas package, and/or
8
+ * - assume certain DOM types (DOMMatrix, ImageData, Path2D) exist on the global.
9
+ *
10
+ * We therefore:
11
+ * 1. Provide minimal, no-op shims for those three types **only if they are
12
+ * not already present** on globalThis. This is the smallest possible
13
+ * intervention that makes pdf-parse's text path work.
14
+ * 2. Temporarily silence the exact canvas warning during the dynamic import.
15
+ *
16
+ * This is deliberately a "clever" but contained hack. It violates the spirit of
17
+ * "readable code over clever code" and "no magic without control". A proper
18
+ * long-term fix would be to replace pdf-parse with a pure-JS text extractor
19
+ * (pdf.js node build, unpdf, or similar) that has no canvas requirement.
20
+ *
21
+ * The shims are intentionally named with a ZaoWu prefix inside the class
22
+ * definitions so that stack traces / debug output make the origin obvious.
23
+ *
24
+ * See also: packages/doc/README.md (workaround documented).
25
+ */
26
+ const PDF_SHIM_KEYS = ['DOMMatrix', 'ImageData', 'Path2D'];
27
+ let pdfParseModulePromise;
28
+ const ensurePdfTextRuntime = () => {
29
+ const runtime = globalThis;
30
+ // Minimal DOMMatrix shim sufficient for pdf-parse text extraction.
31
+ runtime.DOMMatrix ??= class ZaoWuPdfDomMatrix {
32
+ a = 1;
33
+ b = 0;
34
+ c = 0;
35
+ d = 1;
36
+ e = 0;
37
+ f = 0;
38
+ constructor(init) {
39
+ if (Array.isArray(init) && init.length >= 6) {
40
+ [this.a, this.b, this.c, this.d, this.e, this.f] = init.map(Number).slice(0, 6);
41
+ }
42
+ }
43
+ multiplySelf() {
44
+ return this;
45
+ }
46
+ preMultiplySelf() {
47
+ return this;
48
+ }
49
+ translateSelf() {
50
+ return this;
51
+ }
52
+ scaleSelf() {
53
+ return this;
54
+ }
55
+ rotateSelf() {
56
+ return this;
57
+ }
58
+ invertSelf() {
59
+ return this;
60
+ }
61
+ transformPoint(point = {}) {
62
+ return {
63
+ x: point.x ?? 0,
64
+ y: point.y ?? 0,
65
+ z: point.z ?? 0,
66
+ w: point.w ?? 1,
67
+ };
68
+ }
69
+ };
70
+ // Minimal ImageData shim.
71
+ runtime.ImageData ??= class ZaoWuPdfImageData {
72
+ data;
73
+ width;
74
+ height;
75
+ constructor(dataOrWidth, width = 0, height = 0) {
76
+ this.width = typeof dataOrWidth === 'number' ? dataOrWidth : width;
77
+ this.height = height;
78
+ this.data =
79
+ dataOrWidth instanceof Uint8ClampedArray
80
+ ? dataOrWidth
81
+ : new Uint8ClampedArray(dataOrWidth * width * 4);
82
+ }
83
+ };
84
+ // Path2D is referenced but never actually used in our text-only path.
85
+ runtime.Path2D ??= class ZaoWuPdfPath2D {
86
+ };
87
+ };
88
+ const importPdfParse = async () => {
89
+ ensurePdfTextRuntime();
90
+ if (!pdfParseModulePromise) {
91
+ const originalWarn = console.warn;
92
+ // Only suppress the specific canvas-missing warning that pdf-parse emits
93
+ // when it can't find its optional native module. Everything else is passed
94
+ // through so we don't accidentally hide real problems.
95
+ console.warn = (...values) => {
96
+ const message = values.map(String).join(' ');
97
+ if (message.includes('Cannot load "@napi-rs/canvas" package')) {
98
+ return;
99
+ }
100
+ originalWarn(...values);
101
+ };
102
+ pdfParseModulePromise = import('pdf-parse')
103
+ .catch((error) => {
104
+ pdfParseModulePromise = undefined;
105
+ throw error;
106
+ })
107
+ .finally(() => {
108
+ console.warn = originalWarn;
109
+ });
110
+ }
111
+ return pdfParseModulePromise;
112
+ };
113
+ const extractPdfInternal = async (buffer) => {
114
+ const runtime = globalThis;
115
+ const saved = PDF_SHIM_KEYS.map((key) => ({ key, had: key in runtime, old: runtime[key] }));
116
+ try {
117
+ const { PDFParse } = await importPdfParse();
118
+ const parser = new PDFParse({ data: new Uint8Array(buffer) });
119
+ try {
120
+ const parsed = await parser.getText();
121
+ return parsed.text ?? '';
122
+ }
123
+ finally {
124
+ await parser.destroy();
125
+ }
126
+ }
127
+ finally {
128
+ for (const { key, had, old } of saved) {
129
+ if (!had)
130
+ delete runtime[key];
131
+ else
132
+ runtime[key] = old;
133
+ }
134
+ }
135
+ };
136
+ // Global runtime shims belong to one extraction at a time. Concurrent library
137
+ // callers must not snapshot another extraction's temporary globals as originals.
138
+ let extractionQueue = Promise.resolve();
139
+ export const extractPdf = async (buffer) => {
140
+ const previous = extractionQueue;
141
+ let release;
142
+ extractionQueue = new Promise((resolve) => {
143
+ release = resolve;
144
+ });
145
+ await previous;
146
+ try {
147
+ return await extractPdfInternal(buffer);
148
+ }
149
+ finally {
150
+ release();
151
+ }
152
+ };
153
+ //# sourceMappingURL=pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.js","sourceRoot":"","sources":["../src/pdf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAYH,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AAIpE,IAAI,qBAA0D,CAAC;AAE/D,MAAM,oBAAoB,GAAG,GAAS,EAAE;IACtC,MAAM,OAAO,GAAG,UAAyC,CAAC;IAE1D,mEAAmE;IACnE,OAAO,CAAC,SAAS,KAAK,MAAM,iBAAiB;QAC3C,CAAC,GAAG,CAAC,CAAC;QACN,CAAC,GAAG,CAAC,CAAC;QACN,CAAC,GAAG,CAAC,CAAC;QACN,CAAC,GAAG,CAAC,CAAC;QACN,CAAC,GAAG,CAAC,CAAC;QACN,CAAC,GAAG,CAAC,CAAC;QAEN,YAAY,IAAc;YACxB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC5C,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,YAAY;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QACD,eAAe;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,aAAa;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QACD,SAAS;YACP,OAAO,IAAI,CAAC;QACd,CAAC;QACD,UAAU;YACR,OAAO,IAAI,CAAC;QACd,CAAC;QACD,UAAU;YACR,OAAO,IAAI,CAAC;QACd,CAAC;QAED,cAAc,CAAC,QAA4D,EAAE;YAC3E,OAAO;gBACL,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;gBACf,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;gBACf,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;gBACf,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;aAChB,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,0BAA0B;IAC1B,OAAO,CAAC,SAAS,KAAK,MAAM,iBAAiB;QAC3C,IAAI,CAAoB;QACxB,KAAK,CAAS;QACd,MAAM,CAAS;QAEf,YAAY,WAAuC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC;YACxE,IAAI,CAAC,KAAK,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;YACnE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,IAAI;gBACP,WAAW,YAAY,iBAAiB;oBACtC,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,IAAI,iBAAiB,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC;IAEF,sEAAsE;IACtE,OAAO,CAAC,MAAM,KAAK,MAAM,cAAc;KAAG,CAAC;AAC7C,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,IAA6B,EAAE;IACzD,oBAAoB,EAAE,CAAC;IAEvB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;QAElC,yEAAyE;QACzE,2EAA2E;QAC3E,uDAAuD;QACvD,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,MAAiB,EAAQ,EAAE;YAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,CAAC;gBAC9D,OAAO;YACT,CAAC;YACD,YAAY,CAAC,GAAG,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC;QAEF,qBAAqB,GAAG,MAAM,CAAC,WAAW,CAAC;aACxC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,qBAAqB,GAAG,SAAS,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,qBAAqB,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;IACnE,MAAM,OAAO,GAAG,UAAyC,CAAC;IAC1D,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,cAAc,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,KAAK,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;;gBACxB,OAAO,CAAC,GAAG,CAAa,GAAG,GAAG,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,8EAA8E;AAC9E,iFAAiF;AACjF,IAAI,eAAe,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,MAAc,EAAmB,EAAE;IAClE,MAAM,QAAQ,GAAG,eAAe,CAAC;IACjC,IAAI,OAAoB,CAAC;IACzB,eAAe,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAC9C,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC;IACf,IAAI,CAAC;QACH,OAAO,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zaowu-labs/doc",
3
- "version": "1.0.6",
3
+ "version": "1.1.0",
4
4
  "description": "ZaoWu document workflows",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -20,17 +20,15 @@
20
20
  }
21
21
  },
22
22
  "dependencies": {
23
- "mammoth": "1.12.0",
23
+ "@xmldom/xmldom": "^0.8.15",
24
+ "jszip": "^3.10.1",
24
25
  "pdf-parse": "^2.4.5",
25
- "@zaowu-labs/core": "1.0.6"
26
+ "@zaowu-labs/core": "1.1.0"
26
27
  },
27
28
  "keywords": [
28
29
  "zaowu",
29
30
  "documents"
30
31
  ],
31
- "devDependencies": {
32
- "jszip": "^3.10.1"
33
- },
34
32
  "repository": {
35
33
  "type": "git",
36
34
  "url": "https://github.com/zaowu-labs/zaowu.git",