@intentic/fileq 1.330.0 → 1.332.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/dist/lib/archives.d.ts.map +1 -1
- package/dist/lib/archives.js +3 -5
- package/dist/lib/archives.js.map +1 -1
- package/dist/lib/check/finding.d.ts.map +1 -1
- package/dist/lib/check/finding.js +2 -2
- package/dist/lib/check/finding.js.map +1 -1
- package/dist/lib/derivers/pdf.d.ts.map +1 -1
- package/dist/lib/derivers/pdf.js +11 -15
- package/dist/lib/derivers/pdf.js.map +1 -1
- package/dist/lib/derivers/xlsx.d.ts.map +1 -1
- package/dist/lib/derivers/xlsx.js +2 -2
- package/dist/lib/derivers/xlsx.js.map +1 -1
- package/dist/lib/render/convert.d.ts.map +1 -1
- package/dist/lib/render/convert.js +5 -7
- package/dist/lib/render/convert.js.map +1 -1
- package/dist/lib/sidecar.d.ts.map +1 -1
- package/dist/lib/sidecar.js +5 -13
- package/dist/lib/sidecar.js.map +1 -1
- package/dist/lib/xml.d.ts.map +1 -1
- package/dist/lib/xml.js +2 -1
- package/dist/lib/xml.js.map +1 -1
- package/package.json +7 -7
- package/src/lib/archives.ts +4 -6
- package/src/lib/check/finding.ts +3 -2
- package/src/lib/derivers/pdf.ts +13 -17
- package/src/lib/derivers/xlsx.ts +3 -4
- package/src/lib/render/convert.ts +5 -8
- package/src/lib/sidecar.ts +5 -12
- package/src/lib/xml.ts +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archives.d.ts","sourceRoot":"","sources":["../../src/lib/archives.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archives.d.ts","sourceRoot":"","sources":["../../src/lib/archives.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAGD,eAAO,MAAM,UAAU,UAAW,UAAU,KAAG,YAAY,EAS1D,CAAC;AAiCF,eAAO,MAAM,YAAY,UAAW,UAAU,KAAG,OAAqG,CAAC;AAiEvJ,eAAO,MAAM,UAAU,UAAW,UAAU,KAAG,YAAY,EAkB1D,CAAC;AAEF,MAAM,WAAW,QAAQ;IAErB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAClC;AAcD,eAAO,MAAM,QAAQ,UAAW,UAAU,KAAG,QAAQ,GAAG,SAMvD,CAAC;AAGF,eAAO,MAAM,SAAS,QAAO,OAAwB,CAAC;AAOtD,eAAO,MAAM,eAAe,WAAY,MAAM,KAAG,YAAY,EAa5D,CAAC;AAQF,eAAO,MAAM,WAAW,YAAmB,MAAM,KAAG,OAAO,CAAC,YAAY,EAAE,CAGzE,CAAC"}
|
package/dist/lib/archives.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { promisify } from "node:util";
|
|
1
|
+
import { execBounded } from "@intentic/base/process";
|
|
3
2
|
import { unzipSync } from "fflate";
|
|
4
3
|
import { onPath } from "./tools.js";
|
|
5
|
-
const run = promisify(execFile);
|
|
6
4
|
export const zipEntries = (bytes) => {
|
|
7
5
|
const entries = [];
|
|
8
6
|
unzipSync(bytes, {
|
|
@@ -125,9 +123,9 @@ export const parseTarListing = (stdout) => {
|
|
|
125
123
|
return entries;
|
|
126
124
|
};
|
|
127
125
|
const TAR_TIMEOUT_MS = 60_000;
|
|
128
|
-
const
|
|
126
|
+
const TAR_MAX_OUTPUT = 16 * 1024 * 1024;
|
|
129
127
|
export const listWithTar = async (absPath) => {
|
|
130
|
-
const { stdout } = await
|
|
128
|
+
const { stdout } = await execBounded("tar", ["-tvf", absPath], { timeoutMs: TAR_TIMEOUT_MS, maxOutput: TAR_MAX_OUTPUT });
|
|
131
129
|
return parseTarListing(stdout);
|
|
132
130
|
};
|
|
133
131
|
//# sourceMappingURL=archives.js.map
|
package/dist/lib/archives.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archives.js","sourceRoot":"","sources":["../../src/lib/archives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"archives.js","sourceRoot":"","sources":["../../src/lib/archives.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../../src/lib/check/finding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../../src/lib/check/finding.ts"],"names":[],"mappings":"AAQA,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,MAEhD,CAAC;AAYF,eAAO,MAAM,YAAY,SAAU,MAAM,SAAS,MAAM,KAAG,OAAO,EAUjE,CAAC;AAKF,eAAO,MAAM,MAAM,QAAS,MAAM,KAAG,MAAyD,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { oneLine } from "@intentic/base/one-line";
|
|
1
2
|
export const error = (rule, where, message) => ({ severity: "error", rule, where, message });
|
|
2
3
|
export const warning = (rule, where, message) => ({ severity: "warning", rule, where, message });
|
|
3
4
|
export const plural = (count, noun, nouns = `${noun}s`) => `${count} ${count === 1 ? noun : nouns}`;
|
|
4
5
|
export const excerpt = (text, max = 60) => {
|
|
5
|
-
|
|
6
|
-
return `"${line.length > max ? `${line.slice(0, max - 1)}…` : line}"`;
|
|
6
|
+
return `"${oneLine(text, max)}"`;
|
|
7
7
|
};
|
|
8
8
|
const LEFTOVER_CERTAIN = [
|
|
9
9
|
/\bClick (?:or tap )?(?:here )?(?:to|icon to) (?:add|edit|enter|insert)\b[^.\n]*/i,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../../../src/lib/check/finding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"finding.js","sourceRoot":"","sources":["../../../src/lib/check/finding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AA4BlD,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,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;AACrC,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/lib/derivers/pdf.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../../src/lib/derivers/pdf.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,cAAc,CAAC;AA2BxD,eAAO,MAAM,YAAY,QAAO,OAQ/B,CAAC;AAiDF,eAAO,MAAM,UAAU,EAAE,OAqCxB,CAAC"}
|
package/dist/lib/derivers/pdf.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
2
|
import { mkdtemp, readdir, readFile, rm } from "node:fs/promises";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
import {
|
|
5
|
+
import { execBounded, ProcessError, runBounded } from "@intentic/base/process";
|
|
6
6
|
import { extractText, getDocumentProxy, getMeta } from "unpdf";
|
|
7
7
|
import { onPath } from "../tools.js";
|
|
8
8
|
import { stripRunningFurniture } from "./pdf-furniture.js";
|
|
@@ -10,7 +10,6 @@ const SCAN_THRESHOLD_CHARS_PER_PAGE = 24;
|
|
|
10
10
|
const MAX_OCR_PAGES = 20;
|
|
11
11
|
const OCR_DPI = "200";
|
|
12
12
|
const OCR_TIMEOUT_MS = 60_000 + MAX_OCR_PAGES * 15_000;
|
|
13
|
-
const run = promisify(execFile);
|
|
14
13
|
const checked = new Map();
|
|
15
14
|
export const ocrAvailable = () => {
|
|
16
15
|
const path = process.env["PATH"] ?? "";
|
|
@@ -21,21 +20,18 @@ export const ocrAvailable = () => {
|
|
|
21
20
|
}
|
|
22
21
|
return available;
|
|
23
22
|
};
|
|
24
|
-
const readPages = (images) =>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
});
|
|
23
|
+
const readPages = async (images) => {
|
|
24
|
+
const result = await runBounded("ocr", images, { timeoutMs: OCR_TIMEOUT_MS, maxOutput: 16 * 1024 * 1024 });
|
|
25
|
+
if (!result.timedOut && (result.exitCode === 0 || result.exitCode === 1)) {
|
|
26
|
+
return result.stdout.text;
|
|
27
|
+
}
|
|
28
|
+
throw new ProcessError("ocr", images, result);
|
|
29
|
+
};
|
|
34
30
|
const recognisePages = async (absPath, totalPages) => {
|
|
35
31
|
const dir = await mkdtemp(join(tmpdir(), "fileq-ocr-"));
|
|
36
32
|
try {
|
|
37
|
-
await
|
|
38
|
-
|
|
33
|
+
await execBounded("pdftoppm", ["-r", OCR_DPI, "-png", "-f", "1", "-l", String(Math.min(totalPages, MAX_OCR_PAGES)), absPath, join(dir, "page")], {
|
|
34
|
+
timeoutMs: 120_000,
|
|
39
35
|
});
|
|
40
36
|
const images = (await readdir(dir)).filter((name) => name.endsWith(".png")).toSorted();
|
|
41
37
|
if (images.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/lib/derivers/pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/lib/derivers/pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAU3D,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAGzC,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,OAAO,GAAG,KAAK,CAAC;AAEtB,MAAM,cAAc,GAAG,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;AAGvD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;AAO3C,MAAM,CAAC,MAAM,YAAY,GAAG,GAAY,EAAE;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC1B,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QACpI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AAKF,MAAM,SAAS,GAAG,KAAK,EAAE,MAAyB,EAAmB,EAAE;IACnE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;IAC3G,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;IACD,MAAM,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,OAAe,EAAE,UAAkB,EAAqB,EAAE;IACpF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC;QACD,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE;YAC7I,SAAS,EAAE,OAAO;SACrB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACvF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5F,CAAC;YAAS,CAAC;QACP,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAwB,EAAU,EAAE,CACzD,KAAK,CAAC,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,KAAK,GAAG,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAG9H,MAAM,cAAc,GAAG,CAAC,OAAe,EAAE,OAA2B,EAAY,EAAE,CAC9E,OAAO,KAAK,CAAC;IACT,CAAC,CAAC,EAAE;IACJ,CAAC,CAAC;QACI,WAAW,OAAO,+CAA+C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,OAAO,IAAI,EAAE;KACvJ,CAAC;AAEZ,MAAM,gBAAgB,GAAG,CAAC,KAAwB,EAAyC,EAAE;IACzF,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;AACxF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAY;IAI/B,IAAI,IAAI;QACJ,OAAO,YAAY,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,KAAK,EAAE,OAAO,EAAuB,EAAE;QAC3C,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,EAAE,IAA2C,CAAC;QAC/D,MAAM,KAAK,GAAG,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,UAAU,GAAG,6BAA6B,GAAG,UAAU,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;gBAClB,OAAO;oBACH,QAAQ,EAAE,EAAE;oBACZ,KAAK;oBACL,KAAK,EAAE,CAAC,+BAA+B,UAAU,QAAQ,MAAM,0CAA0C,CAAC;iBAC7G,CAAC;YACN,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG;gBACV,kDAAkD,UAAU,CAAC,MAAM,OAAO,UAAU,QAAQ,MAAM,gEAAgE;aACrK,CAAC;YACF,IAAI,UAAU,GAAG,aAAa,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,gBAAgB,aAAa,6FAA6F,CAAC,CAAC;YAC3I,CAAC;YACD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACnE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;IACjD,CAAC;CACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../../../src/lib/derivers/xlsx.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../../../src/lib/derivers/xlsx.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,cAAc,CAAC;AAsCxD,eAAO,MAAM,WAAW,EAAE,OAqCzB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { oneLine } from "@intentic/base/one-line";
|
|
1
2
|
import { markdownTable } from "@intentic/webq/markdown";
|
|
2
3
|
const MAX_ROWS_PER_SHEET = 200;
|
|
3
4
|
const MAX_COLUMNS = 30;
|
|
@@ -25,7 +26,6 @@ const cellText = (value) => {
|
|
|
25
26
|
}
|
|
26
27
|
return String(value);
|
|
27
28
|
};
|
|
28
|
-
const oneLine = (text) => text.replaceAll(/\s+/g, " ").trim();
|
|
29
29
|
export const xlsxDeriver = {
|
|
30
30
|
name: "xlsx",
|
|
31
31
|
version: 1,
|
|
@@ -57,7 +57,7 @@ export const xlsxDeriver = {
|
|
|
57
57
|
sections.push(`## ${sheet.name}\n\n(empty sheet)`);
|
|
58
58
|
continue;
|
|
59
59
|
}
|
|
60
|
-
sections.push(`## ${sheet.name}\n\n${markdownTable(kept.map((row) => row.map(oneLine)))}`);
|
|
60
|
+
sections.push(`## ${sheet.name}\n\n${markdownTable(kept.map((row) => row.map((cell) => oneLine(cell))))}`);
|
|
61
61
|
}
|
|
62
62
|
return { markdown: sections.join("\n\n"), notes };
|
|
63
63
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../../src/lib/derivers/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAUxD,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,WAAW,GAAG,EAAE,CAAC;AAIvB,MAAM,QAAQ,GAAG,CAAC,KAAwB,EAAU,EAAE;IAClD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,OAAO,QAAQ,CAAC,KAAK,CAAC,MAA2B,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../../src/lib/derivers/xlsx.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/lib/render/convert.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/lib/render/convert.ts"],"names":[],"mappings":"AAeA,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"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
1
|
import { readdir } from "node:fs/promises";
|
|
3
2
|
import { basename, extname, join } from "node:path";
|
|
4
|
-
import { promisify } from "node:util";
|
|
5
3
|
import { errorMessage, isMissing } from "@intentic/base/errors";
|
|
4
|
+
import { execBounded } from "@intentic/base/process";
|
|
6
5
|
import { onPath } from "../tools.js";
|
|
7
6
|
import { runsOf } from "./pages.js";
|
|
8
|
-
const run = promisify(execFile);
|
|
9
7
|
const CONVERT_TIMEOUT_MS = 180_000;
|
|
10
8
|
const RASTER_TIMEOUT_MS = 120_000;
|
|
11
9
|
export class ToolMissing extends Error {
|
|
@@ -64,7 +62,7 @@ export const toPdf = async (binary, absPath, format, workDir) => {
|
|
|
64
62
|
];
|
|
65
63
|
let output = "";
|
|
66
64
|
try {
|
|
67
|
-
const result = await
|
|
65
|
+
const result = await execBounded(binary, args, { timeoutMs: CONVERT_TIMEOUT_MS, maxOutput: 4 * 1024 * 1024 });
|
|
68
66
|
output = `${result.stdout}${result.stderr}`;
|
|
69
67
|
}
|
|
70
68
|
catch (cause) {
|
|
@@ -83,12 +81,12 @@ export const toPngs = async (tool, pdf, pages, size, outDir) => {
|
|
|
83
81
|
try {
|
|
84
82
|
if (tool === "pdftoppm") {
|
|
85
83
|
for (const [first, last] of runsOf(pages)) {
|
|
86
|
-
await
|
|
84
|
+
await execBounded("pdftoppm", ["-png", "-scale-to", String(size), "-f", String(first), "-l", String(last), pdf, prefix], { timeoutMs: RASTER_TIMEOUT_MS });
|
|
87
85
|
}
|
|
88
86
|
}
|
|
89
87
|
else {
|
|
90
|
-
await
|
|
91
|
-
|
|
88
|
+
await execBounded("mutool", ["draw", "-q", "-F", "png", "-w", String(size), "-h", String(size), "-o", `${prefix}-%d.png`, pdf, pages.join(",")], {
|
|
89
|
+
timeoutMs: RASTER_TIMEOUT_MS,
|
|
92
90
|
});
|
|
93
91
|
}
|
|
94
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/lib/render/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/lib/render/convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../../src/lib/sidecar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../../src/lib/sidecar.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AASxD,eAAO,MAAM,WAAW,kCAAqC,CAAC;AAE9D,eAAO,MAAM,cAAc,kBAAmB,MAAM,WAAW,MAAM,KAAG,MAA2D,CAAC;AAEpI,eAAO,MAAM,YAAY,YAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAOvD,CAAC;AAEP,MAAM,WAAW,YAAY;IAEzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAMD,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,YA0BnD,CAAC;AAGF,eAAO,MAAM,WAAW,YAAa,MAAM,KAAG,MAM7C,CAAC;AAEF,eAAO,MAAM,WAAW,gBAAuB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAMjF,CAAC;AAEF,eAAO,MAAM,OAAO,aAAc,MAAM,GAAG,SAAS,aAAa,MAAM,gBAAgB,MAAM,KAAG,OAM/F,CAAC;AAEF,MAAM,WAAW,YAAY;IAEzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AASD,eAAO,MAAM,YAAY,SAAgB,MAAM,SAAS,YAAY,KAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkB5H,CAAC;AAGF,eAAO,MAAM,YAAY,kBAAyB,MAAM,SAAS,iBAAiB,KAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAK1I,CAAC;AAKF,eAAO,MAAM,kBAAkB,kBAAyB,MAAM,KAAG,OAAO,CAAC,IAAI,CAS5E,CAAC;AAGF,eAAO,MAAM,aAAa,kBAAyB,MAAM,WAAW,MAAM,KAAG,OAAO,CAAC,OAAO,CAO3F,CAAC"}
|
package/dist/lib/sidecar.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { createHash
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
2
|
import { createReadStream } from "node:fs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { readFile, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { join } from "node:path";
|
|
5
5
|
import { estimateTokens } from "@intentic/base/format";
|
|
6
|
+
import { writeFileAtomic } from "@intentic/base/fs";
|
|
6
7
|
import { neutralizeOutsideText } from "@intentic/base/outside-text";
|
|
7
8
|
import { STATE_DIR } from "@intentic/constants";
|
|
8
9
|
export const DERIVED_DIR = `${STATE_DIR}/local/cache/derived`;
|
|
@@ -81,16 +82,7 @@ export const writeDerived = async (path, entry) => {
|
|
|
81
82
|
"---",
|
|
82
83
|
"",
|
|
83
84
|
].join("\n");
|
|
84
|
-
await
|
|
85
|
-
const temp = `${path}.${process.pid}-${randomBytes(4).toString("hex")}.tmp`;
|
|
86
|
-
try {
|
|
87
|
-
await writeFile(temp, `${frontMatter}${body === "" ? "" : `${body}\n`}`);
|
|
88
|
-
await rename(temp, path);
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
await rm(temp, { force: true });
|
|
92
|
-
throw error;
|
|
93
|
-
}
|
|
85
|
+
await writeFileAtomic(path, `${frontMatter}${body === "" ? "" : `${body}\n`}`);
|
|
94
86
|
return { path, body, tokens: estimateTokens(body) };
|
|
95
87
|
};
|
|
96
88
|
export const writeSidecar = async (workspaceRoot, input) => {
|
package/dist/lib/sidecar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../src/lib/sidecar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../src/lib/sidecar.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/xml.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../src/lib/xml.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xml.d.ts","sourceRoot":"","sources":["../../src/lib/xml.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,SAAU,MAAM,KAAG,MAQb,CAAC;AAGlC,eAAO,MAAM,WAAW,eAAgB,MAAM,QAAQ,MAAM,KAAG,MAAM,GAAG,SAMvE,CAAC"}
|
package/dist/lib/xml.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { escapeRegExp } from "@intentic/base/escape";
|
|
1
2
|
export const decodeEntities = (text) => text
|
|
2
3
|
.replaceAll("<", "<")
|
|
3
4
|
.replaceAll(">", ">")
|
|
@@ -7,7 +8,7 @@ export const decodeEntities = (text) => text
|
|
|
7
8
|
.replaceAll(/&#(\d+);/g, (_, dec) => String.fromCodePoint(Number(dec)))
|
|
8
9
|
.replaceAll("&", "&");
|
|
9
10
|
export const attributeOf = (attributes, name) => {
|
|
10
|
-
const match = new RegExp(`(?:^|\\s)${name
|
|
11
|
+
const match = new RegExp(`(?:^|\\s)${escapeRegExp(name)}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`).exec(attributes);
|
|
11
12
|
if (match === null) {
|
|
12
13
|
return undefined;
|
|
13
14
|
}
|
package/dist/lib/xml.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../../src/lib/xml.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../../src/lib/xml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAIrD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE,CACnD,IAAI;KACC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;KACvB,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;KACvB,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;KACzB,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;KACzB,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KACnG,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9E,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAGlC,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAE,IAAY,EAAsB,EAAE;IAChF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,YAAY,YAAY,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5G,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/fileq",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.332.0",
|
|
4
4
|
"description": "fileq, agent-native file reading: any binary workspace file (docx, xlsx, pptx, pdf, images, audio, archives) as clean budgeted markdown, cached by content so a repeat read is instant",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -71,11 +71,11 @@
|
|
|
71
71
|
}
|
|
72
72
|
},
|
|
73
73
|
"dependencies": {
|
|
74
|
-
"@intentic/agent-cli": "1.
|
|
75
|
-
"@intentic/base": "1.
|
|
76
|
-
"@intentic/constants": "1.
|
|
77
|
-
"@intentic/webq": "1.
|
|
78
|
-
"@intentic/workspace-ignore": "1.
|
|
74
|
+
"@intentic/agent-cli": "1.332.0",
|
|
75
|
+
"@intentic/base": "1.332.0",
|
|
76
|
+
"@intentic/constants": "1.332.0",
|
|
77
|
+
"@intentic/webq": "1.332.0",
|
|
78
|
+
"@intentic/workspace-ignore": "1.332.0",
|
|
79
79
|
"@stricli/core": "1.3.0",
|
|
80
80
|
"exceljs": "4.4.0",
|
|
81
81
|
"exifr": "7.1.3",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
},
|
|
97
97
|
"scripts": {
|
|
98
98
|
"build": "tsgo",
|
|
99
|
-
"typecheck": "
|
|
99
|
+
"typecheck": "bun check -p tsconfig.test.json",
|
|
100
100
|
"watch": "tsgo --build --watch",
|
|
101
101
|
"test": "suites",
|
|
102
102
|
"test:watch": "suites --watch"
|
package/src/lib/archives.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { promisify } from "node:util";
|
|
1
|
+
import { execBounded } from "@intentic/base/process";
|
|
3
2
|
import { unzipSync } from "fflate";
|
|
4
3
|
import { onPath } from "./tools.js";
|
|
5
4
|
|
|
@@ -9,8 +8,6 @@ import { onPath } from "./tools.js";
|
|
|
9
8
|
// Everything else (xz, bzip2, zstd) is listed by GNU tar when the image carries it, since the codecs are on the image
|
|
10
9
|
// but not in node_modules; a container nothing here can open is named as unlistable rather than guessed at.
|
|
11
10
|
|
|
12
|
-
const run = promisify(execFile);
|
|
13
|
-
|
|
14
11
|
export interface ArchiveEntry {
|
|
15
12
|
readonly path: string;
|
|
16
13
|
/** Unpacked bytes; undefined where the container records none (a tar listing's directory, a streamed zip entry). */
|
|
@@ -200,10 +197,11 @@ export const parseTarListing = (stdout: string): ArchiveEntry[] => {
|
|
|
200
197
|
|
|
201
198
|
// Long enough for a large archive's index, short enough that a hung tar cannot hold a read hostage.
|
|
202
199
|
const TAR_TIMEOUT_MS = 60_000;
|
|
203
|
-
|
|
200
|
+
// The listing is parsed whole, so the cap is set past any index meant to be read: beyond it the middle is cut.
|
|
201
|
+
const TAR_MAX_OUTPUT = 16 * 1024 * 1024;
|
|
204
202
|
|
|
205
203
|
/** Lists an archive through GNU tar, which auto-detects gzip, bzip2, xz and zstd on read. */
|
|
206
204
|
export const listWithTar = async (absPath: string): Promise<ArchiveEntry[]> => {
|
|
207
|
-
const { stdout } = await
|
|
205
|
+
const { stdout } = await execBounded("tar", ["-tvf", absPath], { timeoutMs: TAR_TIMEOUT_MS, maxOutput: TAR_MAX_OUTPUT });
|
|
208
206
|
return parseTarListing(stdout);
|
|
209
207
|
};
|
package/src/lib/check/finding.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { oneLine } from "@intentic/base/one-line";
|
|
2
|
+
|
|
1
3
|
// What `fileq check` reports, and the rules every format shares.
|
|
2
4
|
// An ERROR is a fact read off the file's structure that a reader will meet: a missing image, a formula showing #REF!,
|
|
3
5
|
// a link to a bookmark that is not there. A WARNING is either a fact whose harm depends on the reader (a tracked change,
|
|
@@ -31,8 +33,7 @@ export const plural = (count: number, noun: string, nouns = `${noun}s`): string
|
|
|
31
33
|
|
|
32
34
|
/** A text excerpt for a message: one line, quoted, cut at `max` characters. */
|
|
33
35
|
export const excerpt = (text: string, max = 60): string => {
|
|
34
|
-
|
|
35
|
-
return `"${line.length > max ? `${line.slice(0, max - 1)}…` : line}"`;
|
|
36
|
+
return `"${oneLine(text, max)}"`;
|
|
36
37
|
};
|
|
37
38
|
|
|
38
39
|
// Text an authoring tool or a template put there for a person to replace. The first group is never a document's own
|
package/src/lib/derivers/pdf.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
2
|
import { mkdtemp, readdir, readFile, rm } from "node:fs/promises";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join } from "node:path";
|
|
5
|
-
import {
|
|
5
|
+
import { execBounded, ProcessError, runBounded } from "@intentic/base/process";
|
|
6
6
|
import { extractText, getDocumentProxy, getMeta } from "unpdf";
|
|
7
7
|
import { onPath } from "../tools.js";
|
|
8
8
|
import type { DerivedDoc, Deriver } from "./deriver.js";
|
|
@@ -24,8 +24,6 @@ const OCR_DPI = "200";
|
|
|
24
24
|
// The reader loads its models once per run and then takes a second or few per page.
|
|
25
25
|
const OCR_TIMEOUT_MS = 60_000 + MAX_OCR_PAGES * 15_000;
|
|
26
26
|
|
|
27
|
-
const run = promisify(execFile);
|
|
28
|
-
|
|
29
27
|
// Asked once per PATH: the answer is a fact of the image, and a stamp is read on every derive.
|
|
30
28
|
const checked = new Map<string, boolean>();
|
|
31
29
|
|
|
@@ -45,23 +43,21 @@ export const ocrAvailable = (): boolean => {
|
|
|
45
43
|
};
|
|
46
44
|
|
|
47
45
|
// What `ocr` printed for its images, one page per image: it writes a form feed line between images, and an image it
|
|
48
|
-
// could not read leaves its page empty (exit 1) rather than shifting the ones after it.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
});
|
|
58
|
-
});
|
|
46
|
+
// could not read leaves its page empty (exit 1) rather than shifting the ones after it. The pages are split on those
|
|
47
|
+
// form feeds, so the cap stays well past what twenty pages of text come to: a cut middle would shift every page after it.
|
|
48
|
+
const readPages = async (images: readonly string[]): Promise<string> => {
|
|
49
|
+
const result = await runBounded("ocr", images, { timeoutMs: OCR_TIMEOUT_MS, maxOutput: 16 * 1024 * 1024 });
|
|
50
|
+
if (!result.timedOut && (result.exitCode === 0 || result.exitCode === 1)) {
|
|
51
|
+
return result.stdout.text;
|
|
52
|
+
}
|
|
53
|
+
throw new ProcessError("ocr", images, result);
|
|
54
|
+
};
|
|
59
55
|
|
|
60
56
|
const recognisePages = async (absPath: string, totalPages: number): Promise<string[]> => {
|
|
61
57
|
const dir = await mkdtemp(join(tmpdir(), "fileq-ocr-"));
|
|
62
58
|
try {
|
|
63
|
-
await
|
|
64
|
-
|
|
59
|
+
await execBounded("pdftoppm", ["-r", OCR_DPI, "-png", "-f", "1", "-l", String(Math.min(totalPages, MAX_OCR_PAGES)), absPath, join(dir, "page")], {
|
|
60
|
+
timeoutMs: 120_000,
|
|
65
61
|
});
|
|
66
62
|
const images = (await readdir(dir)).filter((name) => name.endsWith(".png")).toSorted();
|
|
67
63
|
if (images.length === 0) {
|
package/src/lib/derivers/xlsx.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { oneLine } from "@intentic/base/one-line";
|
|
1
2
|
import { markdownTable } from "@intentic/webq/markdown";
|
|
2
3
|
import type ExcelJS from "exceljs";
|
|
3
4
|
import type { DerivedDoc, Deriver } from "./deriver.js";
|
|
@@ -38,9 +39,6 @@ const cellText = (value: ExcelJS.CellValue): string => {
|
|
|
38
39
|
return String(value);
|
|
39
40
|
};
|
|
40
41
|
|
|
41
|
-
// What a cell shows as one line: a sheet's cell can hold line breaks and runs of spaces nobody reads as meaningful.
|
|
42
|
-
const oneLine = (text: string): string => text.replaceAll(/\s+/g, " ").trim();
|
|
43
|
-
|
|
44
42
|
export const xlsxDeriver: Deriver = {
|
|
45
43
|
name: "xlsx",
|
|
46
44
|
version: 1,
|
|
@@ -73,7 +71,8 @@ export const xlsxDeriver: Deriver = {
|
|
|
73
71
|
sections.push(`## ${sheet.name}\n\n(empty sheet)`);
|
|
74
72
|
continue;
|
|
75
73
|
}
|
|
76
|
-
|
|
74
|
+
// Each cell as one line: a sheet's cell can hold line breaks and runs of spaces nobody reads as meaningful.
|
|
75
|
+
sections.push(`## ${sheet.name}\n\n${markdownTable(kept.map((row) => row.map((cell) => oneLine(cell))))}`);
|
|
77
76
|
}
|
|
78
77
|
return { markdown: sections.join("\n\n"), notes };
|
|
79
78
|
},
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { execFile } from "node:child_process";
|
|
2
1
|
import { readdir } from "node:fs/promises";
|
|
3
2
|
import { basename, extname, join } from "node:path";
|
|
4
|
-
import { promisify } from "node:util";
|
|
5
3
|
import { errorMessage, isMissing } from "@intentic/base/errors";
|
|
4
|
+
import { execBounded } from "@intentic/base/process";
|
|
6
5
|
import { onPath } from "../tools.js";
|
|
7
6
|
import { runsOf } from "./pages.js";
|
|
8
7
|
|
|
@@ -10,8 +9,6 @@ import { runsOf } from "./pages.js";
|
|
|
10
9
|
// through poppler's pdftoppm or MuPDF's mutool. fileq carries no renderer of its own: a faithful one is LibreOffice-sized,
|
|
11
10
|
// and a missing tool is named with what installs it rather than papered over with a worse picture.
|
|
12
11
|
|
|
13
|
-
const run = promisify(execFile);
|
|
14
|
-
|
|
15
12
|
// A first conversion also builds LibreOffice's profile, which is most of its time; a long deck takes longer still.
|
|
16
13
|
const CONVERT_TIMEOUT_MS = 180_000;
|
|
17
14
|
const RASTER_TIMEOUT_MS = 120_000;
|
|
@@ -88,7 +85,7 @@ export const toPdf = async (binary: string, absPath: string, format: string, wor
|
|
|
88
85
|
];
|
|
89
86
|
let output = "";
|
|
90
87
|
try {
|
|
91
|
-
const result = await
|
|
88
|
+
const result = await execBounded(binary, args, { timeoutMs: CONVERT_TIMEOUT_MS, maxOutput: 4 * 1024 * 1024 });
|
|
92
89
|
output = `${result.stdout}${result.stderr}`;
|
|
93
90
|
} catch (cause) {
|
|
94
91
|
throw new ConvertFailed(`LibreOffice could not convert it: ${errorMessage(cause).split("\n").slice(0, 3).join(" ")}`);
|
|
@@ -112,11 +109,11 @@ export const toPngs = async (tool: Rasterizer, pdf: string, pages: readonly numb
|
|
|
112
109
|
try {
|
|
113
110
|
if (tool === "pdftoppm") {
|
|
114
111
|
for (const [first, last] of runsOf(pages)) {
|
|
115
|
-
await
|
|
112
|
+
await execBounded("pdftoppm", ["-png", "-scale-to", String(size), "-f", String(first), "-l", String(last), pdf, prefix], { timeoutMs: RASTER_TIMEOUT_MS });
|
|
116
113
|
}
|
|
117
114
|
} else {
|
|
118
|
-
await
|
|
119
|
-
|
|
115
|
+
await execBounded("mutool", ["draw", "-q", "-F", "png", "-w", String(size), "-h", String(size), "-o", `${prefix}-%d.png`, pdf, pages.join(",")], {
|
|
116
|
+
timeoutMs: RASTER_TIMEOUT_MS,
|
|
120
117
|
});
|
|
121
118
|
}
|
|
122
119
|
} catch (cause) {
|
package/src/lib/sidecar.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { createHash
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
2
|
import { createReadStream } from "node:fs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { readFile, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import { join } from "node:path";
|
|
5
5
|
import { estimateTokens } from "@intentic/base/format";
|
|
6
|
+
import { writeFileAtomic } from "@intentic/base/fs";
|
|
6
7
|
import { neutralizeOutsideText } from "@intentic/base/outside-text";
|
|
7
8
|
import { STATE_DIR } from "@intentic/constants";
|
|
8
9
|
import type { DerivedDoc } from "./derivers/deriver.js";
|
|
@@ -130,16 +131,8 @@ export const writeDerived = async (path: string, entry: DerivedEntry): Promise<{
|
|
|
130
131
|
"---",
|
|
131
132
|
"",
|
|
132
133
|
].join("\n");
|
|
133
|
-
await mkdir(dirname(path), { recursive: true });
|
|
134
134
|
// Beside the target, then renamed over it: a concurrent reader sees the old file or the new one, never half of one.
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
await writeFile(temp, `${frontMatter}${body === "" ? "" : `${body}\n`}`);
|
|
138
|
-
await rename(temp, path);
|
|
139
|
-
} catch (error) {
|
|
140
|
-
await rm(temp, { force: true });
|
|
141
|
-
throw error;
|
|
142
|
-
}
|
|
135
|
+
await writeFileAtomic(path, `${frontMatter}${body === "" ? "" : `${body}\n`}`);
|
|
143
136
|
return { path, body, tokens: estimateTokens(body) };
|
|
144
137
|
};
|
|
145
138
|
|
package/src/lib/xml.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { escapeRegExp } from "@intentic/base/escape";
|
|
2
|
+
|
|
1
3
|
/* The two things every zip-of-XML deriver needs and no library is worth pulling in for: entity decoding for text pulled out of XML by regex. */
|
|
2
4
|
|
|
3
5
|
export const decodeEntities = (text: string): string =>
|
|
@@ -12,7 +14,7 @@ export const decodeEntities = (text: string): string =>
|
|
|
12
14
|
|
|
13
15
|
/** The value of `name="…"` (or `name='…'`) inside a tag's attribute text, decoded; undefined when absent. */
|
|
14
16
|
export const attributeOf = (attributes: string, name: string): string | undefined => {
|
|
15
|
-
const match = new RegExp(`(?:^|\\s)${name
|
|
17
|
+
const match = new RegExp(`(?:^|\\s)${escapeRegExp(name)}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`).exec(attributes);
|
|
16
18
|
if (match === null) {
|
|
17
19
|
return undefined;
|
|
18
20
|
}
|