@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 @@
1
+ {"version":3,"file":"text-fit.js","sourceRoot":"","sources":["../../../src/lib/check/text-fit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type CheckReport } from "./finding.js";
2
+ export declare const checkXlsx: (bytes: Uint8Array) => CheckReport;
3
+ //# sourceMappingURL=xlsx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../../../src/lib/check/xlsx.ts"],"names":[],"mappings":"AASA,OAAO,EAAmC,KAAK,WAAW,EAAgB,MAAM,cAAc,CAAC;AAkI/F,eAAO,MAAM,SAAS,UAAW,UAAU,KAAG,WAuB7C,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { decodeEntities } from "../xml.js";
2
+ import { error, excerpt, plural, warning } from "./finding.js";
3
+ import { mainPartOf, missingTargetFindings, NotAPackage, openPackage, packageFindings } from "./package.js";
4
+ import { childAt, childNamed, childrenNamed, isElement } from "./xml-tree.js";
5
+ const DEFAULT_MAIN = "xl/workbook.xml";
6
+ const LISTED_PER_SHEET = 10;
7
+ const CELL = /<((?:\w+:)?)c\b([^>]*?)(?:\/>|>([\s\S]*?)<\/\1c>)/g;
8
+ const FORMULA = /<((?:\w+:)?)f\b[^>]*?(?:\/>|>([\s\S]*?)<\/\1f>)/;
9
+ const VALUE = /<((?:\w+:)?)v>([\s\S]*?)<\/\1v>/;
10
+ const INLINE = /<((?:\w+:)?)is\b/;
11
+ const attributeIn = (attributes, name) => new RegExp(`(?:^|\\s)${name}="([^"]*)"`).exec(attributes)?.[1];
12
+ const cellRef = (sheet, ref) => (/^[A-Za-z_][\w.]*$/.test(sheet) ? `${sheet}!${ref}` : `'${sheet.replaceAll("'", "''")}'!${ref}`);
13
+ const scanSheet = (sheet, xml) => {
14
+ const errors = [];
15
+ const uncached = [];
16
+ let listed = 0;
17
+ let unlisted = 0;
18
+ let filled = 0;
19
+ const report = (finding) => {
20
+ if (listed < LISTED_PER_SHEET) {
21
+ errors.push(finding);
22
+ listed += 1;
23
+ }
24
+ else {
25
+ unlisted += 1;
26
+ }
27
+ };
28
+ for (const match of xml.matchAll(CELL)) {
29
+ const attributes = match[2] ?? "";
30
+ const inner = match[3] ?? "";
31
+ const ref = cellRef(sheet, attributeIn(attributes, "r") ?? "?");
32
+ const formula = FORMULA.exec(inner);
33
+ const value = VALUE.exec(inner);
34
+ const formulaText = formula === null ? undefined : decodeEntities(formula[2] ?? "");
35
+ if (formula !== null || value !== null || INLINE.test(inner)) {
36
+ filled += 1;
37
+ }
38
+ const shown = formulaText === undefined || formulaText === "" ? "" : ` from =${formulaText}`;
39
+ if (attributeIn(attributes, "t") === "e") {
40
+ report(error("formula-error", ref, `shows ${decodeEntities(value?.[2] ?? "an error")}${shown}: fix the formula or its inputs`));
41
+ }
42
+ else if (formulaText?.includes("#REF!") === true) {
43
+ report(error("formula-error", ref, `the formula =${formulaText} points at a deleted range (#REF!)`));
44
+ }
45
+ else if (formula !== null && value === null) {
46
+ uncached.push(ref);
47
+ }
48
+ }
49
+ if (unlisted > 0) {
50
+ errors.push(error("formula-error", sheet, `and ${plural(unlisted, "more cell")} with errors on this sheet`));
51
+ }
52
+ return { errors, uncached, filled };
53
+ };
54
+ const uncachedFinding = (sheet, cells, recalculates) => {
55
+ const shown = cells.slice(0, 5).map((cell) => cell.slice(cell.lastIndexOf("!") + 1)).join(", ");
56
+ const more = cells.length > 5 ? ", …" : "";
57
+ const onOpen = recalculates ? "the workbook asks to be recalculated on open, so spreadsheet applications fill them in" : "Excel, LibreOffice and Google Sheets compute them on open";
58
+ return warning("formula-uncached", sheet, `${plural(cells.length, "formula")} saved with no value (${shown}${more}): ${onOpen}, but previews and anything that reads the file (pandas, fileq read) see blanks; write the value with the formula, or recalculate in LibreOffice`);
59
+ };
60
+ const openWorkbook = (bytes) => {
61
+ try {
62
+ return openPackage(bytes);
63
+ }
64
+ catch (cause) {
65
+ if (cause instanceof NotAPackage) {
66
+ return { format: "xlsx", findings: [error("unreadable", "", `${cause.message}: this is not an Excel file (or it is password-protected)`)], notes: [] };
67
+ }
68
+ throw cause;
69
+ }
70
+ };
71
+ const namesFindings = (workbook) => {
72
+ const names = workbook === undefined ? undefined : childNamed(workbook, "x:definedNames");
73
+ return (names === undefined ? [] : childrenNamed(names, "x:definedName")).flatMap((name) => {
74
+ const target = name.children.filter((child) => !isElement(child)).join("");
75
+ return target.includes("#REF!") ? [error("broken-name", "", `the defined name "${name.attrs["name"] ?? "?"}" refers to ${excerpt(target)}, a deleted range`)] : [];
76
+ });
77
+ };
78
+ const externalFindings = (pkg) => {
79
+ const links = [...pkg.names].filter((name) => /^xl\/externalLinks\/externalLink\d+\.xml$/.test(name));
80
+ return links.map((link) => {
81
+ const target = [...pkg.rels(link).values()].find((relationship) => relationship.external)?.target ?? "another file";
82
+ return warning("external-link", "", `the workbook takes values from ${target}; they go stale, or break, once the file is sent without it`);
83
+ });
84
+ };
85
+ const sheetsFindings = (pkg, main, sheets, recalculates) => {
86
+ const rels = pkg.rels(main);
87
+ const findings = [];
88
+ let filled = 0;
89
+ for (const sheet of sheets) {
90
+ const name = sheet.attrs["name"] ?? "?";
91
+ const relationship = rels.get(sheet.attrs["r:id"] ?? "");
92
+ if (relationship === undefined || relationship.external || !pkg.has(relationship.target)) {
93
+ findings.push(error("missing-part", name, "the sheet list names a sheet that is not in the file; Excel will offer to repair the workbook"));
94
+ continue;
95
+ }
96
+ const xml = relationship.kind === "worksheet" ? pkg.text(relationship.target) : undefined;
97
+ const scan = xml === undefined ? undefined : scanSheet(name, xml);
98
+ if (scan === undefined) {
99
+ continue;
100
+ }
101
+ filled += scan.filled;
102
+ findings.push(...scan.errors, ...(scan.uncached.length > 0 ? [uncachedFinding(name, scan.uncached, recalculates)] : []));
103
+ findings.push(...missingTargetFindings(pkg, relationship.target, name));
104
+ }
105
+ return { findings, filled };
106
+ };
107
+ export const checkXlsx = (bytes) => {
108
+ const pkg = openWorkbook(bytes);
109
+ if ("findings" in pkg) {
110
+ return pkg;
111
+ }
112
+ const main = mainPartOf(pkg, DEFAULT_MAIN);
113
+ const findings = packageFindings(pkg, main);
114
+ const notes = pkg.skipped.map((part) => `not checked: ${part} is too large to read`);
115
+ const workbook = pkg.xml(main);
116
+ const sheetList = childAt(workbook, "x:sheets");
117
+ const sheets = sheetList === undefined ? [] : childrenNamed(sheetList, "x:sheet");
118
+ if (workbook !== undefined && sheets.length === 0) {
119
+ findings.push(error("no-sheets", "", "the workbook has no sheets"));
120
+ }
121
+ const fullCalcOnLoad = childAt(workbook, "x:calcPr")?.attrs["fullCalcOnLoad"];
122
+ const scanned = sheetsFindings(pkg, main, sheets, fullCalcOnLoad === "1" || fullCalcOnLoad === "true");
123
+ findings.push(...scanned.findings);
124
+ if (sheets.length > 0 && scanned.filled === 0 && pkg.skipped.length === 0) {
125
+ findings.push(warning("no-data", "", "every sheet is empty"));
126
+ }
127
+ const listed = new Set(sheets.flatMap((sheet) => sheet.attrs["r:id"] ?? []));
128
+ findings.push(...namesFindings(workbook), ...externalFindings(pkg), ...missingTargetFindings(pkg, main, "", listed));
129
+ return { format: "xlsx", extent: plural(sheets.length, "sheet"), findings, notes };
130
+ };
131
+ //# sourceMappingURL=xlsx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../../src/lib/check/xlsx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface XmlElement {
2
+ readonly name: string;
3
+ readonly attrs: Readonly<Record<string, string>>;
4
+ readonly children: (XmlElement | string)[];
5
+ }
6
+ export declare const parseXml: (text: string) => XmlElement;
7
+ export declare const isElement: (node: XmlElement | string) => node is XmlElement;
8
+ export declare const childrenNamed: (element: XmlElement, name: string) => XmlElement[];
9
+ export declare const childNamed: (element: XmlElement, name: string) => XmlElement | undefined;
10
+ export declare const childAt: (element: XmlElement | undefined, ...path: readonly string[]) => XmlElement | undefined;
11
+ export declare const descendantsNamed: (element: XmlElement, name: string) => XmlElement[];
12
+ export declare const everyElement: (element: XmlElement) => XmlElement[];
13
+ export declare const textIn: (element: XmlElement, textName: string) => string;
14
+ export declare const intAttr: (element: XmlElement | undefined, name: string) => number | undefined;
15
+ //# sourceMappingURL=xml-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-tree.d.ts","sourceRoot":"","sources":["../../../src/lib/check/xml-tree.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;CAC9C;AA+ED,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,UAuBvC,CAAC;AAEF,eAAO,MAAM,SAAS,SAAU,UAAU,GAAG,MAAM,KAAG,IAAI,IAAI,UAAsC,CAAC;AAGrG,eAAO,MAAM,aAAa,YAAa,UAAU,QAAQ,MAAM,KAAG,UAAU,EACwB,CAAC;AAGrG,eAAO,MAAM,UAAU,YAAa,UAAU,QAAQ,MAAM,KAAG,UAAU,GAAG,SACsB,CAAC;AAGnG,eAAO,MAAM,OAAO,YAAa,UAAU,GAAG,SAAS,WAAW,SAAS,MAAM,EAAE,KAAG,UAAU,GAAG,SASlG,CAAC;AAGF,eAAO,MAAM,gBAAgB,YAAa,UAAU,QAAQ,MAAM,KAAG,UAAU,EAc9E,CAAC;AAGF,eAAO,MAAM,YAAY,YAAa,UAAU,KAAG,UAAU,EAY5D,CAAC;AAGF,eAAO,MAAM,MAAM,YAAa,UAAU,YAAY,MAAM,KAAG,MAG9C,CAAC;AAGlB,eAAO,MAAM,OAAO,YAAa,UAAU,GAAG,SAAS,QAAQ,MAAM,KAAG,MAAM,GAAG,SAMhF,CAAC"}
@@ -0,0 +1,131 @@
1
+ import { decodeEntities } from "../xml.js";
2
+ const CANONICAL = new Map([
3
+ ["http://schemas.openxmlformats.org/presentationml/2006/main", "p"],
4
+ ["http://purl.oclc.org/ooxml/presentationml/main", "p"],
5
+ ["http://schemas.openxmlformats.org/drawingml/2006/main", "a"],
6
+ ["http://purl.oclc.org/ooxml/drawingml/main", "a"],
7
+ ["http://schemas.openxmlformats.org/officeDocument/2006/relationships", "r"],
8
+ ["http://purl.oclc.org/ooxml/officeDocument/relationships", "r"],
9
+ ["http://schemas.openxmlformats.org/wordprocessingml/2006/main", "w"],
10
+ ["http://purl.oclc.org/ooxml/wordprocessingml/main", "w"],
11
+ ["http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing", "wp"],
12
+ ["http://purl.oclc.org/ooxml/drawingml/wordprocessingDrawing", "wp"],
13
+ ["http://schemas.openxmlformats.org/spreadsheetml/2006/main", "x"],
14
+ ["http://purl.oclc.org/ooxml/spreadsheetml/main", "x"],
15
+ ["http://schemas.openxmlformats.org/package/2006/relationships", "rel"],
16
+ ["http://schemas.openxmlformats.org/markup-compatibility/2006", "mc"],
17
+ ]);
18
+ const TOKEN = /<!--[\s\S]*?-->|<!\[CDATA\[([\s\S]*?)\]\]>|<\?[\s\S]*?\?>|<!DOCTYPE[^>[]*(?:\[[\s\S]*?\])?\s*>|<\/([^\s>]+)\s*>|<([^\s/>!?]+)((?:\s+[^\s=/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*)\s*(\/?)>/g;
19
+ const ATTRIBUTE = /([^\s=]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
20
+ const canonicalName = (written, scope, isAttribute) => {
21
+ const colon = written.indexOf(":");
22
+ const prefix = colon === -1 ? "" : written.slice(0, colon);
23
+ const local = colon === -1 ? written : written.slice(colon + 1);
24
+ if (colon === -1 && isAttribute) {
25
+ return written;
26
+ }
27
+ const uri = scope.get(prefix);
28
+ const canonical = uri === undefined ? undefined : CANONICAL.get(uri);
29
+ if (canonical !== undefined) {
30
+ return `${canonical}:${local}`;
31
+ }
32
+ return written;
33
+ };
34
+ const isDeclaration = (name) => name === "xmlns" || name.startsWith("xmlns:");
35
+ const openElement = (parent, written, attributeText) => {
36
+ const pairs = [...attributeText.matchAll(ATTRIBUTE)].map((attribute) => [attribute[1] ?? "", decodeEntities(attribute[2] ?? attribute[3] ?? "")]);
37
+ const declarations = pairs.filter(([name]) => isDeclaration(name));
38
+ const scope = declarations.length === 0
39
+ ? parent.scope
40
+ : new Map([...parent.scope, ...declarations.map(([name, uri]) => [name === "xmlns" ? "" : name.slice(6), uri])]);
41
+ const attrs = Object.fromEntries(pairs.filter(([name]) => !isDeclaration(name)).map(([name, value]) => [canonicalName(name, scope, true), value]));
42
+ const element = { name: canonicalName(written, scope, false), attrs, children: [] };
43
+ parent.element.children.push(element);
44
+ return { element, written, scope };
45
+ };
46
+ const appendText = (frame, raw, decode) => {
47
+ if (frame === undefined || raw === "") {
48
+ return;
49
+ }
50
+ const textBearing = frame.element.name.endsWith(":t") || frame.element.name === "t";
51
+ if (raw.trim() === "" && !textBearing) {
52
+ return;
53
+ }
54
+ frame.element.children.push(decode ? decodeEntities(raw) : raw);
55
+ };
56
+ export const parseXml = (text) => {
57
+ const root = { name: "#document", attrs: {}, children: [] };
58
+ const stack = [{ element: root, written: "#document", scope: new Map() }];
59
+ let last = 0;
60
+ for (const match of text.matchAll(TOKEN)) {
61
+ appendText(stack.at(-1), text.slice(last, match.index), true);
62
+ last = match.index + match[0].length;
63
+ const [, cdata, closing, opening, attributeText, selfClosing] = match;
64
+ if (cdata !== undefined) {
65
+ appendText(stack.at(-1), cdata, false);
66
+ }
67
+ else if (closing !== undefined) {
68
+ const at = stack.findLastIndex((frame) => frame.written === closing);
69
+ stack.length = at > 0 ? at : stack.length;
70
+ }
71
+ else if (opening !== undefined) {
72
+ const frame = openElement(stack.at(-1) ?? { element: root, written: "#document", scope: new Map() }, opening, attributeText ?? "");
73
+ if (selfClosing !== "/") {
74
+ stack.push(frame);
75
+ }
76
+ }
77
+ }
78
+ return root.children.find((child) => typeof child !== "string") ?? root;
79
+ };
80
+ export const isElement = (node) => typeof node !== "string";
81
+ export const childrenNamed = (element, name) => element.children.filter((child) => isElement(child) && child.name === name);
82
+ export const childNamed = (element, name) => element.children.find((child) => isElement(child) && child.name === name);
83
+ export const childAt = (element, ...path) => {
84
+ let current = element;
85
+ for (const name of path) {
86
+ if (current === undefined) {
87
+ return undefined;
88
+ }
89
+ current = childNamed(current, name);
90
+ }
91
+ return current;
92
+ };
93
+ export const descendantsNamed = (element, name) => {
94
+ const found = [];
95
+ const visit = (node) => {
96
+ for (const child of node.children) {
97
+ if (isElement(child)) {
98
+ if (child.name === name) {
99
+ found.push(child);
100
+ }
101
+ visit(child);
102
+ }
103
+ }
104
+ };
105
+ visit(element);
106
+ return found;
107
+ };
108
+ export const everyElement = (element) => {
109
+ const found = [element];
110
+ const visit = (node) => {
111
+ for (const child of node.children) {
112
+ if (isElement(child)) {
113
+ found.push(child);
114
+ visit(child);
115
+ }
116
+ }
117
+ };
118
+ visit(element);
119
+ return found;
120
+ };
121
+ export const textIn = (element, textName) => descendantsNamed(element, textName)
122
+ .map((node) => node.children.filter((child) => typeof child === "string").join(""))
123
+ .join("");
124
+ export const intAttr = (element, name) => {
125
+ const raw = element?.attrs[name];
126
+ if (raw === undefined || !/^-?\d+$/.test(raw.trim())) {
127
+ return undefined;
128
+ }
129
+ return Number(raw);
130
+ };
131
+ //# sourceMappingURL=xml-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml-tree.js","sourceRoot":"","sources":["../../../src/lib/check/xml-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAiB3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAiB;IACtC,CAAC,4DAA4D,EAAE,GAAG,CAAC;IACnE,CAAC,gDAAgD,EAAE,GAAG,CAAC;IACvD,CAAC,uDAAuD,EAAE,GAAG,CAAC;IAC9D,CAAC,2CAA2C,EAAE,GAAG,CAAC;IAClD,CAAC,qEAAqE,EAAE,GAAG,CAAC;IAC5E,CAAC,yDAAyD,EAAE,GAAG,CAAC;IAChE,CAAC,8DAA8D,EAAE,GAAG,CAAC;IACrE,CAAC,kDAAkD,EAAE,GAAG,CAAC;IACzD,CAAC,wEAAwE,EAAE,IAAI,CAAC;IAChF,CAAC,4DAA4D,EAAE,IAAI,CAAC;IACpE,CAAC,2DAA2D,EAAE,GAAG,CAAC;IAClE,CAAC,+CAA+C,EAAE,GAAG,CAAC;IACtD,CAAC,8DAA8D,EAAE,KAAK,CAAC;IACvE,CAAC,6DAA6D,EAAE,IAAI,CAAC;CACxE,CAAC,CAAC;AAEH,MAAM,KAAK,GACP,sLAAsL,CAAC;AAC3L,MAAM,SAAS,GAAG,0CAA0C,CAAC;AAI7D,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,KAAY,EAAE,WAAoB,EAAU,EAAE;IAClF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAEhE,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrE,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,GAAG,SAAS,IAAI,KAAK,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AASF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAI/F,MAAM,WAAW,GAAG,CAAC,MAAa,EAAE,OAAe,EAAE,aAAqB,EAAS,EAAE;IACjF,MAAM,KAAK,GAAuB,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACtK,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,MAAM,KAAK,GACP,YAAY,CAAC,MAAM,KAAK,CAAC;QACrB,CAAC,CAAC,MAAM,CAAC,KAAK;QACd,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAoB,EAAE,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3I,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACnJ,MAAM,OAAO,GAAe,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAChG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC,CAAC;AAGF,MAAM,UAAU,GAAG,CAAC,KAAwB,EAAE,GAAW,EAAE,MAAe,EAAQ,EAAE;IAChF,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACpC,OAAO;IACX,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC;IACpF,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO;IACX,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAc,EAAE;IACjD,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACxE,MAAM,KAAK,GAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IACnF,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9D,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;QACtE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAE/B,MAAM,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;YACrE,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9C,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,IAAI,EAAE,CAAC,CAAC;YACnI,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACL,CAAC;IAEL,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;AACjG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAyB,EAAsB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;AAGrG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAmB,EAAE,IAAY,EAAgB,EAAE,CAC7E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAGrG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAmB,EAAE,IAAY,EAA0B,EAAE,CACpF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAGnG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,OAA+B,EAAE,GAAG,IAAuB,EAA0B,EAAE;IAC3G,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAmB,EAAE,IAAY,EAAgB,EAAE;IAChF,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAQ,EAAE;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;oBACtB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;gBACD,KAAK,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,CAAC;IACf,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAmB,EAAgB,EAAE;IAC9D,MAAM,KAAK,GAAiB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAQ,EAAE;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,KAAK,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,CAAC;IACf,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAmB,EAAE,QAAgB,EAAU,EAAE,CACpE,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC;KAC9B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACnG,IAAI,CAAC,EAAE,CAAC,CAAC;AAGlB,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,OAA+B,EAAE,IAAY,EAAsB,EAAE;IACzF,MAAM,GAAG,GAAG,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/lib/derivers/image.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,cAAc,CAAC;AAqBxD,eAAO,MAAM,YAAY,EAAE,OA6B1B,CAAC"}
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../src/lib/derivers/image.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,cAAc,CAAC;AAsBxD,eAAO,MAAM,YAAY,EAAE,OA6B1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","sourceRoot":"","sources":["../../../src/lib/derivers/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAOvC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;AAQnC,MAAM,UAAU,GAA4E;IACxF,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAC5C,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE;IAC5D,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE;IACzC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE;CAClD,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAY;IACjC,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,KAAK,EAAE,OAAO,EAAuB,EAAE;QAC3C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,EAAE,iBAAiB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpG,CAAC;QAAC,MAAM,CAAC;YACL,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAwC,CAAC;QACpG,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC;gBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;gBAClG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3H,CAAC;YACL,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChF,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzF,CAAC;QACL,CAAC;QACD,OAAO;YACH,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,KAAK,EAAE,CAAC,oHAAoH,CAAC;SAChI,CAAC;IACN,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"image.js","sourceRoot":"","sources":["../../../src/lib/derivers/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;AAQnC,MAAM,UAAU,GAA4E;IACxF,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAC5C,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,kBAAkB,EAAE,YAAY,CAAC,EAAE;IAC5D,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE;IACzC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC,EAAE;CAClD,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAY;IACjC,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,KAAK,EAAE,OAAO,EAAuB,EAAE;QAC3C,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,EAAE,iBAAiB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpG,CAAC;QAAC,MAAM,CAAC;YACL,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAwC,CAAC;QACpG,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC;gBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;gBAClG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC3H,CAAC;YACL,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAChF,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzF,CAAC;QACL,CAAC;QACD,OAAO;YACH,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,KAAK,EAAE,CAAC,oHAAoH,CAAC;SAChI,CAAC;IACN,CAAC;CACJ,CAAC"}
@@ -2,5 +2,6 @@ export type Format = "docx" | "xlsx" | "pptx" | "pdf" | "image" | "media" | "htm
2
2
  export declare const EXTENSION_FORMAT: Record<string, Format>;
3
3
  export declare const isCandidatePath: (path: string) => boolean;
4
4
  export declare const detectFormat: (absPath: string) => Promise<Format | undefined>;
5
+ export declare const claimedFormat: (absPath: string) => Promise<Format | undefined>;
5
6
  export declare const gitAttributeLines: () => string[];
6
7
  //# sourceMappingURL=formats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/lib/formats.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AA6C9J,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqDnD,CAAC;AAGF,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,OAA0D,CAAC;AAM1G,eAAO,MAAM,YAAY,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAS9E,CAAC;AAUF,eAAO,MAAM,iBAAiB,QAAO,MAAM,EAIxB,CAAC"}
1
+ {"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/lib/formats.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AA6C9J,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqDnD,CAAC;AAGF,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,OAA0D,CAAC;AAM1G,eAAO,MAAM,YAAY,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAS9E,CAAC;AAMF,eAAO,MAAM,aAAa,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAsF,CAAC;AAUvK,eAAO,MAAM,iBAAiB,QAAO,MAAM,EAIxB,CAAC"}
@@ -102,6 +102,7 @@ export const detectFormat = async (absPath) => {
102
102
  }
103
103
  return byExtension;
104
104
  };
105
+ export const claimedFormat = async (absPath) => (await detectFormat(absPath)) ?? EXTENSION_FORMAT[extname(absPath).toLowerCase()];
105
106
  const TEXT_UNDERNEATH = new Set(["html"]);
106
107
  export const gitAttributeLines = () => Object.entries(EXTENSION_FORMAT)
107
108
  .filter(([, format]) => !TEXT_UNDERNEATH.has(format))
@@ -1 +1 @@
1
- {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/lib/formats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/lib/formats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare class ToolMissing extends Error {
2
+ }
3
+ export declare class ConvertFailed extends Error {
4
+ }
5
+ export type Rasterizer = "pdftoppm" | "mutool";
6
+ export declare const listDir: (dir: string) => Promise<string[]>;
7
+ export declare const rasterizer: () => Rasterizer;
8
+ export declare const office: (format: string) => string;
9
+ export declare const toPdf: (binary: string, absPath: string, format: string, workDir: string) => Promise<string>;
10
+ export declare const toPngs: (tool: Rasterizer, pdf: string, pages: readonly number[], size: number, outDir: string) => Promise<Map<number, string>>;
11
+ //# sourceMappingURL=convert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/lib/render/convert.ts"],"names":[],"mappings":"AAkBA,qBAAa,WAAY,SAAQ,KAAK;CAAG;AACzC,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAE3C,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAG/C,eAAO,MAAM,OAAO,QAAe,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAS3D,CAAC;AASF,eAAO,MAAM,UAAU,QAAO,UAS7B,CAAC;AAGF,eAAO,MAAM,MAAM,WAAY,MAAM,KAAG,MAUvC,CAAC;AAUF,eAAO,MAAM,KAAK,WAAkB,MAAM,WAAW,MAAM,UAAU,MAAM,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,CA6B5G,CAAC;AAMF,eAAO,MAAM,MAAM,SAAgB,UAAU,OAAO,MAAM,SAAS,SAAS,MAAM,EAAE,QAAQ,MAAM,UAAU,MAAM,KAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAuB/I,CAAC"}
@@ -0,0 +1,107 @@
1
+ import { execFile } from "node:child_process";
2
+ import { readdir } from "node:fs/promises";
3
+ import { basename, extname, join } from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { errorMessage, isMissing } from "@intentic/base/errors";
6
+ import { onPath } from "../tools.js";
7
+ import { runsOf } from "./pages.js";
8
+ const run = promisify(execFile);
9
+ const CONVERT_TIMEOUT_MS = 180_000;
10
+ const RASTER_TIMEOUT_MS = 120_000;
11
+ export class ToolMissing extends Error {
12
+ }
13
+ export class ConvertFailed extends Error {
14
+ }
15
+ export const listDir = async (dir) => {
16
+ try {
17
+ return await readdir(dir);
18
+ }
19
+ catch (cause) {
20
+ if (isMissing(cause)) {
21
+ return [];
22
+ }
23
+ throw cause;
24
+ }
25
+ };
26
+ const OFFICE_PACK = 'ask the owner for the office image pack (LibreOffice and poppler) with `environment propose office --pack --why "to look at the document I made"`: it arrives with the next rebuild; until then say the document was checked but not seen';
27
+ const inSandbox = () => onPath("environment");
28
+ export const rasterizer = () => {
29
+ if (onPath("pdftoppm")) {
30
+ return "pdftoppm";
31
+ }
32
+ if (onPath("mutool")) {
33
+ return "mutool";
34
+ }
35
+ const remedy = inSandbox() ? OFFICE_PACK : "install one (Debian/Ubuntu: apt-get install poppler-utils)";
36
+ throw new ToolMissing(`rendering pages needs pdftoppm (poppler-utils) or mutool (mupdf-tools) on PATH, and neither is here: ${remedy}`);
37
+ };
38
+ export const office = (format) => {
39
+ for (const name of ["soffice", "libreoffice"]) {
40
+ if (onPath(name)) {
41
+ return name;
42
+ }
43
+ }
44
+ const remedy = inSandbox()
45
+ ? OFFICE_PACK
46
+ : "install it (Debian/Ubuntu: apt-get install libreoffice-impress-nogui libreoffice-writer-nogui libreoffice-calc-nogui), or export the file to PDF yourself and render that";
47
+ throw new ToolMissing(`rendering a ${format} needs LibreOffice (soffice) on PATH to lay it out, and it is not here: ${remedy}`);
48
+ };
49
+ const IMPRESS_PDF = 'pdf:impress_pdf_Export:{"ExportHiddenSlides":{"type":"boolean","value":"true"}}';
50
+ const pdfFilter = (format) => (format === "pptx" || format === "odp" ? IMPRESS_PDF : "pdf");
51
+ export const toPdf = async (binary, absPath, format, workDir) => {
52
+ const outDir = join(workDir, "pdf");
53
+ const args = [
54
+ "--headless",
55
+ "--norestore",
56
+ "--nologo",
57
+ "--nolockcheck",
58
+ `-env:UserInstallation=file://${join(workDir, "profile")}`,
59
+ "--convert-to",
60
+ pdfFilter(format),
61
+ "--outdir",
62
+ outDir,
63
+ absPath,
64
+ ];
65
+ let output = "";
66
+ try {
67
+ const result = await run(binary, args, { timeout: CONVERT_TIMEOUT_MS, maxBuffer: 4 * 1024 * 1024 });
68
+ output = `${result.stdout}${result.stderr}`;
69
+ }
70
+ catch (cause) {
71
+ throw new ConvertFailed(`LibreOffice could not convert it: ${errorMessage(cause).split("\n").slice(0, 3).join(" ")}`);
72
+ }
73
+ const expected = `${basename(absPath, extname(absPath))}.pdf`;
74
+ const written = await listDir(outDir);
75
+ if (!written.includes(expected)) {
76
+ const said = output.trim().split("\n").slice(-2).join(" ");
77
+ throw new ConvertFailed(`LibreOffice wrote no PDF${said === "" ? "" : ` (it said: ${said})`}; the file may be damaged or password-protected`);
78
+ }
79
+ return join(outDir, expected);
80
+ };
81
+ export const toPngs = async (tool, pdf, pages, size, outDir) => {
82
+ const prefix = join(outDir, "p");
83
+ try {
84
+ if (tool === "pdftoppm") {
85
+ for (const [first, last] of runsOf(pages)) {
86
+ await run("pdftoppm", ["-png", "-scale-to", String(size), "-f", String(first), "-l", String(last), pdf, prefix], { timeout: RASTER_TIMEOUT_MS });
87
+ }
88
+ }
89
+ else {
90
+ await run("mutool", ["draw", "-q", "-F", "png", "-w", String(size), "-h", String(size), "-o", `${prefix}-%d.png`, pdf, pages.join(",")], {
91
+ timeout: RASTER_TIMEOUT_MS,
92
+ });
93
+ }
94
+ }
95
+ catch (cause) {
96
+ throw new ConvertFailed(`${tool} could not draw the pages: ${errorMessage(cause).split("\n").slice(0, 3).join(" ")}`);
97
+ }
98
+ const drawn = new Map();
99
+ for (const name of await readdir(outDir)) {
100
+ const match = /^p-0*(\d+)\.png$/.exec(name);
101
+ if (match !== null) {
102
+ drawn.set(Number(match[1]), join(outDir, name));
103
+ }
104
+ }
105
+ return drawn;
106
+ };
107
+ //# sourceMappingURL=convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/lib/render/convert.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export interface PageRange {
2
+ readonly from: number;
3
+ readonly to: number | undefined;
4
+ }
5
+ export declare class BadPages extends Error {
6
+ }
7
+ export declare const parsePages: (raw: string) => PageRange[];
8
+ export declare const pagesWithin: (ranges: readonly PageRange[], total: number) => number[];
9
+ export declare const runsOf: (pages: readonly number[]) => [number, number][];
10
+ export declare const describePages: (pages: readonly number[]) => string;
11
+ //# sourceMappingURL=pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../../src/lib/render/pages.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,qBAAa,QAAS,SAAQ,KAAK;CAAG;AAGtC,eAAO,MAAM,UAAU,QAAS,MAAM,KAAG,SAAS,EAcjD,CAAC;AAGF,eAAO,MAAM,WAAW,WAAY,SAAS,SAAS,EAAE,SAAS,MAAM,KAAG,MAAM,EAQ/E,CAAC;AAGF,eAAO,MAAM,MAAM,UAAW,SAAS,MAAM,EAAE,KAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAWjE,CAAC;AAGF,eAAO,MAAM,aAAa,UAAW,SAAS,MAAM,EAAE,KAAG,MAGtC,CAAC"}
@@ -0,0 +1,43 @@
1
+ export class BadPages extends Error {
2
+ }
3
+ export const parsePages = (raw) => {
4
+ const parts = raw.split(",").map((part) => part.trim());
5
+ return parts.map((part) => {
6
+ const match = /^(\d+)(?:\s*-\s*(\d*))?$/.exec(part);
7
+ if (match === null) {
8
+ throw new BadPages(`--pages takes numbers and ranges like 1-3,5,7-; "${part}" is neither`);
9
+ }
10
+ const from = Number(match[1]);
11
+ const to = match[2] === undefined ? from : match[2] === "" ? undefined : Number(match[2]);
12
+ if (from < 1 || (to !== undefined && to < from)) {
13
+ throw new BadPages(`--pages ${part}: pages count from 1, and a range runs forward`);
14
+ }
15
+ return { from, to };
16
+ });
17
+ };
18
+ export const pagesWithin = (ranges, total) => {
19
+ const pages = new Set();
20
+ for (const range of ranges) {
21
+ for (let page = range.from; page <= Math.min(range.to ?? total, total); page += 1) {
22
+ pages.add(page);
23
+ }
24
+ }
25
+ return [...pages].toSorted((a, b) => a - b);
26
+ };
27
+ export const runsOf = (pages) => {
28
+ const runs = [];
29
+ for (const page of pages) {
30
+ const last = runs.at(-1);
31
+ if (last !== undefined && last[1] === page - 1) {
32
+ last[1] = page;
33
+ }
34
+ else {
35
+ runs.push([page, page]);
36
+ }
37
+ }
38
+ return runs;
39
+ };
40
+ export const describePages = (pages) => runsOf(pages)
41
+ .map(([from, to]) => (from === to ? String(from) : `${from}-${to}`))
42
+ .join(", ");
43
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../../src/lib/render/pages.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,QAAS,SAAQ,KAAK;CAAG;AAGtC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAe,EAAE;IACnD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,QAAQ,CAAC,oDAAoD,IAAI,cAAc,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1F,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,QAAQ,CAAC,WAAW,IAAI,gDAAgD,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAA4B,EAAE,KAAa,EAAY,EAAE;IACjF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YAChF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAwB,EAAsB,EAAE;IACnE,MAAM,IAAI,GAAuB,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC;YAC7C,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAwB,EAAU,EAAE,CAC9D,MAAM,CAAC,KAAK,CAAC;KACR,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;KACnE,IAAI,CAAC,IAAI,CAAC,CAAC"}