@cesarandreslopez/occ 0.3.0 → 0.4.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 (98) hide show
  1. package/README.md +130 -4
  2. package/dist/src/cli.js +8 -0
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/code/build.js +22 -9
  5. package/dist/src/code/build.js.map +1 -1
  6. package/dist/src/code/command.js +2 -2
  7. package/dist/src/code/command.js.map +1 -1
  8. package/dist/src/code/output.js +12 -3
  9. package/dist/src/code/output.js.map +1 -1
  10. package/dist/src/code/parsers.js +52 -10
  11. package/dist/src/code/parsers.js.map +1 -1
  12. package/dist/src/code/query.js +82 -22
  13. package/dist/src/code/query.js.map +1 -1
  14. package/dist/src/code/types.d.ts +5 -3
  15. package/dist/src/doc/command.d.ts +2 -0
  16. package/dist/src/doc/command.js +54 -0
  17. package/dist/src/doc/command.js.map +1 -0
  18. package/dist/src/doc/inspect-docx.d.ts +14 -0
  19. package/dist/src/doc/inspect-docx.js +188 -0
  20. package/dist/src/doc/inspect-docx.js.map +1 -0
  21. package/dist/src/doc/inspect-odt.d.ts +8 -0
  22. package/dist/src/doc/inspect-odt.js +91 -0
  23. package/dist/src/doc/inspect-odt.js.map +1 -0
  24. package/dist/src/doc/inspect-pdf.d.ts +8 -0
  25. package/dist/src/doc/inspect-pdf.js +82 -0
  26. package/dist/src/doc/inspect-pdf.js.map +1 -0
  27. package/dist/src/doc/inspect.d.ts +2 -0
  28. package/dist/src/doc/inspect.js +70 -0
  29. package/dist/src/doc/inspect.js.map +1 -0
  30. package/dist/src/doc/output.d.ts +3 -0
  31. package/dist/src/doc/output.js +82 -0
  32. package/dist/src/doc/output.js.map +1 -0
  33. package/dist/src/doc/types.d.ts +59 -0
  34. package/dist/src/doc/types.js +2 -0
  35. package/dist/src/doc/types.js.map +1 -0
  36. package/dist/src/inspect/shared.d.ts +18 -0
  37. package/dist/src/inspect/shared.js +18 -0
  38. package/dist/src/inspect/shared.js.map +1 -0
  39. package/dist/src/parsers/xlsx.js +3 -1
  40. package/dist/src/parsers/xlsx.js.map +1 -1
  41. package/dist/src/sheet/command.d.ts +2 -0
  42. package/dist/src/sheet/command.js +70 -0
  43. package/dist/src/sheet/command.js.map +1 -0
  44. package/dist/src/sheet/inspect.d.ts +7 -0
  45. package/dist/src/sheet/inspect.js +454 -0
  46. package/dist/src/sheet/inspect.js.map +1 -0
  47. package/dist/src/sheet/output.d.ts +3 -0
  48. package/dist/src/sheet/output.js +158 -0
  49. package/dist/src/sheet/output.js.map +1 -0
  50. package/dist/src/sheet/types.d.ts +117 -0
  51. package/dist/src/sheet/types.js +2 -0
  52. package/dist/src/sheet/types.js.map +1 -0
  53. package/dist/src/slide/command.d.ts +2 -0
  54. package/dist/src/slide/command.js +54 -0
  55. package/dist/src/slide/command.js.map +1 -0
  56. package/dist/src/slide/inspect-odp.d.ts +7 -0
  57. package/dist/src/slide/inspect-odp.js +105 -0
  58. package/dist/src/slide/inspect-odp.js.map +1 -0
  59. package/dist/src/slide/inspect-pptx.d.ts +11 -0
  60. package/dist/src/slide/inspect-pptx.js +157 -0
  61. package/dist/src/slide/inspect-pptx.js.map +1 -0
  62. package/dist/src/slide/inspect.d.ts +2 -0
  63. package/dist/src/slide/inspect.js +76 -0
  64. package/dist/src/slide/inspect.js.map +1 -0
  65. package/dist/src/slide/output.d.ts +3 -0
  66. package/dist/src/slide/output.js +92 -0
  67. package/dist/src/slide/output.js.map +1 -0
  68. package/dist/src/slide/types.d.ts +59 -0
  69. package/dist/src/slide/types.js +2 -0
  70. package/dist/src/slide/types.js.map +1 -0
  71. package/dist/src/table/command.d.ts +2 -0
  72. package/dist/src/table/command.js +68 -0
  73. package/dist/src/table/command.js.map +1 -0
  74. package/dist/src/table/inspect-docx.d.ts +2 -0
  75. package/dist/src/table/inspect-docx.js +108 -0
  76. package/dist/src/table/inspect-docx.js.map +1 -0
  77. package/dist/src/table/inspect-odp.d.ts +2 -0
  78. package/dist/src/table/inspect-odp.js +106 -0
  79. package/dist/src/table/inspect-odp.js.map +1 -0
  80. package/dist/src/table/inspect-odt.d.ts +2 -0
  81. package/dist/src/table/inspect-odt.js +100 -0
  82. package/dist/src/table/inspect-odt.js.map +1 -0
  83. package/dist/src/table/inspect-pptx.d.ts +2 -0
  84. package/dist/src/table/inspect-pptx.js +112 -0
  85. package/dist/src/table/inspect-pptx.js.map +1 -0
  86. package/dist/src/table/inspect-xlsx.d.ts +2 -0
  87. package/dist/src/table/inspect-xlsx.js +161 -0
  88. package/dist/src/table/inspect-xlsx.js.map +1 -0
  89. package/dist/src/table/inspect.d.ts +2 -0
  90. package/dist/src/table/inspect.js +63 -0
  91. package/dist/src/table/inspect.js.map +1 -0
  92. package/dist/src/table/output.d.ts +3 -0
  93. package/dist/src/table/output.js +93 -0
  94. package/dist/src/table/output.js.map +1 -0
  95. package/dist/src/table/types.d.ts +38 -0
  96. package/dist/src/table/types.js +2 -0
  97. package/dist/src/table/types.js.map +1 -0
  98. package/package.json +2 -2
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/doc/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ export interface DocumentProperties {
2
+ title?: string;
3
+ subject?: string;
4
+ author?: string;
5
+ company?: string;
6
+ createdDate?: string;
7
+ modifiedDate?: string;
8
+ lastModifiedBy?: string;
9
+ keywords?: string;
10
+ }
11
+ export declare function estimateTokens(input: string | number): number;
12
+ export declare function asOptionalString(value: unknown): string | undefined;
13
+ export declare function formatDateLike(value: unknown): string | undefined;
14
+ export declare function createInspectPayload<T>(file: string, query: Record<string, unknown>, results: T): {
15
+ file: string;
16
+ query: Record<string, unknown>;
17
+ results: T;
18
+ };
@@ -0,0 +1,18 @@
1
+ export function estimateTokens(input) {
2
+ const chars = typeof input === 'number' ? input : input.length;
3
+ return Math.max(0, Math.ceil(chars / 4));
4
+ }
5
+ export function asOptionalString(value) {
6
+ return typeof value === 'string' && value.trim() ? value : undefined;
7
+ }
8
+ export function formatDateLike(value) {
9
+ if (value instanceof Date)
10
+ return value.toISOString();
11
+ if (typeof value === 'string' && value.trim())
12
+ return value;
13
+ return undefined;
14
+ }
15
+ export function createInspectPayload(file, query, results) {
16
+ return { file, query, results };
17
+ }
18
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/inspect/shared.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAI,IAAY,EAAE,KAA8B,EAAE,OAAU;IAC9F,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClC,CAAC"}
@@ -1,6 +1,8 @@
1
+ import { readFile } from 'node:fs/promises';
1
2
  import XLSX from 'xlsx';
