@intentic/fileq 1.317.0 → 1.318.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.
Files changed (111) hide show
  1. package/NOTICE +208 -0
  2. package/README.md +24 -3
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/app.js +15 -1
  5. package/dist/app.js.map +1 -1
  6. package/dist/commands/check.command.d.ts +3 -0
  7. package/dist/commands/check.command.d.ts.map +1 -0
  8. package/dist/commands/check.command.js +80 -0
  9. package/dist/commands/check.command.js.map +1 -0
  10. package/dist/commands/render.command.d.ts +3 -0
  11. package/dist/commands/render.command.d.ts.map +1 -0
  12. package/dist/commands/render.command.js +67 -0
  13. package/dist/commands/render.command.js.map +1 -0
  14. package/dist/lib/check/check.d.ts +15 -0
  15. package/dist/lib/check/check.d.ts.map +1 -0
  16. package/dist/lib/check/check.js +35 -0
  17. package/dist/lib/check/check.js.map +1 -0
  18. package/dist/lib/check/docx.d.ts +3 -0
  19. package/dist/lib/check/docx.d.ts.map +1 -0
  20. package/dist/lib/check/docx.js +329 -0
  21. package/dist/lib/check/docx.js.map +1 -0
  22. package/dist/lib/check/finding.d.ts +20 -0
  23. package/dist/lib/check/finding.d.ts.map +1 -0
  24. package/dist/lib/check/finding.js +27 -0
  25. package/dist/lib/check/finding.js.map +1 -0
  26. package/dist/lib/check/package.d.ts +25 -0
  27. package/dist/lib/check/package.d.ts.map +1 -0
  28. package/dist/lib/check/package.js +139 -0
  29. package/dist/lib/check/package.js.map +1 -0
  30. package/dist/lib/check/pdf.d.ts +3 -0
  31. package/dist/lib/check/pdf.d.ts.map +1 -0
  32. package/dist/lib/check/pdf.js +160 -0
  33. package/dist/lib/check/pdf.js.map +1 -0
  34. package/dist/lib/check/pptx.d.ts +3 -0
  35. package/dist/lib/check/pptx.d.ts.map +1 -0
  36. package/dist/lib/check/pptx.js +497 -0
  37. package/dist/lib/check/pptx.js.map +1 -0
  38. package/dist/lib/check/text-fit.d.ts +18 -0
  39. package/dist/lib/check/text-fit.d.ts.map +1 -0
  40. package/dist/lib/check/text-fit.js +69 -0
  41. package/dist/lib/check/text-fit.js.map +1 -0
  42. package/dist/lib/check/xlsx.d.ts +3 -0
  43. package/dist/lib/check/xlsx.d.ts.map +1 -0
  44. package/dist/lib/check/xlsx.js +131 -0
  45. package/dist/lib/check/xlsx.js.map +1 -0
  46. package/dist/lib/check/xml-tree.d.ts +15 -0
  47. package/dist/lib/check/xml-tree.d.ts.map +1 -0
  48. package/dist/lib/check/xml-tree.js +131 -0
  49. package/dist/lib/check/xml-tree.js.map +1 -0
  50. package/dist/lib/derivers/image.d.ts.map +1 -1
  51. package/dist/lib/derivers/image.js.map +1 -1
  52. package/dist/lib/formats.d.ts +1 -0
  53. package/dist/lib/formats.d.ts.map +1 -1
  54. package/dist/lib/formats.js +1 -0
  55. package/dist/lib/formats.js.map +1 -1
  56. package/dist/lib/render/convert.d.ts +11 -0
  57. package/dist/lib/render/convert.d.ts.map +1 -0
  58. package/dist/lib/render/convert.js +107 -0
  59. package/dist/lib/render/convert.js.map +1 -0
  60. package/dist/lib/render/pages.d.ts +11 -0
  61. package/dist/lib/render/pages.d.ts.map +1 -0
  62. package/dist/lib/render/pages.js +43 -0
  63. package/dist/lib/render/pages.js.map +1 -0
  64. package/dist/lib/render/render.d.ts +29 -0
  65. package/dist/lib/render/render.d.ts.map +1 -0
  66. package/dist/lib/render/render.js +142 -0
  67. package/dist/lib/render/render.js.map +1 -0
  68. package/dist/skill-authoring.d.ts +2 -0
  69. package/dist/skill-authoring.d.ts.map +1 -0
  70. package/dist/skill-authoring.js +20 -0
  71. package/dist/skill-authoring.js.map +1 -0
  72. package/dist/skill.d.ts.map +1 -1
  73. package/dist/skill.js +24 -1
  74. package/dist/skill.js.map +1 -1
  75. package/dist/testing.d.ts +67 -0
  76. package/dist/testing.d.ts.map +1 -1
  77. package/dist/testing.js +151 -0
  78. package/dist/testing.js.map +1 -1
  79. package/package.json +20 -7
  80. package/src/app.ts +15 -1
  81. package/src/cli.integration.test.ts +63 -1
  82. package/src/commands/check.command.ts +97 -0
  83. package/src/commands/render.command.ts +80 -0
  84. package/src/lib/check/check.test.ts +446 -0
  85. package/src/lib/check/check.ts +49 -0
  86. package/src/lib/check/docx.ts +434 -0
  87. package/src/lib/check/finding.ts +63 -0
  88. package/src/lib/check/package.ts +199 -0
  89. package/src/lib/check/pdf.ts +228 -0
  90. package/src/lib/check/pptx.ts +641 -0
  91. package/src/lib/check/text-fit.ts +105 -0
  92. package/src/lib/check/xlsx.ts +163 -0
  93. package/src/lib/check/xml-tree.ts +186 -0
  94. package/src/lib/derivers/image.ts +2 -1
  95. package/src/lib/formats.ts +6 -0
  96. package/src/lib/render/convert.ts +133 -0
  97. package/src/lib/render/pages.test.ts +38 -0
  98. package/src/lib/render/pages.ts +58 -0
  99. package/src/lib/render/render.ts +198 -0
  100. package/src/render.integration.test.ts +217 -0
  101. package/src/skill-authoring.ts +27 -0
  102. package/src/skill.ts +28 -1
  103. package/src/testing.ts +287 -0
  104. package/dist/lib/flags.d.ts +0 -2
  105. package/dist/lib/flags.d.ts.map +0 -1
  106. package/dist/lib/flags.js +0 -8
  107. package/dist/lib/flags.js.map +0 -1
  108. package/dist/version.d.ts +0 -2
  109. package/dist/version.d.ts.map +0 -1
  110. package/dist/version.js +0 -3
  111. package/dist/version.js.map +0 -1
