@bilig/excel-import 0.14.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/LICENSE +1 -0
  2. package/README.md +165 -0
  3. package/dist/index.d.ts +31 -0
  4. package/dist/index.js +748 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/workbook-import-content-types.d.ts +10 -0
  7. package/dist/workbook-import-content-types.js +30 -0
  8. package/dist/workbook-import-content-types.js.map +1 -0
  9. package/dist/workbook-import-helpers.d.ts +21 -0
  10. package/dist/workbook-import-helpers.js +77 -0
  11. package/dist/workbook-import-helpers.js.map +1 -0
  12. package/dist/workbook-import-preview.d.ts +19 -0
  13. package/dist/workbook-import-preview.js +12 -0
  14. package/dist/workbook-import-preview.js.map +1 -0
  15. package/dist/xlsx-array-formulas.d.ts +6 -0
  16. package/dist/xlsx-array-formulas.js +186 -0
  17. package/dist/xlsx-array-formulas.js.map +1 -0
  18. package/dist/xlsx-axis-entries.d.ts +3 -0
  19. package/dist/xlsx-axis-entries.js +90 -0
  20. package/dist/xlsx-axis-entries.js.map +1 -0
  21. package/dist/xlsx-calculation-settings.d.ts +9 -0
  22. package/dist/xlsx-calculation-settings.js +198 -0
  23. package/dist/xlsx-calculation-settings.js.map +1 -0
  24. package/dist/xlsx-cell-insertion.d.ts +11 -0
  25. package/dist/xlsx-cell-insertion.js +164 -0
  26. package/dist/xlsx-cell-insertion.js.map +1 -0
  27. package/dist/xlsx-cell-metadata.d.ts +15 -0
  28. package/dist/xlsx-cell-metadata.js +380 -0
  29. package/dist/xlsx-cell-metadata.js.map +1 -0
  30. package/dist/xlsx-chart-artifacts.d.ts +7 -0
  31. package/dist/xlsx-chart-artifacts.js +327 -0
  32. package/dist/xlsx-chart-artifacts.js.map +1 -0
  33. package/dist/xlsx-charts.d.ts +4 -0
  34. package/dist/xlsx-charts.js +671 -0
  35. package/dist/xlsx-charts.js.map +1 -0
  36. package/dist/xlsx-comment-vml.d.ts +11 -0
  37. package/dist/xlsx-comment-vml.js +292 -0
  38. package/dist/xlsx-comment-vml.js.map +1 -0
  39. package/dist/xlsx-comments.d.ts +7 -0
  40. package/dist/xlsx-comments.js +120 -0
  41. package/dist/xlsx-comments.js.map +1 -0
  42. package/dist/xlsx-conditional-formats.d.ts +5 -0
  43. package/dist/xlsx-conditional-formats.js +513 -0
  44. package/dist/xlsx-conditional-formats.js.map +1 -0
  45. package/dist/xlsx-control-artifacts.d.ts +7 -0
  46. package/dist/xlsx-control-artifacts.js +404 -0
  47. package/dist/xlsx-control-artifacts.js.map +1 -0
  48. package/dist/xlsx-data-model-artifacts.d.ts +4 -0
  49. package/dist/xlsx-data-model-artifacts.js +240 -0
  50. package/dist/xlsx-data-model-artifacts.js.map +1 -0
  51. package/dist/xlsx-data-table-formulas.d.ts +4 -0
  52. package/dist/xlsx-data-table-formulas.js +138 -0
  53. package/dist/xlsx-data-table-formulas.js.map +1 -0
  54. package/dist/xlsx-defined-names.d.ts +7 -0
  55. package/dist/xlsx-defined-names.js +292 -0
  56. package/dist/xlsx-defined-names.js.map +1 -0
  57. package/dist/xlsx-dimensions.d.ts +4 -0
  58. package/dist/xlsx-dimensions.js +495 -0
  59. package/dist/xlsx-dimensions.js.map +1 -0
  60. package/dist/xlsx-drawing-artifacts.d.ts +7 -0
  61. package/dist/xlsx-drawing-artifacts.js +477 -0
  62. package/dist/xlsx-drawing-artifacts.js.map +1 -0
  63. package/dist/xlsx-escaped-text.d.ts +2 -0
  64. package/dist/xlsx-escaped-text.js +22 -0
  65. package/dist/xlsx-escaped-text.js.map +1 -0
  66. package/dist/xlsx-export-xml.d.ts +8 -0
  67. package/dist/xlsx-export-xml.js +99 -0
  68. package/dist/xlsx-export-xml.js.map +1 -0
  69. package/dist/xlsx-export.d.ts +2 -0
  70. package/dist/xlsx-export.js +800 -0
  71. package/dist/xlsx-export.js.map +1 -0
  72. package/dist/xlsx-external-link-artifacts.d.ts +4 -0
  73. package/dist/xlsx-external-link-artifacts.js +317 -0
  74. package/dist/xlsx-external-link-artifacts.js.map +1 -0
  75. package/dist/xlsx-external-references.d.ts +29 -0
  76. package/dist/xlsx-external-references.js +356 -0
  77. package/dist/xlsx-external-references.js.map +1 -0
  78. package/dist/xlsx-filters.d.ts +4 -0
  79. package/dist/xlsx-filters.js +273 -0
  80. package/dist/xlsx-filters.js.map +1 -0
  81. package/dist/xlsx-formula-translation.d.ts +10 -0
  82. package/dist/xlsx-formula-translation.js +391 -0
  83. package/dist/xlsx-formula-translation.js.map +1 -0
  84. package/dist/xlsx-formulas.d.ts +2 -0
  85. package/dist/xlsx-formulas.js +136 -0
  86. package/dist/xlsx-formulas.js.map +1 -0
  87. package/dist/xlsx-freeze-panes.d.ts +4 -0
  88. package/dist/xlsx-freeze-panes.js +206 -0
  89. package/dist/xlsx-freeze-panes.js.map +1 -0
  90. package/dist/xlsx-hyperlinks.d.ts +5 -0
  91. package/dist/xlsx-hyperlinks.js +64 -0
  92. package/dist/xlsx-hyperlinks.js.map +1 -0
  93. package/dist/xlsx-ignored-errors.d.ts +4 -0
  94. package/dist/xlsx-ignored-errors.js +106 -0
  95. package/dist/xlsx-ignored-errors.js.map +1 -0
  96. package/dist/xlsx-import-cell-styles.d.ts +8 -0
  97. package/dist/xlsx-import-cell-styles.js +255 -0
  98. package/dist/xlsx-import-cell-styles.js.map +1 -0
  99. package/dist/xlsx-import-sheet-metadata.d.ts +40 -0
  100. package/dist/xlsx-import-sheet-metadata.js +41 -0
  101. package/dist/xlsx-import-sheet-metadata.js.map +1 -0
  102. package/dist/xlsx-import-warnings.d.ts +8 -0
  103. package/dist/xlsx-import-warnings.js +44 -0
  104. package/dist/xlsx-import-warnings.js.map +1 -0
  105. package/dist/xlsx-import-workbook-metadata.d.ts +28 -0
  106. package/dist/xlsx-import-workbook-metadata.js +29 -0
  107. package/dist/xlsx-import-workbook-metadata.js.map +1 -0
  108. package/dist/xlsx-macros.d.ts +10 -0
  109. package/dist/xlsx-macros.js +63 -0
  110. package/dist/xlsx-macros.js.map +1 -0
  111. package/dist/xlsx-merge-entries.d.ts +3 -0
  112. package/dist/xlsx-merge-entries.js +17 -0
  113. package/dist/xlsx-merge-entries.js.map +1 -0
  114. package/dist/xlsx-number-formats.d.ts +7 -0
  115. package/dist/xlsx-number-formats.js +222 -0
  116. package/dist/xlsx-number-formats.js.map +1 -0
  117. package/dist/xlsx-pivot-artifacts.d.ts +29 -0
  118. package/dist/xlsx-pivot-artifacts.js +292 -0
  119. package/dist/xlsx-pivot-artifacts.js.map +1 -0
  120. package/dist/xlsx-pivots.d.ts +10 -0
  121. package/dist/xlsx-pivots.js +589 -0
  122. package/dist/xlsx-pivots.js.map +1 -0
  123. package/dist/xlsx-print-page-setup.d.ts +6 -0
  124. package/dist/xlsx-print-page-setup.js +224 -0
  125. package/dist/xlsx-print-page-setup.js.map +1 -0
  126. package/dist/xlsx-printer-settings.d.ts +4 -0
  127. package/dist/xlsx-printer-settings.js +279 -0
  128. package/dist/xlsx-printer-settings.js.map +1 -0
  129. package/dist/xlsx-protected-ranges.d.ts +4 -0
  130. package/dist/xlsx-protected-ranges.js +183 -0
  131. package/dist/xlsx-protected-ranges.js.map +1 -0
  132. package/dist/xlsx-rich-text-artifacts.d.ts +4 -0
  133. package/dist/xlsx-rich-text-artifacts.js +303 -0
  134. package/dist/xlsx-rich-text-artifacts.js.map +1 -0
  135. package/dist/xlsx-sheet-properties.d.ts +4 -0
  136. package/dist/xlsx-sheet-properties.js +89 -0
  137. package/dist/xlsx-sheet-properties.js.map +1 -0
  138. package/dist/xlsx-sheet-protection.d.ts +4 -0
  139. package/dist/xlsx-sheet-protection.js +153 -0
  140. package/dist/xlsx-sheet-protection.js.map +1 -0
  141. package/dist/xlsx-sheet-visibility.d.ts +4 -0
  142. package/dist/xlsx-sheet-visibility.js +53 -0
  143. package/dist/xlsx-sheet-visibility.js.map +1 -0
  144. package/dist/xlsx-slicer-connection-artifacts.d.ts +4 -0
  145. package/dist/xlsx-slicer-connection-artifacts.js +426 -0
  146. package/dist/xlsx-slicer-connection-artifacts.js.map +1 -0
  147. package/dist/xlsx-sorts.d.ts +5 -0
  148. package/dist/xlsx-sorts.js +216 -0
  149. package/dist/xlsx-sorts.js.map +1 -0
  150. package/dist/xlsx-sparklines.d.ts +4 -0
  151. package/dist/xlsx-sparklines.js +115 -0
  152. package/dist/xlsx-sparklines.js.map +1 -0
  153. package/dist/xlsx-style-only-blank-cells.d.ts +3 -0
  154. package/dist/xlsx-style-only-blank-cells.js +96 -0
  155. package/dist/xlsx-style-only-blank-cells.js.map +1 -0
  156. package/dist/xlsx-style-runs.d.ts +12 -0
  157. package/dist/xlsx-style-runs.js +35 -0
  158. package/dist/xlsx-style-runs.js.map +1 -0
  159. package/dist/xlsx-styles.d.ts +25 -0
  160. package/dist/xlsx-styles.js +857 -0
  161. package/dist/xlsx-styles.js.map +1 -0
  162. package/dist/xlsx-tab-colors.d.ts +4 -0
  163. package/dist/xlsx-tab-colors.js +166 -0
  164. package/dist/xlsx-tab-colors.js.map +1 -0
  165. package/dist/xlsx-tables.d.ts +4 -0
  166. package/dist/xlsx-tables.js +371 -0
  167. package/dist/xlsx-tables.js.map +1 -0
  168. package/dist/xlsx-theme-artifacts.d.ts +6 -0
  169. package/dist/xlsx-theme-artifacts.js +126 -0
  170. package/dist/xlsx-theme-artifacts.js.map +1 -0
  171. package/dist/xlsx-threaded-comment-artifacts.d.ts +8 -0
  172. package/dist/xlsx-threaded-comment-artifacts.js +329 -0
  173. package/dist/xlsx-threaded-comment-artifacts.js.map +1 -0
  174. package/dist/xlsx-validations.d.ts +4 -0
  175. package/dist/xlsx-validations.js +542 -0
  176. package/dist/xlsx-validations.js.map +1 -0
  177. package/dist/xlsx-view-state.d.ts +8 -0
  178. package/dist/xlsx-view-state.js +144 -0
  179. package/dist/xlsx-view-state.js.map +1 -0
  180. package/dist/xlsx-workbook-properties.d.ts +5 -0
  181. package/dist/xlsx-workbook-properties.js +388 -0
  182. package/dist/xlsx-workbook-properties.js.map +1 -0
  183. package/dist/xlsx-workbook-protection.d.ts +4 -0
  184. package/dist/xlsx-workbook-protection.js +147 -0
  185. package/dist/xlsx-workbook-protection.js.map +1 -0
  186. package/dist/xlsx-workbook-sheet-paths.d.ts +4 -0
  187. package/dist/xlsx-workbook-sheet-paths.js +96 -0
  188. package/dist/xlsx-workbook-sheet-paths.js.map +1 -0
  189. package/dist/xlsx-worksheet-cells.d.ts +16 -0
  190. package/dist/xlsx-worksheet-cells.js +104 -0
  191. package/dist/xlsx-worksheet-cells.js.map +1 -0
  192. package/dist/xlsx-worksheet-text-values.d.ts +2 -0
  193. package/dist/xlsx-worksheet-text-values.js +136 -0
  194. package/dist/xlsx-worksheet-text-values.js.map +1 -0
  195. package/dist/xlsx-zip.d.ts +6 -0
  196. package/dist/xlsx-zip.js +12 -0
  197. package/dist/xlsx-zip.js.map +1 -0
  198. package/package.json +56 -0
