@intentic/fileq 1.360.0 → 1.361.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/check/check-pdf.d.ts.map +1 -1
- package/dist/lib/check/check-pdf.js +1 -1
- package/dist/lib/check/check-pdf.js.map +1 -1
- package/dist/lib/derivers/odt.js +1 -1
- package/dist/lib/derivers/odt.js.map +1 -1
- package/dist/lib/derivers/pptx.js +1 -1
- package/dist/lib/derivers/pptx.js.map +1 -1
- package/dist/lib/derivers/xlsx.d.ts.map +1 -1
- package/dist/lib/derivers/xlsx.js +13 -36
- package/dist/lib/derivers/xlsx.js.map +1 -1
- package/package.json +15 -16
- package/src/derivers.integration.test.ts +30 -9
- package/src/lib/check/check-pdf.ts +2 -1
- package/src/lib/derivers/odt.ts +1 -1
- package/src/lib/derivers/pptx.ts +1 -1
- package/src/lib/derivers/xlsx.ts +29 -44
- package/src/media.integration.test.ts +52 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-pdf.d.ts","sourceRoot":"","sources":["../../../src/lib/check/check-pdf.ts"],"names":[],"mappings":"AAWA,OAAO,EAA0B,KAAK,WAAW,EAAgB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"check-pdf.d.ts","sourceRoot":"","sources":["../../../src/lib/check/check-pdf.ts"],"names":[],"mappings":"AAWA,OAAO,EAA0B,KAAK,WAAW,EAAgB,MAAM,cAAc,CAAC;AAoLtF,eAAO,MAAM,QAAQ,UAAiB,UAAU,KAAG,OAAO,CAAC,WAAW,CAyDrE,CAAC"}
|
|
@@ -105,7 +105,7 @@ const sizeLabel = (width, height) => `${Number((width / POINTS_PER_INCH).toFixed
|
|
|
105
105
|
const pageList = (numbers) => (numbers.length > 6 ? `${numbers.slice(0, 6).join(", ")}, …` : numbers.join(", "));
|
|
106
106
|
const openPdf = async (bytes) => {
|
|
107
107
|
try {
|
|
108
|
-
return await getDocumentProxy(bytes, { verbosity: 0 });
|
|
108
|
+
return await getDocumentProxy(bytes, { verbosity: 0, fontExtraProperties: true });
|
|
109
109
|
}
|
|
110
110
|
catch (cause) {
|
|
111
111
|
const reason = cause instanceof Error && cause.name === "PasswordException"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-pdf.js","sourceRoot":"","sources":["../../../src/lib/check/check-pdf.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"check-pdf.js","sourceRoot":"","sources":["../../../src/lib/check/check-pdf.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/derivers/odt.js
CHANGED
|
@@ -61,7 +61,7 @@ export const odtDeriver = {
|
|
|
61
61
|
name: "odt",
|
|
62
62
|
version: 1,
|
|
63
63
|
derive: async (absPath) => {
|
|
64
|
-
const zip = unzipSync(new Uint8Array(await readFile(absPath)));
|
|
64
|
+
const zip = unzipSync(new Uint8Array(await readFile(absPath)), { filter: (file) => file.name === "content.xml" || file.name === "meta.xml" });
|
|
65
65
|
const decoder = new TextDecoder();
|
|
66
66
|
const content = zip["content.xml"];
|
|
67
67
|
if (content === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odt.js","sourceRoot":"","sources":["../../../src/lib/derivers/odt.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"odt.js","sourceRoot":"","sources":["../../../src/lib/derivers/odt.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export const pptxDeriver = {
|
|
|
23
23
|
name: "pptx",
|
|
24
24
|
version: 1,
|
|
25
25
|
derive: async (absPath) => {
|
|
26
|
-
const zip = unzipSync(new Uint8Array(await readFile(absPath)));
|
|
26
|
+
const zip = unzipSync(new Uint8Array(await readFile(absPath)), { filter: (file) => SLIDE_PART.test(file.name) || NOTES_PART.test(file.name) });
|
|
27
27
|
const names = Object.keys(zip);
|
|
28
28
|
const decoder = new TextDecoder();
|
|
29
29
|
const xmlOf = (name) => decoder.decode(zip[name]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pptx.js","sourceRoot":"","sources":["../../../src/lib/derivers/pptx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAI3C,MAAM,UAAU,GAAG,gCAAgC,CAAC;AACpD,MAAM,UAAU,GAAG,0CAA0C,CAAC;AAG9D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAY,EAAE,CACrD,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;KACtC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACf,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;KACrD,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KAC1C,IAAI,CAAC,EAAE,CAAC;KACR,IAAI,EAAE,CACd;KACA,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AAEvC,MAAM,aAAa,GAAG,CAAC,KAAe,EAAE,OAAe,EAAuB,EAAE;IAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAY;IAChC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,KAAK,EAAE,OAAO,EAAuB,EAAE;QAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/
|
|
1
|
+
{"version":3,"file":"pptx.js","sourceRoot":"","sources":["../../../src/lib/derivers/pptx.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAgCxD,eAAO,MAAM,WAAW,EAAE,OA4BzB,CAAC"}
|
|
@@ -9,55 +9,32 @@ const cellText = (value) => {
|
|
|
9
9
|
if (value instanceof Date) {
|
|
10
10
|
return value.toISOString();
|
|
11
11
|
}
|
|
12
|
-
if (typeof value === "object") {
|
|
13
|
-
if ("richText" in value) {
|
|
14
|
-
return value.richText.map((run) => run.text).join("");
|
|
15
|
-
}
|
|
16
|
-
if ("text" in value) {
|
|
17
|
-
return String(value.text);
|
|
18
|
-
}
|
|
19
|
-
if ("result" in value && value.result !== undefined) {
|
|
20
|
-
return cellText(value.result);
|
|
21
|
-
}
|
|
22
|
-
if ("error" in value) {
|
|
23
|
-
return String(value.error);
|
|
24
|
-
}
|
|
25
|
-
return "";
|
|
26
|
-
}
|
|
27
12
|
return String(value);
|
|
28
13
|
};
|
|
14
|
+
const isBlank = (row) => row.every((cell) => cell === null || cell === "");
|
|
29
15
|
export const xlsxDeriver = {
|
|
30
16
|
name: "xlsx",
|
|
31
|
-
version:
|
|
17
|
+
version: 2,
|
|
32
18
|
derive: async (absPath) => {
|
|
33
|
-
const { default:
|
|
34
|
-
const
|
|
35
|
-
await workbook.xlsx.readFile(absPath);
|
|
19
|
+
const { default: readXlsxFile } = await import("read-excel-file/node");
|
|
20
|
+
const sheets = await readXlsxFile(absPath);
|
|
36
21
|
const notes = [];
|
|
37
22
|
const sections = [];
|
|
38
|
-
for (const sheet of
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
const values = row.values.slice(1, MAX_COLUMNS + 1).map(cellText);
|
|
46
|
-
columnCap = Math.max(columnCap, row.cellCount);
|
|
47
|
-
rows.push(values);
|
|
48
|
-
});
|
|
49
|
-
const kept = rows.slice(0, MAX_ROWS_PER_SHEET);
|
|
50
|
-
if (sheet.rowCount > MAX_ROWS_PER_SHEET) {
|
|
51
|
-
notes.push(`sheet "${sheet.name}": showing ${MAX_ROWS_PER_SHEET} of ${sheet.rowCount} rows`);
|
|
23
|
+
for (const { sheet: sheetName, data } of sheets) {
|
|
24
|
+
const filled = data.filter((row) => !isBlank(row));
|
|
25
|
+
const columnCap = filled.reduce((width, row) => Math.max(width, row.length), 0);
|
|
26
|
+
const kept = filled.slice(0, MAX_ROWS_PER_SHEET).map((row) => row.slice(0, MAX_COLUMNS).map(cellText));
|
|
27
|
+
if (filled.length > MAX_ROWS_PER_SHEET) {
|
|
28
|
+
notes.push(`sheet "${sheetName}": showing ${MAX_ROWS_PER_SHEET} of ${filled.length} rows`);
|
|
52
29
|
}
|
|
53
30
|
if (columnCap > MAX_COLUMNS) {
|
|
54
|
-
notes.push(`sheet "${
|
|
31
|
+
notes.push(`sheet "${sheetName}": showing ${MAX_COLUMNS} of ${columnCap} columns`);
|
|
55
32
|
}
|
|
56
33
|
if (kept.length === 0) {
|
|
57
|
-
sections.push(`## ${
|
|
34
|
+
sections.push(`## ${sheetName}\n\n(empty sheet)`);
|
|
58
35
|
continue;
|
|
59
36
|
}
|
|
60
|
-
sections.push(`## ${
|
|
37
|
+
sections.push(`## ${sheetName}\n\n${markdownTable(kept.map((row) => row.map((cell) => oneLine(cell))))}`);
|
|
61
38
|
}
|
|
62
39
|
return { markdown: sections.join("\n\n"), notes };
|
|
63
40
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../../src/lib/derivers/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../../src/lib/derivers/xlsx.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/fileq",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.361.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",
|
|
@@ -73,33 +73,32 @@
|
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@intentic/agent-cli": "1.
|
|
77
|
-
"@intentic/base": "1.
|
|
78
|
-
"@intentic/constants": "1.
|
|
79
|
-
"@intentic/webq": "1.
|
|
80
|
-
"@intentic/workspace-ignore": "1.
|
|
76
|
+
"@intentic/agent-cli": "1.361.0",
|
|
77
|
+
"@intentic/base": "1.361.0",
|
|
78
|
+
"@intentic/constants": "1.361.0",
|
|
79
|
+
"@intentic/webq": "1.361.0",
|
|
80
|
+
"@intentic/workspace-ignore": "1.361.0",
|
|
81
81
|
"@stricli/core": "1.3.0",
|
|
82
|
-
"exceljs": "4.4.0",
|
|
83
82
|
"exifr": "7.1.3",
|
|
84
83
|
"fflate": "0.8.3",
|
|
85
|
-
"file-type": "22.
|
|
84
|
+
"file-type": "22.2.0",
|
|
86
85
|
"image-size": "2.0.4",
|
|
87
86
|
"mammoth": "1.13.0",
|
|
88
|
-
"music-metadata": "
|
|
89
|
-
"
|
|
90
|
-
"unpdf": "1.
|
|
87
|
+
"music-metadata": "12.3.2",
|
|
88
|
+
"read-excel-file": "9.3.12",
|
|
89
|
+
"unpdf": "1.9.1"
|
|
91
90
|
},
|
|
92
91
|
"devDependencies": {
|
|
93
92
|
"@intentic/testing": "0.0.0",
|
|
94
93
|
"@intentic/tsconfig": "0.0.0",
|
|
95
|
-
"@types/bun": "1.4.
|
|
96
|
-
"@types/node": "24.19.
|
|
97
|
-
"
|
|
94
|
+
"@types/bun": "1.4.4",
|
|
95
|
+
"@types/node": "24.19.2",
|
|
96
|
+
"typescript": "7.0.2"
|
|
98
97
|
},
|
|
99
98
|
"scripts": {
|
|
100
|
-
"build": "
|
|
99
|
+
"build": "tsc",
|
|
101
100
|
"typecheck": "bun check -p tsconfig.test.json",
|
|
102
|
-
"watch": "
|
|
101
|
+
"watch": "tsc --build --watch",
|
|
103
102
|
"test": "suites",
|
|
104
103
|
"test:watch": "suites --watch"
|
|
105
104
|
}
|
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
rtfBytes,
|
|
36
36
|
tarBytes,
|
|
37
37
|
wavBytes,
|
|
38
|
+
workbookBytes,
|
|
38
39
|
zipBytes,
|
|
39
40
|
} from "./testing.js";
|
|
40
41
|
|
|
@@ -80,20 +81,40 @@ describe("pptx", () => {
|
|
|
80
81
|
});
|
|
81
82
|
|
|
82
83
|
describe("xlsx", () => {
|
|
84
|
+
// A cell as the sheet XML saves it: an inline string, or a value of the given type (n: number, e: an error).
|
|
85
|
+
const text = (ref: string, value: string): string => `<c r="${ref}" t="inlineStr"><is><t>${value}</t></is></c>`;
|
|
86
|
+
const saved = (ref: string, value: string, type: "n" | "e"): string => `<c r="${ref}" t="${type}"><v>${value}</v></c>`;
|
|
87
|
+
const row = (index: number, cells: string): string => `<row r="${index}">${cells}</row>`;
|
|
88
|
+
|
|
83
89
|
test("sheets become capped markdown tables", async () => {
|
|
84
|
-
const
|
|
85
|
-
const
|
|
86
|
-
const sheet = workbook.addWorksheet("Costs");
|
|
87
|
-
sheet.addRow(["item", "price"]);
|
|
88
|
-
sheet.addRow(["widget", 4]);
|
|
89
|
-
sheet.addRow(["gadget", 7]);
|
|
90
|
-
const path = join(root, "costs.xlsx");
|
|
91
|
-
await workbook.xlsx.writeFile(path);
|
|
92
|
-
const doc = await xlsxDeriver.derive(path);
|
|
90
|
+
const rows = [row(1, text("A1", "item") + text("B1", "price")), row(2, text("A2", "widget") + saved("B2", "4", "n")), row(3, text("A3", "gadget") + saved("B3", "7", "n"))];
|
|
91
|
+
const doc = await xlsxDeriver.derive(fixture("costs.xlsx", workbookBytes([{ name: "Costs", rows: rows.join("") }])));
|
|
93
92
|
expect(doc.markdown).toContain("## Costs");
|
|
94
93
|
expect(doc.markdown).toContain("| widget | 4 |");
|
|
95
94
|
expect(doc.notes).toEqual([]); // nothing was cut, so nothing claims to be
|
|
96
95
|
});
|
|
96
|
+
|
|
97
|
+
// The reader pads the gap between two filled rows into rows of empty cells; they are not rows of the sheet.
|
|
98
|
+
test("the empty rows between filled ones are neither shown nor counted against the cap", async () => {
|
|
99
|
+
const filled = Array.from({ length: 205 }, (_, index) => row(index * 3 + 1, text(`A${index * 3 + 1}`, `line ${index}`)));
|
|
100
|
+
const doc = await xlsxDeriver.derive(fixture("gaps.xlsx", workbookBytes([{ name: "Gaps", rows: filled.join("") }])));
|
|
101
|
+
const tableRows = doc.markdown.split("\n").filter((line) => line.startsWith("|"));
|
|
102
|
+
expect(tableRows).toHaveLength(201); // the header row, its rule, and 199 rows more of the 200 shown
|
|
103
|
+
expect(tableRows.some((line) => /^\|[\s|]*$/.test(line))).toBe(false);
|
|
104
|
+
expect(doc.notes).toEqual(['sheet "Gaps": showing 200 of 205 rows']);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// An error's saved value is dropped by the reader (lib/derivers/xlsx.ts); `fileq check` is what reports it.
|
|
108
|
+
test("every sheet is its own section, an empty one says so, and a saved error reads as an empty cell", async () => {
|
|
109
|
+
const bytes = workbookBytes([
|
|
110
|
+
{ name: "Totals", rows: row(1, text("A1", "ratio") + saved("B1", "#DIV/0!", "e") + text("C1", "end")) },
|
|
111
|
+
{ name: "Spare", rows: "" },
|
|
112
|
+
]);
|
|
113
|
+
const doc = await xlsxDeriver.derive(fixture("totals.xlsx", bytes));
|
|
114
|
+
expect(doc.markdown).toContain("## Totals");
|
|
115
|
+
expect(doc.markdown).not.toContain("#DIV/0!");
|
|
116
|
+
expect(doc.markdown).toContain("## Spare\n\n(empty sheet)");
|
|
117
|
+
});
|
|
97
118
|
});
|
|
98
119
|
|
|
99
120
|
describe("pdf", () => {
|
|
@@ -178,7 +178,8 @@ const pageList = (numbers: readonly number[]): string => (numbers.length > 6 ? `
|
|
|
178
178
|
const openPdf = async (bytes: Uint8Array): Promise<PdfDocument | CheckReport> => {
|
|
179
179
|
try {
|
|
180
180
|
// Errors only: pdf.js otherwise narrates its recovery of a damaged file on the console, into the report.
|
|
181
|
-
|
|
181
|
+
// pdf.js 6 exposes the original font name only with extra font properties enabled.
|
|
182
|
+
return await getDocumentProxy(bytes, { verbosity: 0, fontExtraProperties: true });
|
|
182
183
|
} catch (cause) {
|
|
183
184
|
const reason =
|
|
184
185
|
cause instanceof Error && cause.name === "PasswordException"
|
package/src/lib/derivers/odt.ts
CHANGED
|
@@ -86,7 +86,7 @@ export const odtDeriver: Deriver = {
|
|
|
86
86
|
name: "odt",
|
|
87
87
|
version: 1,
|
|
88
88
|
derive: async (absPath): Promise<DerivedDoc> => {
|
|
89
|
-
const zip = unzipSync(new Uint8Array(await readFile(absPath)));
|
|
89
|
+
const zip = unzipSync(new Uint8Array(await readFile(absPath)), { filter: (file) => file.name === "content.xml" || file.name === "meta.xml" });
|
|
90
90
|
const decoder = new TextDecoder();
|
|
91
91
|
const content = zip["content.xml"];
|
|
92
92
|
if (content === undefined) {
|
package/src/lib/derivers/pptx.ts
CHANGED
|
@@ -34,7 +34,7 @@ export const pptxDeriver: Deriver = {
|
|
|
34
34
|
name: "pptx",
|
|
35
35
|
version: 1,
|
|
36
36
|
derive: async (absPath): Promise<DerivedDoc> => {
|
|
37
|
-
const zip = unzipSync(new Uint8Array(await readFile(absPath)));
|
|
37
|
+
const zip = unzipSync(new Uint8Array(await readFile(absPath)), { filter: (file) => SLIDE_PART.test(file.name) || NOTES_PART.test(file.name) });
|
|
38
38
|
const names = Object.keys(zip);
|
|
39
39
|
const decoder = new TextDecoder();
|
|
40
40
|
const xmlOf = (name: string): string => decoder.decode(zip[name]);
|
package/src/lib/derivers/xlsx.ts
CHANGED
|
@@ -1,78 +1,63 @@
|
|
|
1
1
|
import { oneLine } from "@intentic/base/one-line";
|
|
2
2
|
import { markdownTable } from "@intentic/webq/markdown";
|
|
3
|
-
import type
|
|
3
|
+
import type { Row } from "read-excel-file/node";
|
|
4
4
|
import type { DerivedDoc, Deriver } from "./deriver.js";
|
|
5
5
|
|
|
6
6
|
/* Spreadsheets: one markdown table per sheet, capped, with the cap announced. */
|
|
7
7
|
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
8
|
+
// read-excel-file is loaded inside derive() rather than here because every fileq run — every agent read of a png, every
|
|
9
|
+
// `fileq derive`, `fileq --version` — pays for a module this file imports at its top. The type import above is erased at
|
|
10
|
+
// compile time and costs nothing.
|
|
11
|
+
//
|
|
12
|
+
// What it reads is each cell's saved value, as a person sees the rendered sheet: a formula's last result, rich text and a
|
|
13
|
+
// hyperlink's label as their text. A cell whose saved value is an error (#REF!, #DIV/0!) reads as empty, by the library's
|
|
14
|
+
// own choice and with no option to keep it; `fileq check` reads those off the sheet XML itself (check/check-xlsx.ts).
|
|
11
15
|
|
|
12
16
|
const MAX_ROWS_PER_SHEET = 200;
|
|
13
17
|
const MAX_COLUMNS = 30;
|
|
14
18
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
19
|
+
type Cell = Row[number];
|
|
20
|
+
|
|
21
|
+
// A cell's value as text.
|
|
22
|
+
const cellText = (value: Cell): string => {
|
|
18
23
|
if (value === null || value === undefined) {
|
|
19
24
|
return "";
|
|
20
25
|
}
|
|
21
26
|
if (value instanceof Date) {
|
|
22
27
|
return value.toISOString();
|
|
23
28
|
}
|
|
24
|
-
if (typeof value === "object") {
|
|
25
|
-
if ("richText" in value) {
|
|
26
|
-
return value.richText.map((run) => run.text).join("");
|
|
27
|
-
}
|
|
28
|
-
if ("text" in value) {
|
|
29
|
-
return String(value.text);
|
|
30
|
-
}
|
|
31
|
-
if ("result" in value && value.result !== undefined) {
|
|
32
|
-
return cellText(value.result as ExcelJS.CellValue);
|
|
33
|
-
}
|
|
34
|
-
if ("error" in value) {
|
|
35
|
-
return String(value.error);
|
|
36
|
-
}
|
|
37
|
-
return "";
|
|
38
|
-
}
|
|
39
29
|
return String(value);
|
|
40
30
|
};
|
|
41
31
|
|
|
32
|
+
// A row with nothing in it: the reader pads gaps between rows into rows of empty cells, which a table would show as blank
|
|
33
|
+
// lines and the row cap would count.
|
|
34
|
+
const isBlank = (row: Row): boolean => row.every((cell) => cell === null || cell === "");
|
|
35
|
+
|
|
42
36
|
export const xlsxDeriver: Deriver = {
|
|
43
37
|
name: "xlsx",
|
|
44
|
-
|
|
38
|
+
// v2: read with read-excel-file (was exceljs), whose cells differ where a saved value is an error.
|
|
39
|
+
version: 2,
|
|
45
40
|
derive: async (absPath): Promise<DerivedDoc> => {
|
|
46
|
-
const { default:
|
|
47
|
-
const
|
|
48
|
-
await workbook.xlsx.readFile(absPath);
|
|
41
|
+
const { default: readXlsxFile } = await import("read-excel-file/node");
|
|
42
|
+
const sheets = await readXlsxFile(absPath);
|
|
49
43
|
const notes: string[] = [];
|
|
50
44
|
const sections: string[] = [];
|
|
51
|
-
for (const sheet of
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
// `row.values` is 1-based (index 0 is always empty); keep blanks so columns stay aligned.
|
|
59
|
-
const values = (row.values as ExcelJS.CellValue[]).slice(1, MAX_COLUMNS + 1).map(cellText);
|
|
60
|
-
columnCap = Math.max(columnCap, row.cellCount);
|
|
61
|
-
rows.push(values);
|
|
62
|
-
});
|
|
63
|
-
const kept = rows.slice(0, MAX_ROWS_PER_SHEET);
|
|
64
|
-
if (sheet.rowCount > MAX_ROWS_PER_SHEET) {
|
|
65
|
-
notes.push(`sheet "${sheet.name}": showing ${MAX_ROWS_PER_SHEET} of ${sheet.rowCount} rows`);
|
|
45
|
+
for (const { sheet: sheetName, data } of sheets) {
|
|
46
|
+
const filled = data.filter((row) => !isBlank(row));
|
|
47
|
+
const columnCap = filled.reduce((width, row) => Math.max(width, row.length), 0);
|
|
48
|
+
const kept = filled.slice(0, MAX_ROWS_PER_SHEET).map((row) => row.slice(0, MAX_COLUMNS).map(cellText));
|
|
49
|
+
if (filled.length > MAX_ROWS_PER_SHEET) {
|
|
50
|
+
notes.push(`sheet "${sheetName}": showing ${MAX_ROWS_PER_SHEET} of ${filled.length} rows`);
|
|
66
51
|
}
|
|
67
52
|
if (columnCap > MAX_COLUMNS) {
|
|
68
|
-
notes.push(`sheet "${
|
|
53
|
+
notes.push(`sheet "${sheetName}": showing ${MAX_COLUMNS} of ${columnCap} columns`);
|
|
69
54
|
}
|
|
70
55
|
if (kept.length === 0) {
|
|
71
|
-
sections.push(`## ${
|
|
56
|
+
sections.push(`## ${sheetName}\n\n(empty sheet)`);
|
|
72
57
|
continue;
|
|
73
58
|
}
|
|
74
59
|
// Each cell as one line: a sheet's cell can hold line breaks and runs of spaces nobody reads as meaningful.
|
|
75
|
-
sections.push(`## ${
|
|
60
|
+
sections.push(`## ${sheetName}\n\n${markdownTable(kept.map((row) => row.map((cell) => oneLine(cell))))}`);
|
|
76
61
|
}
|
|
77
62
|
return { markdown: sections.join("\n\n"), notes };
|
|
78
63
|
},
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { mediaDeriver } from "./lib/derivers/media.js";
|
|
5
|
+
import { flacBytes, mp4Bytes, wavBytes } from "./testing.js";
|
|
6
|
+
|
|
7
|
+
let root: string;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
root = mkdtempSync(join(tmpdir(), "fileq-media-"));
|
|
10
|
+
});
|
|
11
|
+
afterEach(() => rmSync(root, { recursive: true, force: true }));
|
|
12
|
+
|
|
13
|
+
test("PCM format details survive the metadata parser upgrade", async () => {
|
|
14
|
+
const path = join(root, "silence.wav");
|
|
15
|
+
writeFileSync(path, wavBytes());
|
|
16
|
+
const doc = await mediaDeriver.derive(path);
|
|
17
|
+
expect(doc.markdown).toContain("Container: WAVE (PCM)");
|
|
18
|
+
expect(doc.markdown).toContain("Sample rate: 8000 Hz, 1ch");
|
|
19
|
+
expect(doc.markdown).toContain("Bitrate: 64 kbit/s");
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test("compressed audio retains its duration and descriptive tags", async () => {
|
|
23
|
+
const path = join(root, "tagged.flac");
|
|
24
|
+
writeFileSync(path, flacBytes());
|
|
25
|
+
const doc = await mediaDeriver.derive(path);
|
|
26
|
+
expect(doc.title).toBe("Fixture audio");
|
|
27
|
+
expect(doc.markdown).toContain("Duration: 1s");
|
|
28
|
+
expect(doc.markdown).toContain("Artist: Fixture artist");
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("a video container retains its duration and title", async () => {
|
|
32
|
+
const path = join(root, "tagged.mp4");
|
|
33
|
+
writeFileSync(path, mp4Bytes());
|
|
34
|
+
const doc = await mediaDeriver.derive(path);
|
|
35
|
+
expect(doc.title).toBe("Fixture video");
|
|
36
|
+
expect(doc.markdown).toContain("Duration: 1s");
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("a truncated WAVE identifies the container without inventing a duration", async () => {
|
|
40
|
+
const path = join(root, "truncated.wav");
|
|
41
|
+
writeFileSync(path, wavBytes().subarray(0, 20));
|
|
42
|
+
const doc = await mediaDeriver.derive(path);
|
|
43
|
+
expect(doc.markdown).toBe("- Container: WAVE");
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("an audio extension alone does not produce fabricated metadata", async () => {
|
|
47
|
+
const path = join(root, "unrecognized.wav");
|
|
48
|
+
writeFileSync(path, "this is not an audio container");
|
|
49
|
+
const doc = await mediaDeriver.derive(path);
|
|
50
|
+
expect(doc.markdown).toBe("");
|
|
51
|
+
expect(doc.title).toBe(undefined);
|
|
52
|
+
});
|