@@ -0,0 +1,329 @@
1
+ import { error, excerpt, inches, leftoverText, plural, warning } from "./finding.js";
2
+ import { mainPartOf, missingTargetFindings, NotAPackage, openPackage, packageFindings } from "./package.js";
3
+ import { childAt, childNamed, childrenNamed, descendantsNamed, everyElement, intAttr, isElement, textIn } from "./xml-tree.js";
4
+ const DEFAULT_MAIN = "word/document.xml";
5
+ const EMU_PER_TWIP = 635;
6
+ const BUILT_IN_ANCHORS = new Set(["_top"]);
7
+ const COMPUTED_FIELDS = new Set(["PAGE", "NUMPAGES", "SECTIONPAGES", "DATE", "TIME", "PRINTDATE", "SAVEDATE", "CREATEDATE"]);
8
+ const CROSS_REFERENCES = new Set(["REF", "PAGEREF", "NOTEREF"]);
9
+ const TYPED_BULLET = /^\s*[•◦▪‣∙·]\s/;
10
+ const headingLevels = (styles) => {
11
+ const byId = new Map();
12
+ for (const style of styles === undefined ? [] : childrenNamed(styles, "w:style")) {
13
+ const id = style.attrs["w:styleId"];
14
+ if (id !== undefined && style.attrs["w:type"] === "paragraph") {
15
+ byId.set(id, style);
16
+ }
17
+ }
18
+ const levelOf = (id, depth) => {
19
+ const style = byId.get(id);
20
+ if (style === undefined || depth > 8) {
21
+ return undefined;
22
+ }
23
+ const name = (childNamed(style, "w:name")?.attrs["w:val"] ?? "").toLowerCase();
24
+ const numbered = /^heading (\d)$/.exec(name);
25
+ if (numbered !== null) {
26
+ return Number(numbered[1]);
27
+ }
28
+ if (name === "title") {
29
+ return 0;
30
+ }
31
+ const outline = intAttr(childAt(style, "w:pPr", "w:outlineLvl"), "w:val");
32
+ if (outline !== undefined && outline < 9) {
33
+ return outline + 1;
34
+ }
35
+ const basedOn = childNamed(style, "w:basedOn")?.attrs["w:val"];
36
+ return basedOn === undefined ? undefined : levelOf(basedOn, depth + 1);
37
+ };
38
+ return new Map([...byId.keys()].flatMap((id) => {
39
+ const level = levelOf(id, 0);
40
+ return level === undefined ? [] : [[id, level]];
41
+ }));
42
+ };
43
+ const headingOf = (paragraph, levels) => {
44
+ const pPr = childNamed(paragraph, "w:pPr");
45
+ const outline = intAttr(childAt(pPr, "w:outlineLvl"), "w:val");
46
+ if (outline !== undefined && outline < 9) {
47
+ return outline + 1;
48
+ }
49
+ const style = childAt(pPr, "w:pStyle")?.attrs["w:val"];
50
+ return style === undefined ? undefined : levels.get(style);
51
+ };
52
+ const paragraphText = (paragraph) => textIn(paragraph, "w:t");
53
+ const locate = (paragraphs, levels) => {
54
+ const located = [];
55
+ const whereOf = new Map();
56
+ let lastHeading;
57
+ paragraphs.forEach((paragraph, index) => {
58
+ const text = paragraphText(paragraph);
59
+ const heading = headingOf(paragraph, levels);
60
+ const number = index + 1;
61
+ const label = text.trim() !== "" ? `paragraph ${number} · ${excerpt(text, 40)}` : lastHeading === undefined ? `paragraph ${number}` : `paragraph ${number} · under ${lastHeading}`;
62
+ located.push({ paragraph, number, text, heading });
63
+ whereOf.set(paragraph, label);
64
+ if (heading !== undefined && text.trim() !== "") {
65
+ lastHeading = excerpt(text, 40);
66
+ }
67
+ });
68
+ return { located, whereOf };
69
+ };
70
+ const paragraphIndex = (paragraphs) => {
71
+ const owner = new Map();
72
+ for (const paragraph of paragraphs) {
73
+ for (const node of everyElement(paragraph)) {
74
+ owner.set(node, paragraph);
75
+ }
76
+ }
77
+ return owner;
78
+ };
79
+ const stepField = (node, open, fields, where) => {
80
+ const type = node.attrs["w:fldCharType"];
81
+ const current = open.at(-1);
82
+ if (type === "begin") {
83
+ open.push({ instruction: "", result: "", separated: false, where });
84
+ return;
85
+ }
86
+ if (current === undefined) {
87
+ return;
88
+ }
89
+ if (type === "separate") {
90
+ current.separated = true;
91
+ }
92
+ else if (type === "end") {
93
+ open.pop();
94
+ fields.push({ instruction: current.instruction.trim(), result: current.result, hasResult: current.separated && current.result.trim() !== "", where: current.where });
95
+ }
96
+ };
97
+ const fieldsIn = (body, whereOfNode) => {
98
+ const fields = [];
99
+ const open = [];
100
+ for (const node of everyElement(body)) {
101
+ if (node.name === "w:fldSimple") {
102
+ const result = textIn(node, "w:t");
103
+ fields.push({ instruction: (node.attrs["w:instr"] ?? "").trim(), result, hasResult: result.trim() !== "", where: whereOfNode(node) });
104
+ }
105
+ else if (node.name === "w:fldChar") {
106
+ stepField(node, open, fields, whereOfNode(node));
107
+ }
108
+ else {
109
+ const current = open.at(-1);
110
+ const text = node.children.filter((child) => !isElement(child)).join("");
111
+ if (current !== undefined && node.name === "w:instrText" && !current.separated) {
112
+ current.instruction += text;
113
+ }
114
+ else if (current !== undefined && node.name === "w:t" && current.separated) {
115
+ current.result += text;
116
+ }
117
+ }
118
+ }
119
+ return fields;
120
+ };
121
+ const bookmarkArgument = (instruction) => {
122
+ const tokens = [...instruction.matchAll(/"[^"]*"|\S+/g)].map((match) => match[0]);
123
+ const keyword = (tokens[0] ?? "").toUpperCase();
124
+ if (CROSS_REFERENCES.has(keyword)) {
125
+ return tokens[1]?.replaceAll('"', "");
126
+ }
127
+ if (keyword === "HYPERLINK") {
128
+ const at = tokens.indexOf("\\l");
129
+ return at === -1 ? undefined : tokens[at + 1]?.replaceAll('"', "");
130
+ }
131
+ return undefined;
132
+ };
133
+ const fieldFindings = (fields, bookmarks, updatesOnOpen) => fields.flatMap((field) => {
134
+ const keyword = (field.instruction.split(/\s+/)[0] ?? "").toUpperCase();
135
+ if (field.result.trim().startsWith('Error!')) {
136
+ return [error("field-error", field.where, `the ${keyword} field shows ${excerpt(field.result)}: fix what it points at, then update fields`)];
137
+ }
138
+ const bookmark = bookmarkArgument(field.instruction);
139
+ if (bookmark !== undefined && !bookmarks.has(bookmark) && !BUILT_IN_ANCHORS.has(bookmark)) {
140
+ return [error("broken-reference", field.where, `the ${keyword} field points to bookmark "${bookmark}", which is not in the document: Word shows "Error! Reference source not found."`)];
141
+ }
142
+ if (keyword === "MERGEFIELD") {
143
+ return [warning("merge-field", field.where, `a mail-merge field is left in (${field.instruction}): it prints its placeholder, not a value`)];
144
+ }
145
+ if (keyword === "TOC" && !field.hasResult) {
146
+ const when = updatesOnOpen ? "Word offers to update fields when the file opens" : "nothing fills it until someone updates fields (F9 in Word)";
147
+ return [warning("empty-toc", field.where, `the table of contents has no entries saved: ${when}, and previews and LibreOffice show it empty`)];
148
+ }
149
+ if (!field.hasResult && keyword !== "" && !COMPUTED_FIELDS.has(keyword) && keyword !== "TOC") {
150
+ return [warning("empty-field", field.where, `the ${keyword} field has no saved result, so it shows blank until fields are updated`)];
151
+ }
152
+ return [];
153
+ });
154
+ const referenceFindings = (context, part, tree, whereOfNode, referenced) => {
155
+ const rels = context.pkg.rels(part);
156
+ const findings = [];
157
+ for (const node of everyElement(tree)) {
158
+ for (const [attribute, id] of Object.entries(node.attrs)) {
159
+ if (!attribute.startsWith("r:") || id === "") {
160
+ continue;
161
+ }
162
+ referenced.add(id);
163
+ const finding = referenceFinding(context.pkg, node, rels.get(id), id, whereOfNode(node));
164
+ if (finding !== undefined) {
165
+ findings.push(finding);
166
+ }
167
+ }
168
+ }
169
+ return findings;
170
+ };
171
+ const referenceFinding = (pkg, node, relationship, id, where) => {
172
+ const isImage = node.name === "a:blip" || node.name === "v:imagedata";
173
+ if (relationship === undefined) {
174
+ return error(isImage ? "missing-image" : "missing-part", where, `${isImage ? "an image" : node.name} refers to ${id}, which the document does not define: it shows as missing`);
175
+ }
176
+ if (relationship.external) {
177
+ return isImage ? warning("linked-image", where, `an image is linked from outside the file (${relationship.target}), so it will not show on anyone else's machine; embed it`) : undefined;
178
+ }
179
+ if (pkg.has(relationship.target)) {
180
+ return undefined;
181
+ }
182
+ return isImage
183
+ ? error("missing-image", where, `image ${relationship.target} is not in the file, so it shows as a broken picture`)
184
+ : error("missing-part", where, `${relationship.kind} ${relationship.target} is not in the file`);
185
+ };
186
+ const textWidths = (paragraphs, body) => {
187
+ const widthOf = (sectPr) => {
188
+ const page = intAttr(childAt(sectPr, "w:pgSz"), "w:w");
189
+ const margins = childAt(sectPr, "w:pgMar");
190
+ if (page === undefined) {
191
+ return undefined;
192
+ }
193
+ const columns = Math.max(1, intAttr(childAt(sectPr, "w:cols"), "w:num") ?? 1);
194
+ const text = page - (intAttr(margins, "w:left") ?? 0) - (intAttr(margins, "w:right") ?? 0) - (intAttr(margins, "w:gutter") ?? 0);
195
+ return (text / columns) * EMU_PER_TWIP;
196
+ };
197
+ const sections = paragraphs.flatMap((paragraph, index) => {
198
+ const sectPr = childAt(paragraph, "w:pPr", "w:sectPr");
199
+ return sectPr === undefined ? [] : [{ endsAt: index, width: widthOf(sectPr) }];
200
+ });
201
+ sections.push({ endsAt: paragraphs.length, width: widthOf(childNamed(body, "w:sectPr")) });
202
+ return sections;
203
+ };
204
+ const wideImageFindings = (context, body, owner) => {
205
+ const all = context.paragraphs.map((located) => located.paragraph);
206
+ const order = new Map(all.map((paragraph, index) => [paragraph, index]));
207
+ const sections = textWidths(all, body);
208
+ return descendantsNamed(body, "wp:inline").flatMap((inline) => {
209
+ const cx = intAttr(childNamed(inline, "wp:extent"), "cx");
210
+ const paragraph = owner.get(inline);
211
+ const index = paragraph === undefined ? undefined : order.get(paragraph);
212
+ const width = index === undefined ? undefined : sections.find((section) => section.endsAt >= index)?.width;
213
+ if (cx === undefined || width === undefined || width <= 0 || cx <= width * 1.02) {
214
+ return [];
215
+ }
216
+ const where = paragraph === undefined ? "" : (context.whereOf.get(paragraph) ?? "");
217
+ return [warning("wide-image", where, `a picture is ${inches(cx)} wide in a ${inches(width)} text column, so it runs into the margin or is cut off; scale it to fit`)];
218
+ });
219
+ };
220
+ const draftFindings = (context, body) => {
221
+ const findings = [];
222
+ const changes = everyElement(body).filter((node) => ["w:ins", "w:del", "w:moveFrom", "w:moveTo"].includes(node.name) && node.children.some(isElement)).length;
223
+ if (changes > 0) {
224
+ findings.push(warning("tracked-changes", "", `${plural(changes, "tracked change")} still in the document: accept or reject them before it goes out`));
225
+ }
226
+ const commentsPart = [...context.pkg.rels(context.main).values()].find((relationship) => relationship.kind === "comments" && !relationship.external);
227
+ const comments = commentsPart === undefined ? undefined : context.pkg.xml(commentsPart.target);
228
+ const count = comments === undefined ? 0 : childrenNamed(comments, "w:comment").length;
229
+ if (count > 0) {
230
+ findings.push(warning("comments", "", `${plural(count, "comment")} still in the document: resolve or delete them before it goes out`));
231
+ }
232
+ return findings;
233
+ };
234
+ const paragraphFindings = (context) => {
235
+ const findings = [];
236
+ let typedBullets = 0;
237
+ let firstBullet;
238
+ for (const located of context.paragraphs) {
239
+ const where = context.whereOf.get(located.paragraph) ?? `paragraph ${located.number}`;
240
+ findings.push(...leftoverText(located.text, where));
241
+ const hasPicture = descendantsNamed(located.paragraph, "w:drawing").length > 0 || descendantsNamed(located.paragraph, "w:pict").length > 0;
242
+ if (located.heading !== undefined && located.text.trim() === "" && !hasPicture) {
243
+ const level = located.heading === 0 ? "title" : `heading ${located.heading}`;
244
+ findings.push(warning("empty-heading", where, `empty ${level}: a blank line in the text and an empty entry in the navigation pane and any table of contents; delete it`));
245
+ }
246
+ if (TYPED_BULLET.test(located.text) && childAt(located.paragraph, "w:pPr", "w:numPr") === undefined) {
247
+ typedBullets += 1;
248
+ firstBullet ??= where;
249
+ }
250
+ }
251
+ if (firstBullet !== undefined) {
252
+ findings.push(warning("typed-bullets", firstBullet, `${plural(typedBullets, "paragraph")} ${typedBullets === 1 ? "starts" : "start"} with a typed bullet character instead of a list style, so the list will not indent or renumber; use a list style`));
253
+ }
254
+ return findings;
255
+ };
256
+ const controlFindings = (body, whereOfNode) => descendantsNamed(body, "w:sdt")
257
+ .filter((control) => childAt(control, "w:sdtPr", "w:showingPlcHdr") !== undefined)
258
+ .map((control) => {
259
+ const prompt = textIn(childNamed(control, "w:sdtContent") ?? control, "w:t");
260
+ const where = whereOfNode(descendantsNamed(control, "w:p")[0] ?? control);
261
+ return error("placeholder-control", where, `a content control still shows its prompt ${excerpt(prompt)}: enter the value or remove the control`);
262
+ });
263
+ const linkFindings = (body, bookmarks, whereOfNode) => descendantsNamed(body, "w:hyperlink").flatMap((link) => {
264
+ const anchor = link.attrs["w:anchor"];
265
+ if (anchor === undefined || bookmarks.has(anchor) || BUILT_IN_ANCHORS.has(anchor)) {
266
+ return [];
267
+ }
268
+ return [error("broken-link", whereOfNode(link), `the link ${excerpt(textIn(link, "w:t"))} points to bookmark "${anchor}", which is not in the document, so clicking it goes nowhere`)];
269
+ });
270
+ const storyFindings = (context, stories) => stories.flatMap((story) => {
271
+ const label = story.part.replace(/^word\//, "").replace(/\.xml$/, "");
272
+ const referenced = new Set();
273
+ return [...referenceFindings(context, story.part, story.tree, () => label, referenced), ...missingTargetFindings(context.pkg, story.part, label, referenced)];
274
+ });
275
+ const openDocx = (bytes) => {
276
+ try {
277
+ return openPackage(bytes);
278
+ }
279
+ catch (cause) {
280
+ if (cause instanceof NotAPackage) {
281
+ return { format: "docx", findings: [error("unreadable", "", `${cause.message}: this is not a Word file (or it is password-protected)`)], notes: [] };
282
+ }
283
+ throw cause;
284
+ }
285
+ };
286
+ export const checkDocx = (bytes) => {
287
+ const pkg = openDocx(bytes);
288
+ if ("findings" in pkg) {
289
+ return pkg;
290
+ }
291
+ const main = mainPartOf(pkg, DEFAULT_MAIN);
292
+ const findings = packageFindings(pkg, main);
293
+ const notes = pkg.skipped.map((part) => `not checked: ${part} is too large to read`);
294
+ const body = childAt(pkg.xml(main), "w:body");
295
+ if (body === undefined) {
296
+ return { format: "docx", findings, notes };
297
+ }
298
+ const mainRels = [...pkg.rels(main).values()].filter((relationship) => !relationship.external);
299
+ const partOfKind = (kind) => {
300
+ const relationship = mainRels.find((candidate) => candidate.kind === kind);
301
+ return relationship === undefined ? undefined : pkg.xml(relationship.target);
302
+ };
303
+ const all = descendantsNamed(body, "w:p");
304
+ const { located, whereOf } = locate(all, headingLevels(partOfKind("styles")));
305
+ const owner = paragraphIndex(all);
306
+ const whereOfNode = (node) => whereOf.get(owner.get(node) ?? node) ?? "";
307
+ const stories = mainRels
308
+ .filter((relationship) => ["header", "footer", "footnotes", "endnotes"].includes(relationship.kind))
309
+ .flatMap((relationship) => {
310
+ const tree = pkg.xml(relationship.target);
311
+ return tree === undefined ? [] : [{ part: relationship.target, tree }];
312
+ });
313
+ const bookmarks = new Set([body, ...stories.map((story) => story.tree)].flatMap((tree) => descendantsNamed(tree, "w:bookmarkStart").flatMap((mark) => mark.attrs["w:name"] ?? [])));
314
+ const context = { pkg, main, paragraphs: located, whereOf, bookmarks };
315
+ if (located.every((item) => item.text.trim() === "") && descendantsNamed(body, "w:drawing").length === 0) {
316
+ findings.push(warning("no-text", "", "the document has no text"));
317
+ }
318
+ const updateFields = childAt(partOfKind("settings"), "w:updateFields");
319
+ const referenced = new Set();
320
+ findings.push(...linkFindings(body, bookmarks, whereOfNode), ...fieldFindings(fieldsIn(body, whereOfNode), bookmarks, updateFields !== undefined && updateFields.attrs["w:val"] !== "false"), ...referenceFindings(context, main, body, whereOfNode, referenced), ...storyFindings(context, stories), ...missingTargetFindings(pkg, main, "", referenced), ...controlFindings(body, whereOfNode), ...paragraphFindings(context), ...wideImageFindings(context, body, owner), ...draftFindings(context, body));
321
+ const explained = new Set(findings.filter((finding) => finding.rule === "field-error" || finding.rule === "placeholder-control").map((finding) => finding.where));
322
+ return {
323
+ format: "docx",
324
+ extent: plural(located.length, "paragraph"),
325
+ findings: findings.filter((finding) => finding.rule !== "leftover-text" || !explained.has(finding.where)),
326
+ notes,
327
+ };
328
+ };
329
+ //# sourceMappingURL=docx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx.js","sourceRoot":"","sources":["../../../src/lib/check/docx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type Severity = "error" | "warning";
2
+ export interface Finding {
3
+ readonly severity: Severity;
4
+ readonly rule: string;
5
+ readonly where: string;
6
+ readonly message: string;
7
+ }
8
+ export interface CheckReport {
9
+ readonly format: string;
10
+ readonly extent?: string | undefined;
11
+ readonly findings: Finding[];
12
+ readonly notes: string[];
13
+ }
14
+ export declare const error: (rule: string, where: string, message: string) => Finding;
15
+ export declare const warning: (rule: string, where: string, message: string) => Finding;
16
+ export declare const plural: (count: number, noun: string, nouns?: string) => string;
17
+ export declare const excerpt: (text: string, max?: number) => string;
18
+ export declare const leftoverText: (text: string, where: string) => Finding[];
19
+ export declare const inches: (emu: number) => string;
20
+ //# sourceMappingURL=finding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../../src/lib/check/finding.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3C,MAAM,WAAW,OAAO;IACpB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IAE7B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,KAAK,SAAU,MAAM,SAAS,MAAM,WAAW,MAAM,KAAG,OAAwD,CAAC;AAC9H,eAAO,MAAM,OAAO,SAAU,MAAM,SAAS,MAAM,WAAW,MAAM,KAAG,OAA0D,CAAC;AAElI,eAAO,MAAM,MAAM,UAAW,MAAM,QAAQ,MAAM,qBAAuB,MAAkD,CAAC;AAG5H,eAAO,MAAM,OAAO,SAAU,MAAM,mBAAa,MAGhD,CAAC;AAYF,eAAO,MAAM,YAAY,SAAU,MAAM,SAAS,MAAM,KAAG,OAAO,EAUjE,CAAC;AAKF,eAAO,MAAM,MAAM,QAAS,MAAM,KAAG,MAAyD,CAAC"}
@@ -0,0 +1,27 @@
1
+ export const error = (rule, where, message) => ({ severity: "error", rule, where, message });
2
+ export const warning = (rule, where, message) => ({ severity: "warning", rule, where, message });
3
+ export const plural = (count, noun, nouns = `${noun}s`) => `${count} ${count === 1 ? noun : nouns}`;
4
+ export const excerpt = (text, max = 60) => {
5
+ const line = text.replaceAll(/\s+/g, " ").trim();
6
+ return `"${line.length > max ? `${line.slice(0, max - 1)}…` : line}"`;
7
+ };
8
+ const LEFTOVER_CERTAIN = [
9
+ /\bClick (?:or tap )?(?:here )?(?:to|icon to) (?:add|edit|enter|insert)\b[^.\n]*/i,
10
+ /\bLorem ipsum\b/i,
11
+ /\bError! (?:Reference source not found|Bookmark not defined|No table of contents entries found|Not a valid)[^.\n]*/,
12
+ ];
13
+ const LEFTOVER_LIKELY = [/\b(?:TODO|FIXME|TBD|XXX)\b/, /\{\{[^{}\n]{1,40}\}\}/, /\[(?:insert|add|your|placeholder)\b[^\]\n]{0,40}\]/i];
14
+ export const leftoverText = (text, where) => {
15
+ const certain = LEFTOVER_CERTAIN.map((pattern) => pattern.exec(text)?.[0]).find((match) => match !== undefined);
16
+ if (certain !== undefined) {
17
+ return [error("leftover-text", where, `leftover template text ${excerpt(certain)}: replace it with the real content or delete it`)];
18
+ }
19
+ const likely = LEFTOVER_LIKELY.map((pattern) => pattern.exec(text)?.[0]).find((match) => match !== undefined);
20
+ if (likely !== undefined) {
21
+ return [warning("leftover-text", where, `looks like a note left for later: ${excerpt(likely)}`)];
22
+ }
23
+ return [];
24
+ };
25
+ const EMU_PER_INCH = 914_400;
26
+ export const inches = (emu) => `${Number((emu / EMU_PER_INCH).toFixed(2))} in`;
27
+ //# sourceMappingURL=finding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding.js","sourceRoot":"","sources":["../../../src/lib/check/finding.ts"],"names":[],"mappings":"AA0BA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe,EAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9H,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,OAAe,EAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAElI,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,IAAY,EAAE,KAAK,GAAG,GAAG,IAAI,GAAG,EAAU,EAAE,CAAC,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAG5H,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,GAAG,GAAG,EAAE,EAAU,EAAE;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;AAC1E,CAAC,CAAC;AAIF,MAAM,gBAAgB,GAAsB;IACxC,kFAAkF;IAClF,kBAAkB;IAClB,oHAAoH;CACvH,CAAC;AACF,MAAM,eAAe,GAAsB,CAAC,4BAA4B,EAAE,uBAAuB,EAAE,qDAAqD,CAAC,CAAC;AAG1J,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,KAAa,EAAa,EAAE;IACnE,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAChH,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,EAAE,0BAA0B,OAAO,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,CAAC;IACxI,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC9G,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,qCAAqC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,OAAO,CAAC;AAG7B,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type Finding } from "./finding.js";
2
+ import { type XmlElement } from "./xml-tree.js";
3
+ export interface Relationship {
4
+ readonly id: string;
5
+ readonly kind: string;
6
+ readonly target: string;
7
+ readonly external: boolean;
8
+ }
9
+ export interface OoxmlPackage {
10
+ readonly names: ReadonlySet<string>;
11
+ readonly skipped: readonly string[];
12
+ readonly has: (part: string) => boolean;
13
+ readonly xml: (part: string) => XmlElement | undefined;
14
+ readonly text: (part: string) => string | undefined;
15
+ readonly rels: (part: string) => ReadonlyMap<string, Relationship>;
16
+ readonly binaries: (parts: readonly string[]) => Readonly<Record<string, Uint8Array>>;
17
+ }
18
+ export declare class NotAPackage extends Error {
19
+ }
20
+ export declare const openPackage: (bytes: Uint8Array) => OoxmlPackage;
21
+ export declare const mainPartOf: (pkg: OoxmlPackage, fallback: string) => string;
22
+ export declare const relsPartOf: (part: string) => string;
23
+ export declare const missingTargetFindings: (pkg: OoxmlPackage, part: string, where: string, ignore?: ReadonlySet<string>) => Finding[];
24
+ export declare const packageFindings: (pkg: OoxmlPackage, mainPart: string) => Finding[];
25
+ //# sourceMappingURL=package.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/lib/check/package.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAWzE,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAEpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAExC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IAEvD,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAEpD,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAEnE,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;CACzF;AAED,qBAAa,WAAY,SAAQ,KAAK;CAAG;AAIzC,eAAO,MAAM,WAAW,UAAW,UAAU,KAAG,YAsF/C,CAAC;AAGF,eAAO,MAAM,UAAU,QAAS,YAAY,YAAY,MAAM,KAAG,MAC0E,CAAC;AAG5I,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MAA0H,CAAC;AAmBrK,eAAO,MAAM,qBAAqB,QAAS,YAAY,QAAQ,MAAM,SAAS,MAAM,WAAU,WAAW,CAAC,MAAM,CAAC,KAAe,OAAO,EAS9H,CAAC;AAUV,eAAO,MAAM,eAAe,QAAS,YAAY,YAAY,MAAM,KAAG,OAAO,EAyB5E,CAAC"}
@@ -0,0 +1,139 @@
1
+ import { posix } from "node:path";
2
+ import { unzipSync } from "fflate";
3
+ import { error } from "./finding.js";
4
+ import { childrenNamed, parseXml } from "./xml-tree.js";
5
+ const MAX_XML_PART_BYTES = 64 * 1024 * 1024;
6
+ const MAX_XML_TOTAL_BYTES = 256 * 1024 * 1024;
7
+ export class NotAPackage extends Error {
8
+ }
9
+ const isXmlPart = (name) => name.endsWith(".xml") || name.endsWith(".rels") || name.endsWith(".vml");
10
+ export const openPackage = (bytes) => {
11
+ const names = new Set();
12
+ const skipped = [];
13
+ let budget = MAX_XML_TOTAL_BYTES;
14
+ let entries;
15
+ try {
16
+ entries = unzipSync(bytes, {
17
+ filter: (file) => {
18
+ names.add(file.name);
19
+ if (!isXmlPart(file.name)) {
20
+ return false;
21
+ }
22
+ if (file.originalSize > MAX_XML_PART_BYTES || file.originalSize > budget) {
23
+ skipped.push(file.name);
24
+ return false;
25
+ }
26
+ budget -= file.originalSize;
27
+ return true;
28
+ },
29
+ });
30
+ }
31
+ catch (cause) {
32
+ throw new NotAPackage(`not a readable zip package (${cause instanceof Error ? cause.message : String(cause)})`);
33
+ }
34
+ const decoder = new TextDecoder();
35
+ const texts = new Map();
36
+ const trees = new Map();
37
+ const relsCache = new Map();
38
+ const text = (part) => {
39
+ const cached = texts.get(part);
40
+ if (cached !== undefined) {
41
+ return cached;
42
+ }
43
+ const raw = entries[part];
44
+ if (raw === undefined) {
45
+ return undefined;
46
+ }
47
+ const decoded = decoder.decode(raw);
48
+ texts.set(part, decoded);
49
+ return decoded;
50
+ };
51
+ const xml = (part) => {
52
+ const cached = trees.get(part);
53
+ if (cached !== undefined) {
54
+ return cached;
55
+ }
56
+ const source = text(part);
57
+ if (source === undefined) {
58
+ return undefined;
59
+ }
60
+ const tree = parseXml(source);
61
+ trees.set(part, tree);
62
+ return tree;
63
+ };
64
+ const has = (part) => names.has(part);
65
+ const rels = (part) => {
66
+ const cached = relsCache.get(part);
67
+ if (cached !== undefined) {
68
+ return cached;
69
+ }
70
+ const parsed = new Map();
71
+ const tree = xml(relsPartOf(part));
72
+ for (const relationship of tree === undefined ? [] : childrenNamed(tree, "rel:Relationship")) {
73
+ const id = relationship.attrs["Id"];
74
+ const rawTarget = relationship.attrs["Target"];
75
+ if (id === undefined || rawTarget === undefined) {
76
+ continue;
77
+ }
78
+ const external = relationship.attrs["TargetMode"] === "External";
79
+ parsed.set(id, {
80
+ id,
81
+ kind: (relationship.attrs["Type"] ?? "").split("/").at(-1) ?? "",
82
+ target: external ? rawTarget : resolveTarget(names, part, rawTarget),
83
+ external,
84
+ });
85
+ }
86
+ relsCache.set(part, parsed);
87
+ return parsed;
88
+ };
89
+ const binaries = (parts) => {
90
+ const wanted = new Set(parts);
91
+ if (wanted.size === 0) {
92
+ return {};
93
+ }
94
+ return unzipSync(bytes, { filter: (file) => wanted.has(file.name) && file.originalSize <= MAX_XML_PART_BYTES });
95
+ };
96
+ return { names, skipped, has, xml, text, rels, binaries };
97
+ };
98
+ export const mainPartOf = (pkg, fallback) => [...pkg.rels("").values()].find((relationship) => relationship.kind === "officeDocument" && !relationship.external)?.target ?? fallback;
99
+ export const relsPartOf = (part) => (part === "" ? "_rels/.rels" : `${posix.dirname(part)}/_rels/${posix.basename(part)}.rels`.replace(/^\.\//, ""));
100
+ const resolveTarget = (names, source, target) => {
101
+ const base = target.startsWith("/") ? target.slice(1) : posix.normalize(posix.join(posix.dirname(source), target)).replace(/^\.\//, "");
102
+ if (names.has(base)) {
103
+ return base;
104
+ }
105
+ try {
106
+ return decodeURIComponent(base);
107
+ }
108
+ catch {
109
+ return base;
110
+ }
111
+ };
112
+ const DAMAGED = "Office will offer to repair the file, and may drop what it cannot place";
113
+ export const missingTargetFindings = (pkg, part, where, ignore = new Set()) => [...pkg.rels(part).values()]
114
+ .filter((relationship) => !relationship.external && !ignore.has(relationship.id) && !pkg.has(relationship.target))
115
+ .map((relationship) => error("missing-part", where, `${relationship.kind} ${relationship.id} points to ${relationship.target}, which is not in the file: ${DAMAGED}`));
116
+ const extensionOf = (name) => {
117
+ const base = posix.basename(name);
118
+ const dot = base.lastIndexOf(".");
119
+ return dot === -1 ? "" : base.slice(dot + 1).toLowerCase();
120
+ };
121
+ export const packageFindings = (pkg, mainPart) => {
122
+ const findings = [];
123
+ const types = pkg.xml("[Content_Types].xml");
124
+ if (types === undefined) {
125
+ return [error("missing-part", "", `the file has no [Content_Types].xml: ${DAMAGED}`)];
126
+ }
127
+ if (!pkg.has(mainPart)) {
128
+ findings.push(error("missing-part", "", `the file has no ${mainPart}, so nothing can open it as this format`));
129
+ }
130
+ const defaults = new Set(childrenNamed(types, "Default").map((entry) => (entry.attrs["Extension"] ?? "").toLowerCase()));
131
+ const overrides = new Set(childrenNamed(types, "Override").map((entry) => (entry.attrs["PartName"] ?? "").replace(/^\//, "")));
132
+ const untyped = [...pkg.names].filter((name) => !name.endsWith("/") && name !== "[Content_Types].xml" && !overrides.has(name) && !defaults.has(extensionOf(name)));
133
+ if (untyped.length > 0) {
134
+ const shown = untyped.slice(0, 3).join(", ");
135
+ findings.push(error("content-type", "", `no content type for ${untyped.length === 1 ? "part" : `${untyped.length} parts`} ${shown}${untyped.length > 3 ? ", …" : ""}: add a Default for the extension in [Content_Types].xml; ${DAMAGED}`));
136
+ }
137
+ return findings;
138
+ };
139
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../../src/lib/check/package.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type CheckReport } from "./finding.js";
2
+ export declare const checkPdf: (bytes: Uint8Array) => Promise<CheckReport>;
3
+ //# sourceMappingURL=pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/lib/check/pdf.ts"],"names":[],"mappings":"AAUA,OAAO,EAA0B,KAAK,WAAW,EAAgB,MAAM,cAAc,CAAC;AA0KtF,eAAO,MAAM,QAAQ,UAAiB,UAAU,KAAG,OAAO,CAAC,WAAW,CA+CrE,CAAC"}