@@ -0,0 +1,198 @@
1
+ import { strFromU8, strToU8, unzipSync, zipSync } from 'fflate';
2
+ import { XMLParser } from 'fast-xml-parser';
3
+ import { escapeXmlAttribute } from './xlsx-export-xml.js';
4
+ import { readXlsxZipEntries } from './xlsx-zip.js';
5
+ const xmlParser = new XMLParser({
6
+ ignoreAttributes: false,
7
+ attributeNamePrefix: '',
8
+ parseAttributeValue: false,
9
+ removeNSPrefix: true,
10
+ });
11
+ const workbookCalcPrTailElements = [
12
+ 'oleSize',
13
+ 'customWorkbookViews',
14
+ 'pivotCaches',
15
+ 'smartTagPr',
16
+ 'smartTagTypes',
17
+ 'webPublishing',
18
+ 'fileRecoveryPr',
19
+ 'webPublishObjects',
20
+ 'extLst',
21
+ ];
22
+ export const precisionAsDisplayedCalculationWarning = 'Precision-as-displayed calculation is not supported during XLSX import.';
23
+ export const manualCalculationModeWarning = 'Manual calculation mode is preserved during XLSX import; cached formula values may be stale.';
24
+ function isRecord(value) {
25
+ return typeof value === 'object' && value !== null;
26
+ }
27
+ function recordChild(value, key) {
28
+ if (!isRecord(value)) {
29
+ return null;
30
+ }
31
+ const child = value[key];
32
+ return isRecord(child) ? child : null;
33
+ }
34
+ function stringValue(value) {
35
+ return typeof value === 'string' && value.trim().length > 0 ? value : null;
36
+ }
37
+ function booleanAttributeValue(value) {
38
+ const raw = stringValue(value);
39
+ if (raw === null) {
40
+ return undefined;
41
+ }
42
+ return raw === '1' || raw.toLowerCase() === 'true';
43
+ }
44
+ function finiteIntegerAttributeValue(value) {
45
+ const raw = stringValue(value);
46
+ if (raw === null) {
47
+ return undefined;
48
+ }
49
+ const number = Number(raw);
50
+ return Number.isSafeInteger(number) ? number : undefined;
51
+ }
52
+ function finiteNumericStringAttributeValue(value) {
53
+ const raw = stringValue(value);
54
+ if (raw === null) {
55
+ return undefined;
56
+ }
57
+ return Number.isFinite(Number(raw)) ? raw : undefined;
58
+ }
59
+ function formatBooleanAttribute(value) {
60
+ return value ? '1' : '0';
61
+ }
62
+ function calcPrAttribute(name, value) {
63
+ return value === undefined ? '' : ` ${name}="${escapeXmlAttribute(value)}"`;
64
+ }
65
+ function hasSemanticCalculationSettings(settings) {
66
+ return (settings.mode === 'manual' ||
67
+ settings.iterate !== undefined ||
68
+ settings.iterateCount !== undefined ||
69
+ settings.iterateDelta !== undefined ||
70
+ settings.fullPrecision === false ||
71
+ settings.fullCalcOnLoad !== undefined ||
72
+ settings.concurrentCalc !== undefined);
73
+ }
74
+ function buildWorkbookCalcPr(settings) {
75
+ if (!hasSemanticCalculationSettings(settings)) {
76
+ return null;
77
+ }
78
+ const attributes = [
79
+ calcPrAttribute('calcMode', settings.mode === 'manual' ? 'manual' : undefined),
80
+ calcPrAttribute('fullPrecision', settings.fullPrecision === false ? '0' : undefined),
81
+ calcPrAttribute('iterate', typeof settings.iterate === 'boolean' ? formatBooleanAttribute(settings.iterate) : undefined),
82
+ calcPrAttribute('iterateCount', Number.isSafeInteger(settings.iterateCount) ? String(settings.iterateCount) : undefined),
83
+ calcPrAttribute('iterateDelta', typeof settings.iterateDelta === 'string' ? settings.iterateDelta : undefined),
84
+ calcPrAttribute('fullCalcOnLoad', typeof settings.fullCalcOnLoad === 'boolean' ? formatBooleanAttribute(settings.fullCalcOnLoad) : undefined),
85
+ calcPrAttribute('concurrentCalc', typeof settings.concurrentCalc === 'boolean' ? formatBooleanAttribute(settings.concurrentCalc) : undefined),
86
+ ].join('');
87
+ return attributes.length > 0 ? `<calcPr${attributes}/>` : null;
88
+ }
89
+ function hasNonDefaultDateSystem(settings) {
90
+ return settings.dateSystem === '1904';
91
+ }
92
+ function normalizeZipPath(path) {
93
+ return path.replace(/^\/+/, '');
94
+ }
95
+ function getZipText(zip, path) {
96
+ const file = zip[normalizeZipPath(path)];
97
+ return file ? strFromU8(file) : null;
98
+ }
99
+ function setZipText(zip, path, text) {
100
+ zip[normalizeZipPath(path)] = strToU8(text);
101
+ }
102
+ function insertWorkbookCalcPr(workbookXml, calcPrXml) {
103
+ if (/<calcPr\b/u.test(workbookXml)) {
104
+ return workbookXml.replace(/<calcPr\b[^>]*(?:\/>|>[\s\S]*?<\/calcPr>)/u, calcPrXml);
105
+ }
106
+ let insertIndex = workbookXml.indexOf('</workbook>');
107
+ for (const elementName of workbookCalcPrTailElements) {
108
+ const elementIndex = workbookXml.search(new RegExp(`<${elementName}\\b`, 'u'));
109
+ if (elementIndex >= 0 && (insertIndex < 0 || elementIndex < insertIndex)) {
110
+ insertIndex = elementIndex;
111
+ }
112
+ }
113
+ if (insertIndex < 0) {
114
+ return workbookXml;
115
+ }
116
+ return `${workbookXml.slice(0, insertIndex)}${calcPrXml}${workbookXml.slice(insertIndex)}`;
117
+ }
118
+ function upsertWorkbookPrDateSystem(workbookXml, dateSystem) {
119
+ if (dateSystem !== '1904') {
120
+ return workbookXml.replace(/<workbookPr\b([^>]*)\sdate1904="(?:1|true)"([^>]*)\/>/iu, '<workbookPr$1$2/>');
121
+ }
122
+ if (/<workbookPr\b/u.test(workbookXml)) {
123
+ return workbookXml.replace(/<workbookPr\b([^>]*)\/>/u, (_match, attributes) => /\sdate1904="/u.test(attributes)
124
+ ? `<workbookPr${attributes.replace(/\sdate1904="[^"]*"/u, ' date1904="1"')}/>`
125
+ : `<workbookPr${attributes} date1904="1"/>`);
126
+ }
127
+ const sheetsIndex = workbookXml.search(/<sheets\b/u);
128
+ if (sheetsIndex < 0) {
129
+ return workbookXml;
130
+ }
131
+ return `${workbookXml.slice(0, sheetsIndex)}<workbookPr date1904="1"/>${workbookXml.slice(sheetsIndex)}`;
132
+ }
133
+ export function addExportCalculationSettingsToXlsxBytes(bytes, snapshot) {
134
+ const settings = snapshot.workbook.metadata?.calculationSettings;
135
+ const calcPrXml = settings ? buildWorkbookCalcPr(settings) : null;
136
+ if (!settings || (!calcPrXml && !hasNonDefaultDateSystem(settings))) {
137
+ return bytes;
138
+ }
139
+ const zip = unzipSync(bytes);
140
+ const workbookXml = getZipText(zip, 'xl/workbook.xml');
141
+ if (!workbookXml) {
142
+ return bytes;
143
+ }
144
+ let nextWorkbookXml = hasNonDefaultDateSystem(settings) ? upsertWorkbookPrDateSystem(workbookXml, settings.dateSystem) : workbookXml;
145
+ if (calcPrXml) {
146
+ nextWorkbookXml = insertWorkbookCalcPr(nextWorkbookXml, calcPrXml);
147
+ }
148
+ setZipText(zip, 'xl/workbook.xml', nextWorkbookXml);
149
+ return zipSync(zip);
150
+ }
151
+ export function readImportedWorkbookCalculationSettings(source) {
152
+ const zip = readXlsxZipEntries(source);
153
+ const workbookXml = getZipText(zip, 'xl/workbook.xml');
154
+ if (!workbookXml) {
155
+ return undefined;
156
+ }
157
+ const parsed = xmlParser.parse(workbookXml);
158
+ const workbook = recordChild(parsed, 'workbook');
159
+ const workbookPr = recordChild(workbook, 'workbookPr');
160
+ const calcPr = recordChild(workbook, 'calcPr');
161
+ const dateSystem = booleanAttributeValue(workbookPr?.['date1904']) === true ? '1904' : undefined;
162
+ if (!calcPr && !dateSystem) {
163
+ return undefined;
164
+ }
165
+ const mode = calcPr?.['calcMode'] === 'manual' ? 'manual' : 'automatic';
166
+ const iterate = booleanAttributeValue(calcPr?.['iterate']);
167
+ const iterateCount = finiteIntegerAttributeValue(calcPr?.['iterateCount']);
168
+ const iterateDelta = finiteNumericStringAttributeValue(calcPr?.['iterateDelta']);
169
+ const fullPrecision = booleanAttributeValue(calcPr?.['fullPrecision']);
170
+ const fullCalcOnLoad = booleanAttributeValue(calcPr?.['fullCalcOnLoad']);
171
+ const concurrentCalc = booleanAttributeValue(calcPr?.['concurrentCalc']);
172
+ const settings = {
173
+ mode,
174
+ compatibilityMode: 'excel-modern',
175
+ ...(dateSystem ? { dateSystem } : {}),
176
+ ...(iterate !== undefined ? { iterate } : {}),
177
+ ...(iterateCount !== undefined ? { iterateCount } : {}),
178
+ ...(iterateDelta !== undefined ? { iterateDelta } : {}),
179
+ ...(fullPrecision === false ? { fullPrecision } : {}),
180
+ ...(fullCalcOnLoad !== undefined ? { fullCalcOnLoad } : {}),
181
+ ...(concurrentCalc !== undefined ? { concurrentCalc } : {}),
182
+ };
183
+ return hasSemanticCalculationSettings(settings) || hasNonDefaultDateSystem(settings) ? settings : undefined;
184
+ }
185
+ export function readImportedWorkbookCalculationWarnings(source, options = {}) {
186
+ const zip = readXlsxZipEntries(source);
187
+ const workbookXml = getZipText(zip, 'xl/workbook.xml');
188
+ if (!workbookXml) {
189
+ return [];
190
+ }
191
+ const parsed = xmlParser.parse(workbookXml);
192
+ const calcPr = recordChild(recordChild(parsed, 'workbook'), 'calcPr');
193
+ return [
194
+ ...(calcPr?.['calcMode'] === 'manual' ? [manualCalculationModeWarning] : []),
195
+ ...(calcPr?.['fullPrecision'] === '0' && options.hasFormulaCells !== false ? [precisionAsDisplayedCalculationWarning] : []),
196
+ ];
197
+ }
198
+ //# sourceMappingURL=xlsx-calculation-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-calculation-settings.js","sourceRoot":"","sources":["../src/xlsx-calculation-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface MissingCellXml {
2
+ readonly address: string;
3
+ readonly xml: string;
4
+ }
5
+ export declare function addMissingCellsToSheetXml(sheetXml: string, cells: readonly MissingCellXml[]): string;
6
+ export declare function addMissingFormattedCells(sheetXml: string, cells: readonly {
7
+ readonly address: string;
8
+ readonly styleIndex: number;
9
+ }[]): string;
10
+ export declare function addMissingBlankCells(sheetXml: string, addresses: readonly string[]): string;
11
+ export {};
@@ -0,0 +1,164 @@
1
+ import * as XLSX from 'xlsx';
2
+ import { escapeXmlAttribute } from './xlsx-export-xml.js';
3
+ const worksheetRowElementPattern = /<row\b[^>]*\/>|<row\b[^>]*>[\s\S]*?<\/row>/gu;
4
+ const worksheetRowOpeningTagPattern = /^<row\b[^>]*(?:\/>|>)/u;
5
+ function rowNumberForAddress(address) {
6
+ return XLSX.utils.decode_cell(address).r + 1;
7
+ }
8
+ function columnIndexForAddress(address) {
9
+ return XLSX.utils.decode_cell(address).c;
10
+ }
11
+ function updateRangeWithAddress(range, address) {
12
+ try {
13
+ const decoded = XLSX.utils.decode_cell(address);
14
+ return range
15
+ ? {
16
+ s: {
17
+ r: Math.min(range.s.r, decoded.r),
18
+ c: Math.min(range.s.c, decoded.c),
19
+ },
20
+ e: {
21
+ r: Math.max(range.e.r, decoded.r),
22
+ c: Math.max(range.e.c, decoded.c),
23
+ },
24
+ }
25
+ : {
26
+ s: { r: decoded.r, c: decoded.c },
27
+ e: { r: decoded.r, c: decoded.c },
28
+ };
29
+ }
30
+ catch {
31
+ return range;
32
+ }
33
+ }
34
+ function existingWorksheetDimensionRange(sheetXml) {
35
+ const ref = /<dimension\b[^>]*\bref="([^"]+)"[^>]*(?:\/>|>[\s\S]*?<\/dimension>)/u.exec(sheetXml)?.[1];
36
+ if (!ref) {
37
+ return null;
38
+ }
39
+ try {
40
+ return XLSX.utils.decode_range(ref);
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
46
+ function setWorksheetDimensionRef(sheetXml, range) {
47
+ const ref = escapeXmlAttribute(XLSX.utils.encode_range(range));
48
+ const dimensionPattern = /<dimension\b[^>]*(?:\/>|>[\s\S]*?<\/dimension>)/u;
49
+ if (dimensionPattern.test(sheetXml)) {
50
+ return sheetXml.replace(dimensionPattern, (dimensionXml) => {
51
+ if (/\bref="[^"]*"/u.test(dimensionXml)) {
52
+ return dimensionXml.replace(/\bref="[^"]*"/u, `ref="${ref}"`);
53
+ }
54
+ return `<dimension ref="${ref}"/>`;
55
+ });
56
+ }
57
+ return sheetXml.replace(/<worksheet\b[^>]*>/u, (openingTag) => `${openingTag}<dimension ref="${ref}"/>`);
58
+ }
59
+ function expandWorksheetDimensionForMissingCells(sheetXml, cells) {
60
+ let range = existingWorksheetDimensionRange(sheetXml);
61
+ const originalRange = range;
62
+ for (const cell of cells) {
63
+ range = updateRangeWithAddress(range, cell.address);
64
+ }
65
+ if (!range || (originalRange && XLSX.utils.encode_range(range) === XLSX.utils.encode_range(originalRange))) {
66
+ return sheetXml;
67
+ }
68
+ return setWorksheetDimensionRef(sheetXml, range);
69
+ }
70
+ function rowCellXml(rowCells) {
71
+ return rowCells
72
+ .toSorted((left, right) => columnIndexForAddress(left.address) - columnIndexForAddress(right.address))
73
+ .map((cell) => cell.xml);
74
+ }
75
+ function buildRowsXml(entries) {
76
+ return entries.map(([rowNumber, rowCells]) => `<row r="${String(rowNumber)}">${rowCellXml(rowCells).join('')}</row>`).join('');
77
+ }
78
+ function rowNumberForRowXml(rowXml) {
79
+ const rowTag = worksheetRowOpeningTagPattern.exec(rowXml)?.[0];
80
+ const rowNumber = rowTag ? Number(/\br="([0-9]+)"/u.exec(rowTag)?.[1] ?? NaN) : NaN;
81
+ return Number.isSafeInteger(rowNumber) && rowNumber > 0 ? rowNumber : null;
82
+ }
83
+ function appendCellsToRowXml(rowXml, cells) {
84
+ const cellsXml = rowCellXml(cells).join('');
85
+ return rowXml.endsWith('/>') ? rowXml.replace(/\/>$/u, `>${cellsXml}</row>`) : rowXml.replace('</row>', `${cellsXml}</row>`);
86
+ }
87
+ function addMissingCellsToSheetDataXml(sheetDataXml, rowEntries) {
88
+ const sheetDataOpeningTag = /^<sheetData\b[^>]*>/u.exec(sheetDataXml)?.[0];
89
+ if (!sheetDataOpeningTag || !sheetDataXml.endsWith('</sheetData>')) {
90
+ return sheetDataXml;
91
+ }
92
+ const bodyStart = sheetDataOpeningTag.length;
93
+ const bodyEnd = sheetDataXml.length - '</sheetData>'.length;
94
+ const sheetDataBody = sheetDataXml.slice(bodyStart, bodyEnd);
95
+ let outputBody = '';
96
+ let lastIndex = 0;
97
+ let missingIndex = 0;
98
+ for (const match of sheetDataBody.matchAll(worksheetRowElementPattern)) {
99
+ const rowXml = match[0];
100
+ const rowNumber = rowNumberForRowXml(rowXml);
101
+ outputBody += sheetDataBody.slice(lastIndex, match.index);
102
+ if (rowNumber === null) {
103
+ outputBody += rowXml;
104
+ lastIndex = match.index + rowXml.length;
105
+ continue;
106
+ }
107
+ while (missingIndex < rowEntries.length && rowEntries[missingIndex][0] < rowNumber) {
108
+ outputBody += buildRowsXml([rowEntries[missingIndex]]);
109
+ missingIndex += 1;
110
+ }
111
+ if (missingIndex < rowEntries.length && rowEntries[missingIndex][0] === rowNumber) {
112
+ outputBody += appendCellsToRowXml(rowXml, rowEntries[missingIndex][1]);
113
+ missingIndex += 1;
114
+ }
115
+ else {
116
+ outputBody += rowXml;
117
+ }
118
+ lastIndex = match.index + rowXml.length;
119
+ }
120
+ outputBody += sheetDataBody.slice(lastIndex);
121
+ while (missingIndex < rowEntries.length) {
122
+ outputBody += buildRowsXml([rowEntries[missingIndex]]);
123
+ missingIndex += 1;
124
+ }
125
+ return `${sheetDataOpeningTag}${outputBody}</sheetData>`;
126
+ }
127
+ export function addMissingCellsToSheetXml(sheetXml, cells) {
128
+ if (cells.length === 0) {
129
+ return sheetXml;
130
+ }
131
+ const byRow = new Map();
132
+ for (const cell of cells) {
133
+ const rowNumber = rowNumberForAddress(cell.address);
134
+ byRow.set(rowNumber, [...(byRow.get(rowNumber) ?? []), cell]);
135
+ }
136
+ const rowEntries = [...byRow.entries()].toSorted(([left], [right]) => left - right);
137
+ const selfClosingSheetData = /<sheetData\b([^>]*)\/>/u;
138
+ if (selfClosingSheetData.test(sheetXml)) {
139
+ const updatedSheetXml = sheetXml.replace(selfClosingSheetData, (_match, attributes) => `<sheetData${attributes}>${buildRowsXml(rowEntries)}</sheetData>`);
140
+ return expandWorksheetDimensionForMissingCells(updatedSheetXml, cells);
141
+ }
142
+ const sheetDataMatch = /<sheetData\b[^>]*>[\s\S]*?<\/sheetData>/u.exec(sheetXml);
143
+ if (sheetDataMatch) {
144
+ const updatedSheetXml = `${sheetXml.slice(0, sheetDataMatch.index)}${addMissingCellsToSheetDataXml(sheetDataMatch[0], rowEntries)}${sheetXml.slice(sheetDataMatch.index + sheetDataMatch[0].length)}`;
145
+ return expandWorksheetDimensionForMissingCells(updatedSheetXml, cells);
146
+ }
147
+ return expandWorksheetDimensionForMissingCells(sheetXml.replace('</worksheet>', `<sheetData>${buildRowsXml(rowEntries)}</sheetData></worksheet>`), cells);
148
+ }
149
+ export function addMissingFormattedCells(sheetXml, cells) {
150
+ return addMissingCellsToSheetXml(sheetXml, cells.map((cell) => {
151
+ const address = escapeXmlAttribute(cell.address);
152
+ return {
153
+ address: cell.address,
154
+ xml: `<c r="${address}" s="${String(cell.styleIndex)}"/>`,
155
+ };
156
+ }));
157
+ }
158
+ export function addMissingBlankCells(sheetXml, addresses) {
159
+ return addMissingCellsToSheetXml(sheetXml, addresses.map((address) => ({
160
+ address,
161
+ xml: `<c r="${escapeXmlAttribute(address)}"/>`,
162
+ })));
163
+ }
164
+ //# sourceMappingURL=xlsx-cell-insertion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-cell-insertion.js","sourceRoot":"","sources":["../src/xlsx-cell-insertion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { WorkbookCellMetadataReferenceSnapshot, WorkbookCellMetadataSnapshot, WorkbookSnapshot } from '@bilig/protocol';
2
+ import { type XlsxZipSource } from './xlsx-zip.js';
3
+ interface ImportedCellMetadataReference {
4
+ readonly address: string;
5
+ readonly cm?: string;
6
+ readonly vm?: string;
7
+ }
8
+ export interface ImportedWorkbookCellMetadata {
9
+ readonly workbookMetadata?: WorkbookCellMetadataSnapshot;
10
+ readonly refsBySheet: ReadonlyMap<string, readonly ImportedCellMetadataReference[]>;
11
+ }
12
+ export declare function readImportedWorkbookCellMetadata(source: XlsxZipSource, sheetNames: readonly string[]): ImportedWorkbookCellMetadata;
13
+ export declare function buildImportedCellMetadataReferenceSnapshots(refs: readonly ImportedCellMetadataReference[] | undefined, cells: readonly WorkbookSnapshot['sheets'][number]['cells'][number][]): WorkbookCellMetadataReferenceSnapshot[] | undefined;
14
+ export declare function addExportCellMetadataToXlsxBytes(bytes: Uint8Array, snapshot: WorkbookSnapshot): Uint8Array;
15
+ export {};