@hewliyang/headless-spreadjs
Advanced tools
| export declare class CommandAbortedError extends Error { | ||
| constructor(message?: string); | ||
| } | ||
| export declare function registerSignalTimeout(signal: AbortSignal, timeoutMs: number, message?: string): void; | ||
| export declare function throwIfAborted(signal?: AbortSignal | null): void; | ||
| export declare function isAbortError(err: unknown): boolean; | ||
| //# sourceMappingURL=abort.d.ts.map |
| {"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../src/cli/abort.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,SAAoB;CAIxC;AAaD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,GACf,IAAI,CAMN;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAWhE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAElD"} |
| export class CommandAbortedError extends Error { | ||
| constructor(message = "Command aborted") { | ||
| super(message); | ||
| this.name = "CommandAbortedError"; | ||
| } | ||
| } | ||
| const signalTimeouts = new WeakMap(); | ||
| function reasonToMessage(reason) { | ||
| if (reason instanceof Error) | ||
| return reason.message; | ||
| if (typeof reason === "string" && reason.trim()) | ||
| return reason; | ||
| return "Command aborted"; | ||
| } | ||
| export function registerSignalTimeout(signal, timeoutMs, message) { | ||
| signalTimeouts.set(signal, { | ||
| deadlineAt: Date.now() + timeoutMs, | ||
| message: message ?? `Command timed out after ${Math.ceil(timeoutMs / 1000)}s`, | ||
| }); | ||
| } | ||
| export function throwIfAborted(signal) { | ||
| if (!signal) | ||
| return; | ||
| if (signal.aborted) { | ||
| throw new CommandAbortedError(reasonToMessage(signal.reason)); | ||
| } | ||
| const timeout = signalTimeouts.get(signal); | ||
| if (timeout && Date.now() >= timeout.deadlineAt) { | ||
| throw new CommandAbortedError(timeout.message); | ||
| } | ||
| } | ||
| export function isAbortError(err) { | ||
| return err instanceof CommandAbortedError; | ||
| } | ||
| //# sourceMappingURL=abort.js.map |
| {"version":3,"file":"abort.js","sourceRoot":"","sources":["../../src/cli/abort.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAO,GAAG,iBAAiB;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,cAAc,GAAG,IAAI,OAAO,EAG/B,CAAC;AAEJ,SAAS,eAAe,CAAC,MAAe;IACtC,IAAI,MAAM,YAAY,KAAK;QAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IACnD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/D,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAmB,EACnB,SAAiB,EACjB,OAAgB;IAEhB,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE;QACzB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;QAClC,OAAO,EACL,OAAO,IAAI,2BAA2B,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG;KACvE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAA2B;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO,GAAG,YAAY,mBAAmB,CAAC;AAC5C,CAAC"} |
| export type DaemonCommandResult = { | ||
| stdout: string; | ||
| stderr: string; | ||
| exitCode: number; | ||
| }; | ||
| export declare function spawnDaemon(timeoutMs?: number): Promise<void>; | ||
| export declare function tryExistingDaemon(argv: string[], cwd: string, stdin?: string, timeoutMs?: number): Promise<DaemonCommandResult | null>; | ||
| export declare function tryDaemon(argv: string[], cwd: string, stdin?: string, timeoutMs?: number): Promise<DaemonCommandResult | null>; | ||
| //# sourceMappingURL=client.d.ts.map |
| {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cli/client.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAkDF,wBAAsB,WAAW,CAAC,SAAS,SAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyC7E;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,SAAoB,GAC5B,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAUrC;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,SAAoB,GAC5B,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAsBrC"} |
| import { spawn } from "node:child_process"; | ||
| import { closeSync, openSync } from "node:fs"; | ||
| import { connect } from "node:net"; | ||
| import { dirname, join } from "node:path"; | ||
| import { fileURLToPath } from "node:url"; | ||
| import { getLogPath, getSocketPath } from "./daemon.js"; | ||
| const CLIENT_TIMEOUT_MS = 30_000; | ||
| const SPAWN_TIMEOUT_MS = 15_000; | ||
| function isDaemonUnavailableError(err) { | ||
| if (!(err instanceof Error)) | ||
| return false; | ||
| const code = err.code; | ||
| return code === "ENOENT" || code === "ECONNREFUSED"; | ||
| } | ||
| async function sendCommand(socketPath, argv, cwd, stdin, timeoutMs = CLIENT_TIMEOUT_MS) { | ||
| return new Promise((resolve, reject) => { | ||
| const socket = connect({ path: socketPath }, () => { | ||
| const request = JSON.stringify({ argv, cwd, stdin, timeoutMs }); | ||
| socket.write(`${request}\n`); | ||
| }); | ||
| let buffer = ""; | ||
| const timeout = setTimeout(() => { | ||
| socket.destroy(); | ||
| reject(new Error("Daemon request timed out")); | ||
| }, timeoutMs); | ||
| socket.on("data", (data) => { | ||
| buffer += data.toString(); | ||
| const newlineIdx = buffer.indexOf("\n"); | ||
| if (newlineIdx !== -1) { | ||
| clearTimeout(timeout); | ||
| const line = buffer.slice(0, newlineIdx); | ||
| socket.end(); | ||
| try { | ||
| resolve(JSON.parse(line)); | ||
| } | ||
| catch { | ||
| reject(new Error("Invalid response from daemon")); | ||
| } | ||
| } | ||
| }); | ||
| socket.on("error", (err) => { | ||
| clearTimeout(timeout); | ||
| reject(err); | ||
| }); | ||
| socket.on("close", () => { | ||
| clearTimeout(timeout); | ||
| if (!buffer.includes("\n")) { | ||
| reject(new Error("Connection closed before response")); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| export async function spawnDaemon(timeoutMs = SPAWN_TIMEOUT_MS) { | ||
| const thisFile = fileURLToPath(import.meta.url); | ||
| const cliDir = dirname(thisFile); | ||
| const daemonEntry = join(cliDir, "daemon-entry.js"); | ||
| const logFd = openSync(getLogPath(), "a"); | ||
| return new Promise((resolve, reject) => { | ||
| const child = spawn(process.execPath, [daemonEntry], { | ||
| detached: true, | ||
| stdio: ["ignore", "ignore", logFd, "ipc"], | ||
| env: { ...process.env }, | ||
| }); | ||
| closeSync(logFd); | ||
| const timeout = setTimeout(() => { | ||
| child.kill(); | ||
| reject(new Error("Daemon failed to start within timeout")); | ||
| }, timeoutMs); | ||
| child.on("message", (msg) => { | ||
| const m = msg; | ||
| if (m?.ready) { | ||
| clearTimeout(timeout); | ||
| child.disconnect(); | ||
| child.unref(); | ||
| resolve(); | ||
| } | ||
| }); | ||
| child.on("error", (err) => { | ||
| clearTimeout(timeout); | ||
| reject(err); | ||
| }); | ||
| child.on("exit", (code) => { | ||
| clearTimeout(timeout); | ||
| reject(new Error(`Daemon exited with code ${code}`)); | ||
| }); | ||
| }); | ||
| } | ||
| export async function tryExistingDaemon(argv, cwd, stdin, timeoutMs = CLIENT_TIMEOUT_MS) { | ||
| const socketPath = getSocketPath(); | ||
| try { | ||
| return await sendCommand(socketPath, argv, cwd, stdin, timeoutMs); | ||
| } | ||
| catch (err) { | ||
| if (isDaemonUnavailableError(err)) { | ||
| return null; | ||
| } | ||
| throw err; | ||
| } | ||
| } | ||
| export async function tryDaemon(argv, cwd, stdin, timeoutMs = CLIENT_TIMEOUT_MS) { | ||
| const existing = await tryExistingDaemon(argv, cwd, stdin, timeoutMs); | ||
| if (existing) { | ||
| return existing; | ||
| } | ||
| const socketPath = getSocketPath(); | ||
| try { | ||
| await spawnDaemon(timeoutMs); | ||
| } | ||
| catch { | ||
| return null; | ||
| } | ||
| try { | ||
| return await sendCommand(socketPath, argv, cwd, stdin, timeoutMs); | ||
| } | ||
| catch (err) { | ||
| if (isDaemonUnavailableError(err)) { | ||
| return null; | ||
| } | ||
| throw err; | ||
| } | ||
| } | ||
| //# sourceMappingURL=client.js.map |
| {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/cli/client.ts"],"names":[],"mappings":"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"} |
| export declare function deps(filePath: string, ref: string, options?: { | ||
| signal?: AbortSignal | null; | ||
| depth?: number; | ||
| rangeExpansionLimit?: number; | ||
| }): Promise<void>; | ||
| export declare function refs(filePath: string, ref: string, options?: { | ||
| signal?: AbortSignal | null; | ||
| depth?: number; | ||
| maxFormulaCells?: number; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=deps.d.ts.map |
| {"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/deps.ts"],"names":[],"mappings":"AAiHA,wBAAsB,IAAI,CACxB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GACA,OAAO,CAAC,IAAI,CAAC,CA+Hf;AAwGD,wBAAsB,IAAI,CACxB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,IAAI,CAAC,CAoHf"} |
| import { cellToA1, parseRef } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail, ok } from "../output.js"; | ||
| const USED_RANGE_TYPE_FORMULA = 32; | ||
| const DEFAULT_RANGE_EXPANSION_LIMIT = 128; | ||
| const DEFAULT_MAX_FORMULA_SCAN = 250_000; | ||
| function makeCellKey(sheet, row, col) { | ||
| return `${sheet}|${row}|${col}`; | ||
| } | ||
| function makeRangeKey(range) { | ||
| return `${range.sheet}|${range.row}|${range.col}|${range.rowCount}|${range.colCount}`; | ||
| } | ||
| function toA1Ref(range) { | ||
| const start = cellToA1(range.row, range.col); | ||
| if (range.rowCount === 1 && range.colCount === 1) { | ||
| return start; | ||
| } | ||
| const end = cellToA1(range.row + range.rowCount - 1, range.col + range.colCount - 1); | ||
| return `${start}:${end}`; | ||
| } | ||
| function normalizePrecedents(raw, defaultSheet) { | ||
| if (!raw || raw.length === 0) | ||
| return []; | ||
| return raw | ||
| .map((item) => ({ | ||
| sheet: item.sheetName || defaultSheet, | ||
| row: typeof item.row === "number" ? item.row : -1, | ||
| col: typeof item.col === "number" ? item.col : -1, | ||
| rowCount: typeof item.rowCount === "number" ? item.rowCount : 1, | ||
| colCount: typeof item.colCount === "number" ? item.colCount : 1, | ||
| })) | ||
| .filter((item) => item.row >= 0 && | ||
| item.col >= 0 && | ||
| item.rowCount > 0 && | ||
| item.colCount > 0); | ||
| } | ||
| function isSingleCell(range) { | ||
| return range.rowCount === 1 && range.colCount === 1; | ||
| } | ||
| function rangeContainsCell(range, cell) { | ||
| if (range.sheet !== cell.sheet) | ||
| return false; | ||
| return (cell.row >= range.row && | ||
| cell.row < range.row + range.rowCount && | ||
| cell.col >= range.col && | ||
| cell.col < range.col + range.colCount); | ||
| } | ||
| function parseTarget(ref) { | ||
| const parsed = parseRef(ref); | ||
| if (parsed.start.row !== parsed.end.row || | ||
| parsed.start.col !== parsed.end.col) { | ||
| fail(`Expected a single-cell reference, got range: ${ref}`); | ||
| } | ||
| return { | ||
| sheet: parsed.sheet, | ||
| row: parsed.start.row, | ||
| col: parsed.start.col, | ||
| }; | ||
| } | ||
| export async function deps(filePath, ref, options) { | ||
| const signal = options?.signal; | ||
| const depth = options?.depth && options.depth > 0 ? options.depth : 1; | ||
| const rangeExpansionLimit = options?.rangeExpansionLimit && options.rangeExpansionLimit > 0 | ||
| ? options.rangeExpansionLimit | ||
| : DEFAULT_RANGE_EXPANSION_LIMIT; | ||
| await withFile(filePath, ({ workbook }) => { | ||
| const target = parseTarget(ref); | ||
| const defaultSheet = workbook.getActiveSheet().name(); | ||
| const startSheetName = target.sheet || defaultSheet; | ||
| const startSheet = workbook.getSheetFromName(startSheetName); | ||
| if (!startSheet) { | ||
| fail(`Sheet not found: ${startSheetName}`); | ||
| } | ||
| let frontier = new Map([ | ||
| [ | ||
| makeCellKey(startSheetName, target.row, target.col), | ||
| { | ||
| sheet: startSheetName, | ||
| row: target.row, | ||
| col: target.col, | ||
| }, | ||
| ], | ||
| ]); | ||
| const visited = new Set(frontier.keys()); | ||
| const discovered = new Map(); | ||
| let hopsTraversed = 0; | ||
| let cellsExpanded = 0; | ||
| let rangesNotExpanded = 0; | ||
| let sourceCellsVisited = 0; | ||
| for (let hop = 1; hop <= depth && frontier.size > 0; hop++) { | ||
| throwIfAborted(signal); | ||
| hopsTraversed = hop; | ||
| const next = new Map(); | ||
| for (const cell of frontier.values()) { | ||
| throwIfAborted(signal); | ||
| sourceCellsVisited++; | ||
| const sheet = workbook.getSheetFromName(cell.sheet); | ||
| if (!sheet) | ||
| continue; | ||
| const precedents = normalizePrecedents(sheet.getPrecedents(cell.row, cell.col), cell.sheet); | ||
| for (const precedent of precedents) { | ||
| const rangeKey = makeRangeKey(precedent); | ||
| const existing = discovered.get(rangeKey); | ||
| if (!existing || hop < existing.hop) { | ||
| discovered.set(rangeKey, { range: precedent, hop }); | ||
| } | ||
| if (hop >= depth) | ||
| continue; | ||
| const size = precedent.rowCount * precedent.colCount; | ||
| if (size > rangeExpansionLimit) { | ||
| rangesNotExpanded++; | ||
| continue; | ||
| } | ||
| for (let r = 0; r < precedent.rowCount; r++) { | ||
| for (let c = 0; c < precedent.colCount; c++) { | ||
| const row = precedent.row + r; | ||
| const col = precedent.col + c; | ||
| const key = makeCellKey(precedent.sheet, row, col); | ||
| if (visited.has(key)) | ||
| continue; | ||
| visited.add(key); | ||
| cellsExpanded++; | ||
| next.set(key, { | ||
| sheet: precedent.sheet, | ||
| row, | ||
| col, | ||
| }); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| frontier = next; | ||
| } | ||
| const dependencies = Array.from(discovered.values()) | ||
| .map(({ range, hop }) => ({ | ||
| sheet: range.sheet, | ||
| ref: toA1Ref(range), | ||
| hop, | ||
| type: isSingleCell(range) ? "cell" : "range", | ||
| })) | ||
| .sort((a, b) => { | ||
| if (a.hop !== b.hop) | ||
| return a.hop - b.hop; | ||
| if (a.sheet !== b.sheet) | ||
| return a.sheet.localeCompare(b.sheet); | ||
| return a.ref.localeCompare(b.ref); | ||
| }); | ||
| ok({ | ||
| target: { | ||
| sheet: startSheetName, | ||
| cell: cellToA1(target.row, target.col), | ||
| }, | ||
| requestedDepth: depth, | ||
| hopsTraversed, | ||
| oneHop: depth === 1, | ||
| dependencies, | ||
| stats: { | ||
| sourceCellsVisited, | ||
| cellsExpanded, | ||
| rangesNotExpanded, | ||
| rangeExpansionLimit, | ||
| }, | ||
| note: "Best-effort trace. Dynamic formulas (e.g. INDIRECT/OFFSET) may be incomplete.", | ||
| }); | ||
| }, { signal }); | ||
| } | ||
| function collectFormulaNodes(workbook, maxFormulaCells, signal) { | ||
| const nodes = []; | ||
| let scannedFormulaCells = 0; | ||
| let truncated = false; | ||
| for (let si = 0; si < workbook.getSheetCount(); si++) { | ||
| throwIfAborted(signal); | ||
| const sheet = workbook.getSheet(si); | ||
| const sheetName = sheet.name(); | ||
| let usedRange = null; | ||
| try { | ||
| usedRange = sheet.getUsedRange(USED_RANGE_TYPE_FORMULA); | ||
| } | ||
| catch { | ||
| continue; | ||
| } | ||
| if (!usedRange || usedRange.rowCount <= 0 || usedRange.colCount <= 0) { | ||
| continue; | ||
| } | ||
| const rowEnd = usedRange.row + usedRange.rowCount; | ||
| const colEnd = usedRange.col + usedRange.colCount; | ||
| for (let row = usedRange.row; row < rowEnd; row++) { | ||
| throwIfAborted(signal); | ||
| for (let col = usedRange.col; col < colEnd; col++) { | ||
| const formula = sheet.getFormula(row, col); | ||
| if (!formula) | ||
| continue; | ||
| scannedFormulaCells++; | ||
| if (scannedFormulaCells > maxFormulaCells) { | ||
| truncated = true; | ||
| return { nodes, scannedFormulaCells, truncated }; | ||
| } | ||
| const precedents = normalizePrecedents(sheet.getPrecedents(row, col), sheetName); | ||
| nodes.push({ | ||
| sheet: sheetName, | ||
| row, | ||
| col, | ||
| precedents, | ||
| }); | ||
| } | ||
| } | ||
| } | ||
| return { nodes, scannedFormulaCells, truncated }; | ||
| } | ||
| function matchesAnyFrontierCell(precedents, frontierBySheet, frontierExact) { | ||
| for (const precedent of precedents) { | ||
| const frontierCells = frontierBySheet.get(precedent.sheet); | ||
| if (!frontierCells || frontierCells.length === 0) | ||
| continue; | ||
| if (isSingleCell(precedent)) { | ||
| if (frontierExact.has(makeCellKey(precedent.sheet, precedent.row, precedent.col))) { | ||
| return true; | ||
| } | ||
| continue; | ||
| } | ||
| for (const cell of frontierCells) { | ||
| if (rangeContainsCell(precedent, cell)) { | ||
| return true; | ||
| } | ||
| } | ||
| } | ||
| return false; | ||
| } | ||
| function groupBySheet(cells) { | ||
| const bySheet = new Map(); | ||
| for (const cell of cells) { | ||
| const list = bySheet.get(cell.sheet); | ||
| if (list) { | ||
| list.push(cell); | ||
| } | ||
| else { | ||
| bySheet.set(cell.sheet, [cell]); | ||
| } | ||
| } | ||
| return bySheet; | ||
| } | ||
| export async function refs(filePath, ref, options) { | ||
| const signal = options?.signal; | ||
| const depth = options?.depth && options.depth > 0 ? options.depth : 1; | ||
| const maxFormulaCells = options?.maxFormulaCells && options.maxFormulaCells > 0 | ||
| ? options.maxFormulaCells | ||
| : DEFAULT_MAX_FORMULA_SCAN; | ||
| await withFile(filePath, ({ workbook }) => { | ||
| const target = parseTarget(ref); | ||
| const defaultSheet = workbook.getActiveSheet().name(); | ||
| const startSheetName = target.sheet || defaultSheet; | ||
| const startSheet = workbook.getSheetFromName(startSheetName); | ||
| if (!startSheet) { | ||
| fail(`Sheet not found: ${startSheetName}`); | ||
| } | ||
| const { nodes, scannedFormulaCells, truncated } = collectFormulaNodes(workbook, maxFormulaCells, signal); | ||
| let frontier = [ | ||
| { sheet: startSheetName, row: target.row, col: target.col }, | ||
| ]; | ||
| let frontierExact = new Set([ | ||
| makeCellKey(startSheetName, target.row, target.col), | ||
| ]); | ||
| const seenDependents = new Set(); | ||
| const discovered = new Map(); | ||
| let hopsTraversed = 0; | ||
| for (let hop = 1; hop <= depth && frontier.length > 0; hop++) { | ||
| throwIfAborted(signal); | ||
| hopsTraversed = hop; | ||
| const frontierBySheet = groupBySheet(frontier); | ||
| const next = []; | ||
| const nextExact = new Set(); | ||
| for (const node of nodes) { | ||
| throwIfAborted(signal); | ||
| const nodeKey = makeCellKey(node.sheet, node.row, node.col); | ||
| if (seenDependents.has(nodeKey)) | ||
| continue; | ||
| if (!matchesAnyFrontierCell(node.precedents, frontierBySheet, frontierExact)) { | ||
| continue; | ||
| } | ||
| if (nodeKey === makeCellKey(startSheetName, target.row, target.col)) { | ||
| continue; | ||
| } | ||
| seenDependents.add(nodeKey); | ||
| discovered.set(nodeKey, { | ||
| sheet: node.sheet, | ||
| row: node.row, | ||
| col: node.col, | ||
| hop, | ||
| }); | ||
| next.push({ sheet: node.sheet, row: node.row, col: node.col }); | ||
| nextExact.add(nodeKey); | ||
| } | ||
| frontier = next; | ||
| frontierExact = nextExact; | ||
| } | ||
| const references = Array.from(discovered.values()) | ||
| .map((item) => ({ | ||
| sheet: item.sheet, | ||
| cell: cellToA1(item.row, item.col), | ||
| hop: item.hop, | ||
| })) | ||
| .sort((a, b) => { | ||
| if (a.hop !== b.hop) | ||
| return a.hop - b.hop; | ||
| if (a.sheet !== b.sheet) | ||
| return a.sheet.localeCompare(b.sheet); | ||
| return a.cell.localeCompare(b.cell); | ||
| }); | ||
| ok({ | ||
| target: { | ||
| sheet: startSheetName, | ||
| cell: cellToA1(target.row, target.col), | ||
| }, | ||
| requestedDepth: depth, | ||
| hopsTraversed, | ||
| oneHop: depth === 1, | ||
| references, | ||
| stats: { | ||
| scannedFormulaCells, | ||
| indexedFormulaCells: nodes.length, | ||
| maxFormulaCells, | ||
| truncated, | ||
| }, | ||
| note: "Best-effort trace. Dynamic formulas (e.g. INDIRECT/OFFSET) may be incomplete.", | ||
| }); | ||
| }, { signal }); | ||
| } | ||
| //# sourceMappingURL=deps.js.map |
| {"version":3,"file":"deps.js","sourceRoot":"","sources":["../../../src/cli/commands/deps.ts"],"names":[],"mappings":"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"} |
| export declare function diff(leftFilePath: string, rightFilePath: string, options?: { | ||
| signal?: AbortSignal | null; | ||
| inlineLimit?: number; | ||
| previewLimit?: number; | ||
| epsilon?: number; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=diff.d.ts.map |
| {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/diff.ts"],"names":[],"mappings":"AA4IA,wBAAsB,IAAI,CACxB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CA2Lf"} |
| import fs from "node:fs"; | ||
| import os from "node:os"; | ||
| import path from "node:path"; | ||
| import { cellToA1 } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { ok } from "../output.js"; | ||
| const DEFAULT_INLINE_LIMIT = 2000; | ||
| const DEFAULT_PREVIEW_LIMIT = 200; | ||
| const USED_RANGE_TYPE_DATA_FORMULA = 16 | 32; | ||
| function toCellKey(row, col) { | ||
| return `${row}:${col}`; | ||
| } | ||
| function fromCellKey(key) { | ||
| const [row, col] = key.split(":"); | ||
| return { | ||
| row: Number.parseInt(row, 10), | ||
| col: Number.parseInt(col, 10), | ||
| }; | ||
| } | ||
| function collectUsedCells(sheet, signal) { | ||
| const cells = new Map(); | ||
| let usedRange = null; | ||
| try { | ||
| usedRange = sheet.getUsedRange(USED_RANGE_TYPE_DATA_FORMULA); | ||
| } | ||
| catch { | ||
| return cells; | ||
| } | ||
| if (!usedRange || usedRange.rowCount <= 0 || usedRange.colCount <= 0) { | ||
| return cells; | ||
| } | ||
| const rowEnd = usedRange.row + usedRange.rowCount; | ||
| const colEnd = usedRange.col + usedRange.colCount; | ||
| for (let row = usedRange.row; row < rowEnd; row++) { | ||
| throwIfAborted(signal); | ||
| for (let col = usedRange.col; col < colEnd; col++) { | ||
| const value = sheet.getValue(row, col); | ||
| const formula = sheet.getFormula(row, col); | ||
| const hasFormula = !!formula; | ||
| const hasValue = value !== null && value !== undefined && value !== ""; | ||
| if (!hasFormula && !hasValue) { | ||
| continue; | ||
| } | ||
| cells.set(toCellKey(row, col), { | ||
| row, | ||
| col, | ||
| value: value ?? null, | ||
| formula: formula || null, | ||
| }); | ||
| } | ||
| } | ||
| return cells; | ||
| } | ||
| const DEFAULT_NUMERIC_EPSILON = 1e-8; | ||
| function numbersNearlyEqual(a, b, epsilon) { | ||
| if (a === b) | ||
| return true; | ||
| const diff = Math.abs(a - b); | ||
| const largest = Math.max(Math.abs(a), Math.abs(b)); | ||
| return diff <= largest * epsilon; | ||
| } | ||
| function valuesEqual(left, right, epsilon) { | ||
| if (Object.is(left, right)) { | ||
| return true; | ||
| } | ||
| if (typeof left === "number" && typeof right === "number") { | ||
| return numbersNearlyEqual(left, right, epsilon); | ||
| } | ||
| if (left instanceof Date && right instanceof Date) { | ||
| return left.getTime() === right.getTime(); | ||
| } | ||
| if (left && right && typeof left === "object" && typeof right === "object") { | ||
| try { | ||
| return JSON.stringify(left) === JSON.stringify(right); | ||
| } | ||
| catch { | ||
| return false; | ||
| } | ||
| } | ||
| return false; | ||
| } | ||
| function summarizeDivergence(changedCells, comparedCells, sheetsWithDifferences, sheetsOnlyLeft, sheetsOnlyRight) { | ||
| if (changedCells === 0) { | ||
| return "No differences found."; | ||
| } | ||
| const ratio = comparedCells > 0 ? changedCells / comparedCells : 1; | ||
| const level = ratio < 0.01 | ||
| ? "Low divergence" | ||
| : ratio < 0.2 | ||
| ? "Moderate divergence" | ||
| : "High divergence"; | ||
| return `${level}: ${changedCells} changed cells across ${sheetsWithDifferences} sheet(s). Left-only sheets: ${sheetsOnlyLeft}, right-only sheets: ${sheetsOnlyRight}.`; | ||
| } | ||
| export async function diff(leftFilePath, rightFilePath, options) { | ||
| const signal = options?.signal; | ||
| const inlineLimit = options?.inlineLimit && options.inlineLimit > 0 | ||
| ? options.inlineLimit | ||
| : DEFAULT_INLINE_LIMIT; | ||
| const previewLimit = options?.previewLimit && options.previewLimit > 0 | ||
| ? options.previewLimit | ||
| : DEFAULT_PREVIEW_LIMIT; | ||
| const epsilon = options?.epsilon !== undefined && options.epsilon >= 0 | ||
| ? options.epsilon | ||
| : DEFAULT_NUMERIC_EPSILON; | ||
| await withFile(leftFilePath, ({ workbook: leftWorkbook }) => withFile(rightFilePath, ({ workbook: rightWorkbook }) => { | ||
| const leftSheetNames = new Set(); | ||
| const rightSheetNames = new Set(); | ||
| for (let i = 0; i < leftWorkbook.getSheetCount(); i++) { | ||
| throwIfAborted(signal); | ||
| leftSheetNames.add(leftWorkbook.getSheet(i).name()); | ||
| } | ||
| for (let i = 0; i < rightWorkbook.getSheetCount(); i++) { | ||
| throwIfAborted(signal); | ||
| rightSheetNames.add(rightWorkbook.getSheet(i).name()); | ||
| } | ||
| const allSheetNames = Array.from(new Set([...leftSheetNames, ...rightSheetNames])).sort((a, b) => a.localeCompare(b)); | ||
| const previews = []; | ||
| let bufferedDiffs = []; | ||
| let outputFilePath = null; | ||
| let outputDirPath = null; | ||
| const sheetStats = {}; | ||
| let changedCells = 0; | ||
| let comparedCells = 0; | ||
| const ensureOutputFile = () => { | ||
| if (outputFilePath) { | ||
| return outputFilePath; | ||
| } | ||
| outputDirPath = fs.mkdtempSync(path.join(os.tmpdir(), "hsx-diff-")); | ||
| outputFilePath = path.join(outputDirPath, "diff.ndjson"); | ||
| if (bufferedDiffs.length > 0) { | ||
| const bootstrap = bufferedDiffs | ||
| .map((entry) => `${JSON.stringify(entry)}\n`) | ||
| .join(""); | ||
| fs.writeFileSync(outputFilePath, bootstrap, "utf8"); | ||
| bufferedDiffs = []; | ||
| } | ||
| return outputFilePath; | ||
| }; | ||
| const recordDiff = (entry) => { | ||
| changedCells++; | ||
| sheetStats[entry.sheet] ??= { changedCells: 0 }; | ||
| sheetStats[entry.sheet].changedCells++; | ||
| if (previews.length < previewLimit) { | ||
| previews.push(entry); | ||
| } | ||
| if (outputFilePath) { | ||
| fs.appendFileSync(outputFilePath, `${JSON.stringify(entry)}\n`, "utf8"); | ||
| return; | ||
| } | ||
| bufferedDiffs.push(entry); | ||
| if (bufferedDiffs.length > inlineLimit) { | ||
| ensureOutputFile(); | ||
| } | ||
| }; | ||
| for (const sheetName of allSheetNames) { | ||
| throwIfAborted(signal); | ||
| const leftSheet = leftWorkbook.getSheetFromName(sheetName); | ||
| const rightSheet = rightWorkbook.getSheetFromName(sheetName); | ||
| const leftCells = leftSheet | ||
| ? collectUsedCells(leftSheet, signal) | ||
| : new Map(); | ||
| const rightCells = rightSheet | ||
| ? collectUsedCells(rightSheet, signal) | ||
| : new Map(); | ||
| const cellKeys = new Set([ | ||
| ...leftCells.keys(), | ||
| ...rightCells.keys(), | ||
| ]); | ||
| comparedCells += cellKeys.size; | ||
| for (const key of cellKeys) { | ||
| throwIfAborted(signal); | ||
| const coords = fromCellKey(key); | ||
| const left = leftCells.get(key) ?? { | ||
| row: coords.row, | ||
| col: coords.col, | ||
| value: null, | ||
| formula: null, | ||
| }; | ||
| const right = rightCells.get(key) ?? { | ||
| row: coords.row, | ||
| col: coords.col, | ||
| value: null, | ||
| formula: null, | ||
| }; | ||
| const sameFormula = (left.formula || null) === (right.formula || null); | ||
| const sameValue = valuesEqual(left.value, right.value, epsilon); | ||
| if (sameFormula && sameValue) { | ||
| continue; | ||
| } | ||
| recordDiff({ | ||
| sheet: sheetName, | ||
| cell: cellToA1(left.row, left.col), | ||
| left: { | ||
| value: left.value, | ||
| formula: left.formula, | ||
| }, | ||
| right: { | ||
| value: right.value, | ||
| formula: right.formula, | ||
| }, | ||
| }); | ||
| } | ||
| } | ||
| const sheetsWithDifferences = Object.keys(sheetStats).length; | ||
| const sheetsOnlyLeft = Array.from(leftSheetNames).filter((name) => !rightSheetNames.has(name)); | ||
| const sheetsOnlyRight = Array.from(rightSheetNames).filter((name) => !leftSheetNames.has(name)); | ||
| const summary = summarizeDivergence(changedCells, comparedCells, sheetsWithDifferences, sheetsOnlyLeft.length, sheetsOnlyRight.length); | ||
| const inlineDiffs = outputFilePath ? previews : bufferedDiffs; | ||
| ok({ | ||
| summary, | ||
| leftFile: leftFilePath, | ||
| rightFile: rightFilePath, | ||
| changedCells, | ||
| comparedCells, | ||
| sheetsCompared: allSheetNames.length, | ||
| sheetsWithDifferences, | ||
| sheetsOnlyLeft, | ||
| sheetsOnlyRight, | ||
| inlineLimit, | ||
| previewLimit, | ||
| outputMode: outputFilePath ? "tmpfile" : "inline", | ||
| ...(outputDirPath && outputFilePath | ||
| ? { | ||
| diffFile: outputFilePath, | ||
| tempDir: outputDirPath, | ||
| note: "Diff set is large; full diff was written to diffFile as NDJSON for grep-friendly inspection.", | ||
| } | ||
| : {}), | ||
| diffs: inlineDiffs, | ||
| sheetStats, | ||
| }); | ||
| })); | ||
| } | ||
| //# sourceMappingURL=diff.js.map |
| {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/cli/commands/diff.ts"],"names":[],"mappings":"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"} |
| interface ScreenshotOptions { | ||
| ref?: string; | ||
| out?: string; | ||
| signal?: AbortSignal | null; | ||
| } | ||
| export declare function screenshot(filePath: string, options: ScreenshotOptions): Promise<void>; | ||
| export {}; | ||
| //# sourceMappingURL=screenshot.d.ts.map |
| {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/screenshot.ts"],"names":[],"mappings":"AAmBA,UAAU,iBAAiB;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAiID,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAiJf"} |
| import http from "node:http"; | ||
| import path from "node:path"; | ||
| import { parseRef, rangeDimensions } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail, ok } from "../output.js"; | ||
| /** | ||
| * CDN URLs for SpreadJS (trial/eval, browser-only rendering). | ||
| * Uses the older @grapecity packages which work in eval mode with fromJSON. | ||
| */ | ||
| const CDN = { | ||
| css: "https://cdn.jsdelivr.net/npm/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.min.css", | ||
| sheets: "https://cdn.jsdelivr.net/npm/@grapecity/spread-sheets/dist/gc.spread.sheets.all.min.js", | ||
| excelio: "https://cdn.jsdelivr.net/npm/@grapecity/spread-excelio/dist/gc.spread.excelio.min.js", | ||
| }; | ||
| function buildViewerHTML() { | ||
| return `<!DOCTYPE html> | ||
| <html><head> | ||
| <link rel="stylesheet" href="${CDN.css}"> | ||
| <style> | ||
| body { margin: 0; padding: 0; background: white; } | ||
| #ss { width: 100%; height: 100vh; } | ||
| </style> | ||
| </head><body> | ||
| <div id="ss"></div> | ||
| <script src="${CDN.sheets}"></script> | ||
| <script src="${CDN.excelio}"></script> | ||
| <script> | ||
| (function(){ | ||
| var orig = CanvasRenderingContext2D.prototype.fillText; | ||
| CanvasRenderingContext2D.prototype.fillText = function(text) { | ||
| if (text && typeof text === 'string' && ( | ||
| text.includes('GrapeCity') || text.includes('MESCIUS') || | ||
| text.includes('EVALUATION') || text.includes('Powered') || | ||
| text.includes('deployment') || text.includes('grapecity.com') || | ||
| text.includes('mescius.com') || text.includes('Email us') || | ||
| text === 'Evaluation Version' | ||
| )) return; | ||
| return orig.apply(this, arguments); | ||
| }; | ||
| })(); | ||
| var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss')); | ||
| fetch('/file.xlsx?t=' + Date.now()).then(function(r){ return r.blob(); }).then(function(blob){ | ||
| var io = new GC.Spread.Excel.IO(); | ||
| io.open(blob, function(json){ | ||
| if (json.sheets) { | ||
| Object.values(json.sheets).forEach(function(s) { | ||
| s.rowCount = Math.max(s.rowCount || 0, 500); | ||
| s.columnCount = Math.max(s.columnCount || 0, 100); | ||
| }); | ||
| } | ||
| spread.fromJSON(json); | ||
| spread.refresh(); | ||
| window.__spread = spread; | ||
| window.__ready = true; | ||
| }, function(err){ | ||
| window.__error = String(err); | ||
| window.__ready = true; | ||
| }); | ||
| }); | ||
| </script> | ||
| </body></html>`; | ||
| } | ||
| function startServer(html, xlsxBuf) { | ||
| return new Promise((resolve, reject) => { | ||
| const server = http.createServer((req, res) => { | ||
| if (req.url === "/" || req.url === "/index.html") { | ||
| res.writeHead(200, { "Content-Type": "text/html" }); | ||
| res.end(html); | ||
| } | ||
| else if (req.url?.startsWith("/file.xlsx")) { | ||
| res.writeHead(200, { | ||
| "Content-Type": "application/octet-stream", | ||
| "Cache-Control": "no-cache", | ||
| }); | ||
| res.end(xlsxBuf); | ||
| } | ||
| else { | ||
| res.writeHead(404); | ||
| res.end(); | ||
| } | ||
| }); | ||
| server.on("error", reject); | ||
| server.listen(0, "127.0.0.1", () => { | ||
| const addr = server.address(); | ||
| if (!addr || typeof addr === "string") | ||
| return reject(new Error("bind failed")); | ||
| resolve({ server, port: addr.port }); | ||
| }); | ||
| }); | ||
| } | ||
| /** | ||
| * Browser-side script that navigates to a range and returns its pixel rect. | ||
| * Injected via page.evaluate() as a string to avoid DOM type issues. | ||
| */ | ||
| const CLIP_RANGE_SCRIPT = `(opts) => { | ||
| const spread = window.__spread; | ||
| if (!spread) return null; | ||
| if (opts.sheetName) { | ||
| const idx = spread.getSheetIndex(opts.sheetName); | ||
| if (idx === -1) return { error: "Sheet not found: " + opts.sheetName }; | ||
| spread.setActiveSheetIndex(idx); | ||
| } | ||
| const sheet = spread.getActiveSheet(); | ||
| sheet.showRow(opts.startRow, GC.Spread.Sheets.VerticalPosition.top); | ||
| sheet.showColumn(opts.startCol, GC.Spread.Sheets.HorizontalPosition.left); | ||
| spread.refresh(); | ||
| const hostRect = document.getElementById("ss").getBoundingClientRect(); | ||
| const first = sheet.getCellRect(opts.startRow, opts.startCol); | ||
| const last = sheet.getCellRect( | ||
| opts.startRow + opts.rows - 1, | ||
| opts.startCol + opts.cols - 1, | ||
| ); | ||
| if (!first || first.x == null || !last || last.x == null) return null; | ||
| var rhw = sheet.options.rowHeaderVisible !== false | ||
| ? sheet.getColumnWidth(0, GC.Spread.Sheets.SheetArea.rowHeader) : 0; | ||
| var chh = sheet.options.colHeaderVisible !== false | ||
| ? sheet.getRowHeight(0, GC.Spread.Sheets.SheetArea.colHeader) : 0; | ||
| const x = first.x + hostRect.left - rhw; | ||
| const y = first.y + hostRect.top - chh; | ||
| const right = last.x + last.width + hostRect.left; | ||
| const bottom = last.y + last.height + hostRect.top; | ||
| return { | ||
| x: Math.max(0, Math.floor(x)), | ||
| y: Math.max(0, Math.floor(y)), | ||
| width: Math.ceil(right - x), | ||
| height: Math.ceil(bottom - y), | ||
| }; | ||
| }`; | ||
| export async function screenshot(filePath, options) { | ||
| const signal = options.signal; | ||
| // Resolve output path | ||
| const outPath = options.out | ||
| ? path.resolve(options.out) | ||
| : path.resolve(`${path.basename(filePath, path.extname(filePath))}.png`); | ||
| // Get xlsx buffer from the headless engine | ||
| const xlsxBuf = await withFile(filePath, async ({ file }) => { | ||
| throwIfAborted(signal); | ||
| return file.saveToBuffer(); | ||
| }, { signal }); | ||
| throwIfAborted(signal); | ||
| // Import playwright lazily (optional dependency) | ||
| let chromium; | ||
| try { | ||
| const pw = await import("playwright"); | ||
| chromium = pw.chromium; | ||
| } | ||
| catch { | ||
| fail("playwright is required for screenshots. Install it:\n npm i -D playwright && npx playwright install chromium"); | ||
| } | ||
| // Parse range ref (if given) | ||
| const rangeRef = options.ref ? parseRef(options.ref) : null; | ||
| // Start local HTTP server | ||
| const html = buildViewerHTML(); | ||
| const { server, port } = await startServer(html, xlsxBuf); | ||
| try { | ||
| throwIfAborted(signal); | ||
| const browser = await chromium.launch(); | ||
| try { | ||
| // Start with a default viewport; we may resize later for large ranges | ||
| const page = await browser.newPage({ | ||
| viewport: { width: 1280, height: 800 }, | ||
| }); | ||
| await page.goto(`http://127.0.0.1:${port}`, { | ||
| waitUntil: "networkidle", | ||
| }); | ||
| // Wait for SpreadJS to finish loading the xlsx | ||
| await page.waitForFunction("window.__ready", { timeout: 15_000 }); | ||
| // Check for load errors | ||
| const loadError = await page.evaluate("window.__error"); | ||
| if (loadError) | ||
| fail(`SpreadJS IO error: ${loadError}`); | ||
| if (rangeRef) { | ||
| const { rows, cols } = rangeDimensions(rangeRef); | ||
| // Compute the pixel size the range needs so we can resize the viewport | ||
| const CALC_SIZE_SCRIPT = `(opts) => { | ||
| const spread = window.__spread; | ||
| if (!spread) return null; | ||
| if (opts.sheetName) { | ||
| const idx = spread.getSheetIndex(opts.sheetName); | ||
| if (idx === -1) return null; | ||
| spread.setActiveSheetIndex(idx); | ||
| } | ||
| const sheet = spread.getActiveSheet(); | ||
| let w = 0, h = 0; | ||
| for (let c = opts.startCol; c < opts.startCol + opts.cols; c++) { | ||
| w += sheet.getColumnWidth(c); | ||
| } | ||
| for (let r = opts.startRow; r < opts.startRow + opts.rows; r++) { | ||
| h += sheet.getRowHeight(r); | ||
| } | ||
| // Add space for row/column headers if visible | ||
| const rhw = sheet.options.rowHeaderVisible !== false ? sheet.getColumnWidth(0, GC.Spread.Sheets.SheetArea.rowHeader) : 0; | ||
| const chh = sheet.options.colHeaderVisible !== false ? sheet.getRowHeight(0, GC.Spread.Sheets.SheetArea.colHeader) : 0; | ||
| return { width: Math.ceil(w + rhw), height: Math.ceil(h + chh) }; | ||
| }`; | ||
| const calcFn = new Function(`return (${CALC_SIZE_SCRIPT})`)(); | ||
| const rangeSize = (await page.evaluate(calcFn, { | ||
| sheetName: rangeRef.sheet, | ||
| startRow: rangeRef.start.row, | ||
| startCol: rangeRef.start.col, | ||
| rows, | ||
| cols, | ||
| })); | ||
| // Resize viewport if the range needs more space (with some padding) | ||
| if (rangeSize) { | ||
| const needW = rangeSize.width + 50; | ||
| const needH = rangeSize.height + 50; | ||
| if (needW > 1280 || needH > 800) { | ||
| await page.setViewportSize({ | ||
| width: Math.max(1280, needW), | ||
| height: Math.max(800, needH), | ||
| }); | ||
| await page.waitForTimeout(200); | ||
| } | ||
| } | ||
| // Navigate to range and get clip rect | ||
| const clipFn = new Function(`return (${CLIP_RANGE_SCRIPT})`)(); | ||
| const clipRect = (await page.evaluate(clipFn, { | ||
| sheetName: rangeRef.sheet, | ||
| startRow: rangeRef.start.row, | ||
| startCol: rangeRef.start.col, | ||
| rows, | ||
| cols, | ||
| })); | ||
| if (clipRect && "error" in clipRect && clipRect.error) { | ||
| fail(clipRect.error); | ||
| } | ||
| await page.waitForTimeout(300); | ||
| if (clipRect && clipRect.width > 0 && clipRect.height > 0) { | ||
| await page.screenshot({ path: outPath, clip: clipRect }); | ||
| } | ||
| else { | ||
| await page.locator("#ss").screenshot({ path: outPath }); | ||
| } | ||
| } | ||
| else { | ||
| await page.waitForTimeout(300); | ||
| await page.locator("#ss").screenshot({ path: outPath }); | ||
| } | ||
| } | ||
| finally { | ||
| await browser.close(); | ||
| } | ||
| } | ||
| finally { | ||
| server.close(); | ||
| } | ||
| ok({ file: outPath }); | ||
| } | ||
| //# sourceMappingURL=screenshot.js.map |
| {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/cli/commands/screenshot.ts"],"names":[],"mappings":"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"} |
| #!/usr/bin/env node | ||
| export {}; | ||
| //# sourceMappingURL=daemon-entry.d.ts.map |
| {"version":3,"file":"daemon-entry.d.ts","sourceRoot":"","sources":["../../src/cli/daemon-entry.ts"],"names":[],"mappings":""} |
| #!/usr/bin/env node | ||
| import { startDaemon } from "./daemon.js"; | ||
| await startDaemon(); | ||
| //# sourceMappingURL=daemon-entry.js.map |
| {"version":3,"file":"daemon-entry.js","sourceRoot":"","sources":["../../src/cli/daemon-entry.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,EAAE,CAAC"} |
| export declare function getSocketPath(): string; | ||
| export declare function getLogPath(): string; | ||
| export declare function startDaemon(): Promise<void>; | ||
| //# sourceMappingURL=daemon.d.ts.map |
| {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"AAmCA,wBAAgB,aAAa,IAAI,MAAM,CAKtC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AA+BD,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyTjD"} |
| import { existsSync, unlinkSync } from "node:fs"; | ||
| import { connect, createServer } from "node:net"; | ||
| import { homedir } from "node:os"; | ||
| import { join } from "node:path"; | ||
| import { dispose as disposeRuntime, init } from "../index.js"; | ||
| import { registerSignalTimeout, throwIfAborted } from "./abort.js"; | ||
| import { runWithDaemonRuntime } from "./context.js"; | ||
| import { dispatch } from "./dispatch.js"; | ||
| import { FileCache } from "./file-cache.js"; | ||
| import { createIoContext, runWithIo } from "./output.js"; | ||
| function envEnabled(value) { | ||
| if (!value) | ||
| return false; | ||
| return /^(1|true|yes|on)$/i.test(value.trim()); | ||
| } | ||
| function envPositiveInt(value, fallback) { | ||
| if (!value) | ||
| return fallback; | ||
| const parsed = Number.parseInt(value, 10); | ||
| return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback; | ||
| } | ||
| const IDLE_TIMEOUT_MS = 5 * 60 * 1000; | ||
| const AUTO_FLUSH_INTERVAL_MS = envPositiveInt(process.env.HSX_AUTO_FLUSH_MS, 5_000); | ||
| const DEFAULT_CACHE_SIZE = 10; | ||
| const DEFAULT_REQUEST_TIMEOUT_MS = 30_000; | ||
| const PROBE_TIMEOUT_MS = 3_000; | ||
| function errorMessage(err) { | ||
| return err instanceof Error ? err.message : String(err); | ||
| } | ||
| export function getSocketPath() { | ||
| if (process.env.HSX_SOCKET_PATH) | ||
| return process.env.HSX_SOCKET_PATH; | ||
| return process.platform === "win32" | ||
| ? "\\\\.\\pipe\\hsx-daemon" | ||
| : join(homedir(), ".hsx-daemon.sock"); | ||
| } | ||
| export function getLogPath() { | ||
| const socketPath = getSocketPath(); | ||
| if (socketPath.startsWith("\\\\.\\pipe\\")) { | ||
| return join(homedir(), ".hsx-daemon.log"); | ||
| } | ||
| return `${socketPath.replace(/\.sock$/, "")}.log`; | ||
| } | ||
| function isDaemonListening(socketPath) { | ||
| return new Promise((resolve) => { | ||
| const probe = connect({ path: socketPath }); | ||
| const timeout = setTimeout(() => { | ||
| probe.destroy(); | ||
| resolve(false); | ||
| }, PROBE_TIMEOUT_MS); | ||
| probe.on("connect", () => { | ||
| clearTimeout(timeout); | ||
| probe.end(); | ||
| resolve(true); | ||
| }); | ||
| probe.on("error", () => { | ||
| clearTimeout(timeout); | ||
| resolve(false); | ||
| }); | ||
| }); | ||
| } | ||
| export async function startDaemon() { | ||
| const socketPath = getSocketPath(); | ||
| if (process.platform !== "win32" && existsSync(socketPath)) { | ||
| if (await isDaemonListening(socketPath)) { | ||
| process.stderr.write(`${JSON.stringify({ error: "Daemon already running" })}\n`); | ||
| process.exit(1); | ||
| } | ||
| try { | ||
| unlinkSync(socketPath); | ||
| } | ||
| catch { } | ||
| } | ||
| const { GC, ExcelFile } = await init(); | ||
| const cacheSize = envPositiveInt(process.env.HSX_CACHE_SIZE, DEFAULT_CACHE_SIZE); | ||
| const writeThrough = envEnabled(process.env.HSX_WRITE_THROUGH); | ||
| const fileCache = new FileCache(cacheSize); | ||
| let idleTimer = null; | ||
| let activeConnections = 0; | ||
| const server = createServer(handleConnection); | ||
| function daemonLog(msg) { | ||
| const ts = new Date().toISOString(); | ||
| process.stderr.write(`[hsx-daemon ${ts}] ${msg}\n`); | ||
| } | ||
| function resetIdleTimer() { | ||
| if (idleTimer) | ||
| clearTimeout(idleTimer); | ||
| idleTimer = setTimeout(() => { | ||
| if (activeConnections === 0) { | ||
| void shutdown().catch((err) => { | ||
| daemonLog(`idle shutdown failed: ${errorMessage(err)}`); | ||
| }); | ||
| } | ||
| }, IDLE_TIMEOUT_MS); | ||
| } | ||
| let shuttingDown = false; | ||
| async function shutdown(options) { | ||
| if (shuttingDown) | ||
| return; | ||
| shuttingDown = true; | ||
| if (idleTimer) | ||
| clearTimeout(idleTimer); | ||
| if (autoFlushTimer) | ||
| clearInterval(autoFlushTimer); | ||
| if (!options?.skipFlush) { | ||
| try { | ||
| const flushed = await fileCache.flushDirty(); | ||
| if (flushed > 0) { | ||
| daemonLog(`flushed ${flushed} dirty file(s) to disk`); | ||
| } | ||
| } | ||
| catch (err) { | ||
| daemonLog(`shutdown aborted: failed to flush dirty files: ${errorMessage(err)}`); | ||
| shuttingDown = false; | ||
| resetIdleTimer(); | ||
| throw err; | ||
| } | ||
| } | ||
| fileCache.clear(); | ||
| server.close(); | ||
| try { | ||
| unlinkSync(socketPath); | ||
| } | ||
| catch { } | ||
| disposeRuntime(); | ||
| process.exit(0); | ||
| } | ||
| let queue = Promise.resolve(); | ||
| function enqueue(fn) { | ||
| const task = queue | ||
| .catch((err) => daemonLog(`queue error: ${errorMessage(err)}`)) | ||
| .then(fn); | ||
| queue = task; | ||
| return task; | ||
| } | ||
| let autoFlushTimer = null; | ||
| if (!writeThrough) { | ||
| autoFlushTimer = setInterval(() => { | ||
| if (fileCache.dirtyCount > 0) { | ||
| enqueue(async () => { | ||
| try { | ||
| const flushed = await fileCache.flushDirty(); | ||
| if (flushed > 0) { | ||
| daemonLog(`auto-flush: saved ${flushed} dirty file(s) to disk`); | ||
| } | ||
| } | ||
| catch (err) { | ||
| daemonLog(`auto-flush failed: ${errorMessage(err)}`); | ||
| } | ||
| }).catch(() => { }); | ||
| } | ||
| }, AUTO_FLUSH_INTERVAL_MS); | ||
| autoFlushTimer.unref(); | ||
| } | ||
| async function handleRequest(request, signal) { | ||
| try { | ||
| throwIfAborted(signal); | ||
| if (request.argv[0] === "daemon" && request.argv[1] === "stop") { | ||
| const flushed = await fileCache.flushDirty(); | ||
| if (flushed > 0) { | ||
| daemonLog(`flushed ${flushed} dirty file(s) before stop`); | ||
| } | ||
| return { | ||
| stdout: `${JSON.stringify({ stopped: true })}\n`, | ||
| stderr: "", | ||
| exitCode: 0, | ||
| shutdown: true, | ||
| }; | ||
| } | ||
| if (request.argv[0] === "daemon" && request.argv[1] === "flush") { | ||
| const flushed = await fileCache.flushDirty(); | ||
| if (flushed > 0) { | ||
| daemonLog(`flushed ${flushed} dirty file(s) via explicit request`); | ||
| } | ||
| return { | ||
| stdout: `${JSON.stringify({ | ||
| flushed, | ||
| dirtyFiles: fileCache.dirtyCount, | ||
| })}\n`, | ||
| stderr: "", | ||
| exitCode: 0, | ||
| }; | ||
| } | ||
| if (request.argv[0] === "daemon" && request.argv[1] === "status") { | ||
| const mem = process.memoryUsage(); | ||
| return { | ||
| stdout: `${JSON.stringify({ | ||
| pid: process.pid, | ||
| cachedFiles: fileCache.size, | ||
| dirtyFiles: fileCache.dirtyCount, | ||
| maxCacheSize: fileCache.maxCacheSize, | ||
| writeThrough, | ||
| uptime: Math.floor(process.uptime()), | ||
| heapUsedMB: Math.round(mem.heapUsed / 1024 / 1024), | ||
| rssMB: Math.round(mem.rss / 1024 / 1024), | ||
| logFile: getLogPath(), | ||
| })}\n`, | ||
| stderr: "", | ||
| exitCode: 0, | ||
| }; | ||
| } | ||
| const runtime = { | ||
| GC, | ||
| ExcelFile, | ||
| fileCache, | ||
| cwd: request.cwd, | ||
| writeThrough, | ||
| }; | ||
| const io = createIoContext(request.stdin); | ||
| try { | ||
| await runWithDaemonRuntime(runtime, () => runWithIo(io, () => dispatch(request.argv, { signal }))); | ||
| return { stdout: io.stdout, stderr: io.stderr, exitCode: 0 }; | ||
| } | ||
| catch (err) { | ||
| return { | ||
| stdout: io.stdout, | ||
| stderr: `${io.stderr}${JSON.stringify({ error: errorMessage(err) })}\n`, | ||
| exitCode: 1, | ||
| }; | ||
| } | ||
| } | ||
| catch (err) { | ||
| return { | ||
| stdout: "", | ||
| stderr: `${JSON.stringify({ error: errorMessage(err) })}\n`, | ||
| exitCode: 1, | ||
| }; | ||
| } | ||
| } | ||
| function handleConnection(socket) { | ||
| activeConnections++; | ||
| resetIdleTimer(); | ||
| const activeControllers = new Set(); | ||
| let buffer = ""; | ||
| socket.on("data", (data) => { | ||
| buffer += data.toString(); | ||
| let newlineIdx = buffer.indexOf("\n"); | ||
| while (newlineIdx !== -1) { | ||
| const line = buffer.slice(0, newlineIdx); | ||
| buffer = buffer.slice(newlineIdx + 1); | ||
| if (line.trim()) { | ||
| let request; | ||
| try { | ||
| request = JSON.parse(line); | ||
| } | ||
| catch { | ||
| socket.write(`${JSON.stringify({ stdout: "", stderr: "Invalid JSON\n", exitCode: 1 })}\n`); | ||
| newlineIdx = buffer.indexOf("\n"); | ||
| continue; | ||
| } | ||
| const controller = new AbortController(); | ||
| activeControllers.add(controller); | ||
| const requestTimeoutMs = envPositiveInt(request.timeoutMs ? String(request.timeoutMs) : undefined, DEFAULT_REQUEST_TIMEOUT_MS); | ||
| registerSignalTimeout(controller.signal, requestTimeoutMs, `Command timed out after ${Math.ceil(requestTimeoutMs / 1000)}s`); | ||
| const timeout = setTimeout(() => { | ||
| controller.abort(new Error(`Command timed out after ${Math.ceil(requestTimeoutMs / 1000)}s`)); | ||
| }, requestTimeoutMs); | ||
| enqueue(async () => { | ||
| try { | ||
| const response = await handleRequest(request, controller.signal); | ||
| const { shutdown: shouldShutdown, ...wire } = response; | ||
| try { | ||
| socket.write(`${JSON.stringify(wire)}\n`, (err) => { | ||
| if (err) | ||
| daemonLog(`socket.write error: ${err.message}`); | ||
| if (shouldShutdown) { | ||
| void shutdown({ skipFlush: true }).catch((shutdownErr) => { | ||
| daemonLog(`shutdown failed after stop ack: ${errorMessage(shutdownErr)}`); | ||
| }); | ||
| } | ||
| }); | ||
| } | ||
| catch (err) { | ||
| daemonLog(`socket.write threw: ${errorMessage(err)}`); | ||
| } | ||
| } | ||
| finally { | ||
| clearTimeout(timeout); | ||
| activeControllers.delete(controller); | ||
| } | ||
| }).catch((err) => { | ||
| daemonLog(`request handling failed: ${errorMessage(err)}`); | ||
| }); | ||
| } | ||
| newlineIdx = buffer.indexOf("\n"); | ||
| } | ||
| }); | ||
| let disconnected = false; | ||
| const onDisconnect = () => { | ||
| if (disconnected) | ||
| return; | ||
| disconnected = true; | ||
| for (const controller of activeControllers) { | ||
| controller.abort(new Error("Client disconnected")); | ||
| } | ||
| activeConnections--; | ||
| resetIdleTimer(); | ||
| }; | ||
| socket.on("close", onDisconnect); | ||
| socket.on("error", onDisconnect); | ||
| } | ||
| server.on("error", (err) => { | ||
| daemonLog(`server error: ${err.message}`); | ||
| try { | ||
| unlinkSync(socketPath); | ||
| } | ||
| catch { } | ||
| disposeRuntime(); | ||
| process.exit(1); | ||
| }); | ||
| server.listen(socketPath, () => { | ||
| if (process.send) | ||
| process.send({ ready: true }); | ||
| process.stdout.write(`${JSON.stringify({ daemon: "started", pid: process.pid })}\n`); | ||
| resetIdleTimer(); | ||
| }); | ||
| process.on("SIGINT", () => { | ||
| void shutdown().catch((err) => { | ||
| daemonLog(`SIGINT shutdown failed: ${errorMessage(err)}`); | ||
| process.exit(1); | ||
| }); | ||
| }); | ||
| process.on("SIGTERM", () => { | ||
| void shutdown().catch((err) => { | ||
| daemonLog(`SIGTERM shutdown failed: ${errorMessage(err)}`); | ||
| process.exit(1); | ||
| }); | ||
| }); | ||
| } | ||
| //# sourceMappingURL=daemon.js.map |
| {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"} |
| export declare const USAGE = "Usage: hsx <command> [args]\n\nCommands:\n create <file> Create a new Excel file\n info <file> Show workbook metadata\n get <file> <ref> Read cells (Sheet1!A1:C10)\n csv <file> <ref> [--mode M] [--formulas] Read range as CSV\n set <file> <ref> [json] Write cells (JSON from arg or stdin)\n clear <file> <ref> [--type all|styles] Clear a range (default: values only)\n search <file> <term> [--sheet S] [--regex] Search for values across sheets\n copy <file> <src> <dst> Copy range (formulas + styles)\n diff <left-file> <right-file> Compare workbooks (value + formula)\n deps <file> <cell> [--depth N|--recursive] Trace precedents (what this cell reads)\n refs <file> <cell> [--depth N|--recursive] Trace dependents (what reads this cell)\n sheet <file> <op> [args] list | create | delete | rename\n rc <file> <op> <dim> [--ref R] [--count N] Insert/delete/hide/freeze rows or columns\n resize <file> [--columns A:D] [--width N] Resize column widths or row heights\n objects <file> [--sheet <name>] List charts, tables, pivots\n screenshot <file> [ref] [-o out.png] Screenshot workbook or range as PNG\n eval <file> [code] Execute arbitrary JS (code from arg or stdin)\n daemon start Start the background daemon\n daemon stop Stop the background daemon\n daemon status Show daemon status\n daemon flush Flush buffered workbook writes\n\nOptions:\n --no-daemon Skip daemon, run directly\n --timeout <seconds> Command timeout (default: 30s)\n\nDiff options:\n --inline-limit <n> Max inline diff rows before spooling to tmp file\n --preview-limit <n> Number of diff rows kept in stdout JSON\n --epsilon <n> Relative tolerance for numeric comparison (default: 1e-8)\n\nCSV options:\n --mode value|formula|both value: calculated values (default)\n formula: formula text for formula cells\n both: value and formula (e.g. \"5 | =B2+1\")\n --formulas shorthand for --mode formula\n\nDependency tracing options:\n --depth <n> Trace up to n hops (default: 1)\n --recursive Shorthand for --depth 50\n --max-formulas <n> refs: cap scanned formula cells (default: 250000)\n\nReference format:\n Sheet1!A1:C10 range on named sheet\n A1:C10 range on active sheet\n A1 single cell\n\nGlobals available in eval:\n workbook SpreadJS Workbook instance\n sheet Active worksheet\n GC GC.Spread.Sheets namespace\n file ExcelFile wrapper (batch, save, toJSON)\n range(ref) SpreadJS Range resolved from A1 ref (active sheet by default)"; | ||
| export declare function dispatch(args: string[], options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=dispatch.d.ts.map |
| {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/cli/dispatch.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,KAAK,w/FAuDyD,CAAC;AAqJ5E,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAyMf"} |
| import { clear } from "./commands/clear.js"; | ||
| import { copy } from "./commands/copy.js"; | ||
| import { create } from "./commands/create.js"; | ||
| import { csv } from "./commands/csv.js"; | ||
| import { deps, refs } from "./commands/deps.js"; | ||
| import { diff } from "./commands/diff.js"; | ||
| import { evalCode } from "./commands/eval.js"; | ||
| import { get } from "./commands/get.js"; | ||
| import { info } from "./commands/info.js"; | ||
| import { objects } from "./commands/objects.js"; | ||
| import { resize } from "./commands/resize.js"; | ||
| import { rowsCols } from "./commands/rows-cols.js"; | ||
| import { screenshot } from "./commands/screenshot.js"; | ||
| import { search } from "./commands/search.js"; | ||
| import { set } from "./commands/set.js"; | ||
| import { sheet } from "./commands/sheet.js"; | ||
| import { writeStderr, writeStdout } from "./output.js"; | ||
| export const USAGE = `Usage: hsx <command> [args] | ||
| Commands: | ||
| create <file> Create a new Excel file | ||
| info <file> Show workbook metadata | ||
| get <file> <ref> Read cells (Sheet1!A1:C10) | ||
| csv <file> <ref> [--mode M] [--formulas] Read range as CSV | ||
| set <file> <ref> [json] Write cells (JSON from arg or stdin) | ||
| clear <file> <ref> [--type all|styles] Clear a range (default: values only) | ||
| search <file> <term> [--sheet S] [--regex] Search for values across sheets | ||
| copy <file> <src> <dst> Copy range (formulas + styles) | ||
| diff <left-file> <right-file> Compare workbooks (value + formula) | ||
| deps <file> <cell> [--depth N|--recursive] Trace precedents (what this cell reads) | ||
| refs <file> <cell> [--depth N|--recursive] Trace dependents (what reads this cell) | ||
| sheet <file> <op> [args] list | create | delete | rename | ||
| rc <file> <op> <dim> [--ref R] [--count N] Insert/delete/hide/freeze rows or columns | ||
| resize <file> [--columns A:D] [--width N] Resize column widths or row heights | ||
| objects <file> [--sheet <name>] List charts, tables, pivots | ||
| screenshot <file> [ref] [-o out.png] Screenshot workbook or range as PNG | ||
| eval <file> [code] Execute arbitrary JS (code from arg or stdin) | ||
| daemon start Start the background daemon | ||
| daemon stop Stop the background daemon | ||
| daemon status Show daemon status | ||
| daemon flush Flush buffered workbook writes | ||
| Options: | ||
| --no-daemon Skip daemon, run directly | ||
| --timeout <seconds> Command timeout (default: 30s) | ||
| Diff options: | ||
| --inline-limit <n> Max inline diff rows before spooling to tmp file | ||
| --preview-limit <n> Number of diff rows kept in stdout JSON | ||
| --epsilon <n> Relative tolerance for numeric comparison (default: 1e-8) | ||
| CSV options: | ||
| --mode value|formula|both value: calculated values (default) | ||
| formula: formula text for formula cells | ||
| both: value and formula (e.g. "5 | =B2+1") | ||
| --formulas shorthand for --mode formula | ||
| Dependency tracing options: | ||
| --depth <n> Trace up to n hops (default: 1) | ||
| --recursive Shorthand for --depth 50 | ||
| --max-formulas <n> refs: cap scanned formula cells (default: 250000) | ||
| Reference format: | ||
| Sheet1!A1:C10 range on named sheet | ||
| A1:C10 range on active sheet | ||
| A1 single cell | ||
| Globals available in eval: | ||
| workbook SpreadJS Workbook instance | ||
| sheet Active worksheet | ||
| GC GC.Spread.Sheets namespace | ||
| file ExcelFile wrapper (batch, save, toJSON) | ||
| range(ref) SpreadJS Range resolved from A1 ref (active sheet by default)`; | ||
| function flag(args, name) { | ||
| const idx = args.indexOf(name); | ||
| return idx !== -1 ? args[idx + 1] : undefined; | ||
| } | ||
| function hasFlag(args, name) { | ||
| return args.includes(name); | ||
| } | ||
| function requireArg(args, index, usage) { | ||
| const value = args[index]; | ||
| if (!value || value.startsWith("--")) { | ||
| throw new Error(`Usage: hsx ${usage}`); | ||
| } | ||
| return value; | ||
| } | ||
| function parseOptionalInt(value, optionName) { | ||
| if (value === undefined) | ||
| return undefined; | ||
| const parsed = Number.parseInt(value, 10); | ||
| if (Number.isNaN(parsed)) { | ||
| throw new Error(`Invalid value for ${optionName}: ${value}`); | ||
| } | ||
| return parsed; | ||
| } | ||
| function parseOptionalFloat(value, optionName) { | ||
| if (value === undefined) | ||
| return undefined; | ||
| const parsed = Number.parseFloat(value); | ||
| if (Number.isNaN(parsed)) { | ||
| throw new Error(`Invalid value for ${optionName}: ${value}`); | ||
| } | ||
| return parsed; | ||
| } | ||
| function parseClearType(value) { | ||
| if (!value) | ||
| return "values"; | ||
| if (value === "values" || value === "styles" || value === "all") { | ||
| return value; | ||
| } | ||
| throw new Error(`Invalid value for --type: ${value}`); | ||
| } | ||
| function parseCsvMode(args) { | ||
| let explicitMode; | ||
| for (let i = 0; i < args.length; i++) { | ||
| const arg = args[i]; | ||
| if (arg === "--mode") { | ||
| const next = args[i + 1]; | ||
| if (!next || next.startsWith("--")) { | ||
| throw new Error("Usage: hsx csv <file> <ref> [--mode value|formula|both]"); | ||
| } | ||
| explicitMode = next; | ||
| i++; | ||
| continue; | ||
| } | ||
| if (arg.startsWith("--mode=")) { | ||
| const value = arg.slice("--mode=".length); | ||
| if (!value) { | ||
| throw new Error("Usage: hsx csv <file> <ref> [--mode value|formula|both]"); | ||
| } | ||
| explicitMode = value; | ||
| } | ||
| } | ||
| if (explicitMode) { | ||
| if (explicitMode === "value" || | ||
| explicitMode === "formula" || | ||
| explicitMode === "both") { | ||
| return explicitMode; | ||
| } | ||
| throw new Error(`Invalid --mode value: ${explicitMode}. Expected value|formula|both`); | ||
| } | ||
| return hasFlag(args, "--formulas") ? "formula" : "value"; | ||
| } | ||
| function parseCsvPositionalArgs(args) { | ||
| const positional = []; | ||
| for (let i = 0; i < args.length; i++) { | ||
| const arg = args[i]; | ||
| if (arg === "--mode") { | ||
| i++; | ||
| continue; | ||
| } | ||
| if (arg.startsWith("--mode=") || arg === "--formulas") { | ||
| continue; | ||
| } | ||
| if (arg.startsWith("--")) { | ||
| continue; | ||
| } | ||
| positional.push(arg); | ||
| } | ||
| const file = positional[0]; | ||
| const ref = positional[1]; | ||
| if (!file || !ref) { | ||
| throw new Error("Usage: hsx csv <file> <ref> [--mode value|formula|both]"); | ||
| } | ||
| return { file, ref }; | ||
| } | ||
| function parseTraceDepth(args) { | ||
| const hasDepthFlag = hasFlag(args, "--depth"); | ||
| const rawDepth = flag(args, "--depth"); | ||
| if (hasDepthFlag && (!rawDepth || rawDepth.startsWith("--"))) { | ||
| throw new Error("Usage: --depth <n>"); | ||
| } | ||
| if (rawDepth !== undefined) { | ||
| const depth = Number.parseInt(rawDepth, 10); | ||
| if (Number.isNaN(depth) || depth <= 0) { | ||
| throw new Error(`Invalid value for --depth: ${rawDepth}`); | ||
| } | ||
| return depth; | ||
| } | ||
| return hasFlag(args, "--recursive") ? 50 : 1; | ||
| } | ||
| export async function dispatch(args, options) { | ||
| const signal = options?.signal; | ||
| const command = args[0]; | ||
| const rest = args.slice(1); | ||
| switch (command) { | ||
| case "create": { | ||
| const file = requireArg(rest, 0, "create <file>"); | ||
| await create(file, { signal }); | ||
| break; | ||
| } | ||
| case "info": { | ||
| const file = requireArg(rest, 0, "info <file>"); | ||
| await info(file, { signal }); | ||
| break; | ||
| } | ||
| case "get": { | ||
| const file = requireArg(rest, 0, "get <file> <ref>"); | ||
| const ref = requireArg(rest, 1, "get <file> <ref>"); | ||
| const styles = !hasFlag(rest, "--no-styles"); | ||
| await get(file, ref, { styles, signal }); | ||
| break; | ||
| } | ||
| case "csv": { | ||
| const { file, ref } = parseCsvPositionalArgs(rest); | ||
| const mode = parseCsvMode(rest); | ||
| await csv(file, ref, { signal, mode }); | ||
| break; | ||
| } | ||
| case "set": { | ||
| const file = requireArg(rest, 0, "set <file> <ref> [json]"); | ||
| const ref = requireArg(rest, 1, "set <file> <ref> [json]"); | ||
| const json = rest[2]; | ||
| await set(file, ref, json, { signal }); | ||
| break; | ||
| } | ||
| case "clear": { | ||
| const file = requireArg(rest, 0, "clear <file> <ref>"); | ||
| const ref = requireArg(rest, 1, "clear <file> <ref>"); | ||
| await clear(file, ref, parseClearType(flag(rest, "--type")), { signal }); | ||
| break; | ||
| } | ||
| case "search": { | ||
| const file = requireArg(rest, 0, "search <file> <term>"); | ||
| const term = requireArg(rest, 1, "search <file> <term>"); | ||
| await search(file, term, { | ||
| sheet: flag(rest, "--sheet"), | ||
| matchCase: hasFlag(rest, "--match-case"), | ||
| regex: hasFlag(rest, "--regex"), | ||
| maxResults: parseOptionalInt(flag(rest, "--max"), "--max"), | ||
| signal, | ||
| }); | ||
| break; | ||
| } | ||
| case "copy": { | ||
| const file = requireArg(rest, 0, "copy <file> <src> <dst>"); | ||
| const src = requireArg(rest, 1, "copy <file> <src> <dst>"); | ||
| const dst = requireArg(rest, 2, "copy <file> <src> <dst>"); | ||
| await copy(file, src, dst, { signal }); | ||
| break; | ||
| } | ||
| case "diff": { | ||
| const leftFile = requireArg(rest, 0, "diff <left-file> <right-file>"); | ||
| const rightFile = requireArg(rest, 1, "diff <left-file> <right-file>"); | ||
| await diff(leftFile, rightFile, { | ||
| inlineLimit: parseOptionalInt(flag(rest, "--inline-limit"), "--inline-limit"), | ||
| previewLimit: parseOptionalInt(flag(rest, "--preview-limit"), "--preview-limit"), | ||
| epsilon: parseOptionalFloat(flag(rest, "--epsilon"), "--epsilon"), | ||
| signal, | ||
| }); | ||
| break; | ||
| } | ||
| case "deps": { | ||
| const file = requireArg(rest, 0, "deps <file> <cell>"); | ||
| const cell = requireArg(rest, 1, "deps <file> <cell>"); | ||
| await deps(file, cell, { | ||
| depth: parseTraceDepth(rest), | ||
| signal, | ||
| }); | ||
| break; | ||
| } | ||
| case "refs": { | ||
| const file = requireArg(rest, 0, "refs <file> <cell>"); | ||
| const cell = requireArg(rest, 1, "refs <file> <cell>"); | ||
| await refs(file, cell, { | ||
| depth: parseTraceDepth(rest), | ||
| maxFormulaCells: parseOptionalInt(flag(rest, "--max-formulas"), "--max-formulas"), | ||
| signal, | ||
| }); | ||
| break; | ||
| } | ||
| case "sheet": { | ||
| const file = requireArg(rest, 0, "sheet <file> <op> [args]"); | ||
| const op = requireArg(rest, 1, "sheet <file> <op> [args]"); | ||
| const opArgs = rest.slice(2); | ||
| await sheet(file, op, opArgs, { signal }); | ||
| break; | ||
| } | ||
| case "rc": { | ||
| const file = requireArg(rest, 0, "rc <file> <op> <dim>"); | ||
| const opRaw = requireArg(rest, 1, "rc <file> <op> <dim>"); | ||
| const dimRaw = requireArg(rest, 2, "rc <file> <op> <dim>"); | ||
| const validOps = new Set([ | ||
| "insert", | ||
| "delete", | ||
| "hide", | ||
| "unhide", | ||
| "freeze", | ||
| "unfreeze", | ||
| ]); | ||
| const dimAliases = { | ||
| rows: "rows", | ||
| row: "rows", | ||
| columns: "columns", | ||
| column: "columns", | ||
| cols: "columns", | ||
| col: "columns", | ||
| }; | ||
| if (!validOps.has(opRaw)) { | ||
| throw new Error(`Invalid rc operation: ${opRaw}`); | ||
| } | ||
| const dim = dimAliases[dimRaw.toLowerCase()]; | ||
| if (!dim) { | ||
| throw new Error(`Invalid rc dimension: ${dimRaw}. Expected rows|columns`); | ||
| } | ||
| await rowsCols(file, opRaw, dim, { | ||
| sheet: flag(rest, "--sheet"), | ||
| ref: flag(rest, "--ref"), | ||
| count: parseOptionalInt(flag(rest, "--count"), "--count"), | ||
| signal, | ||
| }); | ||
| break; | ||
| } | ||
| case "resize": { | ||
| const file = requireArg(rest, 0, "resize <file> [options]"); | ||
| await resize(file, flag(rest, "--sheet"), { | ||
| columns: flag(rest, "--columns"), | ||
| rows: flag(rest, "--rows"), | ||
| width: parseOptionalFloat(flag(rest, "--width"), "--width"), | ||
| height: parseOptionalFloat(flag(rest, "--height"), "--height"), | ||
| signal, | ||
| }); | ||
| break; | ||
| } | ||
| case "objects": { | ||
| const file = requireArg(rest, 0, "objects <file>"); | ||
| await objects(file, flag(rest, "--sheet"), { signal }); | ||
| break; | ||
| } | ||
| case "screenshot": { | ||
| const file = requireArg(rest, 0, "screenshot <file> [ref] [-o out.png]"); | ||
| const ref = rest[1] && !rest[1].startsWith("-") ? rest[1] : undefined; | ||
| await screenshot(file, { | ||
| ref, | ||
| out: flag(rest, "-o") ?? flag(rest, "--out"), | ||
| signal, | ||
| }); | ||
| break; | ||
| } | ||
| case "eval": { | ||
| const file = requireArg(rest, 0, "eval <file> [code]"); | ||
| const code = rest[1]; | ||
| await evalCode(file, code, { signal }); | ||
| break; | ||
| } | ||
| default: | ||
| writeStderr(`Unknown command: ${command}\n`); | ||
| writeStdout(`${USAGE}\n`); | ||
| throw new Error(`Unknown command: ${command}`); | ||
| } | ||
| } | ||
| //# sourceMappingURL=dispatch.js.map |
| {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/cli/dispatch.ts"],"names":[],"mappings":"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"} |
| import type { ExcelFile } from "../index.js"; | ||
| export declare class FileCache { | ||
| private readonly maxSize; | ||
| private cache; | ||
| constructor(maxSize?: number); | ||
| get maxCacheSize(): number; | ||
| private key; | ||
| private getMtime; | ||
| get(filePath: string, cwd: string): Promise<{ | ||
| file: ExcelFile; | ||
| absPath: string; | ||
| } | null>; | ||
| put(filePath: string, cwd: string, file: ExcelFile): Promise<void>; | ||
| markDirty(filePath: string, cwd: string): void; | ||
| updateMtime(filePath: string, cwd: string): Promise<void>; | ||
| isDirty(filePath: string, cwd: string): boolean; | ||
| invalidate(filePath: string, cwd: string): void; | ||
| flushDirty(): Promise<number>; | ||
| get dirtyCount(): number; | ||
| clear(): void; | ||
| get size(): number; | ||
| } | ||
| //# sourceMappingURL=file-cache.d.ts.map |
| {"version":3,"file":"file-cache.d.ts","sourceRoot":"","sources":["../../src/cli/file-cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAS7C,qBAAa,SAAS;IAGR,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,KAAK,CAAiC;gBAEjB,OAAO,SAAK;IAEzC,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,OAAO,CAAC,GAAG;YAIG,QAAQ;IAQhB,GAAG,CACP,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAkBjD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBxE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMxC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/D,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAK/C,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAanC,IAAI,UAAU,IAAI,MAAM,CAMvB;IAED,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"} |
| import { stat } from "node:fs/promises"; | ||
| import { resolve } from "node:path"; | ||
| export class FileCache { | ||
| maxSize; | ||
| cache = new Map(); | ||
| constructor(maxSize = 10) { | ||
| this.maxSize = maxSize; | ||
| } | ||
| get maxCacheSize() { | ||
| return this.maxSize; | ||
| } | ||
| key(filePath, cwd) { | ||
| return resolve(cwd, filePath); | ||
| } | ||
| async getMtime(absPath) { | ||
| try { | ||
| return (await stat(absPath)).mtimeMs; | ||
| } | ||
| catch { | ||
| return -1; | ||
| } | ||
| } | ||
| async get(filePath, cwd) { | ||
| const absPath = this.key(filePath, cwd); | ||
| const entry = this.cache.get(absPath); | ||
| if (!entry) | ||
| return null; | ||
| if (!entry.dirty) { | ||
| const currentMtime = await this.getMtime(absPath); | ||
| if (currentMtime !== entry.mtime) { | ||
| this.cache.delete(absPath); | ||
| return null; | ||
| } | ||
| } | ||
| this.cache.delete(absPath); | ||
| this.cache.set(absPath, entry); | ||
| return { file: entry.file, absPath }; | ||
| } | ||
| async put(filePath, cwd, file) { | ||
| const absPath = this.key(filePath, cwd); | ||
| const mtime = await this.getMtime(absPath); | ||
| if (this.cache.size >= this.maxSize && !this.cache.has(absPath)) { | ||
| const oldest = this.cache.keys().next().value; | ||
| if (oldest !== undefined) { | ||
| const entry = this.cache.get(oldest); | ||
| if (entry?.dirty) { | ||
| await entry.file.save(entry.absPath); | ||
| } | ||
| this.cache.delete(oldest); | ||
| } | ||
| } | ||
| this.cache.set(absPath, { file, absPath, mtime, dirty: false }); | ||
| } | ||
| markDirty(filePath, cwd) { | ||
| const absPath = this.key(filePath, cwd); | ||
| const entry = this.cache.get(absPath); | ||
| if (entry) | ||
| entry.dirty = true; | ||
| } | ||
| async updateMtime(filePath, cwd) { | ||
| const absPath = this.key(filePath, cwd); | ||
| const entry = this.cache.get(absPath); | ||
| if (entry) { | ||
| entry.mtime = await this.getMtime(absPath); | ||
| entry.dirty = false; | ||
| } | ||
| } | ||
| isDirty(filePath, cwd) { | ||
| const entry = this.cache.get(this.key(filePath, cwd)); | ||
| return !!entry?.dirty; | ||
| } | ||
| invalidate(filePath, cwd) { | ||
| this.cache.delete(this.key(filePath, cwd)); | ||
| } | ||
| async flushDirty() { | ||
| let flushed = 0; | ||
| for (const entry of this.cache.values()) { | ||
| if (entry.dirty) { | ||
| await entry.file.save(entry.absPath); | ||
| entry.mtime = await this.getMtime(entry.absPath); | ||
| entry.dirty = false; | ||
| flushed++; | ||
| } | ||
| } | ||
| return flushed; | ||
| } | ||
| get dirtyCount() { | ||
| let count = 0; | ||
| for (const entry of this.cache.values()) { | ||
| if (entry.dirty) | ||
| count++; | ||
| } | ||
| return count; | ||
| } | ||
| clear() { | ||
| this.cache.clear(); | ||
| } | ||
| get size() { | ||
| return this.cache.size; | ||
| } | ||
| } | ||
| //# sourceMappingURL=file-cache.js.map |
| {"version":3,"file":"file-cache.js","sourceRoot":"","sources":["../../src/cli/file-cache.ts"],"names":[],"mappings":"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"} |
@@ -1,2 +0,4 @@ | ||
| export declare function clear(filePath: string, ref: string, clearType?: "values" | "styles" | "all"): Promise<void>; | ||
| export declare function clear(filePath: string, ref: string, clearType?: "values" | "styles" | "all", options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=clear.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AAIA,wBAAsB,KAAK,CACzB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,QAAQ,GAAG,QAAQ,GAAG,KAAgB,GAChD,OAAO,CAAC,IAAI,CAAC,CA+Cf"} | ||
| {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AAIA,wBAAsB,KAAK,CACzB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,QAAQ,GAAG,QAAQ,GAAG,KAAgB,EACjD,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAiDf"} |
| import { parseRef, rangeDimensions } from "../a1.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail, ok } from "../output.js"; | ||
| export async function clear(filePath, ref, clearType = "values") { | ||
| export async function clear(filePath, ref, clearType = "values", options) { | ||
| const parsed = parseRef(ref); | ||
| await withFile(filePath, ({ workbook, GC }) => { | ||
| await withFile(filePath, ({ file, workbook, GC }) => { | ||
| const sheet = parsed.sheet | ||
@@ -15,11 +15,13 @@ ? workbook.getSheetFromName(parsed.sheet) | ||
| const range = new GC.Spread.Sheets.Range(parsed.start.row, parsed.start.col, rows, cols); | ||
| if (clearType === "values" || clearType === "all") { | ||
| sheet.clear(range.row, range.col, range.rowCount, range.colCount, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data); | ||
| } | ||
| if (clearType === "styles" || clearType === "all") { | ||
| sheet.clear(range.row, range.col, range.rowCount, range.colCount, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.style); | ||
| } | ||
| file.batch(() => { | ||
| if (clearType === "values" || clearType === "all") { | ||
| sheet.clear(range.row, range.col, range.rowCount, range.colCount, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data); | ||
| } | ||
| if (clearType === "styles" || clearType === "all") { | ||
| sheet.clear(range.row, range.col, range.rowCount, range.colCount, GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.style); | ||
| } | ||
| }); | ||
| ok({ cleared: ref, type: clearType }); | ||
| }, { save: true }); | ||
| }, { save: true, signal: options?.signal }); | ||
| } | ||
| //# sourceMappingURL=clear.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,QAAgB,EAChB,GAAW,EACX,YAAyC,QAAQ;IAEjD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,QAAQ,CACZ,QAAQ,EACR,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;QACnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;YACxB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CACtC,MAAM,CAAC,KAAK,CAAC,GAAG,EAChB,MAAM,CAAC,KAAK,CAAC,GAAG,EAChB,IAAI,EACJ,IAAI,CACL,CAAC;QAEF,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAClD,KAAK,CAAC,KAAK,CACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAClC,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAClD,KAAK,CAAC,KAAK,CACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CACnC,CAAC;QACJ,CAAC;QAED,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACxC,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;AACJ,CAAC"} | ||
| {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../../src/cli/commands/clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,QAAgB,EAChB,GAAW,EACX,YAAyC,QAAQ,EACjD,OAAyC;IAEzC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,QAAQ,CACZ,QAAQ,EACR,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;YACxB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CACtC,MAAM,CAAC,KAAK,CAAC,GAAG,EAChB,MAAM,CAAC,KAAK,CAAC,GAAG,EAChB,IAAI,EACJ,IAAI,CACL,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBAClD,KAAK,CAAC,KAAK,CACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAClC,CAAC;YACJ,CAAC;YACD,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;gBAClD,KAAK,CAAC,KAAK,CACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,QAAQ,EACd,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EACnC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CACnC,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IACxC,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CACxC,CAAC;AACJ,CAAC"} |
@@ -1,2 +0,4 @@ | ||
| export declare function copy(filePath: string, srcRef: string, dstRef: string): Promise<void>; | ||
| export declare function copy(filePath: string, srcRef: string, dstRef: string, options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=copy.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/copy.ts"],"names":[],"mappings":"AAIA,wBAAsB,IAAI,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAsDf"} | ||
| {"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/copy.ts"],"names":[],"mappings":"AAKA,wBAAsB,IAAI,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAwDf"} |
| import { parseRef, rangeDimensions } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail, ok } from "../output.js"; | ||
| export async function copy(filePath, srcRef, dstRef) { | ||
| export async function copy(filePath, srcRef, dstRef, options) { | ||
| const src = parseRef(srcRef); | ||
| const dst = parseRef(dstRef); | ||
| const signal = options?.signal; | ||
| await withFile(filePath, ({ file, workbook }) => { | ||
@@ -22,2 +24,3 @@ const srcSheet = src.sheet | ||
| for (let r = 0; r < dstRows; r++) { | ||
| throwIfAborted(signal); | ||
| for (let c = 0; c < dstCols; c++) { | ||
@@ -50,4 +53,4 @@ const sr = src.start.row + (r % srcRows); | ||
| }); | ||
| }, { save: true }); | ||
| }, { save: true, signal }); | ||
| } | ||
| //# sourceMappingURL=copy.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/cli/commands/copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,QAAgB,EAChB,MAAc,EACd,MAAc;IAEd,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE7B,MAAM,QAAQ,CACZ,QAAQ,EACR,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK;YACxB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;YACtC,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK;YACxB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;YACtC,CAAC,CAAC,QAAQ,CAAC;QAEb,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,2BAA2B,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,gCAAgC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAEjE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC9D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;oBACzC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;oBACzC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;oBAC7B,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;oBAE7B,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC5C,IAAI,OAAO,EAAE,CAAC;wBACZ,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACN,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;wBACxC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;4BAC1C,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;wBACnC,CAAC;oBACH,CAAC;oBAED,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACxC,IAAI,KAAK,EAAE,CAAC;wBACV,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC;YACD,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,MAAM;YACnB,WAAW,EAAE,OAAO,GAAG,OAAO;SAC/B,CAAC,CAAC;IACL,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;AACJ,CAAC"} | ||
| {"version":3,"file":"copy.js","sourceRoot":"","sources":["../../../src/cli/commands/copy.ts"],"names":[],"mappings":"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"} |
@@ -1,2 +0,4 @@ | ||
| export declare function create(filePath: string): Promise<void>; | ||
| export declare function create(filePath: string, options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=create.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D"} | ||
| {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAGf"} |
| import { withNewFile } from "../context.js"; | ||
| import { ok } from "../output.js"; | ||
| export async function create(filePath) { | ||
| await withNewFile(filePath); | ||
| export async function create(filePath, options) { | ||
| await withNewFile(filePath, undefined, { signal: options?.signal }); | ||
| ok({ created: filePath }); | ||
| } | ||
| //# sourceMappingURL=create.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC3C,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5B,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5B,CAAC"} | ||
| {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/cli/commands/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAgB,EAChB,OAAyC;IAEzC,MAAM,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC5B,CAAC"} |
@@ -1,2 +0,6 @@ | ||
| export declare function csv(filePath: string, ref: string): Promise<void>; | ||
| export type CsvMode = "value" | "formula" | "both"; | ||
| export declare function csv(filePath: string, ref: string, options?: { | ||
| signal?: AbortSignal | null; | ||
| mode?: CsvMode; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=csv.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/csv.ts"],"names":[],"mappings":"AAIA,wBAAsB,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCtE"} | ||
| {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/csv.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,wBAAsB,GAAG,CACvB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5D,OAAO,CAAC,IAAI,CAAC,CAkCf"} |
+38
-13
| import { parseRef, rangeDimensions } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail } from "../output.js"; | ||
| export async function csv(filePath, ref) { | ||
| import { fail, writeStdout } from "../output.js"; | ||
| export async function csv(filePath, ref, options = {}) { | ||
| const parsed = parseRef(ref); | ||
| const signal = options?.signal; | ||
| const mode = options.mode ?? "value"; | ||
| await withFile(filePath, ({ workbook }) => { | ||
@@ -16,19 +19,41 @@ const sheet = parsed.sheet | ||
| for (let r = 0; r < rows; r++) { | ||
| throwIfAborted(signal); | ||
| const row = []; | ||
| for (let c = 0; c < cols; c++) { | ||
| const value = sheet.getValue(parsed.start.row + r, parsed.start.col + c); | ||
| const str = value === null || value === undefined ? "" : String(value); | ||
| if (str.includes(",") || str.includes('"') || str.includes("\n")) { | ||
| row.push(`"${str.replace(/"/g, '""')}"`); | ||
| } | ||
| else { | ||
| row.push(str); | ||
| } | ||
| const rowIndex = parsed.start.row + r; | ||
| const colIndex = parsed.start.col + c; | ||
| row.push(toCsvCell(sheet, rowIndex, colIndex, mode)); | ||
| } | ||
| lines.push(row.join(",")); | ||
| } | ||
| process.stdout.write(`${lines.join("\n")}\n`); | ||
| process.exit(0); | ||
| }); | ||
| writeStdout(`${lines.join("\n")}\n`); | ||
| }, { signal }); | ||
| } | ||
| function toCsvCell(sheet, row, col, mode) { | ||
| const value = sheet.getValue(row, col); | ||
| const formula = sheet.getFormula(row, col); | ||
| const valueText = value === null || value === undefined ? "" : String(value); | ||
| const formulaText = formula ? `=${formula}` : ""; | ||
| let text = ""; | ||
| if (mode === "formula") { | ||
| text = formulaText || valueText; | ||
| } | ||
| else if (mode === "both") { | ||
| text = formulaText | ||
| ? valueText | ||
| ? `${valueText} | ${formulaText}` | ||
| : formulaText | ||
| : valueText; | ||
| } | ||
| else { | ||
| text = valueText; | ||
| } | ||
| return escapeCsv(text); | ||
| } | ||
| function escapeCsv(text) { | ||
| if (text.includes(",") || text.includes('"') || text.includes("\n")) { | ||
| return `"${text.replace(/"/g, '""')}"`; | ||
| } | ||
| return text; | ||
| } | ||
| //# sourceMappingURL=csv.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../src/cli/commands/csv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,QAAgB,EAAE,GAAW;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE7B,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;YACxB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,oBAAoB,MAAM,CAAC,KAAK,IAAI,UAAU,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAa,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EACpB,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CACrB,CAAC;gBACF,MAAM,GAAG,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"} | ||
| {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../src/cli/commands/csv.ts"],"names":[],"mappings":"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"} |
@@ -1,2 +0,4 @@ | ||
| export declare function evalCode(filePath: string, codeArg: string | undefined): Promise<void>; | ||
| export declare function evalCode(filePath: string, codeArg: string | undefined, options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=eval.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAGA,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAAC,IAAI,CAAC,CAkDf"} | ||
| {"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAIA,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAqFf"} |
@@ -0,7 +1,26 @@ | ||
| import { parseRef } from "../a1.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail, ok, readInput } from "../output.js"; | ||
| export async function evalCode(filePath, codeArg) { | ||
| export async function evalCode(filePath, codeArg, options) { | ||
| const code = await readInput(codeArg); | ||
| await withFile(filePath, async ({ file, workbook, GC }) => { | ||
| const sheet = workbook.getActiveSheet(); | ||
| const range = (ref) => { | ||
| if (typeof ref !== "string" || ref.trim().length === 0) { | ||
| throw new Error("range(ref) expects a non-empty A1 reference string."); | ||
| } | ||
| const parsed = parseRef(ref.trim()); | ||
| const targetSheet = parsed.sheet | ||
| ? workbook.getSheetFromName(parsed.sheet) | ||
| : workbook.getActiveSheet(); | ||
| if (!targetSheet) { | ||
| throw new Error(`Sheet not found: ${parsed.sheet ?? "(active)"}`); | ||
| } | ||
| const rowCount = parsed.end.row - parsed.start.row + 1; | ||
| const colCount = parsed.end.col - parsed.start.col + 1; | ||
| if (rowCount < 1 || colCount < 1) { | ||
| throw new Error(`Invalid range reference: ${ref}`); | ||
| } | ||
| return targetSheet.getRange(parsed.start.row, parsed.start.col, rowCount, colCount); | ||
| }; | ||
| // Capture console.log output | ||
@@ -17,4 +36,4 @@ const logs = []; | ||
| const AsyncFunction = Object.getPrototypeOf(async () => { }).constructor; | ||
| const fn = new AsyncFunction("workbook", "sheet", "GC", "file", code); | ||
| const result = await fn(workbook, sheet, GC, file); | ||
| const fn = new AsyncFunction("workbook", "sheet", "GC", "file", "range", code); | ||
| const result = await fn(workbook, sheet, GC, file, range); | ||
| const output = {}; | ||
@@ -33,6 +52,2 @@ if (result !== undefined) { | ||
| catch (err) { | ||
| // Restore console before failing | ||
| console.log = origLog; | ||
| console.warn = origWarn; | ||
| console.error = origError; | ||
| fail(err instanceof Error ? err.message : String(err)); | ||
@@ -45,4 +60,4 @@ } | ||
| } | ||
| }, { save: true }); | ||
| }, { save: true, signal: options?.signal }); | ||
| } | ||
| //# sourceMappingURL=eval.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"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"} |
| export declare function get(filePath: string, ref: string, options: { | ||
| styles?: boolean; | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=get.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"AAKA,wBAAsB,GAAG,CACvB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC,IAAI,CAAC,CAiEf"} | ||
| {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"AAMA,wBAAsB,GAAG,CACvB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACzD,OAAO,CAAC,IAAI,CAAC,CAwEf"} |
| import { cellToA1, parseRef, rangeDimensions } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
@@ -7,2 +8,3 @@ import { fail, ok } from "../output.js"; | ||
| const parsed = parseRef(ref); | ||
| const signal = options.signal; | ||
| await withFile(filePath, ({ workbook }) => { | ||
@@ -19,2 +21,3 @@ const sheet = parsed.sheet | ||
| for (let r = 0; r < rows; r++) { | ||
| throwIfAborted(signal); | ||
| for (let c = 0; c < cols; c++) { | ||
@@ -41,3 +44,3 @@ const row = parsed.start.row + r; | ||
| if (serialized) { | ||
| cell.styles = serialized; | ||
| cell.style = serialized; | ||
| } | ||
@@ -56,4 +59,4 @@ } | ||
| }); | ||
| }); | ||
| }, { signal }); | ||
| } | ||
| //# sourceMappingURL=get.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/cli/commands/get.ts"],"names":[],"mappings":"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"} |
@@ -1,2 +0,4 @@ | ||
| export declare function info(filePath: string): Promise<void>; | ||
| export declare function info(filePath: string, options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=info.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAIA,wBAAsB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C1D"} | ||
| {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAKA,wBAAsB,IAAI,CACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAiDf"} |
| import { cellToA1 } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { ok } from "../output.js"; | ||
| export async function info(filePath) { | ||
| export async function info(filePath, options) { | ||
| const signal = options?.signal; | ||
| await withFile(filePath, ({ workbook, GC }) => { | ||
@@ -10,2 +12,3 @@ const sheetCount = workbook.getSheetCount(); | ||
| for (let i = 0; i < sheetCount; i++) { | ||
| throwIfAborted(signal); | ||
| const sheet = workbook.getSheet(i); | ||
@@ -33,4 +36,4 @@ let usedRange = null; | ||
| ok({ sheets }); | ||
| }); | ||
| }, { signal }); | ||
| } | ||
| //# sourceMappingURL=info.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,QAAgB;IACzC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;QAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACnD,MAAM,MAAM,GAKN,EAAE,CAAC;QAET,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,SAAS,GAAkB,IAAI,CAAC;YAEpC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAC9B,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI;oBACjC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CACzC,CAAC;gBACF,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC/C,MAAM,KAAK,GAAG,QAAQ,CACpB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,EAC9B,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAC/B,CAAC;oBACF,SAAS,GAAG,GAAG,OAAO,IAAI,KAAK,EAAE,CAAC;gBACpC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;gBAClB,SAAS;gBACT,MAAM,EAAE,CAAC,KAAK,WAAW;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC"} | ||
| {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,QAAgB,EAChB,OAAyC;IAEzC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAE/B,MAAM,QAAQ,CACZ,QAAQ,EACR,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;QACnB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACnD,MAAM,MAAM,GAKN,EAAE,CAAC;QAET,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,SAAS,GAAkB,IAAI,CAAC;YAEpC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAC9B,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI;oBACjC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CACzC,CAAC;gBACF,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC/C,MAAM,KAAK,GAAG,QAAQ,CACpB,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,EAC9B,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAC/B,CAAC;oBACF,SAAS,GAAG,GAAG,OAAO,IAAI,KAAK,EAAE,CAAC;gBACpC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;gBAClB,SAAS;gBACT,MAAM,EAAE,CAAC,KAAK,WAAW;aAC1B,CAAC,CAAC;QACL,CAAC;QAED,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACjB,CAAC,EACD,EAAE,MAAM,EAAE,CACX,CAAC;AACJ,CAAC"} |
@@ -1,2 +0,4 @@ | ||
| export declare function objects(filePath: string, sheetFilter?: string): Promise<void>; | ||
| export declare function objects(filePath: string, sheetFilter?: string, options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=objects.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/objects.ts"],"names":[],"mappings":"AASA,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAqEf"} | ||
| {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/objects.ts"],"names":[],"mappings":"AAUA,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAwEf"} |
@@ -0,7 +1,10 @@ | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { ok } from "../output.js"; | ||
| export async function objects(filePath, sheetFilter) { | ||
| export async function objects(filePath, sheetFilter, options) { | ||
| const signal = options?.signal; | ||
| await withFile(filePath, ({ workbook }) => { | ||
| const result = []; | ||
| for (let i = 0; i < workbook.getSheetCount(); i++) { | ||
| throwIfAborted(signal); | ||
| const sheet = workbook.getSheet(i); | ||
@@ -11,3 +14,2 @@ const sheetName = sheet.name(); | ||
| continue; | ||
| // Charts | ||
| try { | ||
@@ -26,3 +28,2 @@ const charts = sheet.charts?.all?.() ?? []; | ||
| } | ||
| // Tables | ||
| try { | ||
@@ -41,3 +42,2 @@ const tables = sheet.tables?.all?.() ?? []; | ||
| } | ||
| // Pivot tables | ||
| try { | ||
@@ -56,3 +56,2 @@ const pivots = sheet.pivotTables?.all?.() ?? []; | ||
| } | ||
| // Slicers | ||
| try { | ||
@@ -73,4 +72,4 @@ const slicers = sheet.slicers?.all?.() ?? []; | ||
| ok({ objects: result }); | ||
| }); | ||
| }, { signal }); | ||
| } | ||
| //# sourceMappingURL=objects.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/cli/commands/objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAQlC,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,QAAgB,EAChB,WAAoB;IAEpB,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxC,MAAM,MAAM,GAAiB,EAAE,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAE/B,IAAI,WAAW,IAAI,SAAS,KAAK,WAAW;gBAAE,SAAS;YAEvD,SAAS;YACT,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;qBACnB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;YAED,SAAS;YACT,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;YAED,eAAe;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oCAAoC;YACtC,CAAC;YAED,UAAU;YACV,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;qBAC5B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;QACH,CAAC;QAED,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC"} | ||
| {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/cli/commands/objects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAQlC,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,QAAgB,EAChB,WAAoB,EACpB,OAAyC;IAEzC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAE/B,MAAM,QAAQ,CACZ,QAAQ,EACR,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACf,MAAM,MAAM,GAAiB,EAAE,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,cAAc,CAAC,MAAM,CAAC,CAAC;YACvB,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAE/B,IAAI,WAAW,IAAI,SAAS,KAAK,WAAW;gBAAE,SAAS;YAEvD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;qBACnB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qCAAqC;YACvC,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAChD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;qBAC3B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oCAAoC;YACtC,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;gBAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;qBAC5B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,sCAAsC;YACxC,CAAC;QACH,CAAC;QAED,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1B,CAAC,EACD,EAAE,MAAM,EAAE,CACX,CAAC;AACJ,CAAC"} |
@@ -6,3 +6,4 @@ export declare function resize(filePath: string, sheetName: string | undefined, options: { | ||
| height?: number; | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=resize.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/resize.ts"],"names":[],"mappings":"AAIA,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACA,OAAO,CAAC,IAAI,CAAC,CAoDf"} | ||
| {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/resize.ts"],"names":[],"mappings":"AAuCA,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B,GACA,OAAO,CAAC,IAAI,CAAC,CA+Df"} |
| import { colToIndex } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail, ok } from "../output.js"; | ||
| const USED_RANGE_TYPE_DATA_FORMULA = 16 | 32; | ||
| function parseColumnSpan(ref) { | ||
| const trimmed = ref.trim(); | ||
| const match = trimmed.match(/^([A-Za-z]+)(?::([A-Za-z]+))?$/); | ||
| if (!match) { | ||
| fail(`Invalid --columns reference: ${ref}`); | ||
| } | ||
| const start = colToIndex(match[1]); | ||
| const end = match[2] ? colToIndex(match[2]) : start; | ||
| if (start < 0 || end < 0 || end < start) { | ||
| fail(`Invalid --columns reference: ${ref}`); | ||
| } | ||
| return { start, end }; | ||
| } | ||
| function parseRowSpan(ref) { | ||
| const trimmed = ref.trim(); | ||
| const match = trimmed.match(/^(\d+)(?::(\d+))?$/); | ||
| if (!match) { | ||
| fail(`Invalid --rows reference: ${ref}`); | ||
| } | ||
| const start = Number.parseInt(match[1], 10) - 1; | ||
| const end = match[2] ? Number.parseInt(match[2], 10) - 1 : start; | ||
| if (start < 0 || end < 0 || end < start) { | ||
| fail(`Invalid --rows reference: ${ref}`); | ||
| } | ||
| return { start, end }; | ||
| } | ||
| export async function resize(filePath, sheetName, options) { | ||
@@ -8,3 +36,4 @@ if (!options.width && !options.height) { | ||
| } | ||
| await withFile(filePath, ({ workbook }) => { | ||
| const signal = options.signal; | ||
| await withFile(filePath, ({ file, workbook }) => { | ||
| const sheet = sheetName | ||
@@ -15,39 +44,48 @@ ? workbook.getSheetFromName(sheetName) | ||
| fail(`Sheet not found: ${sheetName ?? "(active)"}`); | ||
| if (options.width !== undefined) { | ||
| if (options.columns) { | ||
| const [startStr, endStr] = options.columns.split(":"); | ||
| const startCol = colToIndex(startStr); | ||
| const endCol = endStr ? colToIndex(endStr) : startCol; | ||
| for (let c = startCol; c <= endCol; c++) { | ||
| sheet.setColumnWidth(c, options.width); | ||
| file.batch(() => { | ||
| let usedRange = null; | ||
| if (!options.columns || !options.rows) { | ||
| try { | ||
| usedRange = sheet.getUsedRange(USED_RANGE_TYPE_DATA_FORMULA); | ||
| } | ||
| } | ||
| else { | ||
| // All columns | ||
| const colCount = sheet.getColumnCount(); | ||
| for (let c = 0; c < colCount; c++) { | ||
| sheet.setColumnWidth(c, options.width); | ||
| catch { | ||
| usedRange = null; | ||
| } | ||
| } | ||
| } | ||
| if (options.height !== undefined) { | ||
| if (options.rows) { | ||
| const [startStr, endStr] = options.rows.split(":"); | ||
| const startRow = parseInt(startStr, 10) - 1; | ||
| const endRow = endStr ? parseInt(endStr, 10) - 1 : startRow; | ||
| for (let r = startRow; r <= endRow; r++) { | ||
| sheet.setRowHeight(r, options.height); | ||
| if (options.width !== undefined) { | ||
| if (options.columns) { | ||
| const span = parseColumnSpan(options.columns); | ||
| for (let c = span.start; c <= span.end; c++) { | ||
| throwIfAborted(signal); | ||
| sheet.setColumnWidth(c, options.width); | ||
| } | ||
| } | ||
| else if (usedRange && usedRange.colCount > 0) { | ||
| const endCol = usedRange.col + usedRange.colCount; | ||
| for (let c = usedRange.col; c < endCol; c++) { | ||
| throwIfAborted(signal); | ||
| sheet.setColumnWidth(c, options.width); | ||
| } | ||
| } | ||
| } | ||
| else { | ||
| // All rows | ||
| const rowCount = sheet.getRowCount(); | ||
| for (let r = 0; r < rowCount; r++) { | ||
| sheet.setRowHeight(r, options.height); | ||
| if (options.height !== undefined) { | ||
| if (options.rows) { | ||
| const span = parseRowSpan(options.rows); | ||
| for (let r = span.start; r <= span.end; r++) { | ||
| throwIfAborted(signal); | ||
| sheet.setRowHeight(r, options.height); | ||
| } | ||
| } | ||
| else if (usedRange && usedRange.rowCount > 0) { | ||
| const endRow = usedRange.row + usedRange.rowCount; | ||
| for (let r = usedRange.row; r < endRow; r++) { | ||
| throwIfAborted(signal); | ||
| sheet.setRowHeight(r, options.height); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| }); | ||
| ok({ resized: true }); | ||
| }, { save: true }); | ||
| }, { save: true, signal }); | ||
| } | ||
| //# sourceMappingURL=resize.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"resize.js","sourceRoot":"","sources":["../../../src/cli/commands/resize.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"resize.js","sourceRoot":"","sources":["../../../src/cli/commands/resize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAExC,MAAM,4BAA4B,GAAG,EAAE,GAAG,EAAE,CAAC;AAE7C,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC9D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjE,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,QAAgB,EAChB,SAA6B,EAC7B,OAMC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACtC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9B,MAAM,QAAQ,CACZ,QAAQ,EACR,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,MAAM,KAAK,GAAG,SAAS;YACrB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC;YACtC,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,oBAAoB,SAAS,IAAI,UAAU,EAAE,CAAC,CAAC;QAEhE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,IAAI,SAAS,GAAiD,IAAI,CAAC;YACnE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC;oBACH,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC;gBAC/D,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS,GAAG,IAAI,CAAC;gBACnB,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC9C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5C,cAAc,CAAC,MAAM,CAAC,CAAC;wBACvB,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;qBAAM,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;oBAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC;oBAClD,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5C,cAAc,CAAC,MAAM,CAAC,CAAC;wBACvB,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACjC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACjB,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACxC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5C,cAAc,CAAC,MAAM,CAAC,CAAC;wBACvB,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBACxC,CAAC;gBACH,CAAC;qBAAM,IAAI,SAAS,IAAI,SAAS,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;oBAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC;oBAClD,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5C,cAAc,CAAC,MAAM,CAAC,CAAC;wBACvB,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;oBACxC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACxB,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CACvB,CAAC;AACJ,CAAC"} |
@@ -7,3 +7,4 @@ export type RcOp = "insert" | "delete" | "hide" | "unhide" | "freeze" | "unfreeze"; | ||
| count?: number; | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=rows-cols.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"rows-cols.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/rows-cols.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,IAAI,GACZ,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,CAAC;AACf,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvC,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,IAAI,EACR,GAAG,EAAE,KAAK,EACV,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAgFf"} | ||
| {"version":3,"file":"rows-cols.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/rows-cols.ts"],"names":[],"mappings":"AA4CA,MAAM,MAAM,IAAI,GACZ,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,QAAQ,GACR,UAAU,CAAC;AACf,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvC,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,IAAI,EACR,GAAG,EAAE,KAAK,EACV,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B,GACA,OAAO,CAAC,IAAI,CAAC,CA2Gf"} |
| import { colToIndex } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail, ok } from "../output.js"; | ||
| function splitQualifiedRef(ref) { | ||
| const quotedMatch = ref.match(/^'([^']+)'!(.+)$/); | ||
| if (quotedMatch) { | ||
| return { sheet: quotedMatch[1], localRef: quotedMatch[2] }; | ||
| } | ||
| const bangIndex = ref.indexOf("!"); | ||
| if (bangIndex === -1) { | ||
| return { localRef: ref }; | ||
| } | ||
| return { | ||
| sheet: ref.slice(0, bangIndex), | ||
| localRef: ref.slice(bangIndex + 1), | ||
| }; | ||
| } | ||
| function parseRowRef(ref) { | ||
| if (!/^\d+$/.test(ref)) { | ||
| fail(`Invalid row reference: ${ref}`); | ||
| } | ||
| const parsed = Number.parseInt(ref, 10); | ||
| if (!Number.isFinite(parsed) || parsed <= 0) { | ||
| fail(`Invalid row reference: ${ref}`); | ||
| } | ||
| return parsed; | ||
| } | ||
| function parseColumnRef(ref) { | ||
| if (!/^[A-Za-z]+$/.test(ref)) { | ||
| fail(`Invalid column reference: ${ref}`); | ||
| } | ||
| const index = colToIndex(ref); | ||
| if (!Number.isFinite(index) || index < 0) { | ||
| fail(`Invalid column reference: ${ref}`); | ||
| } | ||
| return index; | ||
| } | ||
| export async function rowsCols(filePath, op, dim, options) { | ||
| await withFile(filePath, ({ workbook }) => { | ||
| const sheet = options.sheet | ||
| ? workbook.getSheetFromName(options.sheet) | ||
| const signal = options.signal; | ||
| await withFile(filePath, ({ file, workbook }) => { | ||
| const qualified = options.ref ? splitQualifiedRef(options.ref) : null; | ||
| if (options.sheet && | ||
| qualified?.sheet && | ||
| options.sheet !== qualified.sheet) { | ||
| fail(`Sheet mismatch: --sheet ${options.sheet} does not match ref sheet ${qualified.sheet}`); | ||
| } | ||
| const effectiveSheetName = options.sheet ?? qualified?.sheet; | ||
| const sheet = effectiveSheetName | ||
| ? workbook.getSheetFromName(effectiveSheetName) | ||
| : workbook.getActiveSheet(); | ||
| if (!sheet) | ||
| fail(`Sheet not found: ${options.sheet ?? "(active)"}`); | ||
| fail(`Sheet not found: ${effectiveSheetName ?? "(active)"}`); | ||
| if (op === "unfreeze") { | ||
| sheet.frozenRowCount(0); | ||
| sheet.frozenColumnCount(0); | ||
| file.batch(() => { | ||
| sheet.frozenRowCount(0); | ||
| sheet.frozenColumnCount(0); | ||
| }); | ||
| ok({ operation: "unfreeze" }); | ||
@@ -20,8 +65,11 @@ return; | ||
| fail("freeze requires --ref (e.g. --ref 2 for rows or --ref C for columns)"); | ||
| if (dim === "rows") { | ||
| sheet.frozenRowCount(parseInt(options.ref, 10)); | ||
| } | ||
| else { | ||
| sheet.frozenColumnCount(colToIndex(options.ref) + 1); | ||
| } | ||
| const ref = qualified?.localRef ?? options.ref; | ||
| file.batch(() => { | ||
| if (dim === "rows") { | ||
| sheet.frozenRowCount(parseRowRef(ref)); | ||
| } | ||
| else { | ||
| sheet.frozenColumnCount(parseColumnRef(ref) + 1); | ||
| } | ||
| }); | ||
| ok({ operation: "freeze", dimension: dim, ref: options.ref }); | ||
@@ -33,47 +81,55 @@ return; | ||
| const count = options.count ?? 1; | ||
| if (!Number.isInteger(count) || count <= 0) { | ||
| fail(`Invalid --count value: ${options.count}`); | ||
| } | ||
| const localRef = qualified?.localRef ?? options.ref; | ||
| const isRow = dim === "rows"; | ||
| const index = isRow | ||
| ? parseInt(options.ref, 10) - 1 | ||
| : colToIndex(options.ref); | ||
| switch (op) { | ||
| case "insert": | ||
| if (isRow) { | ||
| sheet.addRows(index, count); | ||
| } | ||
| else { | ||
| sheet.addColumns(index, count); | ||
| } | ||
| break; | ||
| case "delete": | ||
| if (isRow) { | ||
| sheet.deleteRows(index, count); | ||
| } | ||
| else { | ||
| sheet.deleteColumns(index, count); | ||
| } | ||
| break; | ||
| case "hide": | ||
| for (let i = 0; i < count; i++) { | ||
| ? parseRowRef(localRef) - 1 | ||
| : parseColumnRef(localRef); | ||
| file.batch(() => { | ||
| switch (op) { | ||
| case "insert": | ||
| if (isRow) { | ||
| sheet.setRowVisible(index + i, false); | ||
| sheet.addRows(index, count); | ||
| } | ||
| else { | ||
| sheet.setColumnVisible(index + i, false); | ||
| sheet.addColumns(index, count); | ||
| } | ||
| } | ||
| break; | ||
| case "unhide": | ||
| for (let i = 0; i < count; i++) { | ||
| break; | ||
| case "delete": | ||
| if (isRow) { | ||
| sheet.setRowVisible(index + i, true); | ||
| sheet.deleteRows(index, count); | ||
| } | ||
| else { | ||
| sheet.setColumnVisible(index + i, true); | ||
| sheet.deleteColumns(index, count); | ||
| } | ||
| } | ||
| break; | ||
| } | ||
| break; | ||
| case "hide": | ||
| for (let i = 0; i < count; i++) { | ||
| throwIfAborted(signal); | ||
| if (isRow) { | ||
| sheet.setRowVisible(index + i, false); | ||
| } | ||
| else { | ||
| sheet.setColumnVisible(index + i, false); | ||
| } | ||
| } | ||
| break; | ||
| case "unhide": | ||
| for (let i = 0; i < count; i++) { | ||
| throwIfAborted(signal); | ||
| if (isRow) { | ||
| sheet.setRowVisible(index + i, true); | ||
| } | ||
| else { | ||
| sheet.setColumnVisible(index + i, true); | ||
| } | ||
| } | ||
| break; | ||
| } | ||
| }); | ||
| ok({ operation: op, dimension: dim, ref: options.ref, count }); | ||
| }, { save: true }); | ||
| }, { save: true, signal }); | ||
| } | ||
| //# sourceMappingURL=rows-cols.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"rows-cols.js","sourceRoot":"","sources":["../../../src/cli/commands/rows-cols.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"rows-cols.js","sourceRoot":"","sources":["../../../src/cli/commands/rows-cols.ts"],"names":[],"mappings":"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"} |
@@ -6,3 +6,4 @@ export declare function search(filePath: string, term: string, options: { | ||
| maxResults?: number; | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=search.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAWA,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,OAAO,CAAC,IAAI,CAAC,CAoEf"} | ||
| {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAYA,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B,GACA,OAAO,CAAC,IAAI,CAAC,CAgFf"} |
| import { cellToA1 } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { ok } from "../output.js"; | ||
| export async function search(filePath, term, options) { | ||
| const signal = options.signal; | ||
| await withFile(filePath, ({ workbook }) => { | ||
@@ -13,2 +15,3 @@ const matches = []; | ||
| for (let si = 0; si < sheetCount && matches.length < max; si++) { | ||
| throwIfAborted(signal); | ||
| const ws = workbook.getSheet(si); | ||
@@ -18,9 +21,13 @@ const sheetName = ws.name(); | ||
| continue; | ||
| let usedRows = 0; | ||
| let usedCols = 0; | ||
| let startRow = 0; | ||
| let endRow = 0; | ||
| let startCol = 0; | ||
| let endCol = 0; | ||
| try { | ||
| const range = ws.getUsedRange(16 | 32); // data | formula | ||
| if (range && range.rowCount > 0) { | ||
| usedRows = range.row + range.rowCount; | ||
| usedCols = range.col + range.colCount; | ||
| if (range && range.rowCount > 0 && range.colCount > 0) { | ||
| startRow = range.row; | ||
| endRow = range.row + range.rowCount; | ||
| startCol = range.col; | ||
| endCol = range.col + range.colCount; | ||
| } | ||
@@ -31,4 +38,5 @@ } | ||
| } | ||
| for (let r = 0; r < usedRows && matches.length < max; r++) { | ||
| for (let c = 0; c < usedCols && matches.length < max; c++) { | ||
| for (let r = startRow; r < endRow && matches.length < max; r++) { | ||
| throwIfAborted(signal); | ||
| for (let c = startCol; c < endCol && matches.length < max; c++) { | ||
| const value = ws.getValue(r, c); | ||
@@ -68,4 +76,4 @@ const formula = ws.getFormula(r, c); | ||
| }); | ||
| }); | ||
| }, { signal }); | ||
| } | ||
| //# sourceMappingURL=search.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"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"} |
@@ -1,2 +0,4 @@ | ||
| export declare function set(filePath: string, ref: string, jsonArg: string | undefined): Promise<void>; | ||
| export declare function set(filePath: string, ref: string, jsonArg: string | undefined, options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=set.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"AAWA,wBAAsB,GAAG,CACvB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,OAAO,CAAC,IAAI,CAAC,CA8Ef"} | ||
| {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"AAyBA,wBAAsB,GAAG,CACvB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CA0Hf"} |
+72
-25
@@ -1,6 +0,19 @@ | ||
| import { parseRef, rangeDimensions } from "../a1.js"; | ||
| import { cellToA1, parseRef, rangeDimensions } from "../a1.js"; | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail, ok, readInput } from "../output.js"; | ||
| import { ok, readInput } from "../output.js"; | ||
| import { applyStyles } from "../styles.js"; | ||
| export async function set(filePath, ref, jsonArg) { | ||
| function formatRange(ref) { | ||
| const start = cellToA1(ref.start.row, ref.start.col); | ||
| const end = cellToA1(ref.end.row, ref.end.col); | ||
| const base = start === end ? start : `${start}:${end}`; | ||
| if (!ref.sheet) | ||
| return base; | ||
| const safeSheet = /^[A-Za-z0-9_]+$/.test(ref.sheet) | ||
| ? ref.sheet | ||
| : `'${ref.sheet.replace(/'/g, "''")}'`; | ||
| return `${safeSheet}!${base}`; | ||
| } | ||
| export async function set(filePath, ref, jsonArg, options) { | ||
| const signal = options?.signal; | ||
| const input = await readInput(jsonArg); | ||
@@ -12,27 +25,54 @@ let cells; | ||
| catch { | ||
| fail("Invalid JSON input for cells."); | ||
| return; | ||
| throw new Error("Invalid JSON input for cells."); | ||
| } | ||
| if (!Array.isArray(cells) || !Array.isArray(cells[0])) { | ||
| fail("Cells must be a 2D array: [[{value: ...}, ...], ...]"); | ||
| return; | ||
| throw new Error("Cells must be a 2D array: [[{value: ...}, ...], ...]"); | ||
| } | ||
| const parsed = parseRef(ref); | ||
| const { rows, cols } = rangeDimensions(parsed); | ||
| if (cells.length !== rows) { | ||
| fail(`Row count mismatch: range has ${rows} rows but got ${cells.length} rows.`); | ||
| return; | ||
| const target = { | ||
| sheet: parsed.sheet, | ||
| start: { ...parsed.start }, | ||
| end: { ...parsed.end }, | ||
| }; | ||
| const { rows: originalRows, cols: originalCols } = rangeDimensions(parsed); | ||
| const isSingleCellRef = originalRows === 1 && originalCols === 1; | ||
| const dataRows = cells.length; | ||
| const dataCols = cells[0].length; | ||
| for (let r = 0; r < dataRows; r++) { | ||
| throwIfAborted(signal); | ||
| if (!Array.isArray(cells[r])) { | ||
| throw new Error(`Row ${r} is not an array.`); | ||
| } | ||
| if (cells[r].length !== dataCols) { | ||
| throw new Error(`Column count mismatch in row ${r}: expected ${dataCols} cols but got ${cells[r].length} cols.`); | ||
| } | ||
| } | ||
| for (let r = 0; r < cells.length; r++) { | ||
| if (cells[r].length !== cols) { | ||
| fail(`Column count mismatch in row ${r}: range has ${cols} cols but got ${cells[r].length} cols.`); | ||
| return; | ||
| const messages = []; | ||
| if (isSingleCellRef) { | ||
| target.end.row = target.start.row + dataRows - 1; | ||
| target.end.col = target.start.col + dataCols - 1; | ||
| const rowDiff = dataRows - originalRows; | ||
| const colDiff = dataCols - originalCols; | ||
| if (rowDiff !== 0 || colDiff !== 0) { | ||
| messages.push(`Adjusted range from ${formatRange(parsed)} to ${formatRange(target)} (row diff: ${rowDiff}, col diff: ${colDiff})`); | ||
| } | ||
| } | ||
| else { | ||
| if (dataRows !== originalRows) { | ||
| throw new Error(`Row count mismatch: range has ${originalRows} rows but got ${dataRows} rows.`); | ||
| } | ||
| for (let r = 0; r < dataRows; r++) { | ||
| throwIfAborted(signal); | ||
| if (cells[r].length !== originalCols) { | ||
| throw new Error(`Column count mismatch in row ${r}: range has ${originalCols} cols but got ${cells[r].length} cols.`); | ||
| } | ||
| } | ||
| } | ||
| const { rows, cols } = rangeDimensions(target); | ||
| await withFile(filePath, ({ file, workbook, GC }) => { | ||
| const sheet = parsed.sheet | ||
| ? workbook.getSheetFromName(parsed.sheet) | ||
| const sheet = target.sheet | ||
| ? workbook.getSheetFromName(target.sheet) | ||
| : workbook.getActiveSheet(); | ||
| if (!sheet) { | ||
| fail(`Sheet not found: ${parsed.sheet ?? "(active)"}`); | ||
| throw new Error(`Sheet not found: ${target.sheet ?? "(active)"}`); | ||
| } | ||
@@ -42,8 +82,9 @@ let written = 0; | ||
| for (let r = 0; r < rows; r++) { | ||
| throwIfAborted(signal); | ||
| for (let c = 0; c < cols; c++) { | ||
| const cell = cells[r][c]; | ||
| const cell = cells[r]?.[c]; | ||
| if (!cell) | ||
| continue; | ||
| const row = parsed.start.row + r; | ||
| const col = parsed.start.col + c; | ||
| const row = target.start.row + r; | ||
| const col = target.start.col + c; | ||
| if (cell.formula) { | ||
@@ -57,7 +98,8 @@ const f = cell.formula.startsWith("=") | ||
| else if (cell.value !== undefined) { | ||
| sheet.setFormula(row, col, ""); | ||
| sheet.setValue(row, col, cell.value); | ||
| written++; | ||
| } | ||
| if (cell.cellStyles) { | ||
| applyStyles(sheet, row, col, cell.cellStyles, GC); | ||
| if (cell.style) { | ||
| applyStyles(sheet, row, col, cell.style, GC); | ||
| } | ||
@@ -67,5 +109,10 @@ } | ||
| }); | ||
| ok({ written, range: ref }); | ||
| }, { save: true }); | ||
| ok({ | ||
| success: true, | ||
| written, | ||
| range: formatRange(target), | ||
| messages, | ||
| }); | ||
| }, { save: true, signal }); | ||
| } | ||
| //# sourceMappingURL=set.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/cli/commands/set.ts"],"names":[],"mappings":"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"} |
| export type SheetOp = "list" | "create" | "delete" | "rename"; | ||
| export declare function sheet(filePath: string, op: SheetOp, args: string[]): Promise<void>; | ||
| export declare function sheet(filePath: string, op: SheetOp, args: string[], options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<void>; | ||
| //# sourceMappingURL=sheet.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sheet.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9D,wBAAsB,KAAK,CACzB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,IAAI,CAAC,CAwDf"} | ||
| {"version":3,"file":"sheet.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/sheet.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9D,wBAAsB,KAAK,CACzB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,IAAI,CAAC,CAgEf"} |
@@ -0,6 +1,8 @@ | ||
| import { throwIfAborted } from "../abort.js"; | ||
| import { withFile } from "../context.js"; | ||
| import { fail, ok } from "../output.js"; | ||
| export async function sheet(filePath, op, args) { | ||
| export async function sheet(filePath, op, args, options) { | ||
| const needsSave = op !== "list"; | ||
| await withFile(filePath, ({ workbook, GC }) => { | ||
| const signal = options?.signal; | ||
| await withFile(filePath, ({ file, workbook, GC }) => { | ||
| switch (op) { | ||
@@ -10,2 +12,3 @@ case "list": { | ||
| for (let i = 0; i < workbook.getSheetCount(); i++) { | ||
| throwIfAborted(signal); | ||
| sheets.push({ index: i, name: workbook.getSheet(i).name() }); | ||
@@ -20,4 +23,6 @@ } | ||
| fail("Usage: hsx sheet <file> create <name>"); | ||
| const ws = new GC.Spread.Sheets.Worksheet(name); | ||
| workbook.addSheet(workbook.getSheetCount(), ws); | ||
| file.batch(() => { | ||
| const ws = new GC.Spread.Sheets.Worksheet(name); | ||
| workbook.addSheet(workbook.getSheetCount(), ws); | ||
| }); | ||
| ok({ created: name, index: workbook.getSheetCount() - 1 }); | ||
@@ -30,3 +35,3 @@ break; | ||
| fail("Usage: hsx sheet <file> delete <name>"); | ||
| const index = findSheet(workbook, name); | ||
| const index = findSheet(workbook, name, signal); | ||
| if (index === -1) | ||
@@ -37,3 +42,5 @@ fail(`Sheet not found: ${name}`); | ||
| } | ||
| workbook.removeSheet(index); | ||
| file.batch(() => { | ||
| workbook.removeSheet(index); | ||
| }); | ||
| ok({ deleted: name }); | ||
@@ -47,6 +54,8 @@ break; | ||
| } | ||
| const index = findSheet(workbook, oldName); | ||
| const index = findSheet(workbook, oldName, signal); | ||
| if (index === -1) | ||
| fail(`Sheet not found: ${oldName}`); | ||
| workbook.getSheet(index).name(newName); | ||
| file.batch(() => { | ||
| workbook.getSheet(index).name(newName); | ||
| }); | ||
| ok({ renamed: { from: oldName, to: newName } }); | ||
@@ -58,6 +67,7 @@ break; | ||
| } | ||
| }, { save: needsSave }); | ||
| }, { save: needsSave, signal }); | ||
| } | ||
| function findSheet(workbook, name) { | ||
| function findSheet(workbook, name, signal) { | ||
| for (let i = 0; i < workbook.getSheetCount(); i++) { | ||
| throwIfAborted(signal); | ||
| if (workbook.getSheet(i).name() === name) | ||
@@ -64,0 +74,0 @@ return i; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../src/cli/commands/sheet.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../src/cli/commands/sheet.ts"],"names":[],"mappings":"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"} |
@@ -1,6 +0,4 @@ | ||
| /** | ||
| * Lifecycle wrapper: init → open/create → execute → save → dispose. | ||
| */ | ||
| import { type ExcelFile } from "../index.js"; | ||
| import type { GCNamespace, SpreadWorkbook } from "../types.js"; | ||
| import type { FileCache } from "./file-cache.js"; | ||
| export interface FileContext { | ||
@@ -11,6 +9,20 @@ file: ExcelFile; | ||
| } | ||
| export declare function withFile<T>(filePath: string, fn: (ctx: FileContext) => T | Promise<T>, options?: { | ||
| interface DaemonRuntime { | ||
| GC: GCNamespace; | ||
| ExcelFile: typeof ExcelFile; | ||
| fileCache: FileCache; | ||
| cwd: string; | ||
| writeThrough: boolean; | ||
| } | ||
| interface FileOptions { | ||
| save?: boolean; | ||
| }): Promise<T>; | ||
| export declare function withNewFile<T>(filePath: string, fn?: (ctx: FileContext) => T | Promise<T>): Promise<T | undefined>; | ||
| signal?: AbortSignal | null; | ||
| } | ||
| export declare function runWithDaemonRuntime<T>(runtime: DaemonRuntime, fn: () => T | Promise<T>): T | Promise<T>; | ||
| export declare function getDaemonRuntime(): DaemonRuntime | null; | ||
| export declare function withFile<T>(filePath: string, fn: (ctx: FileContext) => T | Promise<T>, options?: FileOptions): Promise<T>; | ||
| export declare function withNewFile<T>(filePath: string, fn?: (ctx: FileContext) => T | Promise<T>, options?: { | ||
| signal?: AbortSignal | null; | ||
| }): Promise<T | undefined>; | ||
| export {}; | ||
| //# sourceMappingURL=context.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAQ,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,EAAE,EAAE,WAAW,CAAC;CACjB;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACxC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3B,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAaxB"} | ||
| {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAQ,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB,EAAE,EAAE,WAAW,CAAC;CACjB;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,WAAW,CAAC;IAChB,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,SAAS,EAAE,SAAS,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAID,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,OAAO,EAAE,aAAa,EACtB,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhB;AAED,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,IAAI,CAEvD;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACxC,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,CAAC,CAAC,CAuBZ;AA0DD,wBAAsB,WAAW,CAAC,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EACzC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GACxC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAsBxB"} |
+93
-8
@@ -1,11 +0,27 @@ | ||
| /** | ||
| * Lifecycle wrapper: init → open/create → execute → save → dispose. | ||
| */ | ||
| import { AsyncLocalStorage } from "node:async_hooks"; | ||
| import { resolve } from "node:path"; | ||
| import { init } from "../index.js"; | ||
| import { throwIfAborted } from "./abort.js"; | ||
| const runtimeStore = new AsyncLocalStorage(); | ||
| export function runWithDaemonRuntime(runtime, fn) { | ||
| return runtimeStore.run(runtime, fn); | ||
| } | ||
| export function getDaemonRuntime() { | ||
| return runtimeStore.getStore() ?? null; | ||
| } | ||
| export async function withFile(filePath, fn, options) { | ||
| const signal = options?.signal; | ||
| throwIfAborted(signal); | ||
| const daemonRuntime = runtimeStore.getStore(); | ||
| if (daemonRuntime) { | ||
| return withFileDaemon(daemonRuntime, filePath, fn, options); | ||
| } | ||
| const { GC, ExcelFile: EF, dispose } = await init(); | ||
| try { | ||
| throwIfAborted(signal); | ||
| const file = await EF.open(filePath); | ||
| throwIfAborted(signal); | ||
| const result = await fn({ file, workbook: file.workbook, GC }); | ||
| if (options?.save) { | ||
| throwIfAborted(signal); | ||
| await file.save(filePath); | ||
@@ -19,10 +35,64 @@ } | ||
| } | ||
| export async function withNewFile(filePath, fn) { | ||
| async function withFileDaemon(rt, filePath, fn, options) { | ||
| const signal = options?.signal; | ||
| throwIfAborted(signal); | ||
| const absPath = resolve(rt.cwd, filePath); | ||
| let cached = await rt.fileCache.get(filePath, rt.cwd); | ||
| if (!cached) { | ||
| throwIfAborted(signal); | ||
| const file = await rt.ExcelFile.open(absPath); | ||
| throwIfAborted(signal); | ||
| await rt.fileCache.put(filePath, rt.cwd, file); | ||
| cached = { file, absPath }; | ||
| } | ||
| const wasDirty = rt.fileCache.isDirty(filePath, rt.cwd); | ||
| let result; | ||
| try { | ||
| throwIfAborted(signal); | ||
| result = await fn({ | ||
| file: cached.file, | ||
| workbook: cached.file.workbook, | ||
| GC: rt.GC, | ||
| }); | ||
| } | ||
| catch (err) { | ||
| if (!wasDirty) { | ||
| rt.fileCache.invalidate(filePath, rt.cwd); | ||
| } | ||
| throw err; | ||
| } | ||
| if (options?.save) { | ||
| throwIfAborted(signal); | ||
| if (rt.writeThrough) { | ||
| try { | ||
| await cached.file.save(cached.absPath); | ||
| throwIfAborted(signal); | ||
| await rt.fileCache.updateMtime(filePath, rt.cwd); | ||
| } | ||
| catch (err) { | ||
| rt.fileCache.invalidate(filePath, rt.cwd); | ||
| throw err; | ||
| } | ||
| } | ||
| else { | ||
| rt.fileCache.markDirty(filePath, rt.cwd); | ||
| } | ||
| } | ||
| return result; | ||
| } | ||
| export async function withNewFile(filePath, fn, options) { | ||
| const signal = options?.signal; | ||
| throwIfAborted(signal); | ||
| const daemonRuntime = runtimeStore.getStore(); | ||
| if (daemonRuntime) { | ||
| return withNewFileDaemon(daemonRuntime, filePath, fn, options); | ||
| } | ||
| const { GC, ExcelFile: EF, dispose } = await init(); | ||
| try { | ||
| throwIfAborted(signal); | ||
| const file = new EF(); | ||
| let result; | ||
| if (fn) { | ||
| result = await fn({ file, workbook: file.workbook, GC }); | ||
| } | ||
| const result = fn | ||
| ? await fn({ file, workbook: file.workbook, GC }) | ||
| : undefined; | ||
| throwIfAborted(signal); | ||
| await file.save(filePath); | ||
@@ -35,2 +105,17 @@ return result; | ||
| } | ||
| async function withNewFileDaemon(rt, filePath, fn, options) { | ||
| const signal = options?.signal; | ||
| throwIfAborted(signal); | ||
| const absPath = resolve(rt.cwd, filePath); | ||
| const file = new rt.ExcelFile(); | ||
| const result = fn | ||
| ? await fn({ file, workbook: file.workbook, GC: rt.GC }) | ||
| : undefined; | ||
| throwIfAborted(signal); | ||
| await file.save(absPath); | ||
| throwIfAborted(signal); | ||
| await rt.fileCache.put(filePath, rt.cwd, file); | ||
| await rt.fileCache.updateMtime(filePath, rt.cwd); | ||
| return result; | ||
| } | ||
| //# sourceMappingURL=context.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAkB,IAAI,EAAE,MAAM,aAAa,CAAC;AASnD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAAgB,EAChB,EAAwC,EACxC,OAA4B;IAE5B,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,EAAyC;IAEzC,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,EAAE,EAAE,CAAC;QACtB,IAAI,MAAqB,CAAC;QAC1B,IAAI,EAAE,EAAE,CAAC;YACP,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,MAAW,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"} | ||
| {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"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"} |
+11
-0
@@ -23,5 +23,16 @@ #!/usr/bin/env node | ||
| function reportFatalError(reason) { | ||
| const err = reason; | ||
| if (err?.code === "EPIPE") { | ||
| process.exit(0); | ||
| } | ||
| process.stderr.write(`${JSON.stringify({ error: toErrorMessage(reason) })}\n`); | ||
| process.exit(1); | ||
| } | ||
| function handlePipeError(err) { | ||
| if (err.code === "EPIPE") { | ||
| process.exit(0); | ||
| } | ||
| } | ||
| process.stdout.on("error", handlePipeError); | ||
| process.stderr.on("error", handlePipeError); | ||
| process.on("uncaughtException", reportFatalError); | ||
@@ -28,0 +39,0 @@ process.on("unhandledRejection", reportFatalError); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,kCAAkC,GACtC,mFAAmF,CAAC;AAEtF,SAAS,cAAc,CAAC,MAAe;IACrC,MAAM,OAAO,GACX,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,mCAAmC,GACvC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE9B,IACE,mCAAmC;QACnC,OAAO,CAAC,MAAM,GAAG,wBAAwB,EACzC,CAAC;QACD,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;QAC9C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,KAAK,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAe;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CACzD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;AAClD,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AAEnD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;AAC3C,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,kCAAkC,GACtC,mFAAmF,CAAC;AAEtF,SAAS,cAAc,CAAC,MAAe;IACrC,MAAM,OAAO,GACX,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,mCAAmC,GACvC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACxB,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE9B,IACE,mCAAmC;QACnC,OAAO,CAAC,MAAM,GAAG,wBAAwB,EACzC,CAAC;QACD,OAAO,kCAAkC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;QAC9C,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,wBAAwB,CAAC,KAAK,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAe;IACvC,MAAM,GAAG,GAAG,MAA+B,CAAC;IAC5C,IAAI,GAAG,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CACzD,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,GAA0B;IACjD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAC5C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAE5C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;AAClD,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;AAEnD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;AAC3C,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AAoDA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAgJ1C"} | ||
| {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"AA8IA,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAoI1C"} |
+188
-159
| import { createRequire } from "node:module"; | ||
| import { clear } from "./commands/clear.js"; | ||
| import { copy } from "./commands/copy.js"; | ||
| import { create } from "./commands/create.js"; | ||
| import { csv } from "./commands/csv.js"; | ||
| import { evalCode } from "./commands/eval.js"; | ||
| import { get } from "./commands/get.js"; | ||
| import { info } from "./commands/info.js"; | ||
| import { objects } from "./commands/objects.js"; | ||
| import { resize } from "./commands/resize.js"; | ||
| import { rowsCols } from "./commands/rows-cols.js"; | ||
| import { search } from "./commands/search.js"; | ||
| import { set } from "./commands/set.js"; | ||
| import { sheet } from "./commands/sheet.js"; | ||
| const USAGE = `Usage: hsx <command> [args] | ||
| Commands: | ||
| create <file> Create a new Excel file | ||
| info <file> Show workbook metadata | ||
| get <file> <ref> Read cells (Sheet1!A1:C10) | ||
| csv <file> <ref> Read range as CSV | ||
| set <file> <ref> [json] Write cells (JSON from arg or stdin) | ||
| clear <file> <ref> [--type all|styles] Clear a range (default: values only) | ||
| search <file> <term> [--sheet S] [--regex] Search for values across sheets | ||
| copy <file> <src> <dst> Copy range (formulas + styles) | ||
| sheet <file> <op> [args] list | create | delete | rename | ||
| rc <file> <op> <dim> [--ref R] [--count N] Insert/delete/hide/freeze rows or columns | ||
| resize <file> [--columns A:D] [--width N] Resize column widths or row heights | ||
| objects <file> [--sheet <name>] List charts, tables, pivots | ||
| eval <file> [code] Execute arbitrary JS (code from arg or stdin) | ||
| Reference format: | ||
| Sheet1!A1:C10 range on named sheet | ||
| A1:C10 range on active sheet | ||
| A1 single cell | ||
| Globals available in eval: | ||
| workbook SpreadJS Workbook instance | ||
| sheet Active worksheet | ||
| GC GC.Spread.Sheets namespace | ||
| file ExcelFile wrapper (batch, save, toJSON)`; | ||
| function flag(args, name) { | ||
| const idx = args.indexOf(name); | ||
| return idx !== -1 ? args[idx + 1] : undefined; | ||
| } | ||
| import { registerSignalTimeout } from "./abort.js"; | ||
| import { spawnDaemon, tryDaemon, tryExistingDaemon } from "./client.js"; | ||
| import { dispatch, USAGE } from "./dispatch.js"; | ||
| import { createIoContext, runWithIo } from "./output.js"; | ||
| const DEFAULT_TIMEOUT_MS = 30_000; | ||
| function hasFlag(args, name) { | ||
| return args.includes(name); | ||
| } | ||
| function parseTimeoutValue(raw) { | ||
| const value = raw.trim(); | ||
| if (!/^\d+(\.\d+)?$/.test(value)) { | ||
| throw new Error("Invalid --timeout value (expected seconds)"); | ||
| } | ||
| const seconds = Number.parseFloat(value); | ||
| if (!Number.isFinite(seconds) || seconds <= 0) { | ||
| throw new Error("Invalid --timeout value (expected seconds)"); | ||
| } | ||
| return Math.floor(seconds * 1000); | ||
| } | ||
| function parseGlobalOptions(args) { | ||
| const out = []; | ||
| let timeoutMs = DEFAULT_TIMEOUT_MS; | ||
| for (let i = 0; i < args.length; i++) { | ||
| const arg = args[i]; | ||
| if (arg === "--timeout") { | ||
| const raw = args[i + 1]; | ||
| if (!raw || raw.startsWith("--")) { | ||
| throw new Error("Usage: --timeout <seconds>"); | ||
| } | ||
| timeoutMs = parseTimeoutValue(raw); | ||
| i++; | ||
| continue; | ||
| } | ||
| if (arg.startsWith("--timeout=")) { | ||
| timeoutMs = parseTimeoutValue(arg.slice("--timeout=".length)); | ||
| continue; | ||
| } | ||
| out.push(arg); | ||
| } | ||
| return { args: out, timeoutMs }; | ||
| } | ||
| async function runWithTimeout(fn, timeoutMs) { | ||
| const controller = new AbortController(); | ||
| registerSignalTimeout(controller.signal, timeoutMs, `Command timed out after ${Math.ceil(timeoutMs / 1000)}s`); | ||
| let timer = null; | ||
| try { | ||
| return await Promise.race([ | ||
| fn(controller.signal), | ||
| new Promise((_, reject) => { | ||
| timer = setTimeout(() => { | ||
| const message = `Command timed out after ${Math.ceil(timeoutMs / 1000)}s`; | ||
| controller.abort(new Error(message)); | ||
| reject(new Error(message)); | ||
| }, timeoutMs); | ||
| }), | ||
| ]); | ||
| } | ||
| finally { | ||
| if (timer) | ||
| clearTimeout(timer); | ||
| } | ||
| } | ||
| async function writeTo(stream, data) { | ||
| await new Promise((resolve, reject) => { | ||
| let settled = false; | ||
| const finish = (err) => { | ||
| if (settled) | ||
| return; | ||
| settled = true; | ||
| stream.off("error", onError); | ||
| if (err?.code === "EPIPE" || | ||
| err?.message?.toUpperCase().includes("EPIPE")) { | ||
| resolve(); | ||
| return; | ||
| } | ||
| if (err) { | ||
| reject(err); | ||
| return; | ||
| } | ||
| resolve(); | ||
| }; | ||
| const onError = (err) => finish(err); | ||
| stream.once("error", onError); | ||
| try { | ||
| stream.write(data, (err) => { | ||
| finish(err ?? null); | ||
| }); | ||
| } | ||
| catch (err) { | ||
| finish(err); | ||
| } | ||
| }); | ||
| } | ||
| async function flushStdStreams() { | ||
| await Promise.all([writeTo(process.stdout, ""), writeTo(process.stderr, "")]); | ||
| } | ||
| async function exitWith(code, output) { | ||
| if (output?.stdout) { | ||
| await writeTo(process.stdout, output.stdout); | ||
| } | ||
| if (output?.stderr) { | ||
| await writeTo(process.stderr, output.stderr); | ||
| } | ||
| await flushStdStreams(); | ||
| process.exit(code); | ||
| } | ||
| export async function main() { | ||
| const args = process.argv.slice(2); | ||
| let args; | ||
| let timeoutMs; | ||
| try { | ||
| const parsed = parseGlobalOptions(process.argv.slice(2)); | ||
| args = parsed.args; | ||
| timeoutMs = parsed.timeoutMs; | ||
| } | ||
| catch (err) { | ||
| const message = err instanceof Error ? err.message : String(err); | ||
| return exitWith(1, { stderr: `${JSON.stringify({ error: message })}\n` }); | ||
| } | ||
| if (args.length === 0 || args[0] === "--help" || args[0] === "-h") { | ||
| console.log(USAGE); | ||
| process.exit(0); | ||
| return exitWith(0, { stdout: `${USAGE}\n` }); | ||
| } | ||
@@ -58,125 +126,86 @@ if (args[0] === "--version" || args[0] === "-v") { | ||
| const { version } = require("../../package.json"); | ||
| console.log(version); | ||
| process.exit(0); | ||
| return exitWith(0, { stdout: `${version}\n` }); | ||
| } | ||
| const command = args[0]; | ||
| const rest = args.slice(1); | ||
| switch (command) { | ||
| case "create": { | ||
| const file = requireArg(rest, 0, "create <file>"); | ||
| await create(file); | ||
| break; | ||
| const noDaemon = hasFlag(args, "--no-daemon"); | ||
| const filteredArgs = args.filter((a) => a !== "--no-daemon"); | ||
| if (filteredArgs[0] === "daemon") { | ||
| const sub = filteredArgs[1]; | ||
| if (sub === "start") { | ||
| try { | ||
| await spawnDaemon(timeoutMs); | ||
| return exitWith(0, { | ||
| stdout: `${JSON.stringify({ daemon: "started" })}\n`, | ||
| }); | ||
| } | ||
| catch (err) { | ||
| const message = err instanceof Error ? err.message : String(err); | ||
| return exitWith(1, { | ||
| stderr: `${JSON.stringify({ error: message })}\n`, | ||
| }); | ||
| } | ||
| } | ||
| case "info": { | ||
| const file = requireArg(rest, 0, "info <file>"); | ||
| await info(file); | ||
| break; | ||
| } | ||
| case "get": { | ||
| const file = requireArg(rest, 0, "get <file> <ref>"); | ||
| const ref = requireArg(rest, 1, "get <file> <ref>"); | ||
| const styles = !hasFlag(rest, "--no-styles"); | ||
| await get(file, ref, { styles }); | ||
| break; | ||
| } | ||
| case "csv": { | ||
| const file = requireArg(rest, 0, "csv <file> <ref>"); | ||
| const ref = requireArg(rest, 1, "csv <file> <ref>"); | ||
| await csv(file, ref); | ||
| break; | ||
| } | ||
| case "set": { | ||
| const file = requireArg(rest, 0, "set <file> <ref> [json]"); | ||
| const ref = requireArg(rest, 1, "set <file> <ref> [json]"); | ||
| const json = rest[2]; // optional, reads stdin if missing | ||
| await set(file, ref, json); | ||
| break; | ||
| } | ||
| case "clear": { | ||
| const file = requireArg(rest, 0, "clear <file> <ref>"); | ||
| const ref = requireArg(rest, 1, "clear <file> <ref>"); | ||
| const clearType = (flag(rest, "--type") ?? "values"); | ||
| await clear(file, ref, clearType); | ||
| break; | ||
| } | ||
| case "search": { | ||
| const file = requireArg(rest, 0, "search <file> <term>"); | ||
| const term = requireArg(rest, 1, "search <file> <term>"); | ||
| await search(file, term, { | ||
| sheet: flag(rest, "--sheet"), | ||
| matchCase: hasFlag(rest, "--match-case"), | ||
| regex: hasFlag(rest, "--regex"), | ||
| maxResults: flag(rest, "--max") | ||
| ? parseInt(flag(rest, "--max"), 10) | ||
| : undefined, | ||
| if (sub === "stop" || sub === "status" || sub === "flush") { | ||
| const result = await tryExistingDaemon(filteredArgs, process.cwd(), undefined, timeoutMs); | ||
| if (result) { | ||
| return exitWith(result.exitCode, { | ||
| stdout: result.stdout, | ||
| stderr: result.stderr, | ||
| }); | ||
| } | ||
| if (sub === "status") { | ||
| return exitWith(0, { | ||
| stdout: `${JSON.stringify({ running: false })}\n`, | ||
| }); | ||
| } | ||
| return exitWith(1, { | ||
| stdout: `${JSON.stringify({ error: "No daemon running" })}\n`, | ||
| }); | ||
| break; | ||
| } | ||
| case "copy": { | ||
| const file = requireArg(rest, 0, "copy <file> <src> <dst>"); | ||
| const src = requireArg(rest, 1, "copy <file> <src> <dst>"); | ||
| const dst = requireArg(rest, 2, "copy <file> <src> <dst>"); | ||
| await copy(file, src, dst); | ||
| break; | ||
| return exitWith(1, { | ||
| stderr: "Usage: hsx daemon start|stop|status|flush\n", | ||
| }); | ||
| } | ||
| if (!noDaemon) { | ||
| let stdin; | ||
| const command = filteredArgs[0]; | ||
| const setJsonArg = filteredArgs[3]; | ||
| const evalCodeArg = filteredArgs[2]; | ||
| const needsStdin = (command === "set" && (!setJsonArg || setJsonArg === "-")) || | ||
| (command === "eval" && (!evalCodeArg || evalCodeArg === "-")); | ||
| if (needsStdin && !process.stdin.isTTY) { | ||
| const chunks = []; | ||
| for await (const chunk of process.stdin) { | ||
| chunks.push(chunk); | ||
| } | ||
| stdin = Buffer.concat(chunks).toString("utf-8").trim(); | ||
| } | ||
| case "sheet": { | ||
| const file = requireArg(rest, 0, "sheet <file> <op> [args]"); | ||
| const op = requireArg(rest, 1, "sheet <file> <op> [args]"); | ||
| const opArgs = rest.slice(2); | ||
| await sheet(file, op, opArgs); | ||
| break; | ||
| } | ||
| case "rc": { | ||
| const file = requireArg(rest, 0, "rc <file> <op> <dim>"); | ||
| const op = requireArg(rest, 1, "rc <file> <op> <dim>"); | ||
| const dim = requireArg(rest, 2, "rc <file> <op> <dim>"); | ||
| await rowsCols(file, op, dim, { | ||
| sheet: flag(rest, "--sheet"), | ||
| ref: flag(rest, "--ref"), | ||
| count: flag(rest, "--count") | ||
| ? parseInt(flag(rest, "--count"), 10) | ||
| : undefined, | ||
| const result = await tryDaemon(filteredArgs, process.cwd(), stdin, timeoutMs); | ||
| if (result) { | ||
| return exitWith(result.exitCode, { | ||
| stdout: result.stdout, | ||
| stderr: result.stderr, | ||
| }); | ||
| break; | ||
| } | ||
| case "resize": { | ||
| const file = requireArg(rest, 0, "resize <file> [options]"); | ||
| await resize(file, flag(rest, "--sheet"), { | ||
| columns: flag(rest, "--columns"), | ||
| rows: flag(rest, "--rows"), | ||
| width: flag(rest, "--width") | ||
| ? parseFloat(flag(rest, "--width")) | ||
| : undefined, | ||
| height: flag(rest, "--height") | ||
| ? parseFloat(flag(rest, "--height")) | ||
| : undefined, | ||
| }); | ||
| break; | ||
| if (stdin !== undefined) { | ||
| const io = createIoContext(stdin); | ||
| try { | ||
| await runWithTimeout((signal) => Promise.resolve(runWithIo(io, () => dispatch(filteredArgs, { signal }))), timeoutMs); | ||
| } | ||
| catch (err) { | ||
| const message = err instanceof Error ? err.message : String(err); | ||
| io.stderr += `${JSON.stringify({ error: message })}\n`; | ||
| return exitWith(1, { stdout: io.stdout, stderr: io.stderr }); | ||
| } | ||
| return exitWith(0, { stdout: io.stdout, stderr: io.stderr }); | ||
| } | ||
| case "objects": { | ||
| const file = requireArg(rest, 0, "objects <file>"); | ||
| await objects(file, flag(rest, "--sheet")); | ||
| break; | ||
| } | ||
| case "eval": { | ||
| const file = requireArg(rest, 0, "eval <file> [code]"); | ||
| const code = rest[1]; // optional, reads stdin if missing | ||
| await evalCode(file, code); | ||
| break; | ||
| } | ||
| default: | ||
| console.error(`Unknown command: ${command}\n`); | ||
| console.log(USAGE); | ||
| process.exit(1); | ||
| } | ||
| process.exit(0); | ||
| } | ||
| function requireArg(args, index, usage) { | ||
| const value = args[index]; | ||
| if (!value || value.startsWith("--")) { | ||
| console.error(`Usage: hsx ${usage}`); | ||
| process.exit(1); | ||
| try { | ||
| await runWithTimeout((signal) => dispatch(filteredArgs, { signal }), timeoutMs); | ||
| } | ||
| return value; | ||
| catch (err) { | ||
| const message = err instanceof Error ? err.message : String(err); | ||
| return exitWith(1, { stderr: `${JSON.stringify({ error: message })}\n` }); | ||
| } | ||
| return exitWith(0); | ||
| } | ||
| //# sourceMappingURL=main.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"} |
@@ -1,10 +0,13 @@ | ||
| /** | ||
| * Structured JSON output helpers for CLI commands. | ||
| */ | ||
| export interface IoContext { | ||
| stdout: string; | ||
| stderr: string; | ||
| stdin: string | null; | ||
| } | ||
| export declare function runWithIo<T>(io: IoContext, fn: () => T | Promise<T>): T | Promise<T>; | ||
| export declare function createIoContext(stdin?: string): IoContext; | ||
| export declare function writeStdout(data: string): void; | ||
| export declare function writeStderr(data: string): void; | ||
| export declare function ok(data: unknown): void; | ||
| export declare function fail(message: string): never; | ||
| /** | ||
| * Read input from last positional arg or stdin. | ||
| */ | ||
| export declare function readInput(argValue: string | undefined): Promise<string>; | ||
| //# sourceMappingURL=output.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAEtC;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAE3C;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAe7E"} | ||
| {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAID,wBAAgB,SAAS,CAAC,CAAC,EACzB,EAAE,EAAE,SAAS,EACb,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhB;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAEzD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO9C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO9C;AAED,wBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAEtC;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAE3C;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB7E"} |
+36
-8
@@ -1,6 +0,29 @@ | ||
| /** | ||
| * Structured JSON output helpers for CLI commands. | ||
| */ | ||
| import { AsyncLocalStorage } from "node:async_hooks"; | ||
| const ioStore = new AsyncLocalStorage(); | ||
| export function runWithIo(io, fn) { | ||
| return ioStore.run(io, fn); | ||
| } | ||
| export function createIoContext(stdin) { | ||
| return { stdout: "", stderr: "", stdin: stdin ?? null }; | ||
| } | ||
| export function writeStdout(data) { | ||
| const io = ioStore.getStore(); | ||
| if (io) { | ||
| io.stdout += data; | ||
| } | ||
| else { | ||
| process.stdout.write(data); | ||
| } | ||
| } | ||
| export function writeStderr(data) { | ||
| const io = ioStore.getStore(); | ||
| if (io) { | ||
| io.stderr += data; | ||
| } | ||
| else { | ||
| process.stderr.write(data); | ||
| } | ||
| } | ||
| export function ok(data) { | ||
| process.stdout.write(`${JSON.stringify(data)}\n`); | ||
| writeStdout(`${JSON.stringify(data)}\n`); | ||
| } | ||
@@ -10,5 +33,2 @@ export function fail(message) { | ||
| } | ||
| /** | ||
| * Read input from last positional arg or stdin. | ||
| */ | ||
| export async function readInput(argValue) { | ||
@@ -18,3 +38,11 @@ if (argValue && argValue !== "-") { | ||
| } | ||
| // Read from stdin | ||
| const io = ioStore.getStore(); | ||
| if (io?.stdin != null) { | ||
| const text = io.stdin; | ||
| io.stdin = null; | ||
| if (!text) { | ||
| fail("No input provided. Pass as argument or pipe via stdin."); | ||
| } | ||
| return text; | ||
| } | ||
| const chunks = []; | ||
@@ -21,0 +49,0 @@ for await (const chunk of process.stdin) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,EAAE,CAAC,IAAa;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAA4B;IAC1D,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,kBAAkB;IAClB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"} | ||
| {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAQrD,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAa,CAAC;AAEnD,MAAM,UAAU,SAAS,CACvB,EAAa,EACb,EAAwB;IAExB,OAAO,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9B,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9B,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,IAAa;IAC9B,WAAW,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAA4B;IAC1D,IAAI,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAC9B,IAAI,EAAE,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC;QACtB,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC,wDAAwD,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"} |
+14
-19
| /** | ||
| * Agent-friendly style schema ↔ SpreadJS Style conversion. | ||
| * SpreadJS-style cell style serialization and application for CLI I/O. | ||
| */ | ||
| import type { Spread } from "@mescius/spread-sheets"; | ||
| import type { GCNamespace, SpreadStyle, SpreadWorksheet } from "../types.js"; | ||
| export interface CellStyles { | ||
| fontWeight?: "normal" | "bold"; | ||
| fontStyle?: "normal" | "italic"; | ||
| fontSize?: number; | ||
| fontFamily?: string; | ||
| fontColor?: string; | ||
| backgroundColor?: string; | ||
| horizontalAlignment?: "left" | "center" | "right"; | ||
| numberFormat?: string; | ||
| } | ||
| export interface SerializedStyle { | ||
| export interface FontStyleObject { | ||
| bold?: boolean; | ||
| italic?: boolean; | ||
| fontSize?: number; | ||
| underline?: boolean; | ||
| } | ||
| export interface CellStyle { | ||
| fontStyle?: FontStyleObject; | ||
| fontSize?: string; | ||
| fontFamily?: string; | ||
| fontColor?: string; | ||
| backgroundColor?: string; | ||
| hAlign?: string; | ||
| numberFormat?: string; | ||
| foreColor?: string; | ||
| backColor?: string; | ||
| hAlign?: Spread.Sheets.HorizontalAlign; | ||
| formatter?: string; | ||
| } | ||
| export declare function serializeStyle(style: SpreadStyle): SerializedStyle | null; | ||
| export declare function applyStyles(sheet: SpreadWorksheet, row: number, col: number, styles: CellStyles, GC: GCNamespace): void; | ||
| export declare function serializeStyle(style: SpreadStyle): CellStyle | null; | ||
| export declare function applyStyles(sheet: SpreadWorksheet, row: number, col: number, styles: CellStyle, GC: GCNamespace): void; | ||
| //# sourceMappingURL=styles.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/cli/styles.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAeD,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,eAAe,GAAG,IAAI,CAkDzE;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,UAAU,EAClB,EAAE,EAAE,WAAW,GACd,IAAI,CA2CN"} | ||
| {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/cli/styles.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7E,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8CD,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAoDnE;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EACjB,EAAE,EAAE,WAAW,GACd,IAAI,CAoDN"} |
+65
-39
| /** | ||
| * Agent-friendly style schema ↔ SpreadJS Style conversion. | ||
| * SpreadJS-style cell style serialization and application for CLI I/O. | ||
| */ | ||
| const H_ALIGN_NAMES = { | ||
| 0: "left", | ||
| 1: "center", | ||
| 2: "right", | ||
| 3: "general", | ||
| }; | ||
| const H_ALIGN_GENERAL = 3; | ||
| // Default values to suppress from serialization | ||
@@ -15,11 +10,42 @@ const DEFAULT_FONT_SIZE = 14.6667; // SpreadJS default ~11pt | ||
| const DEFAULT_FORE_COLORS = new Set(["Text 1 0", "windowtext", "#000000"]); | ||
| export function serializeStyle(style) { | ||
| function normalizeFontStyle(style) { | ||
| const result = {}; | ||
| let hasAny = false; | ||
| const raw = style.fontStyle; | ||
| if (raw && typeof raw === "object") { | ||
| const maybe = raw; | ||
| if (maybe.bold === true) | ||
| result.bold = true; | ||
| if (maybe.italic === true) | ||
| result.italic = true; | ||
| if (maybe.underline === true) | ||
| result.underline = true; | ||
| } | ||
| if (style.fontWeight === "bold") { | ||
| result.bold = true; | ||
| hasAny = true; | ||
| } | ||
| if (style.fontStyle === "italic") { | ||
| result.italic = true; | ||
| } | ||
| const textDecoration = style | ||
| .textDecoration; | ||
| if (textDecoration !== undefined && textDecoration !== null) { | ||
| if (typeof textDecoration === "number") { | ||
| if (textDecoration !== 0) { | ||
| result.underline = true; | ||
| } | ||
| } | ||
| else if (typeof textDecoration === "string") { | ||
| if (textDecoration !== "none" && textDecoration !== "None") { | ||
| result.underline = true; | ||
| } | ||
| } | ||
| } | ||
| return Object.keys(result).length > 0 ? result : undefined; | ||
| } | ||
| export function serializeStyle(style) { | ||
| const result = {}; | ||
| let hasAny = false; | ||
| const fontStyle = normalizeFontStyle(style); | ||
| if (fontStyle) { | ||
| result.fontStyle = fontStyle; | ||
| hasAny = true; | ||
@@ -29,4 +55,4 @@ } | ||
| const size = parseFloat(style.fontSize); | ||
| if (Math.abs(size - DEFAULT_FONT_SIZE) > 0.5) { | ||
| result.fontSize = size; | ||
| if (Number.isFinite(size) && Math.abs(size - DEFAULT_FONT_SIZE) > 0.5) { | ||
| result.fontSize = style.fontSize; | ||
| hasAny = true; | ||
@@ -43,3 +69,3 @@ } | ||
| if (!DEFAULT_FORE_COLORS.has(style.foreColor)) { | ||
| result.fontColor = style.foreColor; | ||
| result.foreColor = style.foreColor; | ||
| hasAny = true; | ||
@@ -49,9 +75,8 @@ } | ||
| if (style.backColor && typeof style.backColor === "string") { | ||
| result.backgroundColor = style.backColor; | ||
| result.backColor = style.backColor; | ||
| hasAny = true; | ||
| } | ||
| if (style.hAlign !== undefined && style.hAlign !== null) { | ||
| const name = H_ALIGN_NAMES[style.hAlign]; | ||
| if (name && name !== "general") { | ||
| result.hAlign = name; | ||
| if (style.hAlign !== H_ALIGN_GENERAL) { | ||
| result.hAlign = style.hAlign; | ||
| hasAny = true; | ||
@@ -62,3 +87,3 @@ } | ||
| if (!DEFAULT_FORMATTERS.has(style.formatter)) { | ||
| result.numberFormat = style.formatter; | ||
| result.formatter = style.formatter; | ||
| hasAny = true; | ||
@@ -74,35 +99,36 @@ } | ||
| : new GC.Spread.Sheets.Style(); | ||
| // Copy existing properties if we cloned | ||
| if (existing) { | ||
| Object.assign(style, existing); | ||
| } | ||
| if (styles.fontWeight) { | ||
| style.fontWeight = styles.fontWeight; | ||
| } | ||
| if (styles.fontStyle) { | ||
| style.fontStyle = styles.fontStyle; | ||
| if (styles.fontStyle.bold !== undefined) { | ||
| style.fontWeight = styles.fontStyle.bold ? "bold" : "normal"; | ||
| } | ||
| if (styles.fontStyle.italic !== undefined) { | ||
| style.fontStyle = styles.fontStyle.italic ? "italic" : "normal"; | ||
| } | ||
| if (styles.fontStyle.underline !== undefined) { | ||
| const TextDecoration = GC.Spread.Sheets.TextDecorationType; | ||
| style.textDecoration = styles.fontStyle.underline | ||
| ? TextDecoration.underline | ||
| : TextDecoration.none; | ||
| } | ||
| } | ||
| if (styles.fontSize !== undefined) { | ||
| style.fontSize = `${styles.fontSize}px`; | ||
| style.fontSize = styles.fontSize; | ||
| } | ||
| if (styles.fontFamily) { | ||
| if (styles.fontFamily !== undefined) { | ||
| style.fontFamily = styles.fontFamily; | ||
| } | ||
| if (styles.fontColor) { | ||
| style.foreColor = styles.fontColor; | ||
| if (styles.foreColor !== undefined) { | ||
| style.foreColor = styles.foreColor; | ||
| } | ||
| if (styles.backgroundColor) { | ||
| style.backColor = styles.backgroundColor; | ||
| if (styles.backColor !== undefined) { | ||
| style.backColor = styles.backColor; | ||
| } | ||
| if (styles.numberFormat) { | ||
| style.formatter = styles.numberFormat; | ||
| if (styles.formatter !== undefined) { | ||
| style.formatter = styles.formatter; | ||
| } | ||
| if (styles.horizontalAlignment) { | ||
| const HAlign = GC.Spread.Sheets.HorizontalAlign; | ||
| const alignMap = { | ||
| left: HAlign.left, | ||
| center: HAlign.center, | ||
| right: HAlign.right, | ||
| }; | ||
| style.hAlign = alignMap[styles.horizontalAlignment]; | ||
| if (styles.hAlign !== undefined) { | ||
| style.hAlign = styles.hAlign; | ||
| } | ||
@@ -109,0 +135,0 @@ sheet.setStyle(row, col, style); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/cli/styles.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/cli/styles.ts"],"names":[],"mappings":"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"} |
@@ -5,6 +5,8 @@ import type { GCNamespace, SpreadWorkbook } from "./types.js"; | ||
| readonly workbook: SpreadWorkbook; | ||
| /** The file path this workbook was opened from (if any). */ | ||
| sourcePath: string | undefined; | ||
| constructor(workbook?: SpreadWorkbook); | ||
| batch<T>(fn: () => T): T; | ||
| batch<T>(fn: () => Promise<T>): Promise<T>; | ||
| save(filePath: string): Promise<void>; | ||
| save(filePath?: string): Promise<void>; | ||
| saveToBuffer(): Promise<Buffer>; | ||
@@ -11,0 +13,0 @@ toJSON(): object; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"excel-file.d.ts","sourceRoot":"","sources":["../src/excel-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA8I9D,wBAAgB,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAElD;AAED,qBAAa,SAAS;IACpB,SAAgB,QAAQ,EAAE,cAAc,CAAC;gBAE7B,QAAQ,CAAC,EAAE,cAAc;IAKrC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IACxB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAqBpC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,MAAM,IAAI,MAAM;IAIhB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;WAIf,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;WAO1C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAKhE"} | ||
| {"version":3,"file":"excel-file.d.ts","sourceRoot":"","sources":["../src/excel-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA0K9D,wBAAgB,KAAK,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAElD;AAED,qBAAa,SAAS;IACpB,SAAgB,QAAQ,EAAE,cAAc,CAAC;IACzC,4DAA4D;IACrD,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE1B,QAAQ,CAAC,EAAE,cAAc;IAMrC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IACxB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAgCpC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,MAAM,IAAI,MAAM;IAIhB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;WAIf,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;WAS1C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAKhE"} |
+50
-6
@@ -18,2 +18,8 @@ import fs from "node:fs"; | ||
| } | ||
| function getMethod(obj, name) { | ||
| if (!obj || typeof obj !== "object") | ||
| return null; | ||
| const value = obj[name]; | ||
| return typeof value === "function" ? value : null; | ||
| } | ||
| function toArrayBuffer(buffer) { | ||
@@ -108,2 +114,22 @@ return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); | ||
| } | ||
| /** | ||
| * SpreadJS defaults to 200 rows × 20 columns and **silently drops** | ||
| * any writes outside that range. Expand every sheet in the workbook | ||
| * to the Excel-maximum so callers never hit this. | ||
| * | ||
| * Cost: ~16 MB heap + ~180 ms per workbook (one-time). | ||
| * File size is unaffected — SpreadJS only serializes populated cells. | ||
| */ | ||
| const EXCEL_MAX_ROWS = 1_048_576; | ||
| const EXCEL_MAX_COLS = 16_384; | ||
| function expandSheetDefaults(spread) { | ||
| const n = spread.getSheetCount(); | ||
| for (let i = 0; i < n; i++) { | ||
| const s = spread.getSheet(i); | ||
| if (s.getRowCount() < EXCEL_MAX_ROWS) | ||
| s.setRowCount(EXCEL_MAX_ROWS); | ||
| if (s.getColumnCount() < EXCEL_MAX_COLS) | ||
| s.setColumnCount(EXCEL_MAX_COLS); | ||
| } | ||
| } | ||
| export function setGC(gc) { | ||
@@ -114,20 +140,32 @@ gcRef = gc; | ||
| workbook; | ||
| /** The file path this workbook was opened from (if any). */ | ||
| sourcePath; | ||
| constructor(workbook) { | ||
| const gc = getGC(); | ||
| this.workbook = workbook ?? new gc.Spread.Sheets.Workbook(); | ||
| expandSheetDefaults(this.workbook); | ||
| } | ||
| batch(fn) { | ||
| const suspendPaint = getMethod(this.workbook, "suspendPaint"); | ||
| const resumePaint = getMethod(this.workbook, "resumePaint"); | ||
| const suspendEvent = getMethod(this.workbook, "suspendEvent"); | ||
| const resumeEvent = getMethod(this.workbook, "resumeEvent"); | ||
| suspendPaint?.call(this.workbook); | ||
| suspendEvent?.call(this.workbook); | ||
| this.workbook.suspendCalcService(false); | ||
| const finalize = () => { | ||
| this.workbook.resumeCalcService(true); | ||
| resumeEvent?.call(this.workbook); | ||
| resumePaint?.call(this.workbook); | ||
| }; | ||
| try { | ||
| const result = fn(); | ||
| if (result instanceof Promise) { | ||
| return result.finally(() => { | ||
| this.workbook.resumeCalcService(true); | ||
| }); | ||
| return result.finally(finalize); | ||
| } | ||
| this.workbook.resumeCalcService(true); | ||
| finalize(); | ||
| return result; | ||
| } | ||
| catch (error) { | ||
| this.workbook.resumeCalcService(true); | ||
| finalize(); | ||
| throw error; | ||
@@ -137,2 +175,6 @@ } | ||
| async save(filePath) { | ||
| filePath ??= this.sourcePath; | ||
| if (!filePath) { | ||
| throw new Error("No file path provided. Pass a path to save() or open the file with ExcelFile.open()."); | ||
| } | ||
| const bytes = await this.saveToBuffer(); | ||
@@ -158,3 +200,5 @@ const dir = path.dirname(filePath); | ||
| const spread = await importWorkbook(toArrayBuffer(bytes), gc); | ||
| return new ExcelFile(spread); | ||
| const ef = new ExcelFile(spread); | ||
| ef.sourcePath = path.resolve(filePath); | ||
| return ef; | ||
| } | ||
@@ -161,0 +205,0 @@ static async openFromBuffer(buffer) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"excel-file.js","sourceRoot":"","sources":["../src/excel-file.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"excel-file.js","sourceRoot":"","sources":["../src/excel-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAiB,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAG3D,IAAI,KAAK,GAAuB,IAAI,CAAC;AAErC,SAAS,KAAK;IACZ,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,MAAsB;IAC5C,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrD,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,oBAAoB,EAAE,CAAC;YACvD,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAID,SAAS,SAAS,CAAC,GAAY,EAAE,IAAY;IAC3C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,KAAK,GAAI,GAA+B,CAAC,IAAI,CAAC,CAAC;IACrD,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAE,KAAuB,CAAC,CAAC,CAAC,IAAI,CAAC;AACvE,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CACxB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CACvB,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3C,MAAM,UAAU,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU;QAAE,OAAO,GAAG,CAAC;IAE5B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAG,iDAAiD,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK;QAAE,OAAO,GAAG,CAAC;IAEvB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC;IAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExB,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhE,IAAI,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3C,QAAQ,GAAG,QAAQ,CAAC,OAAO,CACzB,oBAAoB,EACpB,CAAC,KAAa,EAAE,MAAc,EAAE,EAAE;QAChC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;YACvC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,cAAc,GAAG,GAAG,CAAC;IAC9B,CAAC,CACF,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC;IACpD,IAAI,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE1C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,yBAAyB,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,WAAW,EAAE,CAAC;YAChB,SAAS,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC3C,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,MAAM,CAC3B,2BAA2B,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,UAAU,EACpF,GAAG,CACJ,CAAC;QACF,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,SAAS,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QAC9C,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,IAAI,KAAK,4BAA4B,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,IAAI,KAAK,qBAAqB,IAAI,QAAQ,EAAE,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,YAAY,CACnB,MAAsB,EACtB,EAAe;IAEf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,IAAI,CACT,CAAC,IAAU,EAAE,EAAE;YACb,IAAI;iBACD,WAAW,EAAE;iBACb,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBACnE,KAAK,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC,EACD,CAAC,GAAU,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAC3B,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAW,CACvD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CACrB,KAAkB,EAClB,EAAe;IAEf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAE/C,MAAM,CAAC,MAAM,CACX,KAAwB,EACxB,GAAG,EAAE;YACH,cAAc,CAAC,MAAM,CAAC,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,EACD,CAAC,GAAU,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAC3B,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAW,CACvD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,SAAS,mBAAmB,CAAC,MAAsB;IACjD,MAAM,CAAC,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc;YAAE,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACpE,IAAI,CAAC,CAAC,cAAc,EAAE,GAAG,cAAc;YAAE,CAAC,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAsB;IAC1C,KAAK,GAAG,EAAE,CAAC;AACb,CAAC;AAED,MAAM,OAAO,SAAS;IACJ,QAAQ,CAAiB;IACzC,4DAA4D;IACrD,UAAU,CAAqB;IAEtC,YAAY,QAAyB;QACnC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC5D,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAID,KAAK,CAAI,EAAwB;QAC/B,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAE5D,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAExC,MAAM,QAAQ,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACtC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,EAAE,CAAC;YAEpB,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;gBAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;YAED,QAAQ,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,QAAQ,EAAE,CAAC;YACX,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAiB;QAC1B,QAAQ,KAAK,IAAI,CAAC,UAAU,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,sFAAsF,CACvF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEnC,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY;QACV,OAAO,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAgB;QAChC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAc;QACxC,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;CACF"} |
+9
-1
| { | ||
| "name": "@hewliyang/headless-spreadjs", | ||
| "version": "0.0.3", | ||
| "version": "0.0.4", | ||
| "description": "Headless Excel workbook engine for Node.js — powered by SpreadJS with DOM shims. No browser, no Excel, any platform.", | ||
@@ -71,2 +71,10 @@ "main": "dist/index.js", | ||
| }, | ||
| "peerDependencies": { | ||
| "playwright": ">=1.0.0" | ||
| }, | ||
| "peerDependenciesMeta": { | ||
| "playwright": { | ||
| "optional": true | ||
| } | ||
| }, | ||
| "engines": { | ||
@@ -73,0 +81,0 @@ "node": ">=18" |
+78
-50
| # headless-spreadjs | ||
| Headless Excel workbook engine for Node.js — powered by [SpreadJS](https://developer.mescius.com/spreadjs) with DOM shims. No browser, no Excel, any platform including Linux. | ||
| Headless Excel engine for Node.js using [SpreadJS](https://developer.mescius.com/spreadjs). | ||
| Runs without a browser or Excel. | ||
| ## Features | ||
| - **Full Excel fidelity** — 500+ formula functions, charts, pivot tables, tables, cell styling, merging, number formatting | ||
| - **XLSX I/O** — read and write `.xlsx, .xlsm` files with full roundtrip support | ||
| - **JSON serialization** — `toJSON()` / `fromJSON()` preserves everything (formulas, styles, charts, pivots) | ||
| - Read/write `.xlsx` and `.xlsm` | ||
| - High-fidelity formulas, styles, tables, charts, pivots | ||
| - SpreadJS JSON roundtrip (`toJSON` / `fromJSON`) | ||
| - CLI (`hsx`) for quick workbook ops | ||
| ## System Dependencies | ||
| ## System dependencies | ||
| Cairo/Pango are required by the `canvas` npm package: | ||
| `canvas` requires Cairo/Pango. | ||
@@ -19,3 +21,3 @@ ```bash | ||
| # Linux (Debian/Ubuntu) | ||
| # Debian/Ubuntu | ||
| sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev | ||
@@ -27,15 +29,12 @@ ``` | ||
| ```bash | ||
| npm install headless-spreadjs | ||
| npm install @hewliyang/headless-spreadjs | ||
| ``` | ||
| ## Usage | ||
| ## SDK quick start | ||
| ```js | ||
| import { init } from "headless-spreadjs"; | ||
| import { init } from "@hewliyang/headless-spreadjs"; | ||
| // Initialize (with optional SpreadJS license key) | ||
| // If you use this for commercial purposes, please get a license from the madlads! | ||
| const { ExcelFile, GC, dispose } = await init({ licenseKey: "xxx" }); | ||
| const { ExcelFile, dispose } = await init({ licenseKey: "xxx" }); | ||
| // Create a workbook from scratch | ||
| const file = new ExcelFile(); | ||
@@ -47,58 +46,86 @@ const sheet = file.workbook.getActiveSheet(); | ||
| sheet.setValue(1, 1, 95); | ||
| sheet.setValue(2, 0, "Bob"); | ||
| sheet.setValue(2, 1, 87); | ||
| sheet.setValue(3, 0, "Average"); | ||
| sheet.setFormula(3, 1, "AVERAGE(B2:B3)"); | ||
| await file.save("output.xlsx"); | ||
| // Open an existing workbook | ||
| const file2 = await ExcelFile.open("input.xlsx"); | ||
| const val = file2.workbook.getActiveSheet().getValue(0, 0); | ||
| console.log(val); | ||
| dispose(); | ||
| ``` | ||
| // Access raw SpreadJS API | ||
| const workbook = file.workbook; // GC.Spread.Sheets.Workbook instance | ||
| ## CLI quick start | ||
| // Clean up when done | ||
| dispose(); | ||
| ```bash | ||
| hsx create scores.xlsx | ||
| hsx set scores.xlsx A1:B3 '[["Name","Score"],["Alice",95],["Bob",87]]' | ||
| hsx get scores.xlsx A1:B3 | ||
| hsx csv scores.xlsx A1:B3 | ||
| hsx search scores.xlsx "Alice" | ||
| hsx diff before.xlsx after.xlsx | ||
| hsx deps scores.xlsx Sheet1!A1 | ||
| ``` | ||
| ## API | ||
| Run `hsx --help` for all commands. | ||
| ### `init(options?): { GC, ExcelFile, dispose }` | ||
| ## Daemon (CLI) | ||
| Initialize the headless runtime. Must be called before creating ExcelFiles. | ||
| `hsx` uses a background daemon by default to avoid re-initializing SpreadJS on each command. | ||
| | Option | Type | Description | | ||
| | ------------ | --------- | ------------------------------------------ | | ||
| | `licenseKey` | `string?` | SpreadJS license key. Omit for trial mode. | | ||
| - Auto-starts on first use | ||
| - Caches open workbooks | ||
| - Auto-exits after 5 minutes idle | ||
| - Falls back to direct mode if daemon is unavailable | ||
| Useful commands: | ||
| ```bash | ||
| hsx daemon start | ||
| hsx daemon status | ||
| hsx daemon flush | ||
| hsx daemon stop | ||
| hsx --no-daemon get file.xlsx A1 | ||
| hsx --timeout 120 eval file.xlsx '/* script */' | ||
| ``` | ||
| Environment variables: | ||
| | Variable | Default | Purpose | | ||
| | ------------------- | ---------------- | ---------------------------- | | ||
| | `HSX_SOCKET_PATH` | platform default | Custom daemon socket/pipe | | ||
| | `HSX_CACHE_SIZE` | `10` | LRU workbook cache size | | ||
| | `HSX_WRITE_THROUGH` | `0` | Immediate writes when truthy | | ||
| ## SDK API | ||
| ### `init(options?)` | ||
| Initializes runtime and returns `{ GC, ExcelFile, dispose }`. | ||
| - `licenseKey?: string` — SpreadJS license key (omit for trial) | ||
| ### `ExcelFile` | ||
| | Method | Description | | ||
| | ----------------------------------- | ---------------------------------------------- | | ||
| | `new ExcelFile()` | Create an empty workbook | | ||
| | `ExcelFile.open(path)` | Open an xlsx file → `Promise<ExcelFile>` | | ||
| | `ExcelFile.openFromBuffer(buf)` | Open xlsx from a Buffer → `Promise<ExcelFile>` | | ||
| | `file.save(path)` | Save to xlsx file → `Promise<void>` | | ||
| | `file.saveToBuffer()` | Save to Buffer → `Promise<Buffer>` | | ||
| | `file.toJSON()` | Serialize to SpreadJS JSON | | ||
| | `file.fromJSON(json)` | Load from SpreadJS JSON | | ||
| | `file.batch(fn)` | Suspend calc during `fn`, resume after | | ||
| | `file.workbook` | Raw `GC.Spread.Sheets.Workbook` instance | | ||
| - `new ExcelFile()` | ||
| - `ExcelFile.open(path)` | ||
| - `ExcelFile.openFromBuffer(buf)` | ||
| - `file.save(path)` | ||
| - `file.saveToBuffer()` | ||
| - `file.toJSON()` | ||
| - `file.fromJSON(json)` | ||
| - `file.batch(fn)` | ||
| - `file.workbook` (raw `GC.Spread.Sheets.Workbook`) | ||
| ### `GC` | ||
| Full SpreadJS namespace (`GC.Spread.Sheets.*`) for advanced APIs (styles, enums, tables, formatting, etc). | ||
| ### `dispose()` | ||
| Close the happy-dom window to prevent memory leaks. Call when done with all workbooks. | ||
| Closes the DOM shim runtime. Call when all workbook work is done. | ||
| ## Concurrency | ||
| ## Concurrency notes | ||
| `headless-spreadjs` installs DOM shims on `globalThis` (e.g. `window`, `document`, `navigator`), so a single Node.js process supports **one `init()` / `dispose()` lifecycle at a time**. You cannot safely run multiple workbook operations concurrently within the same process. | ||
| A process supports one active `init()`/`dispose()` lifecycle at a time. | ||
| Multiple `ExcelFile` instances are fine within that lifecycle. | ||
| If you need parallelism, use separate processes (e.g. worker threads or child processes) — each gets its own global scope so the shims don't collide. | ||
| For isolation, use child processes (not worker threads). | ||
| ## Docker | ||
| `headless-spreadjs` will run in an image as simple as follows | ||
| ```dockerfile | ||
@@ -114,2 +141,3 @@ FROM node:20-slim | ||
| MIT (this package). SpreadJS requires a separate commercial license from [MESCIUS](https://developer.mescius.com/spreadjs). | ||
| MIT for this package. | ||
| SpreadJS requires a separate commercial license from [MESCIUS](https://developer.mescius.com/spreadjs). |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Network access
Supply chain riskThis module accesses the network.
Found 2 instances
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 5 instances
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 2 instances
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
304930
128.42%130
38.3%3948
138.41%140
25%10
11.11%19
533.33%7
Infinity%