@cesarandreslopez/occ 0.3.1 → 0.4.1

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 (150) hide show
  1. package/README.md +130 -4
  2. package/dist/src/cli-validation.d.ts +14 -0
  3. package/dist/src/cli-validation.js +58 -0
  4. package/dist/src/cli-validation.js.map +1 -0
  5. package/dist/src/cli.js +26 -8
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/code/build.d.ts +7 -5
  8. package/dist/src/code/build.js +68 -11
  9. package/dist/src/code/build.js.map +1 -1
  10. package/dist/src/code/command.js +26 -19
  11. package/dist/src/code/command.js.map +1 -1
  12. package/dist/src/code/discover.d.ts +6 -4
  13. package/dist/src/code/discover.js +5 -0
  14. package/dist/src/code/discover.js.map +1 -1
  15. package/dist/src/code/languages.d.ts +28 -7
  16. package/dist/src/code/languages.js +9 -0
  17. package/dist/src/code/languages.js.map +1 -1
  18. package/dist/src/code/output.js +12 -3
  19. package/dist/src/code/output.js.map +1 -1
  20. package/dist/src/code/parsers.js +75 -10
  21. package/dist/src/code/parsers.js.map +1 -1
  22. package/dist/src/code/query.js +82 -22
  23. package/dist/src/code/query.js.map +1 -1
  24. package/dist/src/code/types.d.ts +1201 -145
  25. package/dist/src/code/types.js +150 -1
  26. package/dist/src/code/types.js.map +1 -1
  27. package/dist/src/doc/command.d.ts +2 -0
  28. package/dist/src/doc/command.js +54 -0
  29. package/dist/src/doc/command.js.map +1 -0
  30. package/dist/src/doc/inspect-docx.d.ts +14 -0
  31. package/dist/src/doc/inspect-docx.js +188 -0
  32. package/dist/src/doc/inspect-docx.js.map +1 -0
  33. package/dist/src/doc/inspect-odt.d.ts +8 -0
  34. package/dist/src/doc/inspect-odt.js +92 -0
  35. package/dist/src/doc/inspect-odt.js.map +1 -0
  36. package/dist/src/doc/inspect-pdf.d.ts +8 -0
  37. package/dist/src/doc/inspect-pdf.js +88 -0
  38. package/dist/src/doc/inspect-pdf.js.map +1 -0
  39. package/dist/src/doc/inspect.d.ts +2 -0
  40. package/dist/src/doc/inspect.js +70 -0
  41. package/dist/src/doc/inspect.js.map +1 -0
  42. package/dist/src/doc/output.d.ts +3 -0
  43. package/dist/src/doc/output.js +82 -0
  44. package/dist/src/doc/output.js.map +1 -0
  45. package/dist/src/doc/types.d.ts +172 -0
  46. package/dist/src/doc/types.js +62 -0
  47. package/dist/src/doc/types.js.map +1 -0
  48. package/dist/src/inspect/shared.d.ts +20 -0
  49. package/dist/src/inspect/shared.js +29 -0
  50. package/dist/src/inspect/shared.js.map +1 -0
  51. package/dist/src/inspect/xlsx-cells.d.ts +4 -0
  52. package/dist/src/inspect/xlsx-cells.js +31 -0
  53. package/dist/src/inspect/xlsx-cells.js.map +1 -0
  54. package/dist/src/markdown/convert.js +6 -4
  55. package/dist/src/markdown/convert.js.map +1 -1
  56. package/dist/src/output/tabular.d.ts +6 -4
  57. package/dist/src/output/tabular.js +5 -0
  58. package/dist/src/output/tabular.js.map +1 -1
  59. package/dist/src/output/tree.d.ts +21 -9
  60. package/dist/src/output/tree.js +10 -0
  61. package/dist/src/output/tree.js.map +1 -1
  62. package/dist/src/parsers/docx.js +5 -1
  63. package/dist/src/parsers/docx.js.map +1 -1
  64. package/dist/src/parsers/odf.js +4 -3
  65. package/dist/src/parsers/odf.js.map +1 -1
  66. package/dist/src/parsers/pdf.js +6 -1
  67. package/dist/src/parsers/pdf.js.map +1 -1
  68. package/dist/src/parsers/pptx.js +2 -1
  69. package/dist/src/parsers/pptx.js.map +1 -1
  70. package/dist/src/parsers/xlsx.js +11 -4
  71. package/dist/src/parsers/xlsx.js.map +1 -1
  72. package/dist/src/progress.d.ts +7 -5
  73. package/dist/src/progress.js +6 -0
  74. package/dist/src/progress.js.map +1 -1
  75. package/dist/src/scc.d.ts +35 -26
  76. package/dist/src/scc.js +26 -1
  77. package/dist/src/scc.js.map +1 -1
  78. package/dist/src/sheet/command.d.ts +2 -0
  79. package/dist/src/sheet/command.js +61 -0
  80. package/dist/src/sheet/command.js.map +1 -0
  81. package/dist/src/sheet/inspect.d.ts +3 -0
  82. package/dist/src/sheet/inspect.js +426 -0
  83. package/dist/src/sheet/inspect.js.map +1 -0
  84. package/dist/src/sheet/output.d.ts +3 -0
  85. package/dist/src/sheet/output.js +158 -0
  86. package/dist/src/sheet/output.js.map +1 -0
  87. package/dist/src/sheet/types.d.ts +472 -0
  88. package/dist/src/sheet/types.js +119 -0
  89. package/dist/src/sheet/types.js.map +1 -0
  90. package/dist/src/slide/command.d.ts +2 -0
  91. package/dist/src/slide/command.js +54 -0
  92. package/dist/src/slide/command.js.map +1 -0
  93. package/dist/src/slide/inspect-odp.d.ts +7 -0
  94. package/dist/src/slide/inspect-odp.js +105 -0
  95. package/dist/src/slide/inspect-odp.js.map +1 -0
  96. package/dist/src/slide/inspect-pptx.d.ts +11 -0
  97. package/dist/src/slide/inspect-pptx.js +157 -0
  98. package/dist/src/slide/inspect-pptx.js.map +1 -0
  99. package/dist/src/slide/inspect.d.ts +2 -0
  100. package/dist/src/slide/inspect.js +76 -0
  101. package/dist/src/slide/inspect.js.map +1 -0
  102. package/dist/src/slide/output.d.ts +3 -0
  103. package/dist/src/slide/output.js +92 -0
  104. package/dist/src/slide/output.js.map +1 -0
  105. package/dist/src/slide/types.d.ts +167 -0
  106. package/dist/src/slide/types.js +61 -0
  107. package/dist/src/slide/types.js.map +1 -0
  108. package/dist/src/stats.d.ts +6 -4
  109. package/dist/src/stats.js +5 -0
  110. package/dist/src/stats.js.map +1 -1
  111. package/dist/src/structure/types.d.ts +19 -11
  112. package/dist/src/structure/types.js +26 -21
  113. package/dist/src/structure/types.js.map +1 -1
  114. package/dist/src/table/command.d.ts +2 -0
  115. package/dist/src/table/command.js +58 -0
  116. package/dist/src/table/command.js.map +1 -0
  117. package/dist/src/table/inspect-docx.d.ts +2 -0
  118. package/dist/src/table/inspect-docx.js +108 -0
  119. package/dist/src/table/inspect-docx.js.map +1 -0
  120. package/dist/src/table/inspect-odp.d.ts +2 -0
  121. package/dist/src/table/inspect-odp.js +106 -0
  122. package/dist/src/table/inspect-odp.js.map +1 -0
  123. package/dist/src/table/inspect-odt.d.ts +2 -0
  124. package/dist/src/table/inspect-odt.js +100 -0
  125. package/dist/src/table/inspect-odt.js.map +1 -0
  126. package/dist/src/table/inspect-pptx.d.ts +2 -0
  127. package/dist/src/table/inspect-pptx.js +112 -0
  128. package/dist/src/table/inspect-pptx.js.map +1 -0
  129. package/dist/src/table/inspect-xlsx.d.ts +2 -0
  130. package/dist/src/table/inspect-xlsx.js +161 -0
  131. package/dist/src/table/inspect-xlsx.js.map +1 -0
  132. package/dist/src/table/inspect.d.ts +2 -0
  133. package/dist/src/table/inspect.js +65 -0
  134. package/dist/src/table/inspect.js.map +1 -0
  135. package/dist/src/table/output.d.ts +3 -0
  136. package/dist/src/table/output.js +93 -0
  137. package/dist/src/table/output.js.map +1 -0
  138. package/dist/src/table/types.d.ts +104 -0
  139. package/dist/src/table/types.js +40 -0
  140. package/dist/src/table/types.js.map +1 -0
  141. package/dist/src/types.d.ts +25 -20
  142. package/dist/src/types.js +21 -1
  143. package/dist/src/types.js.map +1 -1
  144. package/dist/src/utils.d.ts +11 -1
  145. package/dist/src/utils.js +2 -0
  146. package/dist/src/utils.js.map +1 -1
  147. package/dist/src/walker.d.ts +21 -12
  148. package/dist/src/walker.js +13 -0
  149. package/dist/src/walker.js.map +1 -1
  150. package/package.json +3 -2
