@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,240 @@
1
+ import { unzipSync, zipSync } from 'fflate';
2
+ import { getZipText, normalizeZipPath, readXlsxZipEntries } from './xlsx-zip.js';
3
+ import { buildRelationshipsXml, escapeXml, nextRelationshipId, parseRelationships, resolveTargetPath, setZipText, } from './xlsx-pivot-artifacts.js';
4
+ const binaryChunkSize = 0x8000;
5
+ const workbookPath = 'xl/workbook.xml';
6
+ const workbookRelationshipsPath = 'xl/_rels/workbook.xml.rels';
7
+ const contentTypesPath = '[Content_Types].xml';
8
+ const powerPivotDataRelationshipType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/powerPivotData';
9
+ const customXmlRelationshipType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml';
10
+ const dataModelPackagePartPattern = /^xl\/model\//u;
11
+ const customXmlPackagePartPattern = /^customXml\//u;
12
+ function encodeBinaryString(bytes) {
13
+ let binary = '';
14
+ for (let offset = 0; offset < bytes.length; offset += binaryChunkSize) {
15
+ binary += String.fromCharCode(...bytes.subarray(offset, offset + binaryChunkSize));
16
+ }
17
+ return binary;
18
+ }
19
+ function decodeBinaryString(binary) {
20
+ const bytes = new Uint8Array(binary.length);
21
+ for (let index = 0; index < binary.length; index += 1) {
22
+ bytes[index] = binary.charCodeAt(index);
23
+ }
24
+ return bytes;
25
+ }
26
+ function encodeBase64(bytes) {
27
+ const btoa = globalThis.btoa;
28
+ if (typeof btoa === 'function') {
29
+ return btoa(encodeBinaryString(bytes));
30
+ }
31
+ return Buffer.from(bytes).toString('base64');
32
+ }
33
+ function decodeBase64(dataBase64) {
34
+ const atob = globalThis.atob;
35
+ if (typeof atob === 'function') {
36
+ return decodeBinaryString(atob(dataBase64));
37
+ }
38
+ return new Uint8Array(Buffer.from(dataBase64, 'base64'));
39
+ }
40
+ function encodedPartSnapshot(path, bytes) {
41
+ return {
42
+ path,
43
+ storage: 'base64',
44
+ dataBase64: encodeBase64(bytes),
45
+ byteLength: bytes.byteLength,
46
+ };
47
+ }
48
+ function decodedPartBytes(part) {
49
+ if (part.storage !== 'base64') {
50
+ return undefined;
51
+ }
52
+ const bytes = decodeBase64(part.dataBase64);
53
+ return bytes.byteLength === part.byteLength ? bytes : undefined;
54
+ }
55
+ function readAttribute(xml, attributeName) {
56
+ const match = new RegExp(`\\s${attributeName}=("|')([\\s\\S]*?)\\1`, 'u').exec(xml);
57
+ return match?.[2] ?? null;
58
+ }
59
+ function escapeRegExp(value) {
60
+ return value.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
61
+ }
62
+ function extensionFromPath(path) {
63
+ const fileName = normalizeZipPath(path).slice(normalizeZipPath(path).lastIndexOf('/') + 1);
64
+ const extensionIndex = fileName.lastIndexOf('.');
65
+ return extensionIndex >= 0 && extensionIndex < fileName.length - 1 ? fileName.slice(extensionIndex + 1).toLowerCase() : null;
66
+ }
67
+ function readContentTypeDefaults(contentTypesXml, partPaths) {
68
+ const neededExtensions = new Set(partPaths.map(extensionFromPath).filter((extension) => Boolean(extension)));
69
+ const defaultsByExtension = new Map();
70
+ for (const match of contentTypesXml.matchAll(/<Default\b([^>]*)\/?>/gu)) {
71
+ const attributes = match[1] ?? '';
72
+ const extension = readAttribute(attributes, 'Extension')?.toLowerCase();
73
+ const contentType = readAttribute(attributes, 'ContentType');
74
+ if (!extension || !contentType || !neededExtensions.has(extension)) {
75
+ continue;
76
+ }
77
+ defaultsByExtension.set(extension, { extension, contentType });
78
+ }
79
+ return [...defaultsByExtension.values()].toSorted((left, right) => left.extension.localeCompare(right.extension));
80
+ }
81
+ function readContentTypeOverrides(contentTypesXml, partPaths) {
82
+ const neededPartNames = new Set(partPaths.map((path) => `/${normalizeZipPath(path)}`));
83
+ const overridesByPartName = new Map();
84
+ for (const match of contentTypesXml.matchAll(/<Override\b([^>]*)\/?>/gu)) {
85
+ const attributes = match[1] ?? '';
86
+ const partName = readAttribute(attributes, 'PartName');
87
+ const contentType = readAttribute(attributes, 'ContentType');
88
+ if (!partName || !contentType || !neededPartNames.has(partName)) {
89
+ continue;
90
+ }
91
+ overridesByPartName.set(partName, { partName, contentType });
92
+ }
93
+ return [...overridesByPartName.values()].toSorted((left, right) => left.partName.localeCompare(right.partName));
94
+ }
95
+ function addContentTypeDefault(contentTypesXml, extension, contentType) {
96
+ const pattern = new RegExp(`<Default\\b[^>]*\\bExtension=("|')${escapeRegExp(extension)}\\1`, 'u');
97
+ if (pattern.test(contentTypesXml) || !contentTypesXml.includes('</Types>')) {
98
+ return contentTypesXml;
99
+ }
100
+ return contentTypesXml.replace('</Types>', `<Default Extension="${escapeXml(extension)}" ContentType="${escapeXml(contentType)}"/></Types>`);
101
+ }
102
+ function upsertContentTypeOverride(contentTypesXml, partName, contentType) {
103
+ if (!contentTypesXml.includes('</Types>')) {
104
+ return contentTypesXml;
105
+ }
106
+ const escapedPartName = escapeXml(partName);
107
+ const escapedContentType = escapeXml(contentType);
108
+ const overridePattern = /<Override\b([^>]*)\/?>/gu;
109
+ let replaced = false;
110
+ const nextXml = contentTypesXml.replace(overridePattern, (match, attributes) => {
111
+ if (readAttribute(attributes, 'PartName') !== partName) {
112
+ return match;
113
+ }
114
+ replaced = true;
115
+ return `<Override PartName="${escapedPartName}" ContentType="${escapedContentType}"/>`;
116
+ });
117
+ return replaced
118
+ ? nextXml
119
+ : nextXml.replace('</Types>', `<Override PartName="${escapedPartName}" ContentType="${escapedContentType}"/></Types>`);
120
+ }
121
+ function relationshipSnapshot(relationship) {
122
+ return {
123
+ id: relationship.id,
124
+ type: relationship.type,
125
+ target: relationship.target,
126
+ ...(relationship.targetMode ? { targetMode: relationship.targetMode } : {}),
127
+ };
128
+ }
129
+ function parsedRelationship(relationship) {
130
+ return {
131
+ id: relationship.id,
132
+ type: relationship.type,
133
+ target: relationship.target,
134
+ ...(relationship.targetMode ? { targetMode: relationship.targetMode } : {}),
135
+ };
136
+ }
137
+ function isDataModelRelationship(relationship) {
138
+ return relationship.type === powerPivotDataRelationshipType || relationship.type === customXmlRelationshipType;
139
+ }
140
+ function isDataModelPackagePartPath(path) {
141
+ return dataModelPackagePartPattern.test(path) || customXmlPackagePartPattern.test(path);
142
+ }
143
+ function preservedPartsByPath(parts) {
144
+ const output = new Map();
145
+ for (const part of parts) {
146
+ const bytes = decodedPartBytes(part);
147
+ if (bytes) {
148
+ output.set(normalizeZipPath(part.path), bytes);
149
+ }
150
+ }
151
+ return output;
152
+ }
153
+ function relationshipTargetExists(relationship, partsByPath, zip) {
154
+ const targetPath = normalizeZipPath(resolveTargetPath(workbookPath, relationship.target));
155
+ return partsByPath.has(targetPath) || Boolean(zip[targetPath]);
156
+ }
157
+ function addWorkbookRelationships(relationships, preservedRelationships, partsByPath, zip) {
158
+ let changed = false;
159
+ for (const preservedRelationship of preservedRelationships) {
160
+ if (!relationshipTargetExists(preservedRelationship, partsByPath, zip)) {
161
+ continue;
162
+ }
163
+ const existing = relationships.find((relationship) => relationship.type === preservedRelationship.type && relationship.target === preservedRelationship.target);
164
+ if (existing) {
165
+ continue;
166
+ }
167
+ const idInUse = relationships.some((relationship) => relationship.id === preservedRelationship.id);
168
+ relationships.push({
169
+ ...parsedRelationship(preservedRelationship),
170
+ id: preservedRelationship.id.length > 0 && !idInUse ? preservedRelationship.id : nextRelationshipId(relationships),
171
+ });
172
+ changed = true;
173
+ }
174
+ return changed;
175
+ }
176
+ export function readImportedWorkbookDataModelArtifacts(source) {
177
+ const zip = readXlsxZipEntries(source);
178
+ const partPaths = Object.keys(zip).filter(isDataModelPackagePartPath).toSorted();
179
+ if (partPaths.length === 0) {
180
+ return undefined;
181
+ }
182
+ const relationships = parseRelationships(getZipText(zip, workbookRelationshipsPath)).filter(isDataModelRelationship);
183
+ const contentTypesXml = getZipText(zip, contentTypesPath) ?? '';
184
+ const parts = partPaths.flatMap((path) => {
185
+ const bytes = zip[path];
186
+ return bytes ? [encodedPartSnapshot(path, bytes)] : [];
187
+ });
188
+ return {
189
+ parts,
190
+ workbookRelationships: relationships.map(relationshipSnapshot),
191
+ ...(contentTypesXml
192
+ ? {
193
+ ...(readContentTypeDefaults(contentTypesXml, partPaths).length > 0
194
+ ? { contentTypeDefaults: readContentTypeDefaults(contentTypesXml, partPaths) }
195
+ : {}),
196
+ ...(readContentTypeOverrides(contentTypesXml, partPaths).length > 0
197
+ ? { contentTypeOverrides: readContentTypeOverrides(contentTypesXml, partPaths) }
198
+ : {}),
199
+ }
200
+ : {}),
201
+ };
202
+ }
203
+ export function addExportDataModelArtifactsToXlsxBytes(bytes, snapshot) {
204
+ const artifacts = snapshot.workbook.metadata?.dataModelArtifacts;
205
+ if (!artifacts || artifacts.parts.length === 0) {
206
+ return bytes;
207
+ }
208
+ const zip = unzipSync(bytes);
209
+ const partsByPath = preservedPartsByPath(artifacts.parts);
210
+ if (partsByPath.size === 0) {
211
+ return bytes;
212
+ }
213
+ const copiedPartPaths = new Set();
214
+ for (const [path, partBytes] of partsByPath) {
215
+ zip[path] = partBytes;
216
+ copiedPartPaths.add(path);
217
+ }
218
+ const relationships = parseRelationships(getZipText(zip, workbookRelationshipsPath));
219
+ const relationshipsChanged = addWorkbookRelationships(relationships, artifacts.workbookRelationships, partsByPath, zip);
220
+ if (relationshipsChanged) {
221
+ setZipText(zip, workbookRelationshipsPath, buildRelationshipsXml(relationships));
222
+ }
223
+ let contentTypesXml = getZipText(zip, contentTypesPath) ?? '';
224
+ const copiedExtensions = new Set([...copiedPartPaths].map(extensionFromPath).filter((extension) => Boolean(extension)));
225
+ for (const defaultEntry of artifacts.contentTypeDefaults ?? []) {
226
+ if (copiedExtensions.has(defaultEntry.extension)) {
227
+ contentTypesXml = addContentTypeDefault(contentTypesXml, defaultEntry.extension, defaultEntry.contentType);
228
+ }
229
+ }
230
+ for (const overrideEntry of artifacts.contentTypeOverrides ?? []) {
231
+ if (copiedPartPaths.has(normalizeZipPath(overrideEntry.partName))) {
232
+ contentTypesXml = upsertContentTypeOverride(contentTypesXml, overrideEntry.partName, overrideEntry.contentType);
233
+ }
234
+ }
235
+ if (contentTypesXml.length > 0) {
236
+ setZipText(zip, contentTypesPath, contentTypesXml);
237
+ }
238
+ return zipSync(zip);
239
+ }
240
+ //# sourceMappingURL=xlsx-data-model-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-data-model-artifacts.js","sourceRoot":"","sources":["../src/xlsx-data-model-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAU3C,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,kBAAkB,EAA2C,MAAM,eAAe,CAAA;AACzH,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GAEX,MAAM,2BAA2B,CAAA;AAElC,MAAM,eAAe,GAAG,MAAM,CAAA;AAC9B,MAAM,YAAY,GAAG,iBAAiB,CAAA;AACtC,MAAM,yBAAyB,GAAG,4BAA4B,CAAA;AAC9D,MAAM,gBAAgB,GAAG,qBAAqB,CAAA;AAC9C,MAAM,8BAA8B,GAAG,oFAAoF,CAAA;AAC3H,MAAM,yBAAyB,GAAG,+EAA+E,CAAA;AACjH,MAAM,2BAA2B,GAAG,eAAe,CAAA;AACnD,MAAM,2BAA2B,GAAG,eAAe,CAAA;AAEnD,SAAS,kBAAkB,CAAC,KAAiB;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,eAAe,EAAE,CAAC;QACtE,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,CAAA;IACpF,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IACzC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,YAAY,CAAC,KAAiB;IACrC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IAC5B,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAA;IACxC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC9C,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB;IACtC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IAC5B,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,KAAiB;IAC1D,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,QAAQ;QACjB,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC;QAC/B,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAA0C;IAClE,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC3C,OAAO,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AACjE,CAAC;AAED,SAAS,aAAa,CAAC,GAAW,EAAE,aAAqB;IACvD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,aAAa,uBAAuB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnF,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AAC3B,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAA;AACtD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC1F,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAChD,OAAO,cAAc,IAAI,CAAC,IAAI,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;AAC9H,CAAC;AAED,SAAS,uBAAuB,CAAC,eAAuB,EAAE,SAA4B;IACpF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAuB,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACjI,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAA8C,CAAA;IACjF,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACxE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACjC,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,CAAA;QACvE,MAAM,WAAW,GAAG,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAC5D,IAAI,CAAC,SAAS,IAAI,CAAC,WAAW,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACnE,SAAQ;QACV,CAAC;QACD,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAA;IAChE,CAAC;IACD,OAAO,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA;AACnH,CAAC;AAED,SAAS,wBAAwB,CAAC,eAAuB,EAAE,SAA4B;IACrF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;IACtF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAA+C,CAAA;IAClF,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;QACzE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QACtD,MAAM,WAAW,GAAG,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QAC5D,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,SAAQ;QACV,CAAC;QACD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAA;IAC9D,CAAC;IACD,OAAO,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;AACjH,CAAC;AAED,SAAS,qBAAqB,CAAC,eAAuB,EAAE,SAAiB,EAAE,WAAmB;IAC5F,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,qCAAqC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAClG,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3E,OAAO,eAAe,CAAA;IACxB,CAAC;IACD,OAAO,eAAe,CAAC,OAAO,CAC5B,UAAU,EACV,uBAAuB,SAAS,CAAC,SAAS,CAAC,kBAAkB,SAAS,CAAC,WAAW,CAAC,aAAa,CACjG,CAAA;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,eAAuB,EAAE,QAAgB,EAAE,WAAmB;IAC/F,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,OAAO,eAAe,CAAA;IACxB,CAAC;IACD,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC3C,MAAM,kBAAkB,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;IACjD,MAAM,eAAe,GAAG,0BAA0B,CAAA;IAClD,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,KAAa,EAAE,UAAkB,EAAE,EAAE;QAC7F,IAAI,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,KAAK,CAAA;QACd,CAAC;QACD,QAAQ,GAAG,IAAI,CAAA;QACf,OAAO,uBAAuB,eAAe,kBAAkB,kBAAkB,KAAK,CAAA;IACxF,CAAC,CAAC,CAAA;IACF,OAAO,QAAQ;QACb,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,uBAAuB,eAAe,kBAAkB,kBAAkB,aAAa,CAAC,CAAA;AAC1H,CAAC;AAED,SAAS,oBAAoB,CAAC,YAAgC;IAC5D,OAAO;QACL,EAAE,EAAE,YAAY,CAAC,EAAE;QACnB,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,YAAiD;IAC3E,OAAO;QACL,EAAE,EAAE,YAAY,CAAC,EAAE;QACnB,IAAI,EAAE,YAAY,CAAC,IAAI;QACvB,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,YAAgC;IAC/D,OAAO,YAAY,CAAC,IAAI,KAAK,8BAA8B,IAAI,YAAY,CAAC,IAAI,KAAK,yBAAyB,CAAA;AAChH,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC9C,OAAO,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzF,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAsD;IAClF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAA;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,wBAAwB,CAC/B,YAAiD,EACjD,WAA4C,EAC5C,GAAmB;IAEnB,MAAM,UAAU,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;IACzF,OAAO,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,SAAS,wBAAwB,CAC/B,aAAmC,EACnC,sBAAsE,EACtE,WAA4C,EAC5C,GAAmB;IAEnB,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,KAAK,MAAM,qBAAqB,IAAI,sBAAsB,EAAE,CAAC;QAC3D,IAAI,CAAC,wBAAwB,CAAC,qBAAqB,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;YACvE,SAAQ;QACV,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CACjC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI,IAAI,YAAY,CAAC,MAAM,KAAK,qBAAqB,CAAC,MAAM,CAC3H,CAAA;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,SAAQ;QACV,CAAC;QACD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,qBAAqB,CAAC,EAAE,CAAC,CAAA;QAClG,aAAa,CAAC,IAAI,CAAC;YACjB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC;YAC5C,EAAE,EAAE,qBAAqB,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC;SACnH,CAAC,CAAA;QACF,OAAO,GAAG,IAAI,CAAA;IAChB,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,MAAqB;IAC1E,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,QAAQ,EAAE,CAAA;IAChF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAA;IACpH,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAA;IAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;QACvB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACxD,CAAC,CAAC,CAAA;IACF,OAAO;QACL,KAAK;QACL,qBAAqB,EAAE,aAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC9D,GAAG,CAAC,eAAe;YACjB,CAAC,CAAC;gBACE,GAAG,CAAC,uBAAuB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;oBAChE,CAAC,CAAC,EAAE,mBAAmB,EAAE,uBAAuB,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE;oBAC9E,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,wBAAwB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC;oBACjE,CAAC,CAAC,EAAE,oBAAoB,EAAE,wBAAwB,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE;oBAChF,CAAC,CAAC,EAAE,CAAC;aACR;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAA;AACH,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,KAAiB,EAAE,QAA0B;IAClG,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IAChE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC5B,MAAM,WAAW,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACzD,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAA;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;QACrB,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,EAAE,yBAAyB,CAAC,CAAC,CAAA;IACpF,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,aAAa,EAAE,SAAS,CAAC,qBAAqB,EAAE,WAAW,EAAE,GAAG,CAAC,CAAA;IACvH,IAAI,oBAAoB,EAAE,CAAC;QACzB,UAAU,CAAC,GAAG,EAAE,yBAAyB,EAAE,qBAAqB,CAAC,aAAa,CAAC,CAAC,CAAA;IAClF,CAAC;IAED,IAAI,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAA;IAC7D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,CAAC,GAAG,eAAe,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAuB,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAC3G,CAAA;IACD,KAAK,MAAM,YAAY,IAAI,SAAS,CAAC,mBAAmB,IAAI,EAAE,EAAE,CAAC;QAC/D,IAAI,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YACjD,eAAe,GAAG,qBAAqB,CAAC,eAAe,EAAE,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,CAAA;QAC5G,CAAC;IACH,CAAC;IACD,KAAK,MAAM,aAAa,IAAI,SAAS,CAAC,oBAAoB,IAAI,EAAE,EAAE,CAAC;QACjE,IAAI,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAClE,eAAe,GAAG,yBAAyB,CAAC,eAAe,EAAE,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;QACjH,CAAC;IACH,CAAC;IACD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,UAAU,CAAC,GAAG,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;AACrB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WorkbookSheetDataTableFormulasSnapshot, WorkbookSnapshot } from '@bilig/protocol';
2
+ import { type XlsxZipSource } from './xlsx-zip.js';
3
+ export declare function readImportedWorkbookDataTableFormulas(source: XlsxZipSource, sheetNames: readonly string[]): Map<string, WorkbookSheetDataTableFormulasSnapshot>;
4
+ export declare function addExportDataTableFormulasToXlsxBytes(bytes: Uint8Array, snapshot: WorkbookSnapshot): Uint8Array;
@@ -0,0 +1,138 @@
1
+ import { unzipSync, zipSync } from 'fflate';
2
+ import * as XLSX from 'xlsx';
3
+ import { getZipText, normalizeZipPath, readXlsxZipEntries } from './xlsx-zip.js';
4
+ import { escapeXml, setZipText } from './xlsx-pivot-artifacts.js';
5
+ const cellElementPattern = /<c\b(?<attributes>[^>]*)>(?<body>[\s\S]*?)<\/c>/gu;
6
+ const formulaElementPattern = /<f\b[^>]*(?:\/>|>[\s\S]*?<\/f>)/u;
7
+ const formulaElementGlobalPattern = /<f\b[^>]*\/>|<f\b[^>]*>[\s\S]*?<\/f>/gu;
8
+ function readAttribute(xml, attributeName) {
9
+ const match = new RegExp(`\\b${attributeName}=("|')([\\s\\S]*?)\\1`, 'u').exec(xml);
10
+ return match?.[2] ?? null;
11
+ }
12
+ function escapeRegExp(value) {
13
+ return value.replace(/[.*+?^${}()|[\]\\]/gu, '\\$&');
14
+ }
15
+ function cellColumnIndex(address) {
16
+ try {
17
+ return XLSX.utils.decode_cell(address).c;
18
+ }
19
+ catch {
20
+ return Number.MAX_SAFE_INTEGER;
21
+ }
22
+ }
23
+ function cellRowNumber(address) {
24
+ const match = /^[A-Z]+([1-9][0-9]*)$/u.exec(address);
25
+ return match ? Number(match[1]) : null;
26
+ }
27
+ function readDataTableFormulaSnapshots(sheetXml) {
28
+ if (!sheetXml) {
29
+ return [];
30
+ }
31
+ if (!sheetXml.includes('t="dataTable"') && !sheetXml.includes("t='dataTable'")) {
32
+ return [];
33
+ }
34
+ const formulas = [];
35
+ cellElementPattern.lastIndex = 0;
36
+ for (const match of sheetXml.matchAll(cellElementPattern)) {
37
+ const attributes = match.groups?.['attributes'] ?? '';
38
+ const body = match.groups?.['body'] ?? '';
39
+ const address = readAttribute(attributes, 'r');
40
+ formulaElementGlobalPattern.lastIndex = 0;
41
+ const formulaXml = [...body.matchAll(formulaElementGlobalPattern)].find((formulaMatch) => {
42
+ return readAttribute(formulaMatch[0], 't') === 'dataTable';
43
+ })?.[0];
44
+ if (address && formulaXml) {
45
+ formulas.push({ address, formulaXml });
46
+ }
47
+ }
48
+ return formulas;
49
+ }
50
+ function insertFormulaIntoCellBody(body, formulaXml) {
51
+ if (formulaElementPattern.test(body)) {
52
+ return body.replace(formulaElementPattern, formulaXml);
53
+ }
54
+ const valueIndex = body.search(/<(?:v|is|extLst)\b/u);
55
+ return valueIndex >= 0 ? `${body.slice(0, valueIndex)}${formulaXml}${body.slice(valueIndex)}` : `${formulaXml}${body}`;
56
+ }
57
+ function upsertFormulaInExistingCell(sheetXml, formula) {
58
+ const addressPattern = escapeRegExp(formula.address);
59
+ const cellPattern = new RegExp(`<c\\b(?<attributes>[^>]*\\br=(["'])${addressPattern}\\2[^>]*)>(?<body>[\\s\\S]*?)<\\/c>`, 'u');
60
+ if (!cellPattern.test(sheetXml)) {
61
+ return null;
62
+ }
63
+ return sheetXml.replace(cellPattern, (_cellXml, attributes, _quote, body) => {
64
+ return `<c${attributes}>${insertFormulaIntoCellBody(body, formula.formulaXml)}</c>`;
65
+ });
66
+ }
67
+ function insertFormulaCellIntoRow(sheetXml, formula) {
68
+ const rowNumber = cellRowNumber(formula.address);
69
+ if (rowNumber === null) {
70
+ return null;
71
+ }
72
+ const rowPattern = new RegExp(`<row\\b(?<attributes>[^>]*\\br=(["'])${String(rowNumber)}\\2[^>]*)>(?<body>[\\s\\S]*?)<\\/row>`, 'u');
73
+ if (!rowPattern.test(sheetXml)) {
74
+ return null;
75
+ }
76
+ const nextCellXml = `<c r="${escapeXml(formula.address)}">${formula.formulaXml}</c>`;
77
+ return sheetXml.replace(rowPattern, (_rowXml, attributes, _quote, body) => {
78
+ const targetColumn = cellColumnIndex(formula.address);
79
+ let insertIndex = body.length;
80
+ for (const match of body.matchAll(/<c\b(?<attributes>[^>]*)>(?:[\s\S]*?)<\/c>/gu)) {
81
+ const address = readAttribute(match.groups?.['attributes'] ?? '', 'r');
82
+ if (address && cellColumnIndex(address) > targetColumn) {
83
+ insertIndex = match.index;
84
+ break;
85
+ }
86
+ }
87
+ return `<row${attributes}>${body.slice(0, insertIndex)}${nextCellXml}${body.slice(insertIndex)}</row>`;
88
+ });
89
+ }
90
+ function insertFormulaCellIntoSheetData(sheetXml, formula) {
91
+ const rowNumber = cellRowNumber(formula.address) ?? 1;
92
+ const rowXml = `<row r="${String(rowNumber)}"><c r="${escapeXml(formula.address)}">${formula.formulaXml}</c></row>`;
93
+ return sheetXml.includes('</sheetData>') ? sheetXml.replace('</sheetData>', `${rowXml}</sheetData>`) : sheetXml;
94
+ }
95
+ function upsertDataTableFormula(sheetXml, formula) {
96
+ return (upsertFormulaInExistingCell(sheetXml, formula) ??
97
+ insertFormulaCellIntoRow(sheetXml, formula) ??
98
+ insertFormulaCellIntoSheetData(sheetXml, formula));
99
+ }
100
+ export function readImportedWorkbookDataTableFormulas(source, sheetNames) {
101
+ const zip = readXlsxZipEntries(source);
102
+ const formulasBySheet = new Map();
103
+ sheetNames.forEach((sheetName, sheetIndex) => {
104
+ const formulas = readDataTableFormulaSnapshots(getZipText(zip, `xl/worksheets/sheet${String(sheetIndex + 1)}.xml`));
105
+ if (formulas.length > 0) {
106
+ formulasBySheet.set(sheetName, { formulas });
107
+ }
108
+ });
109
+ return formulasBySheet;
110
+ }
111
+ export function addExportDataTableFormulasToXlsxBytes(bytes, snapshot) {
112
+ const sheetsWithDataTableFormulas = snapshot.sheets.filter((sheet) => (sheet.metadata?.dataTableFormulas?.formulas.length ?? 0) > 0);
113
+ if (sheetsWithDataTableFormulas.length === 0) {
114
+ return bytes;
115
+ }
116
+ const zip = unzipSync(bytes);
117
+ let changed = false;
118
+ snapshot.sheets
119
+ .toSorted((left, right) => left.order - right.order)
120
+ .forEach((sheet, sheetIndex) => {
121
+ const dataTableFormulas = sheet.metadata?.dataTableFormulas?.formulas;
122
+ if (!dataTableFormulas || dataTableFormulas.length === 0) {
123
+ return;
124
+ }
125
+ const sheetPath = normalizeZipPath(`xl/worksheets/sheet${String(sheetIndex + 1)}.xml`);
126
+ const sheetXml = getZipText(zip, sheetPath);
127
+ if (!sheetXml) {
128
+ return;
129
+ }
130
+ const nextSheetXml = dataTableFormulas.reduce(upsertDataTableFormula, sheetXml);
131
+ if (nextSheetXml !== sheetXml) {
132
+ setZipText(zip, sheetPath, nextSheetXml);
133
+ changed = true;
134
+ }
135
+ });
136
+ return changed ? zipSync(zip) : bytes;
137
+ }
138
+ //# sourceMappingURL=xlsx-data-table-formulas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-data-table-formulas.js","sourceRoot":"","sources":["../src/xlsx-data-table-formulas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import * as XLSX from 'xlsx';
2
+ import type { WorkbookDefinedNameSnapshot } from '@bilig/protocol';
3
+ export declare function readImportedDefinedNames(workbook: XLSX.WorkBook): {
4
+ definedNames: WorkbookDefinedNameSnapshot[] | undefined;
5
+ ignoredCount: number;
6
+ };
7
+ export declare function buildExportDefinedNames(definedNames: readonly WorkbookDefinedNameSnapshot[] | undefined, exportSheetNamesByOriginalName: ReadonlyMap<string, string>, exportSheetIndexesByOriginalName: ReadonlyMap<string, number>): XLSX.DefinedName[] | undefined;