2
3
  export async function parseXlsx(filePath) {
3
- const workbook = XLSX.readFile(filePath);
4
+ const buffer = await readFile(filePath);
5
+ const workbook = XLSX.read(buffer, { type: 'buffer' });
4
6
  const sheets = workbook.SheetNames.length;
5
7
  let rows = 0;
6
8
  let cells = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../../src/parsers/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;IAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;KACjC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../../src/parsers/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB;IAC9C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEvD,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;IAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;KACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerSheetCommands(program: Command): void;
@@ -0,0 +1,70 @@
1
+ import { writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { inspectWorkbook, createSheetPayload } from './inspect.js';
4
+ import { formatSheetInspection, formatSheetPayloadJson } from './output.js';
5
+ import { writeStream } from '../utils.js';
6
+ function getOptions(command) {
7
+ return command.optsWithGlobals();
8
+ }
9
+ function parsePositiveInt(value, fallback, label) {
10
+ if (!value)
11
+ return fallback;
12
+ const parsed = Number.parseInt(value, 10);
13
+ if (!Number.isFinite(parsed) || parsed <= 0) {
14
+ throw new Error(`Invalid ${label}: "${value}"`);
15
+ }
16
+ return parsed;
17
+ }
18
+ function parseHeaderRow(value) {
19
+ if (!value || value === 'auto')
20
+ return 'auto';
21
+ if (value === 'none')
22
+ return 'none';
23
+ const parsed = Number.parseInt(value, 10);
24
+ if (!Number.isFinite(parsed) || parsed <= 0) {
25
+ throw new Error(`Invalid header row: "${value}"`);
26
+ }
27
+ return parsed;
28
+ }
29
+ async function emit(output, options) {
30
+ if (options.output) {
31
+ await writeFile(options.output, output);
32
+ return;
33
+ }
34
+ await writeStream(process.stdout, output);
35
+ }
36
+ export function registerSheetCommands(program) {
37
+ const sheet = program.command('sheet').description('Explore spreadsheet structure and schema before reading cell content in depth');
38
+ const inspect = sheet.command('inspect <file>').description('Inspect XLSX workbook metadata, schema, and lightweight samples');
39
+ inspect
40
+ .option('--format <type>', 'output format: tabular or json', 'tabular')
41
+ .option('-o, --output <file>', 'write output to file')
42
+ .option('--ci', 'ASCII-only output, no colors')
43
+ .option('--sheet <selector>', 'exact sheet name or 1-based sheet index')
44
+ .option('--sample-rows <n>', 'maximum preview rows per sheet', '5')
45
+ .option('--header-row <mode>', 'header row mode: auto, none, or a 1-based row number', 'auto')
46
+ .option('--max-columns <n>', 'maximum columns to include in schema and sample output', '50');
47
+ inspect.action(async (file, _options, command) => {
48
+ const options = getOptions(command);
49
+ const resolved = path.resolve(file);
50
+ const inspectOptions = {
51
+ sheet: options.sheet,
52
+ sampleRows: parsePositiveInt(options.sampleRows, 5, 'sample row count'),
53
+ headerRow: parseHeaderRow(options.headerRow),
54
+ maxColumns: parsePositiveInt(options.maxColumns, 50, 'max column count'),
55
+ };
56
+ const result = await inspectWorkbook(resolved, inspectOptions);
57
+ const payload = createSheetPayload(resolved, {
58
+ command: 'sheet.inspect',
59
+ sheet: inspectOptions.sheet,
60
+ sampleRows: inspectOptions.sampleRows,
61
+ headerRow: inspectOptions.headerRow,
62
+ maxColumns: inspectOptions.maxColumns,
63
+ }, result);
64
+ const output = options.format === 'json'
65
+ ? formatSheetPayloadJson(payload)
66
+ : formatSheetInspection(result, options.ci);
67
+ await emit(output.endsWith('\n') ? output : `${output}\n`, options);
68
+ });
69
+ }
70
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/sheet/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { CellObject, WorkSheet } from 'xlsx';
2
+ import type { InspectSheetOptions, SheetInspectPayload, SheetInspectionResult } from './types.js';
3
+ export declare function createSheetPayload(filePath: string, query: Record<string, unknown>, results: SheetInspectionResult): SheetInspectPayload;
4
+ export declare function inspectWorkbook(filePath: string, options: InspectSheetOptions): Promise<SheetInspectionResult>;
5
+ export declare function getCell(sheet: WorkSheet, row: number, col: number): CellObject | undefined;
6
+ export declare function renderCell(cell: CellObject | undefined): string;
7
+ export declare function isNonEmptyCell(cell: CellObject): boolean;
@@ -0,0 +1,454 @@
1
+ import path from 'node:path';
2
+ import { readFile } from 'node:fs/promises';
3
+ import XLSX from 'xlsx';
4
+ import { estimateTokens, asOptionalString, formatDateLike } from '../inspect/shared.js';
5
+ const MAX_HEADER_SCAN_ROWS = 10;
6
+ const MAX_COLUMN_SCAN_VALUES = 200;
7
+ export function createSheetPayload(filePath, query, results) {
8
+ return {
9
+ file: filePath,
10
+ query,
11
+ results,
12
+ };
13
+ }
14
+ export async function inspectWorkbook(filePath, options) {
15
+ const resolvedPath = path.resolve(filePath);
16
+ if (path.extname(resolvedPath).toLowerCase() !== '.xlsx') {
17
+ throw new Error(`Unsupported spreadsheet format: ${path.extname(resolvedPath) || '(none)'} (expected .xlsx)`);
18
+ }
19
+ const buffer = await readFile(resolvedPath);
20
+ const baseWorkbook = XLSX.read(buffer, { type: 'buffer', bookProps: true, bookSheets: true });
21
+ const workbook = XLSX.read(buffer, {
22
+ type: 'buffer',
23
+ cellFormula: true,
24
+ cellStyles: true,
25
+ cellDates: true,
26
+ cellText: true,
27
+ sheetStubs: true,
28
+ });
29
+ const inventory = resolveRequestedSheets(workbook, options.sheet);
30
+ const workbookNames = extractDefinedNames(workbook, inventory.sheetNames);
31
+ const sheetProfiles = inventory.indices.map((sheetIndex) => inspectSheet(workbook, sheetIndex, workbookNames, options));
32
+ const workbookInspection = inspectWorkbookMetadata(resolvedPath, buffer.length, baseWorkbook, workbookNames, sheetProfiles);
33
+ return {
34
+ workbook: workbookInspection,
35
+ sheets: sheetProfiles,
36
+ };
37
+ }
38
+ function inspectWorkbookMetadata(filePath, size, workbook, definedNames, sheets) {
39
+ const visibleSheetCount = sheets.filter(sheet => sheet.visibility === 'visible').length;
40
+ const hiddenSheetCount = sheets.filter(sheet => sheet.visibility === 'hidden').length;
41
+ const veryHiddenSheetCount = sheets.filter(sheet => sheet.visibility === 'very_hidden').length;
42
+ const riskFlags = {
43
+ hiddenSheets: hiddenSheetCount + veryHiddenSheetCount > 0,
44
+ formulas: sheets.some(sheet => sheet.formulaCellCount > 0),
45
+ comments: sheets.some(sheet => sheet.commentCellCount > 0),
46
+ hyperlinks: sheets.some(sheet => sheet.hyperlinkCellCount > 0),
47
+ mergedCells: sheets.some(sheet => sheet.mergedRangeCount > 0),
48
+ protectedSheets: sheets.some(sheet => sheet.protected),
49
+ externalFormulaRefs: sheets.some(sheet => sheet.externalFormulaRefCount > 0) || definedNames.some(name => name.external),
50
+ };
51
+ return {
52
+ file: filePath,
53
+ format: 'xlsx',
54
+ size,
55
+ properties: pickWorkbookProperties(workbook.Props),
56
+ customPropertyCount: Object.keys(workbook.Custprops ?? {}).length,
57
+ customProperties: (workbook.Custprops ?? {}),
58
+ sheetCount: workbook.SheetNames.length,
59
+ visibleSheetCount,
60
+ hiddenSheetCount,
61
+ veryHiddenSheetCount,
62
+ definedNames: definedNames.filter(name => name.scope === 'workbook'),
63
+ riskFlags,
64
+ };
65
+ }
66
+ function pickWorkbookProperties(props) {
67
+ if (!props)
68
+ return {};
69
+ return {
70
+ title: asOptionalString(props.Title),
71
+ subject: asOptionalString(props.Subject),
72
+ author: asOptionalString(props.Author),
73
+ company: asOptionalString(props.Company),
74
+ manager: asOptionalString(props.Manager),
75
+ createdDate: formatDateLike(props.CreatedDate),
76
+ modifiedDate: formatDateLike(props.ModifiedDate),
77
+ };
78
+ }
79
+ function resolveRequestedSheets(workbook, selector) {
80
+ if (!selector) {
81
+ return {
82
+ indices: workbook.SheetNames.map((_, index) => index),
83
+ sheetNames: workbook.SheetNames,
84
+ };
85
+ }
86
+ const byName = workbook.SheetNames.findIndex(name => name === selector);
87
+ if (byName >= 0) {
88
+ return { indices: [byName], sheetNames: workbook.SheetNames };
89
+ }
90
+ if (/^\d+$/.test(selector)) {
91
+ const index = Number.parseInt(selector, 10) - 1;
92
+ if (index >= 0 && index < workbook.SheetNames.length) {
93
+ return { indices: [index], sheetNames: workbook.SheetNames };
94
+ }
95
+ }
96
+ throw new Error(`Sheet not found: ${selector}`);
97
+ }
98
+ function inspectSheet(workbook, sheetIndex, definedNames, options) {
99
+ const name = workbook.SheetNames[sheetIndex];
100
+ const sheet = workbook.Sheets[name];
101
+ if (!sheet) {
102
+ throw new Error(`Worksheet missing from workbook: ${name}`);
103
+ }
104
+ const workbookSheetMeta = workbook.Workbook?.Sheets?.[sheetIndex];
105
+ const visibility = mapVisibility(workbookSheetMeta?.Hidden);
106
+ const usedRange = typeof sheet['!ref'] === 'string' ? sheet['!ref'] : null;
107
+ const decodedRange = usedRange ? XLSX.utils.decode_range(usedRange) : null;
108
+ const totalRows = decodedRange ? decodedRange.e.r - decodedRange.s.r + 1 : 0;
109
+ const totalCols = decodedRange ? decodedRange.e.c - decodedRange.s.c + 1 : 0;
110
+ const rectangularRangeCellCount = totalRows * totalCols;
111
+ const cellTypeCounts = {
112
+ string: 0,
113
+ number: 0,
114
+ boolean: 0,
115
+ date: 0,
116
+ error: 0,
117
+ blankStub: 0,
118
+ };
119
+ let nonEmptyCellCount = 0;
120
+ let formulaCellCount = 0;
121
+ let commentCellCount = 0;
122
+ let hyperlinkCellCount = 0;
123
+ let externalFormulaRefCount = 0;
124
+ let fullTokenChars = 0;
125
+ if (decodedRange) {
126
+ for (let row = decodedRange.s.r; row <= decodedRange.e.r; row++) {
127
+ let rowHasContent = false;
128
+ let rowChars = 0;
129
+ for (let col = decodedRange.s.c; col <= decodedRange.e.c; col++) {
130
+ const cell = getCell(sheet, row, col);
131
+ if (!cell)
132
+ continue;
133
+ const typeKey = toTypeCounterKey(cell);
134
+ cellTypeCounts[typeKey] += 1;
135
+ if (cell.f) {
136
+ formulaCellCount += 1;
137
+ if (isExternalFormula(cell.f))
138
+ externalFormulaRefCount += 1;
139
+ }
140
+ if (cell.c?.length)
141
+ commentCellCount += 1;
142
+ if (cell.l?.Target)
143
+ hyperlinkCellCount += 1;
144
+ if (!isNonEmptyCell(cell))
145
+ continue;
146
+ nonEmptyCellCount += 1;
147
+ rowHasContent = true;
148
+ const rendered = renderCell(cell);
149
+ rowChars += rendered.length + 1;
150
+ }
151
+ if (rowHasContent) {
152
+ fullTokenChars += rowChars + 1;
153
+ }
154
+ }
155
+ }
156
+ const headerSelection = resolveHeaderSelection(sheet, decodedRange, options.headerRow);
157
+ const schema = buildSchema(sheet, decodedRange, headerSelection.rowNumber, options.maxColumns);
158
+ const sample = buildSample(sheet, decodedRange, headerSelection.rowNumber, options.sampleRows, schema.columns);
159
+ const sampleTokenEstimate = estimateTokens(estimateSampleChars(sample.rows));
160
+ return {
161
+ index: sheetIndex + 1,
162
+ name,
163
+ visibility,
164
+ usedRange,
165
+ totalRows,
166
+ totalCols,
167
+ rectangularRangeCellCount,
168
+ nonEmptyCellCount,
169
+ cellTypeCounts,
170
+ formulaCellCount,
171
+ commentCellCount,
172
+ hyperlinkCellCount,
173
+ mergedRangeCount: sheet['!merges']?.length ?? 0,
174
+ hiddenRowCount: sheet['!rows']?.filter(row => row?.hidden).length ?? 0,
175
+ hiddenColumnCount: sheet['!cols']?.filter(col => col?.hidden).length ?? 0,
176
+ autoFilterRef: sheet['!autofilter']?.ref ?? null,
177
+ protected: !!sheet['!protect'],
178
+ definedNames: definedNames.filter((definedName) => definedName.sheetIndex === sheetIndex),
179
+ externalFormulaRefCount,
180
+ headerSelection,
181
+ schema,
182
+ sample,
183
+ sampleTokenEstimate,
184
+ fullTokenEstimate: estimateTokens(fullTokenChars),
185
+ estimateMethod: 'full_scan',
186
+ };
187
+ }
188
+ function buildSchema(sheet, range, headerRowNumber, maxColumns) {
189
+ if (!range)
190
+ return { truncated: false, columns: [] };
191
+ const cappedCols = Math.min(maxColumns, range.e.c - range.s.c + 1);
192
+ const columns = [];
193
+ const headerRowIndex = headerRowNumber != null ? headerRowNumber - 1 : null;
194
+ const dataStartRow = headerRowIndex != null ? Math.max(range.s.r, headerRowIndex + 1) : range.s.r;
195
+ const dataRowCount = Math.max(0, range.e.r - dataStartRow + 1);
196
+ for (let offset = 0; offset < cappedCols; offset++) {
197
+ const colIndex = range.s.c + offset;
198
+ const headerCell = headerRowIndex != null ? getCell(sheet, headerRowIndex, colIndex) : undefined;
199
+ const name = headerRowIndex != null
200
+ ? renderHeaderName(headerCell, colIndex)
201
+ : XLSX.utils.encode_col(colIndex);
202
+ columns.push({
203
+ index: offset + 1,
204
+ letter: XLSX.utils.encode_col(colIndex),
205
+ name,
206
+ examples: [],
207
+ nonEmptyCount: 0,
208
+ scannedCount: 0,
209
+ typeCounts: {
210
+ string: 0,
211
+ number: 0,
212
+ boolean: 0,
213
+ date: 0,
214
+ error: 0,
215
+ blank_stub: 0,
216
+ unknown: 0,
217
+ },
218
+ });
219
+ }
220
+ for (let row = dataStartRow; row <= range.e.r; row++) {
221
+ for (let offset = 0; offset < cappedCols; offset++) {
222
+ const column = columns[offset];
223
+ const colIndex = range.s.c + offset;
224
+ const cell = getCell(sheet, row, colIndex);
225
+ if (!cell || !isNonEmptyCell(cell))
226
+ continue;
227
+ column.nonEmptyCount += 1;
228
+ if (column.scannedCount >= MAX_COLUMN_SCAN_VALUES)
229
+ continue;
230
+ column.scannedCount += 1;
231
+ const valueType = inferValueType(cell);
232
+ column.typeCounts[valueType] += 1;
233
+ const rendered = renderCell(cell);
234
+ if (rendered && column.examples.length < 3) {
235
+ column.examples.push(rendered);
236
+ }
237
+ }
238
+ }
239
+ return {
240
+ truncated: cappedCols < (range.e.c - range.s.c + 1),
241
+ columns: columns.map((column) => ({
242
+ index: column.index,
243
+ letter: column.letter,
244
+ name: column.name,
245
+ dominantType: dominantColumnType(column.typeCounts),
246
+ nonEmptyCount: column.nonEmptyCount,
247
+ nonEmptyRatio: dataRowCount > 0 ? Number((column.nonEmptyCount / dataRowCount).toFixed(3)) : 0,
248
+ examples: column.examples,
249
+ })),
250
+ };
251
+ }
252
+ function buildSample(sheet, range, headerRowNumber, sampleRows, columns) {
253
+ if (!range || sampleRows <= 0 || columns.length === 0) {
254
+ return {
255
+ truncatedRows: false,
256
+ truncatedColumns: false,
257
+ rows: [],
258
+ };
259
+ }
260
+ const startRow = headerRowNumber != null ? Math.max(range.s.r, headerRowNumber) : range.s.r;
261
+ const rows = [];
262
+ for (let row = startRow; row <= range.e.r && rows.length < sampleRows; row++) {
263
+ const values = {};
264
+ let rowHasContent = false;
265
+ for (let offset = 0; offset < columns.length; offset++) {
266
+ const colIndex = range.s.c + offset;
267
+ const rendered = renderCell(getCell(sheet, row, colIndex));
268
+ if (rendered)
269
+ rowHasContent = true;
270
+ values[columns[offset].name] = rendered;
271
+ }
272
+ if (!rowHasContent)
273
+ continue;
274
+ rows.push({ rowNumber: row + 1, values });
275
+ }
276
+ const lastSampledRowIndex = rows.length > 0 ? rows[rows.length - 1].rowNumber - 1 : startRow - 1;
277
+ let hasMoreRows = false;
278
+ for (let row = lastSampledRowIndex + 1; row <= range.e.r; row++) {
279
+ for (let offset = 0; offset < columns.length; offset++) {
280
+ const colIndex = range.s.c + offset;
281
+ if (renderCell(getCell(sheet, row, colIndex))) {
282
+ hasMoreRows = true;
283
+ break;
284
+ }
285
+ }
286
+ if (hasMoreRows)
287
+ break;
288
+ }
289
+ return {
290
+ truncatedRows: hasMoreRows,
291
+ truncatedColumns: columns.length < (range.e.c - range.s.c + 1),
292
+ rows,
293
+ };
294
+ }
295
+ function resolveHeaderSelection(sheet, range, headerRow) {
296
+ if (!range) {
297
+ return {
298
+ requested: headerRow,
299
+ mode: headerRow === 'auto' ? 'auto' : headerRow === 'none' ? 'none' : 'explicit',
300
+ rowNumber: null,
301
+ };
302
+ }
303
+ if (headerRow === 'none') {
304
+ return { requested: 'none', mode: 'none', rowNumber: null };
305
+ }
306
+ if (typeof headerRow === 'number') {
307
+ return { requested: headerRow, mode: 'explicit', rowNumber: headerRow };
308
+ }
309
+ const candidateRows = firstNonEmptyRows(sheet, range, MAX_HEADER_SCAN_ROWS);
310
+ for (const row of candidateRows) {
311
+ const populated = populatedCells(sheet, range, row);
312
+ if (populated.length === 0)
313
+ continue;
314
+ const renderedStrings = populated
315
+ .map(cell => normalizeHeaderValue(renderCell(cell)))
316
+ .filter(Boolean);
317
+ if (renderedStrings.length / populated.length < 0.5)
318
+ continue;
319
+ if (new Set(renderedStrings).size !== renderedStrings.length)
320
+ continue;
321
+ return { requested: 'auto', mode: 'auto', rowNumber: row + 1 };
322
+ }
323
+ return { requested: 'auto', mode: 'auto', rowNumber: null };
324
+ }
325
+ function firstNonEmptyRows(sheet, range, limit) {
326
+ const rows = [];
327
+ for (let row = range.s.r; row <= range.e.r && rows.length < limit; row++) {
328
+ if (populatedCells(sheet, range, row).length > 0) {
329
+ rows.push(row);
330
+ }
331
+ }
332
+ return rows;
333
+ }
334
+ function populatedCells(sheet, range, row) {
335
+ const cells = [];
336
+ for (let col = range.s.c; col <= range.e.c; col++) {
337
+ const cell = getCell(sheet, row, col);
338
+ if (!cell || !isNonEmptyCell(cell))
339
+ continue;
340
+ cells.push(cell);
341
+ }
342
+ return cells;
343
+ }
344
+ function extractDefinedNames(workbook, sheetNames) {
345
+ return (workbook.Workbook?.Names ?? []).map((name) => ({
346
+ name: String(name.Name ?? ''),
347
+ ref: String(name.Ref ?? ''),
348
+ scope: typeof name.Sheet === 'number' ? 'sheet' : 'workbook',
349
+ sheetIndex: typeof name.Sheet === 'number' ? name.Sheet : undefined,
350
+ sheetName: typeof name.Sheet === 'number' ? sheetNames[name.Sheet] : undefined,
351
+ external: isExternalFormula(String(name.Ref ?? '')),
352
+ }));
353
+ }
354
+ function mapVisibility(hidden) {
355
+ if (hidden === 1)
356
+ return 'hidden';
357
+ if (hidden === 2)
358
+ return 'very_hidden';
359
+ return 'visible';
360
+ }
361
+ export function getCell(sheet, row, col) {
362
+ return sheet[XLSX.utils.encode_cell({ r: row, c: col })];
363
+ }
364
+ export function renderCell(cell) {
365
+ if (!cell)
366
+ return '';
367
+ if (typeof cell.w === 'string' && cell.w.trim())
368
+ return cell.w.trim();
369
+ if (cell.v instanceof Date)
370
+ return cell.v.toISOString();
371
+ if (cell.t === 'b')
372
+ return String(Boolean(cell.v));
373
+ if (cell.t === 'e')
374
+ return cell.w?.trim() || '#ERROR';
375
+ if (cell.v == null)
376
+ return cell.f?.trim() || '';
377
+ return String(cell.v).trim();
378
+ }
379
+ function renderHeaderName(cell, colIndex) {
380
+ const rendered = renderCell(cell);
381
+ return rendered || XLSX.utils.encode_col(colIndex);
382
+ }
383
+ export function isNonEmptyCell(cell) {
384
+ if (cell.f)
385
+ return true;
386
+ if (cell.t === 'z')
387
+ return false;
388
+ if (cell.c?.length)
389
+ return true;
390
+ if (cell.l?.Target)
391
+ return true;
392
+ return renderCell(cell).length > 0;
393
+ }
394
+ function inferValueType(cell) {
395
+ if (cell.t === 's')
396
+ return 'string';
397
+ if (cell.t === 'n')
398
+ return 'number';
399
+ if (cell.t === 'b')
400
+ return 'boolean';
401
+ if (cell.t === 'd')
402
+ return 'date';
403
+ if (cell.t === 'e')
404
+ return 'error';
405
+ if (cell.t === 'z')
406
+ return 'blank_stub';
407
+ if (cell.v instanceof Date)
408
+ return 'date';
409
+ if (typeof cell.v === 'string')
410
+ return 'string';
411
+ if (typeof cell.v === 'number')
412
+ return 'number';
413
+ if (typeof cell.v === 'boolean')
414
+ return 'boolean';
415
+ return 'unknown';
416
+ }
417
+ function toTypeCounterKey(cell) {
418
+ const inferred = inferValueType(cell);
419
+ if (inferred === 'blank_stub')
420
+ return 'blankStub';
421
+ if (inferred === 'string')
422
+ return 'string';
423
+ if (inferred === 'number')
424
+ return 'number';
425
+ if (inferred === 'boolean')
426
+ return 'boolean';
427
+ if (inferred === 'date')
428
+ return 'date';
429
+ return 'error';
430
+ }
431
+ function dominantColumnType(typeCounts) {
432
+ const entries = Object.entries(typeCounts)
433
+ .filter(([, count]) => count > 0)
434
+ .sort((a, b) => b[1] - a[1]);
435
+ return entries[0]?.[0] ?? 'unknown';
436
+ }
437
+ function normalizeHeaderValue(value) {
438
+ return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '');
439
+ }
440
+ function isExternalFormula(formula) {
441
+ return /\[[^\]]+\]/.test(formula) || /https?:\/\//i.test(formula);
442
+ }
443
+ function estimateSampleChars(rows) {
444
+ let chars = 0;
445
+ for (const row of rows) {
446
+ chars += String(row.rowNumber).length + 1;
447
+ for (const value of Object.values(row.values)) {
448
+ chars += value.length + 1;
449
+ }
450
+ chars += 1;
451
+ }
452
+ return chars;
453
+ }
454
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/sheet/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SheetInspectPayload, SheetInspectionResult } from './types.js';
2
+ export declare function formatSheetPayloadJson(payload: SheetInspectPayload): string;
3
+ export declare function formatSheetInspection(result: SheetInspectionResult, ci?: boolean): string;