@@ -0,0 +1,426 @@
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
+ import { getCell, renderCell, isNonEmptyCell } from '../inspect/xlsx-cells.js';
6
+ const MAX_HEADER_SCAN_ROWS = 10;
7
+ const MAX_COLUMN_SCAN_VALUES = 200;
8
+ export function createSheetPayload(filePath, query, results) {
9
+ return {
10
+ file: filePath,
11
+ query,
12
+ results,
13
+ };
14
+ }
15
+ export async function inspectWorkbook(filePath, options) {
16
+ const resolvedPath = path.resolve(filePath);
17
+ if (path.extname(resolvedPath).toLowerCase() !== '.xlsx') {
18
+ throw new Error(`Unsupported spreadsheet format: ${path.extname(resolvedPath) || '(none)'} (expected .xlsx)`);
19
+ }
20
+ const buffer = await readFile(resolvedPath);
21
+ const baseWorkbook = XLSX.read(buffer, { type: 'buffer', bookProps: true, bookSheets: true });
22
+ const workbook = XLSX.read(buffer, {
23
+ type: 'buffer',
24
+ cellFormula: true,
25
+ cellStyles: true,
26
+ cellDates: true,
27
+ cellText: true,
28
+ sheetStubs: true,
29
+ });
30
+ const inventory = resolveRequestedSheets(workbook, options.sheet);
31
+ const workbookNames = extractDefinedNames(workbook, inventory.sheetNames);
32
+ const sheetProfiles = inventory.indices.map((sheetIndex) => inspectSheet(workbook, sheetIndex, workbookNames, options));
33
+ const workbookInspection = inspectWorkbookMetadata(resolvedPath, buffer.length, baseWorkbook, workbookNames, sheetProfiles);
34
+ return {
35
+ workbook: workbookInspection,
36
+ sheets: sheetProfiles,
37
+ };
38
+ }
39
+ function inspectWorkbookMetadata(filePath, size, workbook, definedNames, sheets) {
40
+ const visibleSheetCount = sheets.filter(sheet => sheet.visibility === 'visible').length;
41
+ const hiddenSheetCount = sheets.filter(sheet => sheet.visibility === 'hidden').length;
42
+ const veryHiddenSheetCount = sheets.filter(sheet => sheet.visibility === 'very_hidden').length;
43
+ const riskFlags = {
44
+ hiddenSheets: hiddenSheetCount + veryHiddenSheetCount > 0,
45
+ formulas: sheets.some(sheet => sheet.formulaCellCount > 0),
46
+ comments: sheets.some(sheet => sheet.commentCellCount > 0),
47
+ hyperlinks: sheets.some(sheet => sheet.hyperlinkCellCount > 0),
48
+ mergedCells: sheets.some(sheet => sheet.mergedRangeCount > 0),
49
+ protectedSheets: sheets.some(sheet => sheet.protected),
50
+ externalFormulaRefs: sheets.some(sheet => sheet.externalFormulaRefCount > 0) || definedNames.some(name => name.external),
51
+ };
52
+ return {
53
+ file: filePath,
54
+ format: 'xlsx',
55
+ size,
56
+ properties: pickWorkbookProperties(workbook.Props),
57
+ customPropertyCount: Object.keys(workbook.Custprops ?? {}).length,
58
+ customProperties: (workbook.Custprops ?? {}),
59
+ sheetCount: workbook.SheetNames.length,
60
+ visibleSheetCount,
61
+ hiddenSheetCount,
62
+ veryHiddenSheetCount,
63
+ definedNames: definedNames.filter(name => name.scope === 'workbook'),
64
+ riskFlags,
65
+ };
66
+ }
67
+ function pickWorkbookProperties(props) {
68
+ if (!props)
69
+ return {};
70
+ return {
71
+ title: asOptionalString(props.Title),
72
+ subject: asOptionalString(props.Subject),
73
+ author: asOptionalString(props.Author),
74
+ company: asOptionalString(props.Company),
75
+ manager: asOptionalString(props.Manager),
76
+ createdDate: formatDateLike(props.CreatedDate),
77
+ modifiedDate: formatDateLike(props.ModifiedDate),
78
+ };
79
+ }
80
+ function resolveRequestedSheets(workbook, selector) {
81
+ if (!selector) {
82
+ return {
83
+ indices: workbook.SheetNames.map((_, index) => index),
84
+ sheetNames: workbook.SheetNames,
85
+ };
86
+ }
87
+ const byName = workbook.SheetNames.findIndex(name => name === selector);
88
+ if (byName >= 0) {
89
+ return { indices: [byName], sheetNames: workbook.SheetNames };
90
+ }
91
+ if (/^\d+$/.test(selector)) {
92
+ const index = Number.parseInt(selector, 10) - 1;
93
+ if (index >= 0 && index < workbook.SheetNames.length) {
94
+ return { indices: [index], sheetNames: workbook.SheetNames };
95
+ }
96
+ }
97
+ throw new Error(`Sheet not found: ${selector}`);
98
+ }
99
+ function inspectSheet(workbook, sheetIndex, definedNames, options) {
100
+ const name = workbook.SheetNames[sheetIndex];
101
+ const sheet = workbook.Sheets[name];
102
+ if (!sheet) {
103
+ throw new Error(`Worksheet missing from workbook: ${name}`);
104
+ }
105
+ const workbookSheetMeta = workbook.Workbook?.Sheets?.[sheetIndex];
106
+ const visibility = mapVisibility(workbookSheetMeta?.Hidden);
107
+ const usedRange = typeof sheet['!ref'] === 'string' ? sheet['!ref'] : null;
108
+ const decodedRange = usedRange ? XLSX.utils.decode_range(usedRange) : null;
109
+ const totalRows = decodedRange ? decodedRange.e.r - decodedRange.s.r + 1 : 0;
110
+ const totalCols = decodedRange ? decodedRange.e.c - decodedRange.s.c + 1 : 0;
111
+ const rectangularRangeCellCount = totalRows * totalCols;
112
+ const cellTypeCounts = {
113
+ string: 0,
114
+ number: 0,
115
+ boolean: 0,
116
+ date: 0,
117
+ error: 0,
118
+ blankStub: 0,
119
+ };
120
+ let nonEmptyCellCount = 0;
121
+ let formulaCellCount = 0;
122
+ let commentCellCount = 0;
123
+ let hyperlinkCellCount = 0;
124
+ let externalFormulaRefCount = 0;
125
+ let fullTokenChars = 0;
126
+ if (decodedRange) {
127
+ for (let row = decodedRange.s.r; row <= decodedRange.e.r; row++) {
128
+ let rowHasContent = false;
129
+ let rowChars = 0;
130
+ for (let col = decodedRange.s.c; col <= decodedRange.e.c; col++) {
131
+ const cell = getCell(sheet, row, col);
132
+ if (!cell)
133
+ continue;
134
+ const typeKey = toTypeCounterKey(cell);
135
+ cellTypeCounts[typeKey] += 1;
136
+ if (cell.f) {
137
+ formulaCellCount += 1;
138
+ if (isExternalFormula(cell.f))
139
+ externalFormulaRefCount += 1;
140
+ }
141
+ if (cell.c?.length)
142
+ commentCellCount += 1;
143
+ if (cell.l?.Target)
144
+ hyperlinkCellCount += 1;
145
+ if (!isNonEmptyCell(cell))
146
+ continue;
147
+ nonEmptyCellCount += 1;
148
+ rowHasContent = true;
149
+ const rendered = renderCell(cell);
150
+ rowChars += rendered.length + 1;
151
+ }
152
+ if (rowHasContent) {
153
+ fullTokenChars += rowChars + 1;
154
+ }
155
+ }
156
+ }
157
+ const headerSelection = resolveHeaderSelection(sheet, decodedRange, options.headerRow);
158
+ const schema = buildSchema(sheet, decodedRange, headerSelection.rowNumber, options.maxColumns);
159
+ const sample = buildSample(sheet, decodedRange, headerSelection.rowNumber, options.sampleRows, schema.columns);
160
+ const sampleTokenEstimate = estimateTokens(estimateSampleChars(sample.rows));
161
+ return {
162
+ index: sheetIndex + 1,
163
+ name,
164
+ visibility,
165
+ usedRange,
166
+ totalRows,
167
+ totalCols,
168
+ rectangularRangeCellCount,
169
+ nonEmptyCellCount,
170
+ cellTypeCounts,
171
+ formulaCellCount,
172
+ commentCellCount,
173
+ hyperlinkCellCount,
174
+ mergedRangeCount: sheet['!merges']?.length ?? 0,
175
+ hiddenRowCount: sheet['!rows']?.filter(row => row?.hidden).length ?? 0,
176
+ hiddenColumnCount: sheet['!cols']?.filter(col => col?.hidden).length ?? 0,
177
+ autoFilterRef: sheet['!autofilter']?.ref ?? null,
178
+ protected: !!sheet['!protect'],
179
+ definedNames: definedNames.filter((definedName) => definedName.sheetIndex === sheetIndex),
180
+ externalFormulaRefCount,
181
+ headerSelection,
182
+ schema,
183
+ sample,
184
+ sampleTokenEstimate,
185
+ fullTokenEstimate: estimateTokens(fullTokenChars),
186
+ estimateMethod: 'full_scan',
187
+ };
188
+ }
189
+ function buildSchema(sheet, range, headerRowNumber, maxColumns) {
190
+ if (!range)
191
+ return { truncated: false, columns: [] };
192
+ const cappedCols = Math.min(maxColumns, range.e.c - range.s.c + 1);
193
+ const columns = [];
194
+ const headerRowIndex = headerRowNumber != null ? headerRowNumber - 1 : null;
195
+ const dataStartRow = headerRowIndex != null ? Math.max(range.s.r, headerRowIndex + 1) : range.s.r;
196
+ const dataRowCount = Math.max(0, range.e.r - dataStartRow + 1);
197
+ for (let offset = 0; offset < cappedCols; offset++) {
198
+ const colIndex = range.s.c + offset;
199
+ const headerCell = headerRowIndex != null ? getCell(sheet, headerRowIndex, colIndex) : undefined;
200
+ const name = headerRowIndex != null
201
+ ? renderHeaderName(headerCell, colIndex)
202
+ : XLSX.utils.encode_col(colIndex);
203
+ columns.push({
204
+ index: offset + 1,
205
+ letter: XLSX.utils.encode_col(colIndex),
206
+ name,
207
+ examples: [],
208
+ nonEmptyCount: 0,
209
+ scannedCount: 0,
210
+ typeCounts: {
211
+ string: 0,
212
+ number: 0,
213
+ boolean: 0,
214
+ date: 0,
215
+ error: 0,
216
+ blank_stub: 0,
217
+ unknown: 0,
218
+ },
219
+ });
220
+ }
221
+ for (let row = dataStartRow; row <= range.e.r; row++) {
222
+ for (let offset = 0; offset < cappedCols; offset++) {
223
+ const column = columns[offset];
224
+ const colIndex = range.s.c + offset;
225
+ const cell = getCell(sheet, row, colIndex);
226
+ if (!cell || !isNonEmptyCell(cell))
227
+ continue;
228
+ column.nonEmptyCount += 1;
229
+ if (column.scannedCount >= MAX_COLUMN_SCAN_VALUES)
230
+ continue;
231
+ column.scannedCount += 1;
232
+ const valueType = inferValueType(cell);
233
+ column.typeCounts[valueType] += 1;
234
+ const rendered = renderCell(cell);
235
+ if (rendered && column.examples.length < 3) {
236
+ column.examples.push(rendered);
237
+ }
238
+ }
239
+ }
240
+ return {
241
+ truncated: cappedCols < (range.e.c - range.s.c + 1),
242
+ columns: columns.map((column) => ({
243
+ index: column.index,
244
+ letter: column.letter,
245
+ name: column.name,
246
+ dominantType: dominantColumnType(column.typeCounts),
247
+ nonEmptyCount: column.nonEmptyCount,
248
+ nonEmptyRatio: dataRowCount > 0 ? Number((column.nonEmptyCount / dataRowCount).toFixed(3)) : 0,
249
+ examples: column.examples,
250
+ })),
251
+ };
252
+ }
253
+ function buildSample(sheet, range, headerRowNumber, sampleRows, columns) {
254
+ if (!range || sampleRows <= 0 || columns.length === 0) {
255
+ return {
256
+ truncatedRows: false,
257
+ truncatedColumns: false,
258
+ rows: [],
259
+ };
260
+ }
261
+ const startRow = headerRowNumber != null ? Math.max(range.s.r, headerRowNumber) : range.s.r;
262
+ const rows = [];
263
+ for (let row = startRow; row <= range.e.r && rows.length < sampleRows; row++) {
264
+ const values = {};
265
+ let rowHasContent = false;
266
+ for (let offset = 0; offset < columns.length; offset++) {
267
+ const colIndex = range.s.c + offset;
268
+ const rendered = renderCell(getCell(sheet, row, colIndex));
269
+ if (rendered)
270
+ rowHasContent = true;
271
+ values[columns[offset].name] = rendered;
272
+ }
273
+ if (!rowHasContent)
274
+ continue;
275
+ rows.push({ rowNumber: row + 1, values });
276
+ }
277
+ const lastSampledRowIndex = rows.length > 0 ? rows[rows.length - 1].rowNumber - 1 : startRow - 1;
278
+ let hasMoreRows = false;
279
+ for (let row = lastSampledRowIndex + 1; row <= range.e.r; row++) {
280
+ for (let offset = 0; offset < columns.length; offset++) {
281
+ const colIndex = range.s.c + offset;
282
+ if (renderCell(getCell(sheet, row, colIndex))) {
283
+ hasMoreRows = true;
284
+ break;
285
+ }
286
+ }
287
+ if (hasMoreRows)
288
+ break;
289
+ }
290
+ return {
291
+ truncatedRows: hasMoreRows,
292
+ truncatedColumns: columns.length < (range.e.c - range.s.c + 1),
293
+ rows,
294
+ };
295
+ }
296
+ function resolveHeaderSelection(sheet, range, headerRow) {
297
+ if (!range) {
298
+ return {
299
+ requested: headerRow,
300
+ mode: headerRow === 'auto' ? 'auto' : headerRow === 'none' ? 'none' : 'explicit',
301
+ rowNumber: null,
302
+ };
303
+ }
304
+ if (headerRow === 'none') {
305
+ return { requested: 'none', mode: 'none', rowNumber: null };
306
+ }
307
+ if (typeof headerRow === 'number') {
308
+ return { requested: headerRow, mode: 'explicit', rowNumber: headerRow };
309
+ }
310
+ const candidateRows = firstNonEmptyRows(sheet, range, MAX_HEADER_SCAN_ROWS);
311
+ for (const row of candidateRows) {
312
+ const populated = populatedCells(sheet, range, row);
313
+ if (populated.length === 0)
314
+ continue;
315
+ const renderedStrings = populated
316
+ .map(cell => normalizeHeaderValue(renderCell(cell)))
317
+ .filter(Boolean);
318
+ if (renderedStrings.length / populated.length < 0.5)
319
+ continue;
320
+ if (new Set(renderedStrings).size !== renderedStrings.length)
321
+ continue;
322
+ return { requested: 'auto', mode: 'auto', rowNumber: row + 1 };
323
+ }
324
+ return { requested: 'auto', mode: 'auto', rowNumber: null };
325
+ }
326
+ function firstNonEmptyRows(sheet, range, limit) {
327
+ const rows = [];
328
+ for (let row = range.s.r; row <= range.e.r && rows.length < limit; row++) {
329
+ if (populatedCells(sheet, range, row).length > 0) {
330
+ rows.push(row);
331
+ }
332
+ }
333
+ return rows;
334
+ }
335
+ function populatedCells(sheet, range, row) {
336
+ const cells = [];
337
+ for (let col = range.s.c; col <= range.e.c; col++) {
338
+ const cell = getCell(sheet, row, col);
339
+ if (!cell || !isNonEmptyCell(cell))
340
+ continue;
341
+ cells.push(cell);
342
+ }
343
+ return cells;
344
+ }
345
+ function extractDefinedNames(workbook, sheetNames) {
346
+ return (workbook.Workbook?.Names ?? []).map((name) => ({
347
+ name: String(name.Name ?? ''),
348
+ ref: String(name.Ref ?? ''),
349
+ scope: typeof name.Sheet === 'number' ? 'sheet' : 'workbook',
350
+ sheetIndex: typeof name.Sheet === 'number' ? name.Sheet : undefined,
351
+ sheetName: typeof name.Sheet === 'number' ? sheetNames[name.Sheet] : undefined,
352
+ external: isExternalFormula(String(name.Ref ?? '')),
353
+ }));
354
+ }
355
+ function mapVisibility(hidden) {
356
+ if (hidden === 1)
357
+ return 'hidden';
358
+ if (hidden === 2)
359
+ return 'very_hidden';
360
+ return 'visible';
361
+ }
362
+ function renderHeaderName(cell, colIndex) {
363
+ const rendered = renderCell(cell);
364
+ return rendered || XLSX.utils.encode_col(colIndex);
365
+ }
366
+ function inferValueType(cell) {
367
+ if (cell.t === 's')
368
+ return 'string';
369
+ if (cell.t === 'n')
370
+ return 'number';
371
+ if (cell.t === 'b')
372
+ return 'boolean';
373
+ if (cell.t === 'd')
374
+ return 'date';
375
+ if (cell.t === 'e')
376
+ return 'error';
377
+ if (cell.t === 'z')
378
+ return 'blank_stub';
379
+ if (cell.v instanceof Date)
380
+ return 'date';
381
+ if (typeof cell.v === 'string')
382
+ return 'string';
383
+ if (typeof cell.v === 'number')
384
+ return 'number';
385
+ if (typeof cell.v === 'boolean')
386
+ return 'boolean';
387
+ return 'unknown';
388
+ }
389
+ function toTypeCounterKey(cell) {
390
+ const inferred = inferValueType(cell);
391
+ if (inferred === 'blank_stub')
392
+ return 'blankStub';
393
+ if (inferred === 'string')
394
+ return 'string';
395
+ if (inferred === 'number')
396
+ return 'number';
397
+ if (inferred === 'boolean')
398
+ return 'boolean';
399
+ if (inferred === 'date')
400
+ return 'date';
401
+ return 'error';
402
+ }
403
+ function dominantColumnType(typeCounts) {
404
+ const entries = Object.entries(typeCounts)
405
+ .filter(([, count]) => count > 0)
406
+ .sort((a, b) => b[1] - a[1]);
407
+ return entries[0]?.[0] ?? 'unknown';
408
+ }
409
+ function normalizeHeaderValue(value) {
410
+ return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '');
411
+ }
412
+ function isExternalFormula(formula) {
413
+ return /\[[^\]]+\]/.test(formula) || /https?:\/\//i.test(formula);
414
+ }
415
+ function estimateSampleChars(rows) {
416
+ let chars = 0;
417
+ for (const row of rows) {
418
+ chars += String(row.rowNumber).length + 1;
419
+ for (const value of Object.values(row.values)) {
420
+ chars += value.length + 1;
421
+ }
422
+ chars += 1;
423
+ }
424
+ return chars;
425
+ }
426
+ //# 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;
@@ -0,0 +1,158 @@
1
+ import Table from 'cli-table3';
2
+ import chalk from 'chalk';
3
+ import { formatBytes, formatNumber } from '../utils.js';
4
+ import { sectionHeader, stripAnsi, tableChars } from '../output/tabular.js';
5
+ const colors = {
6
+ header: (value) => chalk.bold(value),
7
+ key: (value) => chalk.cyan(value),
8
+ value: (value) => value,
9
+ dim: (value) => chalk.dim(value),
10
+ ok: (value) => chalk.green(value),
11
+ warn: (value) => chalk.yellow(value),
12
+ };
13
+ const noColor = Object.fromEntries(Object.keys(colors).map(key => [key, (value) => value]));
14
+ function palette(ci = false) {
15
+ return ci ? noColor : colors;
16
+ }
17
+ export function formatSheetPayloadJson(payload) {
18
+ return JSON.stringify(payload, null, 2);
19
+ }
20
+ export function formatSheetInspection(result, ci = false) {
21
+ const c = palette(ci);
22
+ const sections = [];
23
+ const overviewLines = [
24
+ `${c.key('File')}: ${c.value(result.workbook.file)}`,
25
+ `${c.key('Format')}: ${c.value('XLSX')}`,
26
+ `${c.key('Size')}: ${c.value(formatBytes(result.workbook.size))}`,
27
+ `${c.key('Sheets')}: ${c.value(`${formatNumber(result.workbook.sheetCount)} total (${formatNumber(result.workbook.visibleSheetCount)} visible, ${formatNumber(result.workbook.hiddenSheetCount)} hidden, ${formatNumber(result.workbook.veryHiddenSheetCount)} very hidden)`)}`,
28
+ ];
29
+ const propEntries = Object.entries(result.workbook.properties).filter(([, value]) => value);
30
+ if (propEntries.length > 0) {
31
+ overviewLines.push(`${c.key('Properties')}: ${propEntries.map(([key, value]) => `${key}=${value}`).join(' | ')}`);
32
+ }
33
+ if (result.workbook.definedNames.length > 0) {
34
+ overviewLines.push(`${c.key('Workbook Names')}: ${result.workbook.definedNames.map(name => `${name.name}=${name.ref}`).join(' | ')}`);
35
+ }
36
+ const riskFlags = Object.entries(result.workbook.riskFlags).filter(([, enabled]) => enabled).map(([key]) => key);
37
+ overviewLines.push(`${c.key('Risk Flags')}: ${riskFlags.length > 0 ? c.warn(riskFlags.join(', ')) : c.ok('none')}`);
38
+ sections.push(overviewLines.join('\n'));
39
+ if (result.sheets.length > 0) {
40
+ const inventory = new Table({
41
+ head: [
42
+ c.key('Sheet'),
43
+ c.key('Visibility'),
44
+ c.key('Range'),
45
+ c.key('Rows'),
46
+ c.key('Cols'),
47
+ c.key('Non-Empty'),
48
+ c.key('Formulae'),
49
+ c.key('Links'),
50
+ c.key('Comments'),
51
+ c.key('Tokens'),
52
+ ],
53
+ chars: tableChars(ci),
54
+ style: { head: [], border: [] },
55
+ colAligns: ['left', 'left', 'left', 'right', 'right', 'right', 'right', 'right', 'right', 'right'],
56
+ });
57
+ for (const sheet of result.sheets) {
58
+ inventory.push([
59
+ `${sheet.index}. ${sheet.name}`,
60
+ sheet.visibility,
61
+ sheet.usedRange ?? '',
62
+ formatNumber(sheet.totalRows),
63
+ formatNumber(sheet.totalCols),
64
+ formatNumber(sheet.nonEmptyCellCount),
65
+ formatNumber(sheet.formulaCellCount),
66
+ formatNumber(sheet.hyperlinkCellCount),
67
+ formatNumber(sheet.commentCellCount),
68
+ formatNumber(sheet.fullTokenEstimate),
69
+ ]);
70
+ }
71
+ const rendered = inventory.toString();
72
+ const width = stripAnsi(rendered.split('\n')[0] ?? '').length;
73
+ sections.push(`${c.header(sectionHeader('Sheet Inventory', width, ci))}\n${rendered}`);
74
+ }
75
+ for (const sheet of result.sheets) {
76
+ sections.push(formatSheetProfile(sheet, ci));
77
+ }
78
+ return sections.join('\n\n') + '\n';
79
+ }
80
+ function formatSheetProfile(sheet, ci = false) {
81
+ const c = palette(ci);
82
+ const lines = [];
83
+ const title = `Sheet: ${sheet.name} (${sheet.visibility})`;
84
+ const summary = [
85
+ `${c.key('Range')}: ${sheet.usedRange ?? '(empty)'}`,
86
+ `${c.key('Grid')}: ${formatNumber(sheet.totalRows)} rows x ${formatNumber(sheet.totalCols)} cols (${formatNumber(sheet.rectangularRangeCellCount)} cells)`,
87
+ `${c.key('Signals')}: ${formatNumber(sheet.formulaCellCount)} formulae | ${formatNumber(sheet.commentCellCount)} comments | ${formatNumber(sheet.hyperlinkCellCount)} hyperlinks | ${formatNumber(sheet.mergedRangeCount)} merges`,
88
+ `${c.key('Layout')}: ${formatNumber(sheet.hiddenRowCount)} hidden rows | ${formatNumber(sheet.hiddenColumnCount)} hidden cols | autofilter=${sheet.autoFilterRef ?? 'none'} | protected=${sheet.protected ? 'yes' : 'no'}`,
89
+ `${c.key('Header')}: ${sheet.headerSelection.rowNumber ?? 'none'} (${sheet.headerSelection.mode})`,
90
+ `${c.key('Token Estimate')}: sample=${formatNumber(sheet.sampleTokenEstimate)} | full=${formatNumber(sheet.fullTokenEstimate)}`,
91
+ ];
92
+ if (sheet.definedNames.length > 0) {
93
+ summary.push(`${c.key('Defined Names')}: ${sheet.definedNames.map(name => `${name.name}=${name.ref}`).join(' | ')}`);
94
+ }
95
+ lines.push(summary.join('\n'));
96
+ if (sheet.schema.columns.length > 0) {
97
+ lines.push(formatSchemaTable(sheet.schema.columns, sheet.schema.truncated, ci));
98
+ }
99
+ else {
100
+ lines.push(c.dim('No schema columns found.'));
101
+ }
102
+ if (sheet.sample.rows.length > 0) {
103
+ lines.push(formatSampleTable(sheet.sample.rows, sheet.sample.truncatedRows, sheet.sample.truncatedColumns, ci));
104
+ }
105
+ else {
106
+ lines.push(c.dim('No sample rows found.'));
107
+ }
108
+ const width = Math.max(...lines.map(line => stripAnsi(line.split('\n')[0] ?? '').length), title.length, 40);
109
+ return `${c.header(sectionHeader(title, width, ci))}\n${lines.join('\n\n')}`;
110
+ }
111
+ function formatSchemaTable(columns, truncated, ci = false) {
112
+ const c = palette(ci);
113
+ const table = new Table({
114
+ head: [
115
+ c.key('Col'),
116
+ c.key('Name'),
117
+ c.key('Type'),
118
+ c.key('Non-Empty'),
119
+ c.key('Coverage'),
120
+ c.key('Examples'),
121
+ ],
122
+ chars: tableChars(ci),
123
+ style: { head: [], border: [] },
124
+ colAligns: ['left', 'left', 'left', 'right', 'right', 'left'],
125
+ });
126
+ for (const column of columns) {
127
+ table.push([
128
+ `${column.letter} (${column.index})`,
129
+ column.name,
130
+ column.dominantType,
131
+ formatNumber(column.nonEmptyCount),
132
+ `${Math.round(column.nonEmptyRatio * 100)}%`,
133
+ column.examples.join(' | '),
134
+ ]);
135
+ }
136
+ const suffix = truncated ? '\n(truncated columns)' : '';
137
+ return `${palette(ci).header('Schema')}\n${table.toString()}${suffix}`;
138
+ }
139
+ function formatSampleTable(rows, truncatedRows, truncatedColumns, ci = false) {
140
+ const c = palette(ci);
141
+ const columnNames = Object.keys(rows[0]?.values ?? {});
142
+ const table = new Table({
143
+ head: [c.key('Row'), ...columnNames.map(name => c.key(name))],
144
+ chars: tableChars(ci),
145
+ style: { head: [], border: [] },
146
+ });
147
+ for (const row of rows) {
148
+ table.push([String(row.rowNumber), ...columnNames.map(name => row.values[name] ?? '')]);
149
+ }
150
+ const notes = [];
151
+ if (truncatedRows)
152
+ notes.push('truncated rows');
153
+ if (truncatedColumns)
154
+ notes.push('truncated columns');
155
+ const suffix = notes.length > 0 ? `\n(${notes.join(', ')})` : '';
156
+ return `${palette(ci).header('Sample')}\n${table.toString()}${suffix}`;
157
+ }
158
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/sheet/output.ts"],"names":[],"mappings":"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"}