comins-table 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +50 -0
- package/README.md +43 -339
- package/THIRD_PARTY_NOTICES.md +4 -0
- package/dist/{clipboard-CNrbmDue.js → clipboard-B_gA5e12.js} +5 -5
- package/dist/clipboard-B_gA5e12.js.map +1 -0
- package/dist/clipboard.js +2 -2
- package/dist/column-filter.d.ts +6 -1
- package/dist/column-filter.d.ts.map +1 -1
- package/dist/core/editing/export-structure.d.ts +6 -0
- package/dist/core/editing/export-structure.d.ts.map +1 -0
- package/dist/core/editing/export.d.ts +2 -2
- package/dist/core/editing/export.d.ts.map +1 -1
- package/dist/core/editing/import.d.ts +4 -0
- package/dist/core/editing/import.d.ts.map +1 -0
- package/dist/core/editing/xlsx-data.d.ts +12 -0
- package/dist/core/editing/xlsx-data.d.ts.map +1 -0
- package/dist/core/editing/xlsx-model.d.ts +103 -0
- package/dist/core/editing/xlsx-model.d.ts.map +1 -0
- package/dist/core/model.d.ts +2 -0
- package/dist/core/model.d.ts.map +1 -1
- package/dist/core/rows/filter-value.d.ts +12 -0
- package/dist/core/rows/filter-value.d.ts.map +1 -0
- package/dist/core/rows/filtering.d.ts +27 -7
- package/dist/core/rows/filtering.d.ts.map +1 -1
- package/dist/core/rows/values-filter.d.ts +46 -0
- package/dist/core/rows/values-filter.d.ts.map +1 -0
- package/dist/core/state/reconcile.d.ts.map +1 -1
- package/dist/{core-compat-B4I2OHGY.js → core-compat-BO-JJudO.js} +5 -3
- package/dist/core-compat-BO-JJudO.js.map +1 -0
- package/dist/core.d.ts +8 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +3 -3
- package/dist/engine-iWefk5Rv.js +146 -0
- package/dist/engine-iWefk5Rv.js.map +1 -0
- package/dist/export-B_Q9_Whp.js +184 -0
- package/dist/export-B_Q9_Whp.js.map +1 -0
- package/dist/filtering.d.ts +23 -25
- package/dist/filtering.d.ts.map +1 -1
- package/dist/grouping.d.ts +8 -0
- package/dist/grouping.d.ts.map +1 -1
- package/dist/index.d.ts +44 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2620 -2230
- package/dist/index.js.map +1 -1
- package/dist/model.d.ts +30 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/react/cell-tooltip.d.ts +20 -0
- package/dist/react/cell-tooltip.d.ts.map +1 -0
- package/dist/react/state.d.ts +1 -1
- package/dist/react/state.d.ts.map +1 -1
- package/dist/react/table-transfer.d.ts +4 -0
- package/dist/react/table-transfer.d.ts.map +1 -1
- package/dist/react/value-filter-types.d.ts +79 -0
- package/dist/react/value-filter-types.d.ts.map +1 -0
- package/dist/react/value-filter.d.ts +897 -0
- package/dist/react/value-filter.d.ts.map +1 -0
- package/dist/react-types.d.ts +10 -1
- package/dist/react-types.d.ts.map +1 -1
- package/dist/selection.js +1 -1
- package/dist/summary.d.ts +9 -0
- package/dist/summary.d.ts.map +1 -1
- package/dist/values-filter-pFAPWz1Q.js +497 -0
- package/dist/values-filter-pFAPWz1Q.js.map +1 -0
- package/dist/workbook-C7MXhUjt.js +349 -0
- package/dist/workbook-C7MXhUjt.js.map +1 -0
- package/dist/xlsx/engine.d.ts +5 -0
- package/dist/xlsx/engine.d.ts.map +1 -0
- package/dist/xlsx/errors.d.ts +12 -0
- package/dist/xlsx/errors.d.ts.map +1 -0
- package/dist/xlsx/export.d.ts +3 -0
- package/dist/xlsx/export.d.ts.map +1 -0
- package/dist/xlsx/styles.d.ts +37 -0
- package/dist/xlsx/styles.d.ts.map +1 -0
- package/dist/xlsx/text.d.ts +7 -0
- package/dist/xlsx/text.d.ts.map +1 -0
- package/dist/xlsx/workbook.d.ts +32 -0
- package/dist/xlsx/workbook.d.ts.map +1 -0
- package/dist/xlsx/xml.d.ts +14 -0
- package/dist/xlsx/xml.d.ts.map +1 -0
- package/dist/xlsx/zip.d.ts +9 -0
- package/dist/xlsx/zip.d.ts.map +1 -0
- package/dist/xlsx.d.ts +7 -0
- package/dist/xlsx.d.ts.map +1 -0
- package/dist/xlsx.js +39 -0
- package/dist/xlsx.js.map +1 -0
- package/dist/zip-Oz81THHH.js +62 -0
- package/dist/zip-Oz81THHH.js.map +1 -0
- package/package.json +19 -11
- package/styles.css +53 -0
- package/dist/clipboard-CNrbmDue.js.map +0 -1
- package/dist/core-compat-B4I2OHGY.js.map +0 -1
- package/dist/export-Cfk5Jz4a.js +0 -37
- package/dist/export-Cfk5Jz4a.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values-filter-pFAPWz1Q.js","names":["metadataKeys","getMetadataColumns","value","metadata","key","headers","normalizeCominsExportColumns","columnOrder","columns","columnsById","column","id","stringifyCominsExportValue","escapeCominsCsvCell","text","getCominsExportHeader","headerOverrides","getCominsExportValue","valueSource","row","rowIndex","exportCominsRowsToCsv","exportColumns","managementColumns","rows","exportCominsRowsToJson","data","validateLimit","name","importCominsRowsFromCsv","maxCharacters","maxCells","start","records","quoted","closed","cellCount","width","syntaxError","reason","finishCell","finishRecord","index","char","hasHeader","firstRow","mapRow","addUniqueId","ids","kind","createCominsTreeExportOptions","options","active","stack","nodes","exit","node","getRowId","children","depth","createCominsGroupedExportOptions","groupIds","buckets","group","groups","groupId","getGroupId","rowIds","getRowGroupId","bucket","entries","entry","isEmptyFilterValue","getDateDayValue","year","month","day","normalized","date","normalizeFilterOptionValue","raw","config","comparison","operatorsByKind","getCominsColumnFilterOperators","getNestedFieldValue","field","current","normalizeRuleValue","isColumnFilterKind","isColumnFilterOperator","operators","normalizeCominsColumnFilterModel","model","columnById","seenColumnIds","candidate","rule","valid","option","unique","valueTo","comparePrimitive","operator","left","right","rightTo","matchesRule","defaultValue","sourceRow","rawLeft","rawRight","getCominsFilteredRowIndexes","rules","searchFilterOptions","needle","query","visibleOptions","base","selectedVisibleOptionCount","getCominsColumnFilterOptions","input","columnId","own","matching","add","existing","count","present","all","setCominsColumnFilterValues","replace","next","action","result","target","selected"],"sources":["../src/core/editing/export.ts","../src/core/editing/import.ts","../src/core/editing/export-structure.ts","../src/core/rows/filter-value.ts","../src/core/rows/filtering.ts","../src/core/rows/values-filter.ts"],"sourcesContent":["import type { CominsExportColumn, CominsExportRowsOptions, CominsExportValueSource, CominsExportMetadata } from \"../model\";\n\nconst metadataKeys = [\"__rowId\", \"__parentId\", \"__depth\", \"__groupId\"] as const;\n\nfunction getMetadataColumns<TData>(metadata: CominsExportMetadata<TData> | undefined, headers: readonly (string | undefined)[]) {\n return metadataKeys.flatMap(key => {\n const value = metadata?.[key];\n if (!value) return [];\n if (headers.includes(key)) throw new Error(`Export metadata column collision: ${key}`);\n return [{ key, value }];\n });\n}\n\nfunction normalizeCominsExportColumns<TData>({\n columnOrder,\n columns,\n}: Pick<CominsExportRowsOptions<TData>, \"columnOrder\" | \"columns\">) {\n if (!columnOrder?.length) {\n return columns;\n }\n\n const columnsById = new Map(columns.map((column) => [column.id, column]));\n\n return columnOrder\n .map((id) => columnsById.get(id))\n .filter((column): column is CominsExportColumn<TData> => Boolean(column));\n}\n\nfunction stringifyCominsExportValue(value: unknown) {\n if (value === null || value === undefined) {\n return \"\";\n }\n if (typeof value === \"string\") {\n return value;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n\n return JSON.stringify(value);\n}\n\nfunction escapeCominsCsvCell(value: unknown) {\n const text = stringifyCominsExportValue(value);\n\n return /[\",\\r\\n]/u.test(text) ? `\"${text.replaceAll('\"', '\"\"')}\"` : text;\n}\n\nfunction getCominsExportHeader<TData>(column: CominsExportColumn<TData>, headerOverrides?: Record<string, string>) {\n if (column.id && headerOverrides?.[column.id] !== undefined) {\n return headerOverrides[column.id];\n }\n\n return column.label ?? column.id ?? \"\";\n}\n\nfunction getCominsExportValue<TData>(\n column: CominsExportColumn<TData>,\n row: TData,\n rowIndex: number,\n valueSource: CominsExportValueSource,\n) {\n if (valueSource === \"formatted\" && column.format) {\n return column.format(row, rowIndex);\n }\n\n return column.value(row, rowIndex);\n}\n\nexport function exportCominsRowsToCsv<TData>({\n columnOrder,\n columns,\n headerOverrides,\n rows,\n metadata,\n valueSource = \"raw\",\n}: CominsExportRowsOptions<TData>) {\n const exportColumns = normalizeCominsExportColumns({ columnOrder, columns });\n const headers = exportColumns.map(column => getCominsExportHeader(column, headerOverrides));\n const managementColumns = getMetadataColumns(metadata, headers);\n const lines = [\n [...headers, ...managementColumns.map(column => column.key)].map(escapeCominsCsvCell).join(\",\"),\n ...rows.map((row, rowIndex) =>\n [...exportColumns.map(column => getCominsExportValue(column, row, rowIndex, valueSource)),\n ...managementColumns.map(column => column.value(row, rowIndex))].map(escapeCominsCsvCell).join(\",\"),\n ),\n ];\n\n return lines.join(\"\\n\");\n}\n\nexport function exportCominsRowsToJson<TData>({\n columnOrder,\n columns,\n headerOverrides,\n rows,\n metadata,\n valueSource = \"raw\",\n}: CominsExportRowsOptions<TData>) {\n const exportColumns = normalizeCominsExportColumns({ columnOrder, columns });\n const managementColumns = getMetadataColumns(metadata, exportColumns.map(column => getCominsExportHeader(column, headerOverrides)));\n const data = rows.map((row, rowIndex) =>\n Object.fromEntries(\n [...exportColumns.map((column) => [\n getCominsExportHeader(column, headerOverrides),\n getCominsExportValue(column, row, rowIndex, valueSource),\n ]), ...managementColumns.map(column => [column.key, column.value(row, rowIndex)])],\n ),\n );\n\n return JSON.stringify(data, null, 2);\n}\n","import type { CominsCsvImportOptions } from \"../model\";\n\nfunction validateLimit(value: number, name: string) {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw new RangeError(`${name} must be a positive safe integer.`);\n }\n}\n\n/** Parse and validate the complete CSV before mapping any application-owned rows. */\nexport function importCominsRowsFromCsv<TData>({\n text,\n mapRow,\n hasHeader = true,\n maxCharacters = 1_000_000,\n maxCells = 100_000,\n}: CominsCsvImportOptions<TData>): TData[] {\n validateLimit(maxCharacters, \"maxCharacters\");\n validateLimit(maxCells, \"maxCells\");\n if (text.length > maxCharacters) throw new RangeError(\"CSV exceeds the character limit.\");\n\n const start = text.charCodeAt(0) === 0xfeff ? 1 : 0;\n if (text.length === start) return [];\n\n const records: string[][] = [];\n let row: string[] = [];\n let value = \"\";\n let quoted = false;\n let closed = false;\n let cellCount = 0;\n let width: number | undefined;\n const syntaxError = (reason: string) => new SyntaxError(\n `Invalid CSV at record ${records.length + 1}, field ${row.length + 1}: ${reason}.`,\n );\n const finishCell = () => {\n if (++cellCount > maxCells) throw new RangeError(\"CSV exceeds the cell limit.\");\n row.push(value);\n value = \"\";\n closed = false;\n };\n const finishRecord = () => {\n finishCell();\n width ??= row.length;\n if (row.length !== width) throw syntaxError(\"inconsistent field count\");\n records.push(row);\n row = [];\n };\n\n for (let index = start; index < text.length; index++) {\n const char = text[index]!;\n if (quoted) {\n if (char === '\"') {\n if (text[index + 1] === '\"') { value += '\"'; index++; }\n else { quoted = false; closed = true; }\n } else value += char;\n } else if (char === \",\") {\n finishCell();\n } else if (char === \"\\r\" || char === \"\\n\") {\n finishRecord();\n if (char === \"\\r\" && text[index + 1] === \"\\n\") index++;\n } else if (closed) {\n throw syntaxError(\"unexpected text after a quoted field\");\n } else if (char === '\"') {\n if (value !== \"\") throw syntaxError(\"quote inside an unquoted field\");\n quoted = true;\n } else value += char;\n }\n if (quoted) throw syntaxError(\"unclosed quoted field\");\n // A final record separator terminates the preceding row, not an extra blank row.\n if (row.length || value !== \"\" || closed || !/[\\r\\n]$/u.test(text)) finishRecord();\n\n const headers = hasHeader ? records[0]! : null;\n const firstRow = hasHeader ? 1 : 0;\n return records.slice(firstRow).map((cells, rowIndex) => mapRow({ cells, headers, rowIndex }));\n}\n","import type { CominsExportGroupedOptions, CominsExportRowsOptions, CominsExportTreeOptions, CominsRowId } from \"../model\";\nimport type { CominsTreeNode } from \"../../tree\";\n\nfunction addUniqueId(ids: Set<CominsRowId>, id: CominsRowId, kind: \"row\" | \"group\") {\n if (ids.has(id)) throw new Error(`Duplicate export ${kind} id: ${String(id)}`);\n ids.add(id);\n}\n\n/** Export every supplied node in preorder, independently of disclosure state. */\nexport function createCominsTreeExportOptions<TData>({ nodes, getRowId, ...options }: CominsExportTreeOptions<TData>): CominsExportRowsOptions<TData> {\n const rows: TData[] = [];\n const metadata: { id: CominsRowId; parentId: CominsRowId | null; depth: number }[] = [];\n const ids = new Set<CominsRowId>();\n const active = new Set<CominsTreeNode<TData>>();\n type Frame = { node: CominsTreeNode<TData>; parentId: CominsRowId | null; depth: number; exit?: boolean };\n const stack: Frame[] = nodes.map(node => ({ node, parentId: null, depth: 0 })).reverse();\n while (stack.length) {\n const { node, parentId, depth, exit } = stack.pop()!;\n if (exit) { active.delete(node); continue; }\n if (active.has(node)) throw new Error(\"Cyclic export tree\");\n active.add(node);\n const id = getRowId(node.item, rows.length);\n addUniqueId(ids, id, \"row\");\n rows.push(node.item);\n metadata.push({ id, parentId, depth });\n stack.push({ node, parentId, depth, exit: true });\n const children = node.children ?? [];\n for (let index = children.length - 1; index >= 0; index--) {\n stack.push({ node: children[index]!, parentId: id, depth: depth + 1 });\n }\n }\n return { ...options, rows, metadata: {\n __rowId: (_row, index) => metadata[index]!.id,\n __parentId: (_row, index) => metadata[index]!.parentId,\n __depth: (_row, index) => metadata[index]!.depth,\n } };\n}\n\n/** Group order follows groups; member order follows the supplied rows. Empty groups add no data row. */\nexport function createCominsGroupedExportOptions<TData, TGroup>({ rows, groups, getGroupId, getRowGroupId, getRowId, ...options }: CominsExportGroupedOptions<TData, TGroup>): CominsExportRowsOptions<TData> {\n const groupIds = new Set<CominsRowId>();\n const buckets = new Map<CominsRowId, { row: TData; id: CominsRowId; groupId: CominsRowId }[]>();\n for (const group of groups) {\n const groupId = getGroupId(group);\n addUniqueId(groupIds, groupId, \"group\");\n buckets.set(groupId, []);\n }\n const rowIds = new Set<CominsRowId>();\n rows.forEach((row, index) => {\n const id = getRowId(row, index);\n addUniqueId(rowIds, id, \"row\");\n const groupId = getRowGroupId(row, index);\n const bucket = buckets.get(groupId);\n if (!bucket) throw new Error(`Unknown export group id: ${String(groupId)}`);\n bucket.push({ row, id, groupId });\n });\n const entries = [...buckets.values()].flat();\n return { ...options, rows: entries.map(entry => entry.row), metadata: {\n __rowId: (_row, index) => entries[index]!.id,\n __groupId: (_row, index) => entries[index]!.groupId,\n } };\n}\n","import type { CominsColumnFilterKind, CominsColumnFilterValue } from \"../model\";\n\nexport function isEmptyFilterValue(value: unknown) {\n return value === null || value === undefined || value === \"\";\n}\n\nexport function getDateDayValue(value: unknown): number | null {\n if (typeof value === \"string\" && /^\\d{4}-\\d{2}-\\d{2}$/u.test(value)) {\n const [year, month, day] = value.split(\"-\").map(Number);\n const normalized = Date.UTC(year!, month! - 1, day!);\n const date = new Date(normalized);\n\n return date.getUTCFullYear() === year && date.getUTCMonth() === month! - 1 && date.getUTCDate() === day\n ? normalized\n : null;\n }\n\n const date = value instanceof Date\n ? value\n : typeof value === \"number\" || typeof value === \"string\"\n ? new Date(value)\n : null;\n\n if (!date || !Number.isFinite(date.getTime())) {\n return null;\n }\n\n return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n}\n\nexport function normalizeFilterOptionValue(config: { kind: CominsColumnFilterKind; caseSensitive?: boolean }, raw: unknown): { value: CominsColumnFilterValue; key: string; label: string } | null {\n if (isEmptyFilterValue(raw)) return { value: null, key: JSON.stringify([config.kind, null]), label: \"(Empty)\" };\n let value: CominsColumnFilterValue;\n let comparison: boolean | number | string;\n switch (config.kind) {\n case \"text\": value = String(raw); comparison = config.caseSensitive ? value : value.toLocaleLowerCase(); break;\n case \"number\": if (typeof raw !== \"number\" || !Number.isFinite(raw)) return null; value = raw === 0 ? 0 : raw; comparison = value; break;\n case \"boolean\": if (typeof raw !== \"boolean\") return null; value = raw; comparison = raw; break;\n case \"date\": {\n const day = getDateDayValue(raw);\n if (day === null) return null;\n value = new Date(day).toISOString().split(\"T\")[0]!; comparison = day; break;\n }\n }\n return { value, key: JSON.stringify([config.kind, comparison]), label: typeof value === \"boolean\" ? value ? \"True\" : \"False\" : String(value) };\n}\n","import { getDateDayValue, isEmptyFilterValue, normalizeFilterOptionValue } from \"./filter-value\";\nimport type { CominsColumnFilterValue } from \"../model\";\nimport type {\n CominsCellFormatParams,\n CominsTableRuntimeColumn,\n} from \"../model\";\nimport type { CominsRowId } from \"../model\";\nimport type { CominsColumnFilterConfig as CoreFilterConfig, CominsColumnFilterKind } from \"../model\";\n\nexport type { CominsColumnFilterKind } from \"../model\";\n\nexport type CominsColumnConditionFilterOperator =\n | \"between\"\n | \"contains\"\n | \"endsWith\"\n | \"equals\"\n | \"greaterThan\"\n | \"greaterThanOrEqual\"\n | \"isEmpty\"\n | \"isNotEmpty\"\n | \"lessThan\"\n | \"lessThanOrEqual\"\n | \"notContains\"\n | \"notEquals\"\n | \"startsWith\";\n\nexport type CominsColumnFilterOperator = CominsColumnConditionFilterOperator | \"in\";\nexport type CominsColumnFilterConfig<TData, TValue = unknown> = Omit<CoreFilterConfig<TData, TValue>, \"getValue\"> & {\n getValue?: (params: CominsCellFormatParams<TData, TValue>) => unknown;\n};\n\nexport type CominsColumnConditionFilterRule = {\n columnId: string; operator: CominsColumnConditionFilterOperator;\n value?: CominsColumnFilterValue; valueTo?: null | number | string; values?: never;\n};\nexport type CominsColumnValueFilterRule = {\n columnId: string; operator: \"in\"; values: readonly CominsColumnFilterValue[]; value?: never; valueTo?: never;\n};\nexport type CominsColumnFilterRule = CominsColumnConditionFilterRule | CominsColumnValueFilterRule;\n\nexport type CominsColumnFilterModel = readonly CominsColumnFilterRule[];\n\nexport type CominsColumnFilteringConfig = {\n model: CominsColumnFilterModel;\n onChangeModel?: (model: CominsColumnFilterRule[]) => void;\n onChangeOpenColumnId?: (columnId: string | null) => void;\n openColumnId?: string | null;\n};\n\nexport type CominsColumnFilteringSourceRow<TData> = {\n data: TData;\n dataIndex: number;\n id: CominsRowId;\n};\n\ntype CominsNormalizedFilterValue = boolean | number | string;\n\nexport type CominsNormalizedColumnFilterRule<TData> = {\n column: CominsTableRuntimeColumn<TData>; config: CominsColumnFilterConfig<TData>;\n} & ({ operator: CominsColumnConditionFilterOperator; value?: CominsNormalizedFilterValue; valueTo?: number; values?: never; keys?: never }\n | { operator: \"in\"; values: readonly CominsColumnFilterValue[]; keys: ReadonlySet<string>; value?: never; valueTo?: never });\n\nconst operatorsByKind = {\n boolean: new Set<CominsColumnConditionFilterOperator>([\n \"equals\",\n \"isEmpty\",\n \"isNotEmpty\",\n \"notEquals\",\n ]),\n date: new Set<CominsColumnConditionFilterOperator>([\n \"between\",\n \"equals\",\n \"greaterThan\",\n \"greaterThanOrEqual\",\n \"isEmpty\",\n \"isNotEmpty\",\n \"lessThan\",\n \"lessThanOrEqual\",\n \"notEquals\",\n ]),\n number: new Set<CominsColumnConditionFilterOperator>([\n \"between\",\n \"equals\",\n \"greaterThan\",\n \"greaterThanOrEqual\",\n \"isEmpty\",\n \"isNotEmpty\",\n \"lessThan\",\n \"lessThanOrEqual\",\n \"notEquals\",\n ]),\n text: new Set<CominsColumnConditionFilterOperator>([\n \"contains\",\n \"endsWith\",\n \"equals\",\n \"isEmpty\",\n \"isNotEmpty\",\n \"notContains\",\n \"notEquals\",\n \"startsWith\",\n ]),\n} satisfies Record<CominsColumnFilterKind, Set<CominsColumnConditionFilterOperator>>;\n\nexport function getCominsColumnFilterOperators(kind: CominsColumnFilterKind) {\n return [...operatorsByKind[kind]];\n}\n\nfunction getNestedFieldValue(value: unknown, field: string): unknown {\n return field.split(\".\").reduce<unknown>((current, key) => {\n if (current === null || current === undefined || typeof current !== \"object\") {\n return undefined;\n }\n\n return (current as Record<string, unknown>)[key];\n }, value);\n}\n\nfunction normalizeRuleValue(\n kind: CominsColumnFilterKind,\n value: CominsColumnFilterRule[\"value\"],\n): CominsNormalizedFilterValue | null {\n switch (kind) {\n case \"boolean\":\n return typeof value === \"boolean\" ? value : null;\n case \"date\":\n return getDateDayValue(value);\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n case \"text\": {\n if (value === null || value === undefined) {\n return null;\n }\n\n const normalized = String(value);\n\n return normalized.length > 0 ? normalized : null;\n }\n }\n}\n\nfunction isColumnFilterKind(value: unknown): value is CominsColumnFilterKind {\n return value === \"boolean\" || value === \"date\" || value === \"number\" || value === \"text\";\n}\n\nfunction isColumnFilterOperator(value: unknown): value is CominsColumnFilterOperator {\n return value === \"in\" || typeof value === \"string\" && Object.values(operatorsByKind).some((operators) =>\n operators.has(value as CominsColumnConditionFilterOperator));\n}\n\nexport function normalizeCominsColumnFilterModel<TData>({\n columns,\n model,\n}: {\n columns: readonly CominsTableRuntimeColumn<TData>[];\n model: unknown;\n}): CominsNormalizedColumnFilterRule<TData>[] {\n if (!Array.isArray(model)) {\n return [];\n }\n\n const columnById = new Map(columns.map((column) => [column.id, column]));\n const seenColumnIds = new Set<string>();\n const normalized: CominsNormalizedColumnFilterRule<TData>[] = [];\n\n for (const candidate of model) {\n if (!candidate || typeof candidate !== \"object\") {\n continue;\n }\n\n const rule = candidate as Partial<CominsColumnFilterRule>;\n const column = typeof rule.columnId === \"string\" ? columnById.get(rule.columnId) : undefined;\n const config = column?.filter;\n\n if (\n !column ||\n !config ||\n !isColumnFilterKind(config.kind) ||\n !isColumnFilterOperator(rule.operator) ||\n (rule.operator !== \"in\" && !operatorsByKind[config.kind].has(rule.operator)) ||\n seenColumnIds.has(column.id)\n ) {\n continue;\n }\n\n if (rule.operator === \"in\") {\n if (!Array.isArray(rule.values)) continue;\n const options = [];\n let valid = true;\n for (const raw of rule.values) {\n if (raw !== null && typeof raw !== \"string\" && typeof raw !== \"boolean\" && typeof raw !== \"number\") { valid = false; break; }\n const option = normalizeFilterOptionValue(config, raw);\n if (!option) { valid = false; break; }\n options.push(option);\n }\n if (!valid) continue;\n const unique = new Map(options.map(option => [option.key, option.value]));\n seenColumnIds.add(column.id);\n normalized.push({ column, config, operator: \"in\", values: [...unique.values()], keys: new Set(unique.keys()) });\n continue;\n }\n\n if (rule.operator === \"isEmpty\" || rule.operator === \"isNotEmpty\") {\n seenColumnIds.add(column.id);\n normalized.push({ column, config, operator: rule.operator });\n continue;\n }\n\n const value = normalizeRuleValue(config.kind, rule.value);\n\n if (value === null) {\n continue;\n }\n\n if (rule.operator === \"between\") {\n const valueTo = normalizeRuleValue(config.kind, rule.valueTo);\n\n if (typeof value !== \"number\" || typeof valueTo !== \"number\") {\n continue;\n }\n\n seenColumnIds.add(column.id);\n normalized.push({\n column,\n config,\n operator: rule.operator,\n value: Math.min(value, valueTo),\n valueTo: Math.max(value, valueTo),\n });\n continue;\n }\n\n seenColumnIds.add(column.id);\n normalized.push({ column, config, operator: rule.operator, value });\n }\n\n return normalized;\n}\n\nfunction comparePrimitive(\n left: number | string,\n operator: CominsColumnFilterOperator,\n right: number | string,\n rightTo?: number,\n) {\n switch (operator) {\n case \"between\":\n return typeof left === \"number\" && typeof right === \"number\" && rightTo !== undefined\n ? left >= right && left <= rightTo\n : false;\n case \"equals\":\n return left === right;\n case \"greaterThan\":\n return left > right;\n case \"greaterThanOrEqual\":\n return left >= right;\n case \"lessThan\":\n return left < right;\n case \"lessThanOrEqual\":\n return left <= right;\n case \"notEquals\":\n return left !== right;\n default:\n return false;\n }\n}\n\nfunction matchesRule<TData>(\n sourceRow: CominsColumnFilteringSourceRow<TData>,\n rule: CominsNormalizedColumnFilterRule<TData>,\n) {\n const defaultValue = getNestedFieldValue(sourceRow.data, rule.column.field);\n const value = rule.config.getValue\n ? rule.config.getValue({\n column: rule.column,\n row: sourceRow.data,\n rowId: sourceRow.id,\n value: defaultValue,\n })\n : defaultValue;\n\n if (rule.operator === \"in\") {\n const option = normalizeFilterOptionValue(rule.config, value);\n return option !== null && rule.keys.has(option.key);\n }\n\n if (rule.operator === \"isEmpty\") {\n return isEmptyFilterValue(value);\n }\n\n if (rule.operator === \"isNotEmpty\") {\n return !isEmptyFilterValue(value);\n }\n\n if (isEmptyFilterValue(value) || rule.value === undefined) {\n return false;\n }\n\n switch (rule.config.kind) {\n case \"boolean\":\n return typeof value === \"boolean\" && typeof rule.value === \"boolean\"\n ? rule.operator === \"equals\" ? value === rule.value : value !== rule.value\n : false;\n case \"date\": {\n const normalized = getDateDayValue(value);\n\n return normalized !== null && typeof rule.value === \"number\"\n ? comparePrimitive(normalized, rule.operator, rule.value, rule.valueTo)\n : false;\n }\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value) && typeof rule.value === \"number\"\n ? comparePrimitive(value, rule.operator, rule.value, rule.valueTo)\n : false;\n case \"text\": {\n const rawLeft = String(value);\n const rawRight = String(rule.value);\n const left = rule.config.caseSensitive ? rawLeft : rawLeft.toLocaleLowerCase();\n const right = rule.config.caseSensitive ? rawRight : rawRight.toLocaleLowerCase();\n\n switch (rule.operator) {\n case \"contains\":\n return left.includes(right);\n case \"endsWith\":\n return left.endsWith(right);\n case \"equals\":\n return left === right;\n case \"notContains\":\n return !left.includes(right);\n case \"notEquals\":\n return left !== right;\n case \"startsWith\":\n return left.startsWith(right);\n default:\n return false;\n }\n }\n }\n}\n\nexport function getCominsFilteredRowIndexes<TData>({\n columns,\n model,\n rows,\n}: {\n columns: readonly CominsTableRuntimeColumn<TData>[];\n model: unknown;\n rows: readonly CominsColumnFilteringSourceRow<TData>[];\n}) {\n const rules = normalizeCominsColumnFilterModel({ columns, model });\n\n if (rules.length === 0) {\n return rows.map((row) => row.dataIndex);\n }\n\n return rows.flatMap((row) => rules.every((rule) => matchesRule(row, rule)) ? [row.dataIndex] : []);\n}\n","import type { CominsColumnFilterValue, CominsTableRuntimeColumn } from \"../model\";\nimport { normalizeFilterOptionValue } from \"./filter-value\";\nimport { getCominsFilteredRowIndexes, normalizeCominsColumnFilterModel, type CominsColumnFilterModel, type CominsColumnFilteringSourceRow, type CominsColumnFilterRule } from \"./filtering\";\n\nexport type CominsColumnFilterOption = { id: string; value: CominsColumnFilterValue; label: string; count: number; selected: boolean; present: boolean };\nexport type CominsColumnFilterOptionsResult = {\n options: readonly CominsColumnFilterOption[]; visibleOptions: readonly CominsColumnFilterOption[];\n selectionMode: \"all\" | \"include\"; totalOptionCount: number; selectedOptionCount: number;\n visibleOptionCount: number; selectedVisibleOptionCount: number; visibleSelection: boolean | \"mixed\";\n};\nexport type CominsColumnFilterValuesAction = { type: \"setOption\"; id: string; checked: boolean } | { type: \"setVisible\"; checked: boolean } | { type: \"clear\" };\nexport type CominsColumnFilterOptionsInput<TData> = {\n columns: readonly CominsTableRuntimeColumn<TData>[]; columnId: string;\n rows: readonly CominsColumnFilteringSourceRow<TData>[]; model: CominsColumnFilterModel; query?: string;\n};\n\n/** Internal projection for adapters: search does not re-read rows or recompute facet counts. */\nexport function searchFilterOptions(base: CominsColumnFilterOptionsResult, query: string): CominsColumnFilterOptionsResult {\n const needle = query.trim().toLocaleLowerCase();\n const visibleOptions = needle ? base.options.filter(option => option.label.toLocaleLowerCase().includes(needle)) : base.options;\n const selectedVisibleOptionCount = visibleOptions.filter(option => option.selected).length;\n return { ...base, visibleOptions, visibleOptionCount: visibleOptions.length, selectedVisibleOptionCount,\n visibleSelection: !selectedVisibleOptionCount ? false : selectedVisibleOptionCount === visibleOptions.length ? true : \"mixed\" };\n}\n\n/** Collect all supplied leaf values; count matches of other columns, ignoring this column's rule. */\nexport function getCominsColumnFilterOptions<TData>(input: CominsColumnFilterOptionsInput<TData>): CominsColumnFilterOptionsResult | null {\n const { columns, columnId, rows } = input;\n const model: CominsColumnFilterModel = Array.isArray(input.model) ? input.model : [];\n const column = columns.find(column => column.id === columnId);\n const config = column?.filter;\n if (!column || !config || ![\"text\", \"number\", \"boolean\", \"date\"].includes(config.kind)) return null;\n const own = normalizeCominsColumnFilterModel({ columns, model }).find(rule => rule.column.id === columnId);\n if (own && own.operator !== \"in\") return null;\n const matching = new Set(getCominsFilteredRowIndexes({ columns, rows, model: model.filter(rule => rule?.columnId !== columnId) }));\n const options = new Map<string, CominsColumnFilterOption>();\n const add = (raw: unknown, present: boolean, count: number) => {\n const normalized = normalizeFilterOptionValue(config, raw);\n if (!normalized) return;\n const existing = options.get(normalized.key);\n if (existing) { existing.count += count; existing.present ||= present; return; }\n options.set(normalized.key, { id: normalized.key, value: normalized.value,\n label: config.getOptionLabel ? config.getOptionLabel(normalized.value) : normalized.label,\n count, present, selected: !own || own.keys.has(normalized.key) });\n };\n for (const row of rows) {\n const value = column.field.split(\".\").reduce<unknown>((value, key) => value !== null && typeof value === \"object\" ? (value as Record<string, unknown>)[key] : undefined, row.data);\n add(config.getValue ? config.getValue({ column, row: row.data, rowId: row.id, value }) : value, true, matching.has(row.dataIndex) ? 1 : 0);\n }\n own?.values.forEach(value => add(value, false, 0));\n const all = [...options.values()];\n return searchFilterOptions({ options: all, visibleOptions: all, selectionMode: own ? \"include\" : \"all\",\n totalOptionCount: all.length, selectedOptionCount: all.filter(option => option.selected).length,\n visibleOptionCount: 0, selectedVisibleOptionCount: 0, visibleSelection: false }, input.query ?? \"\");\n}\n\n/** Immutable proposal: the application owns and acknowledges the returned model. */\nexport function setCominsColumnFilterValues<TData>(input: CominsColumnFilterOptionsInput<TData> & { action: CominsColumnFilterValuesAction }): CominsColumnFilterModel {\n const { action, columnId } = input;\n const model: CominsColumnFilterModel = Array.isArray(input.model) ? input.model : [];\n if (!input.columns.some(column => column.id === columnId)) return model;\n const replace = (rule: CominsColumnFilterRule | null) => {\n const index = model.findIndex(rule => rule?.columnId === columnId);\n if (index < 0 && !rule) return model;\n const next = model.filter(rule => rule?.columnId !== columnId);\n if (rule) next.splice(index < 0 ? next.length : index, 0, rule);\n return next;\n };\n if (action.type === \"clear\") return replace(null);\n const result = getCominsColumnFilterOptions(input);\n if (!result) return model;\n const target = action.type === \"setOption\" ? result.options.filter(option => option.id === action.id) : result.visibleOptions;\n if (!target.length) return model;\n if (action.type === \"setVisible\" && !input.query?.trim() && action.checked) return replace(null);\n if (target.every(option => option.selected === action.checked)) return model;\n const config = input.columns.find(column => column.id === columnId)!.filter!;\n const own = normalizeCominsColumnFilterModel({ columns: input.columns, model }).find(rule => rule.column.id === columnId);\n const selected = new Map<string, CominsColumnFilterValue>();\n if (own?.operator === \"in\") own.values.forEach(value => {\n const normalized = normalizeFilterOptionValue(config, value)!; selected.set(normalized.key, normalized.value);\n });\n else result.options.forEach(option => selected.set(option.id, option.value));\n for (const option of target) { if (action.checked) selected.set(option.id, option.value); else selected.delete(option.id); }\n return replace({ columnId, operator: \"in\", values: [...selected.values()] });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import { SaxNamespaceParser as e } from "@federicocarboni/saxe";
|
|
2
|
+
//#region src/core/editing/xlsx-model.ts
|
|
3
|
+
var t = {
|
|
4
|
+
maxBytes: 10485760,
|
|
5
|
+
maxUncompressedBytes: 52428800,
|
|
6
|
+
maxCells: 1e5
|
|
7
|
+
}, n = class extends Error {
|
|
8
|
+
code;
|
|
9
|
+
location;
|
|
10
|
+
constructor(e, t = {}) {
|
|
11
|
+
super(`XLSX ${e}`), this.code = e, this.name = "XlsxDataError", this.location = Object.fromEntries(Object.entries(t).filter(([e]) => [
|
|
12
|
+
"sheetName",
|
|
13
|
+
"cellAddress",
|
|
14
|
+
"rowNumber",
|
|
15
|
+
"sheetNames"
|
|
16
|
+
].includes(e)));
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
function r(e) {
|
|
20
|
+
if (!Number.isSafeInteger(e) || e < 1) throw new n("INVALID_OPTIONS");
|
|
21
|
+
}
|
|
22
|
+
function i(e) {
|
|
23
|
+
if (e.length > 32767) throw new n("LIMIT_EXCEEDED");
|
|
24
|
+
return e;
|
|
25
|
+
}
|
|
26
|
+
function a(e) {
|
|
27
|
+
if (e.kind === "error") throw new n("CELL_ERROR", e);
|
|
28
|
+
if (e.formula && !e.cachePresent) throw new n("MISSING_FORMULA_RESULT", e);
|
|
29
|
+
switch (e.kind) {
|
|
30
|
+
case "blank": return null;
|
|
31
|
+
case "text": return i(e.value);
|
|
32
|
+
case "date": return i(e.dateText);
|
|
33
|
+
case "boolean": return e.value;
|
|
34
|
+
case "number":
|
|
35
|
+
if (!Number.isFinite(e.value)) throw new n("UNSUPPORTED_VALUE", e);
|
|
36
|
+
return e.value;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function o(e) {
|
|
40
|
+
if (e == null) return null;
|
|
41
|
+
if (typeof e == "string") return i(e);
|
|
42
|
+
if (typeof e == "boolean" || typeof e == "number" && Number.isFinite(e)) return e;
|
|
43
|
+
if (e instanceof Date && Number.isFinite(e.getTime())) {
|
|
44
|
+
let t = e.getUTCFullYear();
|
|
45
|
+
if (t < 1900 || t > 9999) throw new n("UNSUPPORTED_VALUE");
|
|
46
|
+
return {
|
|
47
|
+
kind: "date",
|
|
48
|
+
utc: [
|
|
49
|
+
t,
|
|
50
|
+
e.getUTCMonth() + 1,
|
|
51
|
+
e.getUTCDate(),
|
|
52
|
+
e.getUTCHours(),
|
|
53
|
+
e.getUTCMinutes(),
|
|
54
|
+
e.getUTCSeconds(),
|
|
55
|
+
e.getUTCMilliseconds()
|
|
56
|
+
]
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
throw new n("UNSUPPORTED_VALUE");
|
|
60
|
+
}
|
|
61
|
+
function s(e) {
|
|
62
|
+
let { columns: a, rows: s, columnOrder: c, headerOverrides: l, valueSource: u = "raw", maxCells: d = t.maxCells } = e;
|
|
63
|
+
if (r(d), [
|
|
64
|
+
"metadata",
|
|
65
|
+
"nodes",
|
|
66
|
+
"groups"
|
|
67
|
+
].some((t) => Object.hasOwn(e, t)) || !Array.isArray(a) || !a.length || !Array.isArray(s) || u !== "raw" && u !== "formatted") throw new n("INVALID_OPTIONS");
|
|
68
|
+
let f = new Map(a.map((e) => [e.id, e])), p = c?.length ? c.flatMap((e) => {
|
|
69
|
+
let t = f.get(e);
|
|
70
|
+
return t ? [t] : [];
|
|
71
|
+
}) : a;
|
|
72
|
+
if (!p.length) throw new n("INVALID_OPTIONS");
|
|
73
|
+
if (p.length > 16384 || s.length + 1 > 1048576 || p.length * (s.length + 1) > d) throw new n("LIMIT_EXCEEDED");
|
|
74
|
+
return {
|
|
75
|
+
headers: p.map((e) => {
|
|
76
|
+
let t = (e.id !== void 0 && l && Object.hasOwn(l, e.id) ? l[e.id] : void 0) ?? e.label ?? e.id ?? "";
|
|
77
|
+
if (typeof t != "string" || typeof e.value != "function") throw new n("INVALID_OPTIONS");
|
|
78
|
+
return i(t);
|
|
79
|
+
}),
|
|
80
|
+
rows: s.map((e, t) => p.map((n) => o(u === "formatted" && n.format ? n.format(e, t) : n.value(e, t))))
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function c(e, t) {
|
|
84
|
+
return e.map((e) => t(e));
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region src/xlsx/errors.ts
|
|
88
|
+
var l = class extends Error {
|
|
89
|
+
code;
|
|
90
|
+
sheetName;
|
|
91
|
+
cellAddress;
|
|
92
|
+
rowNumber;
|
|
93
|
+
sheetNames;
|
|
94
|
+
constructor(e, t = {}) {
|
|
95
|
+
super(`XLSX ${e}`), this.code = e, this.name = "CominsXlsxError", this.sheetName = t.sheetName, this.cellAddress = t.cellAddress, this.rowNumber = t.rowNumber, this.sheetNames = t.sheetNames?.slice();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
function u(e) {
|
|
99
|
+
throw e instanceof n ? new l(e.code, e.location) : e;
|
|
100
|
+
}
|
|
101
|
+
//#endregion
|
|
102
|
+
//#region src/xlsx/xml.ts
|
|
103
|
+
var d = "http://purl.oclc.org/ooxml/spreadsheetml/main", f = "http://purl.oclc.org/ooxml/officeDocument/relationships";
|
|
104
|
+
function p(e) {
|
|
105
|
+
return e === d ? "http://schemas.openxmlformats.org/spreadsheetml/2006/main" : e === f ? "http://schemas.openxmlformats.org/officeDocument/2006/relationships" : e;
|
|
106
|
+
}
|
|
107
|
+
function m(e) {
|
|
108
|
+
return e.startsWith(`${f}/`) ? p(f) + e.slice(55) : e;
|
|
109
|
+
}
|
|
110
|
+
function h(t, n, r) {
|
|
111
|
+
let i;
|
|
112
|
+
try {
|
|
113
|
+
let e = t[0] === 255 && t[1] === 254 ? "utf-16le" : t[0] === 254 && t[1] === 255 ? "utf-16be" : "utf-8";
|
|
114
|
+
i = new TextDecoder(e, { fatal: !0 }).decode(t);
|
|
115
|
+
} catch {
|
|
116
|
+
throw new l("INVALID_WORKBOOK");
|
|
117
|
+
}
|
|
118
|
+
let a = [], o, s = 0, c = !1, u = new e({
|
|
119
|
+
startTag(e, t) {
|
|
120
|
+
if (c = !0, !n) return;
|
|
121
|
+
if (++s > r) throw new l("LIMIT_EXCEEDED");
|
|
122
|
+
let i = {
|
|
123
|
+
local: e.localName,
|
|
124
|
+
uri: p(e.namespace ?? ""),
|
|
125
|
+
attrs: Object.create(null),
|
|
126
|
+
children: [],
|
|
127
|
+
text: ""
|
|
128
|
+
};
|
|
129
|
+
for (let [e, n] of t) i.attrs[e.namespace ? `{${p(e.namespace)}}${e.localName}` : e.localName] = n;
|
|
130
|
+
a.length ? a[a.length - 1].children.push(i) : o = i, a.push(i);
|
|
131
|
+
},
|
|
132
|
+
text(e) {
|
|
133
|
+
let t = a[a.length - 1];
|
|
134
|
+
n && t && (t.text += e);
|
|
135
|
+
},
|
|
136
|
+
endTag() {
|
|
137
|
+
n && a.pop();
|
|
138
|
+
}
|
|
139
|
+
}, {
|
|
140
|
+
dtd: "prohibit",
|
|
141
|
+
incrementalText: !0,
|
|
142
|
+
maxElementDepth: 256,
|
|
143
|
+
maxAttributesLength: Math.max(i.length, 1),
|
|
144
|
+
maxTextLength: Math.max(i.length, 1),
|
|
145
|
+
maxNameLength: Math.max(i.length, 1),
|
|
146
|
+
maxNamespacePrefixes: Math.max(i.length, 1)
|
|
147
|
+
});
|
|
148
|
+
try {
|
|
149
|
+
u.parse(i);
|
|
150
|
+
} catch (e) {
|
|
151
|
+
throw e instanceof l ? e : new l("INVALID_WORKBOOK");
|
|
152
|
+
}
|
|
153
|
+
if (!c) throw new l("INVALID_WORKBOOK");
|
|
154
|
+
return o;
|
|
155
|
+
}
|
|
156
|
+
function g(e) {
|
|
157
|
+
h(e, !1, 0);
|
|
158
|
+
}
|
|
159
|
+
function _(e, t = 1e6) {
|
|
160
|
+
return h(e, !0, t);
|
|
161
|
+
}
|
|
162
|
+
function v(e, t, n = e.uri) {
|
|
163
|
+
return e.children.filter((e) => e.local === t && e.uri === n);
|
|
164
|
+
}
|
|
165
|
+
function y(e, t) {
|
|
166
|
+
return v(e, t)[0];
|
|
167
|
+
}
|
|
168
|
+
//#endregion
|
|
169
|
+
//#region src/xlsx/workbook.ts
|
|
170
|
+
var b = "http://schemas.openxmlformats.org/spreadsheetml/2006/main", x = "http://schemas.openxmlformats.org/officeDocument/2006/relationships", S = "http://schemas.openxmlformats.org/package/2006/relationships", C = "http://schemas.openxmlformats.org/package/2006/content-types", w = () => {
|
|
171
|
+
throw new l("INVALID_WORKBOOK");
|
|
172
|
+
};
|
|
173
|
+
function T(e, t) {
|
|
174
|
+
let n = e.files.get(t);
|
|
175
|
+
return n ? _(n, e.maxMetadataNodes) : w();
|
|
176
|
+
}
|
|
177
|
+
function E(e, t, n) {
|
|
178
|
+
return (e.local !== t || e.uri !== n) && w(), e;
|
|
179
|
+
}
|
|
180
|
+
function D(e, t) {
|
|
181
|
+
if (!t || /[\\\0?#]/.test(t) || /^[a-z][a-z\d+.-]*:/i.test(t) || t.startsWith("//")) return w();
|
|
182
|
+
let n;
|
|
183
|
+
try {
|
|
184
|
+
n = decodeURIComponent(t);
|
|
185
|
+
} catch {
|
|
186
|
+
return w();
|
|
187
|
+
}
|
|
188
|
+
if (/[\\\0?#]/.test(n)) return w();
|
|
189
|
+
let r = n.startsWith("/") ? [] : e.split("/").slice(0, -1);
|
|
190
|
+
for (let e of n.split("/")) if (e === "..") {
|
|
191
|
+
if (!r.length) return w();
|
|
192
|
+
r.pop();
|
|
193
|
+
} else e && e !== "." && r.push(e);
|
|
194
|
+
return r.join("/");
|
|
195
|
+
}
|
|
196
|
+
function O(e, t) {
|
|
197
|
+
let n = t.lastIndexOf("/"), r = E(T(e, `${n >= 0 ? t.slice(0, n + 1) : ""}_rels/${t.slice(n + 1)}.rels`), "Relationships", S), i = /* @__PURE__ */ new Map();
|
|
198
|
+
for (let n of v(r, "Relationship")) {
|
|
199
|
+
let { Id: r, Type: a, Target: o, TargetMode: s } = n.attrs;
|
|
200
|
+
(!r || !a || !o || i.has(r) || s && s !== "External" && s !== "Internal") && w();
|
|
201
|
+
let c = s === "External" ? void 0 : D(t, o);
|
|
202
|
+
c && !e.files.has(c) && w(), i.set(r, {
|
|
203
|
+
type: m(a),
|
|
204
|
+
path: c
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
return i;
|
|
208
|
+
}
|
|
209
|
+
function k(e) {
|
|
210
|
+
let t = E(T(e, "[Content_Types].xml"), "Types", C);
|
|
211
|
+
if (t.children.some((t) => (t.local === "Override" ? e.files.has((t.attrs.PartName ?? "").replace(/^\//, "")) : [...e.files.keys()].some((e) => e.endsWith(`.${t.attrs.Extension ?? ""}`))) && /macroEnabled|vbaProject/i.test(t.attrs.ContentType ?? ""))) throw new l("UNSUPPORTED_FILE");
|
|
212
|
+
let n = [...O(e, "").values()].filter((e) => e.type === `${x}/officeDocument`), r = n.length === 1 ? n[0].path : void 0;
|
|
213
|
+
if (!r) return w();
|
|
214
|
+
if (v(t, "Override").find((e) => e.attrs.PartName === `/${r}`)?.attrs.ContentType !== "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml") throw new l("UNSUPPORTED_FILE");
|
|
215
|
+
let i = E(T(e, r), "workbook", b), a = O(e, r), o = /* @__PURE__ */ new Set(), s = v(y(i, "sheets") ?? w(), "sheet").map((e) => {
|
|
216
|
+
let t = e.attrs.name, n = e.attrs.state ?? "visible", r = a.get(e.attrs[`{${x}}id`] ?? "");
|
|
217
|
+
return !t || o.has(t) || ![
|
|
218
|
+
"visible",
|
|
219
|
+
"hidden",
|
|
220
|
+
"veryHidden"
|
|
221
|
+
].includes(n) || r?.type !== `${x}/worksheet` || !r.path ? w() : (o.add(t), {
|
|
222
|
+
name: t,
|
|
223
|
+
visibility: n,
|
|
224
|
+
path: r.path
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
s.length || w();
|
|
228
|
+
let c = [...a.values()].find((e) => e.type === `${x}/styles`)?.path;
|
|
229
|
+
return {
|
|
230
|
+
sheets: s,
|
|
231
|
+
formatIds: c ? v(y(E(T(e, c), "styleSheet", b), "cellXfs") ?? w(), "xf").map((e) => Number(e.attrs.numFmtId ?? 0)) : [],
|
|
232
|
+
date1904: ["1", "true"].includes(y(i, "workbookPr")?.attrs.date1904 ?? ""),
|
|
233
|
+
path: r
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
function A(e) {
|
|
237
|
+
return { sheets: k(e).sheets.map(({ name: e, visibility: t }) => ({
|
|
238
|
+
name: e,
|
|
239
|
+
visibility: t
|
|
240
|
+
})) };
|
|
241
|
+
}
|
|
242
|
+
function j(e, t) {
|
|
243
|
+
let n = "";
|
|
244
|
+
for (; t > 0;) t--, n = String.fromCharCode(65 + t % 26) + n, t = Math.floor(t / 26);
|
|
245
|
+
return n + e;
|
|
246
|
+
}
|
|
247
|
+
function M(e) {
|
|
248
|
+
let t = /^([A-Z]{1,3})([1-9]\d{0,6})$/.exec(e);
|
|
249
|
+
if (!t) return w();
|
|
250
|
+
let n = 0;
|
|
251
|
+
for (let e of t[1]) n = n * 26 + e.charCodeAt(0) - 64;
|
|
252
|
+
let r = Number(t[2]);
|
|
253
|
+
return n > 16384 || r > 1048576 ? w() : {
|
|
254
|
+
row: r,
|
|
255
|
+
col: n
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
function N(e) {
|
|
259
|
+
let t = e.split(":");
|
|
260
|
+
if (t.length > 2) return w();
|
|
261
|
+
let n = M(t[0]), r = M(t[1] ?? t[0]);
|
|
262
|
+
return r.row < n.row || r.col < n.col ? w() : {
|
|
263
|
+
start: n,
|
|
264
|
+
end: r
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
function P(e, t, n) {
|
|
268
|
+
let r = k(e), i = r.sheets.filter((e) => e.visibility === "visible");
|
|
269
|
+
if (!t && i.length > 1) throw new l("SHEET_SELECTION_REQUIRED", { sheetNames: i.map((e) => e.name) });
|
|
270
|
+
let a = t === void 0 ? i[0] : i.find((e) => e.name === t);
|
|
271
|
+
if (!a) throw new l("SHEET_NOT_FOUND");
|
|
272
|
+
let o = E(T(e, a.path), "worksheet", b);
|
|
273
|
+
if (v(y(o, "mergeCells") ?? o, "mergeCell").length) throw new l("MERGED_CELLS", { sheetName: a.name });
|
|
274
|
+
let s = 0, c = 0, u = (e, t) => {
|
|
275
|
+
if (e * t > n) throw new l("LIMIT_EXCEEDED", { sheetName: a.name });
|
|
276
|
+
}, d = y(o, "dimension")?.attrs.ref;
|
|
277
|
+
if (d) {
|
|
278
|
+
let e = N(d);
|
|
279
|
+
u(e.end.row, e.end.col);
|
|
280
|
+
}
|
|
281
|
+
let f = /* @__PURE__ */ new Map(), p = [];
|
|
282
|
+
for (let e of v(y(o, "sheetData") ?? w(), "row")) for (let t of v(e, "c")) {
|
|
283
|
+
let n = t.attrs.r;
|
|
284
|
+
if (!n || f.has(n)) return w();
|
|
285
|
+
let r = M(n);
|
|
286
|
+
if (e.attrs.r !== void 0 && Number(e.attrs.r) !== r.row || [
|
|
287
|
+
"f",
|
|
288
|
+
"v",
|
|
289
|
+
"is"
|
|
290
|
+
].some((e) => v(t, e).length > 1) || t.attrs.t !== void 0 && ![
|
|
291
|
+
"b",
|
|
292
|
+
"n",
|
|
293
|
+
"s",
|
|
294
|
+
"str",
|
|
295
|
+
"inlineStr",
|
|
296
|
+
"e",
|
|
297
|
+
"d"
|
|
298
|
+
].includes(t.attrs.t)) return w();
|
|
299
|
+
let i = y(t, "f"), a = y(t, "v"), o = y(t, "is");
|
|
300
|
+
if (i && i.attrs.ref) {
|
|
301
|
+
let e = N(i.attrs.ref);
|
|
302
|
+
u(e.end.row, e.end.col), p.push(e);
|
|
303
|
+
}
|
|
304
|
+
if (a?.children.length || o && t.attrs.t !== "inlineStr" || a && (t.attrs.t === "n" || t.attrs.t === void 0) && !/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(a.text.trim()) || a && t.attrs.t === "s" && (!/^\d+$/.test(a.text.trim()) || !Number.isSafeInteger(Number(a.text)))) return w();
|
|
305
|
+
let l = t.attrs.s === void 0 ? void 0 : Number(t.attrs.s);
|
|
306
|
+
if (l !== void 0 && (!Number.isSafeInteger(l) || l < 0)) return w();
|
|
307
|
+
f.set(n, {
|
|
308
|
+
address: n,
|
|
309
|
+
...r,
|
|
310
|
+
type: t.attrs.t,
|
|
311
|
+
style: l,
|
|
312
|
+
formula: !!i,
|
|
313
|
+
cachePresent: !!a,
|
|
314
|
+
inlinePresent: !!o,
|
|
315
|
+
value: a?.text,
|
|
316
|
+
formulaRange: i?.attrs.ref,
|
|
317
|
+
formulaType: i?.attrs.t
|
|
318
|
+
}), (i || a || o) && (s = Math.max(s, r.row), c = Math.max(c, r.col), u(s, c));
|
|
319
|
+
}
|
|
320
|
+
let m = /* @__PURE__ */ new Set();
|
|
321
|
+
for (let e of p) {
|
|
322
|
+
s = Math.max(s, e.end.row), c = Math.max(c, e.end.col), u(s, c);
|
|
323
|
+
for (let t = e.start.row; t <= e.end.row; t++) for (let n = e.start.col; n <= e.end.col; n++) {
|
|
324
|
+
let e = j(t, n);
|
|
325
|
+
if (m.has(e)) return w();
|
|
326
|
+
m.add(e);
|
|
327
|
+
let r = f.get(e);
|
|
328
|
+
if (!r?.cachePresent) throw new l("MISSING_FORMULA_RESULT", {
|
|
329
|
+
sheetName: a.name,
|
|
330
|
+
rowNumber: t,
|
|
331
|
+
cellAddress: j(t, n)
|
|
332
|
+
});
|
|
333
|
+
r.formula = !0;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return {
|
|
337
|
+
name: a.name,
|
|
338
|
+
path: a.path,
|
|
339
|
+
date1904: r.date1904,
|
|
340
|
+
formatIds: r.formatIds,
|
|
341
|
+
rows: s,
|
|
342
|
+
cols: c,
|
|
343
|
+
cells: f
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
//#endregion
|
|
347
|
+
export { l as a, a as c, t as d, g as i, s as l, A as n, u as o, P as r, c as s, j as t, r as u };
|
|
348
|
+
|
|
349
|
+
//# sourceMappingURL=workbook-C7MXhUjt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workbook-C7MXhUjt.js","names":["DEFAULT_XLSX_LIMITS","XlsxDataError","code","location","key","validateXlsxLimit","value","textValue","normalizeCominsXlsxCell","cell","prepareValue","year","prepareCominsXlsxExport","options","maxCells","columns","rows","valueSource","byId","column","chosen","columnOrder","id","headerOverrides","row","index","mapCominsXlsxImportRows","mapRow","CominsXlsxError","rethrowXlsxDataError","error","strictMain","strictRel","canonicalXlsxNamespace","uri","canonicalXlsxRelationship","type","readXlsxXml","text","encoding","bytes","stack","root","nodes","sawRoot","parser","SaxNamespaceParser","retain","maxNodes","node","tag","attr","attributes","validateXlsxXml","parseXlsxXml","children","n","local","child","MAIN","REL","PACKAGE_REL","CONTENT","invalid","xml","container","path","targetPath","target","decoded","parts","base","part","relations","slash","map","rel","Id","Type","Target","TargetMode","workbook","types","docRelations","r","rels","names","sheets","name","s","visibility","relationship","stylePath","inspectCominsXlsxContainer","cellAddress","letters","col","coordinate","match","address","letter","range","ref","start","end","readCominsXlsxSheetMetadata","book","visible","requested","selected","sheet","cols","bounded","declared","area","cells","formulaRanges","position","formula","inline","style","visitedFormulaCells"],"sources":["../src/core/editing/xlsx-model.ts","../src/core/editing/xlsx-data.ts","../src/xlsx/errors.ts","../src/xlsx/xml.ts","../src/xlsx/workbook.ts"],"sourcesContent":["import type { CominsExportRowsOptions } from \"../model\";\n\nexport type CominsXlsxCellValue = string | number | boolean | null;\nexport type CominsXlsxImportRow = {\n cells: readonly CominsXlsxCellValue[];\n headers: readonly string[] | null;\n rowIndex: number;\n sheetRowNumber: number;\n};\nexport type CominsXlsxImportLimits = { maxBytes?: number; maxUncompressedBytes?: number; maxCells?: number };\nexport type CominsXlsxImportOptions<TData> = {\n bytes: Uint8Array | ArrayBuffer;\n sheetName?: string;\n hasHeader?: boolean;\n limits?: CominsXlsxImportLimits;\n mapRow: (row: CominsXlsxImportRow) => TData;\n};\nexport type CominsXlsxInspectOptions = Pick<CominsXlsxImportOptions<unknown>, \"bytes\" | \"limits\">;\n/** Framework-neutral XLSX styles; no CSS, HTML, formula or vendor objects. */\nexport type CominsXlsxCellStyle = {\n fontFamily?: string;\n fontSize?: number;\n fontWeight?: \"bold\";\n fontStyle?: \"italic\";\n textColor?: string;\n backgroundColor?: string;\n borderColor?: string;\n borderStyle?: \"thin\" | \"medium\" | \"thick\";\n align?: \"left\" | \"center\" | \"right\";\n alignVertical?: \"top\" | \"center\" | \"bottom\";\n wrap?: boolean;\n format?: string;\n};\nexport type CominsXlsxExportStyles = {\n theme?: \"comins\" | \"plain\";\n header?: CominsXlsxCellStyle;\n body?: CominsXlsxCellStyle;\n headerHeight?: number;\n rowHeight?: number;\n /** Keys are column ids, independent of exported column order. Width is in characters. */\n columns?: Readonly<Record<string, { width?: number; header?: CominsXlsxCellStyle; body?: CominsXlsxCellStyle }>>;\n};\nexport type CominsXlsxExportOptions<TData> = Omit<CominsExportRowsOptions<TData>, \"metadata\"> & {\n metadata?: never;\n sheetName?: string;\n maxCells?: number;\n styles?: CominsXlsxExportStyles;\n};\nexport type CominsXlsxSheetInfo = { name: string; visibility: \"visible\" | \"hidden\" | \"veryHidden\" };\nexport type CominsXlsxWorkbookInfo = { sheets: readonly CominsXlsxSheetInfo[] };\nexport type CominsXlsxErrorCode = \"INVALID_OPTIONS\" | \"UNSUPPORTED_FILE\" | \"INVALID_WORKBOOK\" | \"LIMIT_EXCEEDED\" | \"SHEET_SELECTION_REQUIRED\" | \"SHEET_NOT_FOUND\" | \"MERGED_CELLS\" | \"MISSING_FORMULA_RESULT\" | \"CELL_ERROR\" | \"UNSUPPORTED_VALUE\";\nexport type XlsxErrorLocation = { sheetName?: string; cellAddress?: string; rowNumber?: number; sheetNames?: readonly string[] };\nexport type PreparedXlsxValue = CominsXlsxCellValue | { kind: \"date\"; utc: readonly [number, number, number, number, number, number, number] };\nexport type PreparedXlsxSheet = { headers: readonly string[]; rows: readonly (readonly PreparedXlsxValue[])[] };\ntype XlsxCellBase = { formula: boolean; cachePresent?: boolean } & XlsxErrorLocation;\nexport type XlsxCellDescriptor = XlsxCellBase & (\n | { kind: \"blank\" | \"error\" }\n | { kind: \"text\"; value: string }\n | { kind: \"number\"; value: number }\n | { kind: \"boolean\"; value: boolean }\n | { kind: \"date\"; dateText: string }\n);\nexport const DEFAULT_XLSX_LIMITS = { maxBytes: 10 * 1024 * 1024, maxUncompressedBytes: 50 * 1024 * 1024, maxCells: 100_000 } as const;\n","import type { CominsXlsxCellValue, CominsXlsxErrorCode, CominsXlsxExportOptions, CominsXlsxImportRow, PreparedXlsxSheet, PreparedXlsxValue, XlsxCellDescriptor, XlsxErrorLocation } from \"./xlsx-model\";\nimport { DEFAULT_XLSX_LIMITS } from \"./xlsx-model\";\n\n/** Internal, data-only validation failure; adapters wrap this without intercepting user exceptions. */\nexport class XlsxDataError extends Error {\n public readonly location: XlsxErrorLocation;\n constructor(public readonly code: CominsXlsxErrorCode, location: XlsxErrorLocation = {}) {\n super(`XLSX ${code}`);\n this.name = \"XlsxDataError\";\n this.location = Object.fromEntries(Object.entries(location).filter(([key]) => [\"sheetName\", \"cellAddress\", \"rowNumber\", \"sheetNames\"].includes(key)));\n }\n}\nexport function validateXlsxLimit(value: number) {\n if (!Number.isSafeInteger(value) || value < 1) throw new XlsxDataError(\"INVALID_OPTIONS\");\n}\nfunction textValue(value: string) {\n if (value.length > 32_767) throw new XlsxDataError(\"LIMIT_EXCEEDED\");\n return value;\n}\nexport function normalizeCominsXlsxCell(cell: XlsxCellDescriptor): CominsXlsxCellValue {\n if (cell.kind === \"error\") throw new XlsxDataError(\"CELL_ERROR\", cell);\n if (cell.formula && !cell.cachePresent) throw new XlsxDataError(\"MISSING_FORMULA_RESULT\", cell);\n switch (cell.kind) {\n case \"blank\": return null;\n case \"text\": return textValue(cell.value);\n case \"date\": return textValue(cell.dateText);\n case \"boolean\": return cell.value;\n case \"number\":\n if (!Number.isFinite(cell.value)) throw new XlsxDataError(\"UNSUPPORTED_VALUE\", cell);\n return cell.value;\n }\n}\nfunction prepareValue(value: unknown): PreparedXlsxValue {\n if (value === null || value === undefined) return null;\n if (typeof value === \"string\") return textValue(value);\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (value instanceof Date && Number.isFinite(value.getTime())) {\n const year = value.getUTCFullYear();\n if (year < 1900 || year > 9999) throw new XlsxDataError(\"UNSUPPORTED_VALUE\");\n return { kind: \"date\", utc: [year, value.getUTCMonth() + 1, value.getUTCDate(), value.getUTCHours(), value.getUTCMinutes(), value.getUTCSeconds(), value.getUTCMilliseconds()] };\n }\n throw new XlsxDataError(\"UNSUPPORTED_VALUE\");\n}\nexport function prepareCominsXlsxExport<TData>(options: CominsXlsxExportOptions<TData>): PreparedXlsxSheet {\n const { columns, rows, columnOrder, headerOverrides, valueSource = \"raw\", maxCells = DEFAULT_XLSX_LIMITS.maxCells } = options;\n validateXlsxLimit(maxCells);\n if ([\"metadata\", \"nodes\", \"groups\"].some(key => Object.hasOwn(options, key)) || !Array.isArray(columns) || !columns.length || !Array.isArray(rows)) throw new XlsxDataError(\"INVALID_OPTIONS\");\n if (valueSource !== \"raw\" && valueSource !== \"formatted\") throw new XlsxDataError(\"INVALID_OPTIONS\");\n const byId = new Map(columns.map(column => [column.id, column]));\n const chosen = columnOrder?.length ? columnOrder.flatMap(id => { const column = byId.get(id); return column ? [column] : []; }) : columns;\n if (!chosen.length) throw new XlsxDataError(\"INVALID_OPTIONS\");\n if (chosen.length > 16_384 || rows.length + 1 > 1_048_576 || chosen.length * (rows.length + 1) > maxCells) throw new XlsxDataError(\"LIMIT_EXCEEDED\");\n const headers = chosen.map(column => {\n const override = column.id !== undefined && headerOverrides && Object.hasOwn(headerOverrides, column.id) ? headerOverrides[column.id] : undefined;\n const value = override ?? column.label ?? column.id ?? \"\";\n if (typeof value !== \"string\" || typeof column.value !== \"function\") throw new XlsxDataError(\"INVALID_OPTIONS\");\n return textValue(value);\n });\n return { headers, rows: rows.map((row, index) => chosen.map(column => prepareValue(valueSource === \"formatted\" && column.format ? column.format(row, index) : column.value(row, index)))) };\n}\nexport function mapCominsXlsxImportRows<TData>(rows: readonly CominsXlsxImportRow[], mapRow: (row: CominsXlsxImportRow) => TData): TData[] {\n return rows.map(row => mapRow(row));\n}\n","import { XlsxDataError } from \"../core/editing/xlsx-data\";\nimport type { CominsXlsxErrorCode, XlsxErrorLocation } from \"../core/editing/xlsx-model\";\n/** File/format failures contain location information, never engine diagnostics or cell data. */\nexport class CominsXlsxError extends Error {\n readonly sheetName?: string;\n readonly cellAddress?: string;\n readonly rowNumber?: number;\n readonly sheetNames?: readonly string[];\n constructor(public readonly code: CominsXlsxErrorCode, location: XlsxErrorLocation = {}) {\n super(`XLSX ${code}`);\n this.name = \"CominsXlsxError\";\n this.sheetName = location.sheetName;\n this.cellAddress = location.cellAddress;\n this.rowNumber = location.rowNumber;\n this.sheetNames = location.sheetNames?.slice();\n }\n}\nexport function rethrowXlsxDataError(error: unknown): never {\n if (error instanceof XlsxDataError) throw new CominsXlsxError(error.code, error.location);\n throw error;\n}\n","import { SaxNamespaceParser } from \"@federicocarboni/saxe\";\nimport { CominsXlsxError } from \"./errors\";\nconst strictMain = \"http://purl.oclc.org/ooxml/spreadsheetml/main\";\nconst strictRel = \"http://purl.oclc.org/ooxml/officeDocument/relationships\";\nexport function canonicalXlsxNamespace(uri: string): string {\n if (uri === strictMain) return \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\";\n if (uri === strictRel) return \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\";\n return uri;\n}\nexport function canonicalXlsxRelationship(type: string): string {\n return type.startsWith(`${strictRel}/`) ? canonicalXlsxNamespace(strictRel) + type.slice(strictRel.length) : type;\n}\nexport type XmlNode = { local: string; uri: string; attrs: Record<string, string>; children: XmlNode[]; text: string };\n/** Strict XML library owns tokenization/entities; unselected files do not retain a tree. */\nfunction readXlsxXml(bytes: Uint8Array, retain: boolean, maxNodes: number): XmlNode | undefined {\n let text: string;\n try {\n const encoding = bytes[0] === 0xff && bytes[1] === 0xfe ? \"utf-16le\" : bytes[0] === 0xfe && bytes[1] === 0xff ? \"utf-16be\" : \"utf-8\";\n text = new TextDecoder(encoding, { fatal: true }).decode(bytes);\n } catch { throw new CominsXlsxError(\"INVALID_WORKBOOK\"); }\n const stack: XmlNode[] = []; let root: XmlNode | undefined; let nodes = 0; let sawRoot = false;\n const parser = new SaxNamespaceParser({\n startTag(tag, attributes) {\n sawRoot = true;\n if (!retain) return;\n // Bound retained metadata before creating the next node.\n if (++nodes > maxNodes) throw new CominsXlsxError(\"LIMIT_EXCEEDED\");\n const node: XmlNode = { local: tag.localName, uri: canonicalXlsxNamespace(tag.namespace ?? \"\"), attrs: Object.create(null) as Record<string,string>, children: [], text: \"\" };\n for (const [attr, value] of attributes) node.attrs[attr.namespace ? `{${canonicalXlsxNamespace(attr.namespace)}}${attr.localName}` : attr.localName] = value;\n if (stack.length) stack[stack.length-1]!.children.push(node); else root = node;\n stack.push(node);\n },\n text(value) { const node = stack[stack.length-1]; if (retain && node) node.text += value; },\n endTag() { if (retain) stack.pop(); },\n }, {\n dtd: \"prohibit\", incrementalText: true, maxElementDepth: 256,\n // The bounded ZIP reader owns the input budget. Avoid new vendor defaults\n // rejecting names/text that the existing Comins byte limit permits.\n maxAttributesLength: Math.max(text.length, 1), maxTextLength: Math.max(text.length, 1),\n maxNameLength: Math.max(text.length, 1), maxNamespacePrefixes: Math.max(text.length, 1),\n });\n try { parser.parse(text); } catch (error) { if (error instanceof CominsXlsxError) throw error; throw new CominsXlsxError(\"INVALID_WORKBOOK\"); }\n if (!sawRoot) throw new CominsXlsxError(\"INVALID_WORKBOOK\");\n return root;\n}\nexport function validateXlsxXml(bytes: Uint8Array): void { readXlsxXml(bytes, false, 0); }\nexport function parseXlsxXml(bytes: Uint8Array, maxNodes = 1_000_000): XmlNode { return readXlsxXml(bytes, true, maxNodes)!; }\nexport function children(node: XmlNode, local: string, uri = node.uri): XmlNode[] { return node.children.filter(n => n.local === local && n.uri === uri); }\nexport function child(node: XmlNode, local: string): XmlNode | undefined { return children(node, local)[0]; }\n","import type { CominsXlsxWorkbookInfo } from \"../core/editing/xlsx-model\";\nimport { CominsXlsxError } from \"./errors\";\nimport { canonicalXlsxRelationship, child, children, parseXlsxXml, type XmlNode } from \"./xml\";\nimport type { VerifiedXlsxContainer } from \"./zip\";\nconst MAIN = \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\";\nconst REL = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\";\nconst PACKAGE_REL = \"http://schemas.openxmlformats.org/package/2006/relationships\";\nconst CONTENT = \"http://schemas.openxmlformats.org/package/2006/content-types\";\nconst invalid = (): never => { throw new CominsXlsxError(\"INVALID_WORKBOOK\"); };\nfunction xml(container: VerifiedXlsxContainer, path: string) { const bytes = container.files.get(path); if (!bytes) return invalid(); return parseXlsxXml(bytes, container.maxMetadataNodes); }\nfunction root(node: XmlNode, local: string, uri: string) { if (node.local !== local || node.uri !== uri) invalid(); return node; }\nfunction targetPath(base: string, target: string): string {\n if (!target || /[\\\\\\0?#]/.test(target) || /^[a-z][a-z\\d+.-]*:/i.test(target) || target.startsWith(\"//\")) return invalid();\n let decoded: string; try { decoded = decodeURIComponent(target); } catch { return invalid(); }\n if (/[\\\\\\0?#]/.test(decoded)) return invalid();\n const parts = decoded.startsWith(\"/\") ? [] : base.split(\"/\").slice(0, -1);\n for (const part of decoded.split(\"/\")) {\n if (part === \"..\") { if (!parts.length) return invalid(); parts.pop(); }\n else if (part && part !== \".\") parts.push(part);\n }\n return parts.join(\"/\");\n}\nfunction relations(container: VerifiedXlsxContainer, base: string): Map<string, { type: string; path?: string }> {\n const slash = base.lastIndexOf(\"/\"); const dir = slash >= 0 ? base.slice(0, slash+1) : \"\"; const file = base.slice(slash+1);\n const node = root(xml(container, `${dir}_rels/${file}.rels`), \"Relationships\", PACKAGE_REL);\n const map = new Map<string, { type: string; path?: string }>();\n for (const rel of children(node, \"Relationship\")) {\n const { Id, Type, Target, TargetMode } = rel.attrs;\n if (!Id || !Type || !Target || map.has(Id) || (TargetMode && TargetMode !== \"External\" && TargetMode !== \"Internal\")) invalid();\n const path = TargetMode === \"External\" ? undefined : targetPath(base, Target!);\n if (path && !container.files.has(path)) invalid();\n map.set(Id!, { type: canonicalXlsxRelationship(Type!), path });\n }\n return map;\n}\nfunction workbook(container: VerifiedXlsxContainer) {\n const types = root(xml(container, \"[Content_Types].xml\"), \"Types\", CONTENT);\n if (types.children.some(n => {\n const applies = n.local === \"Override\" ? container.files.has((n.attrs.PartName ?? \"\").replace(/^\\//, \"\")) : [...container.files.keys()].some(path => path.endsWith(`.${n.attrs.Extension ?? \"\"}`));\n return applies && /macroEnabled|vbaProject/i.test(n.attrs.ContentType ?? \"\");\n })) throw new CominsXlsxError(\"UNSUPPORTED_FILE\");\n const docRelations = [...relations(container, \"\").values()].filter(r => r.type === `${REL}/officeDocument`);\n const path = docRelations.length === 1 ? docRelations[0]!.path : undefined; if (!path) return invalid();\n const declaration = children(types, \"Override\").find(n => n.attrs.PartName === `/${path}`);\n if (declaration?.attrs.ContentType !== \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\") throw new CominsXlsxError(\"UNSUPPORTED_FILE\");\n const node = root(xml(container, path), \"workbook\", MAIN); const rels = relations(container, path);\n const names = new Set<string>(); const sheets = children(child(node, \"sheets\") ?? invalid(), \"sheet\").map(s => {\n const name = s.attrs.name; const visibility = s.attrs.state ?? \"visible\"; const relationship = rels.get(s.attrs[`{${REL}}id`] ?? \"\");\n if (!name || names.has(name) || ![\"visible\", \"hidden\", \"veryHidden\"].includes(visibility) || relationship?.type !== `${REL}/worksheet` || !relationship.path) return invalid();\n names.add(name);\n return { name, visibility: visibility as \"visible\" | \"hidden\" | \"veryHidden\", path: relationship.path };\n });\n if (!sheets.length) invalid();\n const stylePath = [...rels.values()].find(r => r.type === `${REL}/styles`)?.path;\n const formatIds = stylePath ? children(child(root(xml(container, stylePath), \"styleSheet\", MAIN), \"cellXfs\") ?? invalid(), \"xf\").map(n => Number(n.attrs.numFmtId ?? 0)) : [];\n return { sheets, formatIds, date1904: [\"1\", \"true\"].includes(child(node, \"workbookPr\")?.attrs.date1904 ?? \"\"), path };\n}\nexport function inspectCominsXlsxContainer(container: VerifiedXlsxContainer): CominsXlsxWorkbookInfo {\n return { sheets: workbook(container).sheets.map(({ name, visibility }) => ({ name, visibility })) };\n}\nexport type XlsxCellMetadata = { address: string; row: number; col: number; type?: string; style?: number; formula: boolean; cachePresent: boolean; inlinePresent: boolean; value?: string; formulaRange?: string; formulaType?: string };\nexport type XlsxSheetMetadata = { name: string; path: string; date1904: boolean; formatIds: readonly number[]; rows: number; cols: number; cells: ReadonlyMap<string, XlsxCellMetadata> };\nexport function cellAddress(row: number, col: number): string {\n let letters = \"\"; while (col > 0) { col--; letters = String.fromCharCode(65 + col % 26) + letters; col = Math.floor(col / 26); }\n return letters + row;\n}\nexport function coordinate(address: string): { row: number; col: number } {\n const match = /^([A-Z]{1,3})([1-9]\\d{0,6})$/.exec(address); if (!match) return invalid();\n let col = 0; for (const letter of match[1]!) col = col * 26 + letter.charCodeAt(0) - 64;\n const row = Number(match[2]); if (col > 16384 || row > 1048576) return invalid();\n return { row, col };\n}\nfunction range(ref: string) {\n const parts = ref.split(\":\"); if (parts.length > 2) return invalid(); const start = coordinate(parts[0]!); const end = coordinate(parts[1] ?? parts[0]!);\n if (end.row < start.row || end.col < start.col) return invalid(); return { start, end };\n}\nexport function readCominsXlsxSheetMetadata(container: VerifiedXlsxContainer, requested: string | undefined, maxCells: number): XlsxSheetMetadata {\n const book = workbook(container); const visible = book.sheets.filter(s => s.visibility === \"visible\");\n if (!requested && visible.length > 1) throw new CominsXlsxError(\"SHEET_SELECTION_REQUIRED\", { sheetNames: visible.map(s => s.name) });\n const selected = requested !== undefined ? visible.find(s => s.name === requested) : visible[0];\n if (!selected) throw new CominsXlsxError(\"SHEET_NOT_FOUND\");\n const sheet = root(xml(container, selected.path), \"worksheet\", MAIN);\n if (children(child(sheet, \"mergeCells\") ?? sheet, \"mergeCell\").length) throw new CominsXlsxError(\"MERGED_CELLS\", { sheetName: selected.name });\n let rows = 0, cols = 0;\n const bounded = (row: number, col: number) => { if (row * col > maxCells) throw new CominsXlsxError(\"LIMIT_EXCEEDED\", { sheetName: selected.name }); };\n const declared = child(sheet, \"dimension\")?.attrs.ref; if (declared) { const area = range(declared); bounded(area.end.row, area.end.col); }\n const cells = new Map<string, XlsxCellMetadata>(); const formulaRanges: ReturnType<typeof range>[] = [];\n for (const row of children(child(sheet, \"sheetData\") ?? invalid(), \"row\")) {\n for (const cell of children(row, \"c\")) {\n const address = cell.attrs.r; if (!address || cells.has(address)) return invalid(); const position = coordinate(address);\n if (row.attrs.r !== undefined && Number(row.attrs.r) !== position.row) return invalid();\n if ([\"f\", \"v\", \"is\"].some(local => children(cell, local).length > 1)) return invalid();\n if (cell.attrs.t !== undefined && ![\"b\", \"n\", \"s\", \"str\", \"inlineStr\", \"e\", \"d\"].includes(cell.attrs.t)) return invalid();\n const formula = child(cell, \"f\"); const value = child(cell, \"v\"); const inline = child(cell, \"is\");\n if (formula && formula.attrs.ref) { const area = range(formula.attrs.ref); bounded(area.end.row, area.end.col); formulaRanges.push(area); }\n if (value?.children.length || (inline && cell.attrs.t !== \"inlineStr\")) return invalid();\n if (value && (cell.attrs.t === \"n\" || cell.attrs.t === undefined) && !/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(value.text.trim())) return invalid();\n if (value && cell.attrs.t === \"s\" && (!/^\\d+$/.test(value.text.trim()) || !Number.isSafeInteger(Number(value.text)))) return invalid();\n const style = cell.attrs.s === undefined ? undefined : Number(cell.attrs.s);\n if (style !== undefined && (!Number.isSafeInteger(style) || style < 0)) return invalid();\n cells.set(address, { address, ...position, type: cell.attrs.t, style, formula: !!formula, cachePresent: !!value, inlinePresent: !!inline, value: value?.text, formulaRange: formula?.attrs.ref, formulaType: formula?.attrs.t });\n if (formula || value || inline) { rows = Math.max(rows, position.row); cols = Math.max(cols, position.col); bounded(rows, cols); }\n }\n }\n const visitedFormulaCells = new Set<string>();\n for (const area of formulaRanges) {\n rows = Math.max(rows, area.end.row); cols = Math.max(cols, area.end.col); bounded(rows, cols);\n for (let row = area.start.row; row <= area.end.row; row++) for (let col = area.start.col; col <= area.end.col; col++) {\n // No formula cell may disappear merely because the engine omitted its missing cache.\n const address = cellAddress(row, col);\n if (visitedFormulaCells.has(address)) return invalid();\n visitedFormulaCells.add(address);\n const value = cells.get(address);\n if (!value?.cachePresent) throw new CominsXlsxError(\"MISSING_FORMULA_RESULT\", { sheetName: selected.name, rowNumber: row, cellAddress: cellAddress(row, col) });\n value.formula = true;\n }\n }\n return { name: selected.name, path: selected.path, date1904: book.date1904, formatIds: book.formatIds, rows, cols, cells };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CominsXlsxImportRow } from "../core/editing/xlsx-model";
|
|
2
|
+
import { type XlsxSheetMetadata } from "./workbook";
|
|
3
|
+
import { type VerifiedXlsxContainer } from "./zip";
|
|
4
|
+
export declare function decodeCominsXlsxRows(container: VerifiedXlsxContainer, metadata: XlsxSheetMetadata, hasHeader: boolean): Promise<CominsXlsxImportRow[]>;
|
|
5
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/xlsx/engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,mBAAmB,EAAsB,MAAM,4BAA4B,CAAC;AAG/G,OAAO,EAAsC,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAA+B,KAAK,qBAAqB,EAAE,MAAM,OAAO,CAAC;AA4DhF,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAmB5J"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CominsXlsxErrorCode, XlsxErrorLocation } from "../core/editing/xlsx-model";
|
|
2
|
+
/** File/format failures contain location information, never engine diagnostics or cell data. */
|
|
3
|
+
export declare class CominsXlsxError extends Error {
|
|
4
|
+
readonly code: CominsXlsxErrorCode;
|
|
5
|
+
readonly sheetName?: string;
|
|
6
|
+
readonly cellAddress?: string;
|
|
7
|
+
readonly rowNumber?: number;
|
|
8
|
+
readonly sheetNames?: readonly string[];
|
|
9
|
+
constructor(code: CominsXlsxErrorCode, location?: XlsxErrorLocation);
|
|
10
|
+
}
|
|
11
|
+
export declare function rethrowXlsxDataError(error: unknown): never;
|
|
12
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/xlsx/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACzF,gGAAgG;AAChG,qBAAa,eAAgB,SAAQ,KAAK;aAKZ,IAAI,EAAE,mBAAmB;IAJrD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,YAA4B,IAAI,EAAE,mBAAmB,EAAE,QAAQ,GAAE,iBAAsB,EAOtF;CACF;AACD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAG1D"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CominsXlsxExportOptions, PreparedXlsxSheet } from "../core/editing/xlsx-model";
|
|
2
|
+
export declare function encodeCominsXlsxRows<TData>(prepared: PreparedXlsxSheet, name: string, options: CominsXlsxExportOptions<TData>): Promise<Uint8Array>;
|
|
3
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/xlsx/export.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAqB,MAAM,4BAA4B,CAAC;AAchH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CASzJ"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { CominsXlsxExportOptions } from "../core/editing/xlsx-model";
|
|
2
|
+
export declare function resolveXlsxStyles<TData>(options: CominsXlsxExportOptions<TData>): {
|
|
3
|
+
headerHeight: number | undefined;
|
|
4
|
+
rowHeight: number | undefined;
|
|
5
|
+
columns: {
|
|
6
|
+
width: number | undefined;
|
|
7
|
+
header: {
|
|
8
|
+
fontFamily?: string;
|
|
9
|
+
fontSize?: number;
|
|
10
|
+
fontWeight?: "bold";
|
|
11
|
+
fontStyle?: "italic";
|
|
12
|
+
textColor?: string;
|
|
13
|
+
backgroundColor?: string;
|
|
14
|
+
borderColor?: string;
|
|
15
|
+
borderStyle?: "thin" | "medium" | "thick";
|
|
16
|
+
align?: "left" | "center" | "right";
|
|
17
|
+
alignVertical?: "top" | "center" | "bottom";
|
|
18
|
+
wrap?: boolean;
|
|
19
|
+
format?: string;
|
|
20
|
+
};
|
|
21
|
+
body: {
|
|
22
|
+
fontFamily?: string;
|
|
23
|
+
fontSize?: number;
|
|
24
|
+
fontWeight?: "bold";
|
|
25
|
+
fontStyle?: "italic";
|
|
26
|
+
textColor?: string;
|
|
27
|
+
backgroundColor?: string;
|
|
28
|
+
borderColor?: string;
|
|
29
|
+
borderStyle?: "thin" | "medium" | "thick";
|
|
30
|
+
align?: "left" | "center" | "right";
|
|
31
|
+
alignVertical?: "top" | "center" | "bottom";
|
|
32
|
+
wrap?: boolean;
|
|
33
|
+
format?: string;
|
|
34
|
+
};
|
|
35
|
+
}[];
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/xlsx/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AA+B/F,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,uBAAuB,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB/E"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Feature } from "write-excel-file/universal";
|
|
2
|
+
/** Literal text bypasses the writer's empty-string coercion and object-key lookup. */
|
|
3
|
+
export declare function createXlsxTextTable(): {
|
|
4
|
+
token: (text: string, address: string) => number;
|
|
5
|
+
feature: Feature<Blob>;
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=text.d.ts.map
|