@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,147 @@
1
+ import { strFromU8, strToU8, unzipSync, zipSync } from 'fflate';
2
+ import { escapeXmlAttribute } from './xlsx-export-xml.js';
3
+ import { readXlsxZipEntries } from './xlsx-zip.js';
4
+ const workbookProtectionTailElements = [
5
+ 'bookViews',
6
+ 'sheets',
7
+ 'functionGroups',
8
+ 'externalReferences',
9
+ 'definedNames',
10
+ 'calcPr',
11
+ 'oleSize',
12
+ 'customWorkbookViews',
13
+ 'pivotCaches',
14
+ 'smartTagPr',
15
+ 'smartTagTypes',
16
+ 'webPublishing',
17
+ 'fileRecoveryPr',
18
+ 'webPublishObjects',
19
+ 'extLst',
20
+ ];
21
+ const workbookProtectionBooleanAttributes = ['lockStructure', 'lockWindows', 'lockRevision'];
22
+ const xmlNamePattern = /^[A-Za-z_:][\w:.-]*$/u;
23
+ const xmlNamedEntities = {
24
+ amp: '&',
25
+ apos: "'",
26
+ gt: '>',
27
+ lt: '<',
28
+ quot: '"',
29
+ };
30
+ function normalizeZipPath(path) {
31
+ return path.replace(/^\/+/, '');
32
+ }
33
+ function getZipText(zip, path) {
34
+ const file = zip[normalizeZipPath(path)];
35
+ return file ? strFromU8(file) : null;
36
+ }
37
+ function setZipText(zip, path, text) {
38
+ zip[normalizeZipPath(path)] = strToU8(text);
39
+ }
40
+ function unescapeXmlAttribute(value) {
41
+ return value.replace(/&#x([0-9a-fA-F]+);|&#([0-9]+);|&(quot|apos|lt|gt|amp);/gu, (match, hex, decimal, named) => {
42
+ if (hex || decimal) {
43
+ const codePoint = Number.parseInt(hex ?? decimal ?? '', hex ? 16 : 10);
44
+ return Number.isSafeInteger(codePoint) && codePoint >= 0 && codePoint <= 0x10ffff ? String.fromCodePoint(codePoint) : match;
45
+ }
46
+ return named ? (xmlNamedEntities[named] ?? match) : match;
47
+ });
48
+ }
49
+ function readWorkbookProtectionXmlAttributes(workbookXml) {
50
+ const match = /<workbookProtection\b[^>]*(?:\/>|>[\s\S]*?<\/workbookProtection>)/u.exec(workbookXml);
51
+ if (!match) {
52
+ return undefined;
53
+ }
54
+ const attributes = [...match[0].matchAll(/\s([A-Za-z_:][\w:.-]*)=(?:"([^"]*)"|'([^']*)')/gu)].map((attributeMatch) => ({
55
+ name: attributeMatch[1] ?? '',
56
+ value: unescapeXmlAttribute(attributeMatch[2] ?? attributeMatch[3] ?? ''),
57
+ }));
58
+ return attributes.length > 0 ? attributes : undefined;
59
+ }
60
+ function booleanAttributeValue(value) {
61
+ const normalized = value?.toLowerCase();
62
+ if (normalized === '1' || normalized === 'true') {
63
+ return true;
64
+ }
65
+ if (normalized === '0' || normalized === 'false') {
66
+ return false;
67
+ }
68
+ return undefined;
69
+ }
70
+ function xmlAttributesByName(attributes) {
71
+ return new Map(attributes.map((attribute) => [attribute.name, attribute.value]));
72
+ }
73
+ function setAttribute(attributes, name, value) {
74
+ if (!xmlNamePattern.test(name)) {
75
+ return;
76
+ }
77
+ attributes.set(name, value);
78
+ }
79
+ function buildWorkbookProtectionXml(protection) {
80
+ const attributes = new Map();
81
+ for (const attribute of protection.xmlAttributes ?? []) {
82
+ setAttribute(attributes, attribute.name, attribute.value);
83
+ }
84
+ for (const name of workbookProtectionBooleanAttributes) {
85
+ const value = protection[name];
86
+ if (typeof value === 'boolean' && !attributes.has(name)) {
87
+ attributes.set(name, value ? '1' : '0');
88
+ }
89
+ }
90
+ if (attributes.size === 0) {
91
+ return null;
92
+ }
93
+ return `<workbookProtection${[...attributes.entries()].map(([name, value]) => ` ${name}="${escapeXmlAttribute(value)}"`).join('')}/>`;
94
+ }
95
+ function insertWorkbookProtection(workbookXml, workbookProtectionXml) {
96
+ if (/<workbookProtection\b/u.test(workbookXml)) {
97
+ return workbookXml.replace(/<workbookProtection\b[^>]*(?:\/>|>[\s\S]*?<\/workbookProtection>)/u, workbookProtectionXml);
98
+ }
99
+ let insertIndex = workbookXml.indexOf('</workbook>');
100
+ for (const elementName of workbookProtectionTailElements) {
101
+ const elementIndex = workbookXml.search(new RegExp(`<${elementName}\\b`, 'u'));
102
+ if (elementIndex >= 0 && (insertIndex < 0 || elementIndex < insertIndex)) {
103
+ insertIndex = elementIndex;
104
+ }
105
+ }
106
+ if (insertIndex < 0) {
107
+ return workbookXml;
108
+ }
109
+ return `${workbookXml.slice(0, insertIndex)}${workbookProtectionXml}${workbookXml.slice(insertIndex)}`;
110
+ }
111
+ export function addExportWorkbookProtectionToXlsxBytes(bytes, snapshot) {
112
+ const protection = snapshot.workbook.metadata?.workbookProtection;
113
+ const workbookProtectionXml = protection ? buildWorkbookProtectionXml(protection) : null;
114
+ if (!workbookProtectionXml) {
115
+ return bytes;
116
+ }
117
+ const zip = unzipSync(bytes);
118
+ const workbookXml = getZipText(zip, 'xl/workbook.xml');
119
+ if (!workbookXml) {
120
+ return bytes;
121
+ }
122
+ setZipText(zip, 'xl/workbook.xml', insertWorkbookProtection(workbookXml, workbookProtectionXml));
123
+ return zipSync(zip);
124
+ }
125
+ export function readImportedWorkbookProtection(source) {
126
+ const zip = readXlsxZipEntries(source);
127
+ const workbookXml = getZipText(zip, 'xl/workbook.xml');
128
+ if (!workbookXml || !/<workbookProtection\b/u.test(workbookXml)) {
129
+ return undefined;
130
+ }
131
+ const xmlAttributes = readWorkbookProtectionXmlAttributes(workbookXml);
132
+ if (!xmlAttributes) {
133
+ return undefined;
134
+ }
135
+ const attributesByName = xmlAttributesByName(xmlAttributes);
136
+ const lockStructure = booleanAttributeValue(attributesByName.get('lockStructure'));
137
+ const lockWindows = booleanAttributeValue(attributesByName.get('lockWindows'));
138
+ const lockRevision = booleanAttributeValue(attributesByName.get('lockRevision'));
139
+ const protection = {
140
+ ...(lockStructure !== undefined ? { lockStructure } : {}),
141
+ ...(lockWindows !== undefined ? { lockWindows } : {}),
142
+ ...(lockRevision !== undefined ? { lockRevision } : {}),
143
+ xmlAttributes,
144
+ };
145
+ return protection;
146
+ }
147
+ //# sourceMappingURL=xlsx-workbook-protection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-workbook-protection.js","sourceRoot":"","sources":["../src/xlsx-workbook-protection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AAG/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAsB,MAAM,eAAe,CAAA;AAItE,MAAM,8BAA8B,GAAG;IACrC,WAAW;IACX,QAAQ;IACR,gBAAgB;IAChB,oBAAoB;IACpB,cAAc;IACd,QAAQ;IACR,SAAS;IACT,qBAAqB;IACrB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,mBAAmB;IACnB,QAAQ;CACA,CAAA;AAEV,MAAM,mCAAmC,GAAG,CAAC,eAAe,EAAE,aAAa,EAAE,cAAc,CAAU,CAAA;AACrG,MAAM,cAAc,GAAG,uBAAuB,CAAA;AAC9C,MAAM,gBAAgB,GAAqC;IACzD,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,IAAI,EAAE,GAAG;CACV,CAAA;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,GAAe,EAAE,IAAY;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAA;IACxC,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,GAAe,EAAE,IAAY,EAAE,IAAY;IAC7D,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,OAAO,CAClB,0DAA0D,EAC1D,CAAC,KAAK,EAAE,GAAuB,EAAE,OAA2B,EAAE,KAAyB,EAAE,EAAE;QACzF,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;YACtE,OAAO,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAC7H,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC3D,CAAC,CACF,CAAA;AACH,CAAC;AAED,SAAS,mCAAmC,CAAC,WAAmB;IAC9D,MAAM,KAAK,GAAG,oEAAoE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACpG,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kDAAkD,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACrH,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE;QAC7B,KAAK,EAAE,oBAAoB,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KAC1E,CAAC,CAAC,CAAA;IACH,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;AACvD,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAyB;IACtD,MAAM,UAAU,GAAG,KAAK,EAAE,WAAW,EAAE,CAAA;IACvC,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAChD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QACjD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAuF;IAClH,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClF,CAAC;AAED,SAAS,YAAY,CAAC,UAA+B,EAAE,IAAY,EAAE,KAAa;IAChF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAM;IACR,CAAC;IACD,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,0BAA0B,CAAC,UAAsC;IACxE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC5C,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QACvD,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;IAC3D,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,mCAAmC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,sBAAsB,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,KAAK,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAA;AACvI,CAAC;AAED,SAAS,wBAAwB,CAAC,WAAmB,EAAE,qBAA6B;IAClF,IAAI,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,OAAO,WAAW,CAAC,OAAO,CAAC,oEAAoE,EAAE,qBAAqB,CAAC,CAAA;IACzH,CAAC;IAED,IAAI,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IACpD,KAAK,MAAM,WAAW,IAAI,8BAA8B,EAAE,CAAC;QACzD,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,WAAW,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QAC9E,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,YAAY,GAAG,WAAW,CAAC,EAAE,CAAC;YACzE,WAAW,GAAG,YAAY,CAAA;QAC5B,CAAC;IACH,CAAC;IACD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,qBAAqB,GAAG,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAA;AACxG,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,KAAiB,EAAE,QAA0B;IAClG,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACjE,MAAM,qBAAqB,GAAG,UAAU,CAAC,CAAC,CAAC,0BAA0B,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACxF,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC5B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;IACtD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,UAAU,CAAC,GAAG,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAA;IAChG,OAAO,OAAO,CAAC,GAAG,CAAC,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,MAAqB;IAClE,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACtC,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;IACtD,IAAI,CAAC,WAAW,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,mCAAmC,CAAC,WAAW,CAAC,CAAA;IACtE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC3D,MAAM,aAAa,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAA;IAClF,MAAM,WAAW,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAA;IAC9E,MAAM,YAAY,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAA;IAChF,MAAM,UAAU,GAA+B;QAC7C,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,aAAa;KACd,CAAA;IACD,OAAO,UAAU,CAAA;AACnB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type * as XLSX from 'xlsx';
2
+ export declare function workbookDirectorySheetPaths(workbook: XLSX.WorkBook): string[];
3
+ export declare function workbookSheetPathsByName(workbook: XLSX.WorkBook): Map<string, string>;
4
+ export declare function workbookSheetPath(pathsByName: ReadonlyMap<string, string>, fallbackPaths: readonly string[], sheetName: string, sheetIndex: number): string | undefined;
@@ -0,0 +1,96 @@
1
+ import { XMLParser } from 'fast-xml-parser';
2
+ import { parseRelationships, resolveTargetPath } from './xlsx-pivot-artifacts.js';
3
+ import { normalizeZipPath } from './xlsx-zip.js';
4
+ const xmlParser = new XMLParser({
5
+ ignoreAttributes: false,
6
+ attributeNamePrefix: '',
7
+ parseAttributeValue: false,
8
+ trimValues: false,
9
+ removeNSPrefix: true,
10
+ });
11
+ const workbookPath = 'xl/workbook.xml';
12
+ const workbookRelationshipsPath = 'xl/_rels/workbook.xml.rels';
13
+ const worksheetRelationshipType = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet';
14
+ function isRecord(value) {
15
+ return typeof value === 'object' && value !== null;
16
+ }
17
+ function asArray(value) {
18
+ if (value === undefined || value === null) {
19
+ return [];
20
+ }
21
+ return Array.isArray(value) ? value : [value];
22
+ }
23
+ function recordChild(value, key) {
24
+ if (!isRecord(value)) {
25
+ return null;
26
+ }
27
+ const child = value[key];
28
+ return isRecord(child) ? child : null;
29
+ }
30
+ function workbookRecord(workbook) {
31
+ const value = workbook;
32
+ return isRecord(value) ? value : null;
33
+ }
34
+ function workbookFiles(workbook) {
35
+ return workbookRecord(workbook)?.['files'];
36
+ }
37
+ function getFileText(files, path) {
38
+ if (!isRecord(files)) {
39
+ return null;
40
+ }
41
+ const file = files[normalizeZipPath(path)];
42
+ if (!isRecord(file)) {
43
+ return null;
44
+ }
45
+ const content = file['content'];
46
+ if (typeof content === 'string') {
47
+ return content;
48
+ }
49
+ if (content instanceof ArrayBuffer) {
50
+ return new TextDecoder().decode(content);
51
+ }
52
+ if (ArrayBuffer.isView(content)) {
53
+ return new TextDecoder().decode(content);
54
+ }
55
+ return null;
56
+ }
57
+ function readWorkbookSheetEntries(workbookXml) {
58
+ if (!workbookXml) {
59
+ return [];
60
+ }
61
+ const parsed = xmlParser.parse(workbookXml);
62
+ const workbook = recordChild(parsed, 'workbook');
63
+ const sheets = recordChild(workbook, 'sheets');
64
+ return asArray(sheets?.['sheet']).flatMap((entry) => {
65
+ if (!isRecord(entry) || typeof entry['name'] !== 'string' || typeof entry['id'] !== 'string') {
66
+ return [];
67
+ }
68
+ return [{ name: entry['name'], relationshipId: entry['id'] }];
69
+ });
70
+ }
71
+ export function workbookDirectorySheetPaths(workbook) {
72
+ const directory = workbookRecord(workbook)?.['Directory'];
73
+ if (!isRecord(directory)) {
74
+ return [];
75
+ }
76
+ return asArray(directory['sheets']).flatMap((entry) => (typeof entry === 'string' ? [entry] : []));
77
+ }
78
+ export function workbookSheetPathsByName(workbook) {
79
+ const files = workbookFiles(workbook);
80
+ const workbookRelationships = parseRelationships(getFileText(files, workbookRelationshipsPath));
81
+ const worksheetRelationshipsById = new Map(workbookRelationships
82
+ .filter((relationship) => relationship.type === worksheetRelationshipType || relationship.target.includes('worksheets/'))
83
+ .map((relationship) => [relationship.id, normalizeZipPath(resolveTargetPath(workbookPath, relationship.target))]));
84
+ const output = new Map();
85
+ for (const entry of readWorkbookSheetEntries(getFileText(files, workbookPath))) {
86
+ const worksheetPath = worksheetRelationshipsById.get(entry.relationshipId);
87
+ if (worksheetPath) {
88
+ output.set(entry.name, worksheetPath);
89
+ }
90
+ }
91
+ return output;
92
+ }
93
+ export function workbookSheetPath(pathsByName, fallbackPaths, sheetName, sheetIndex) {
94
+ return pathsByName.get(sheetName) ?? fallbackPaths[sheetIndex];
95
+ }
96
+ //# sourceMappingURL=xlsx-workbook-sheet-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-workbook-sheet-paths.js","sourceRoot":"","sources":["../src/xlsx-workbook-sheet-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import * as XLSX from 'xlsx';
2
+ export interface WorksheetCellEntry {
3
+ address: string;
4
+ cell: Record<string, unknown>;
5
+ row: number;
6
+ column: number;
7
+ }
8
+ export interface WorksheetCellRecord {
9
+ address: string;
10
+ cell: Record<string, unknown>;
11
+ }
12
+ export declare function isWorksheetCellAddress(value: string): boolean;
13
+ export declare function worksheetCellAt(sheet: XLSX.WorkSheet, row: number, column: number): Record<string, unknown> | null;
14
+ export declare function worksheetCellRecords(sheet: XLSX.WorkSheet): Generator<WorksheetCellRecord>;
15
+ export declare function worksheetCellEntries(sheet: XLSX.WorkSheet): Generator<WorksheetCellEntry>;
16
+ export declare function worksheetCellEntriesAtAddresses(sheet: XLSX.WorkSheet, addresses: Iterable<string>): Generator<WorksheetCellEntry>;
@@ -0,0 +1,104 @@
1
+ import * as XLSX from 'xlsx';
2
+ function isRecord(value) {
3
+ return typeof value === 'object' && value !== null;
4
+ }
5
+ export function isWorksheetCellAddress(value) {
6
+ return /^[A-Z]{1,3}[1-9][0-9]*$/u.test(value);
7
+ }
8
+ function denseWorksheetRows(sheet) {
9
+ const denseRows = sheet['!data'];
10
+ return Array.isArray(denseRows) ? denseRows : null;
11
+ }
12
+ function denseWorksheetCell(row, column) {
13
+ if (!Array.isArray(row)) {
14
+ return null;
15
+ }
16
+ const cell = row[column];
17
+ return isRecord(cell) ? cell : null;
18
+ }
19
+ export function worksheetCellAt(sheet, row, column) {
20
+ const denseRows = denseWorksheetRows(sheet);
21
+ if (denseRows) {
22
+ return denseWorksheetCell(denseRows[row], column);
23
+ }
24
+ const value = sheet[XLSX.utils.encode_cell({ r: row, c: column })];
25
+ return isRecord(value) ? value : null;
26
+ }
27
+ export function* worksheetCellRecords(sheet) {
28
+ const denseRows = denseWorksheetRows(sheet);
29
+ if (denseRows) {
30
+ for (const [rowIndex, row] of denseRows.entries()) {
31
+ if (!Array.isArray(row)) {
32
+ continue;
33
+ }
34
+ for (const [columnIndex, cell] of row.entries()) {
35
+ if (!isRecord(cell)) {
36
+ continue;
37
+ }
38
+ yield {
39
+ address: XLSX.utils.encode_cell({ r: rowIndex, c: columnIndex }),
40
+ cell,
41
+ };
42
+ }
43
+ }
44
+ return;
45
+ }
46
+ for (const address in sheet) {
47
+ const value = sheet[address];
48
+ if (!isWorksheetCellAddress(address) || !isRecord(value)) {
49
+ continue;
50
+ }
51
+ yield { address, cell: value };
52
+ }
53
+ }
54
+ export function* worksheetCellEntries(sheet) {
55
+ const denseRows = denseWorksheetRows(sheet);
56
+ if (denseRows) {
57
+ for (const [rowIndex, row] of denseRows.entries()) {
58
+ if (!Array.isArray(row)) {
59
+ continue;
60
+ }
61
+ for (const [columnIndex, cell] of row.entries()) {
62
+ if (!isRecord(cell)) {
63
+ continue;
64
+ }
65
+ yield {
66
+ address: XLSX.utils.encode_cell({ r: rowIndex, c: columnIndex }),
67
+ cell,
68
+ row: rowIndex,
69
+ column: columnIndex,
70
+ };
71
+ }
72
+ }
73
+ return;
74
+ }
75
+ for (const address in sheet) {
76
+ const value = sheet[address];
77
+ if (!isWorksheetCellAddress(address) || !isRecord(value)) {
78
+ continue;
79
+ }
80
+ const decoded = XLSX.utils.decode_cell(address);
81
+ yield {
82
+ address,
83
+ cell: value,
84
+ row: decoded.r,
85
+ column: decoded.c,
86
+ };
87
+ }
88
+ }
89
+ export function* worksheetCellEntriesAtAddresses(sheet, addresses) {
90
+ for (const address of addresses) {
91
+ const decoded = XLSX.utils.decode_cell(address);
92
+ const cell = worksheetCellAt(sheet, decoded.r, decoded.c);
93
+ if (!cell) {
94
+ continue;
95
+ }
96
+ yield {
97
+ address,
98
+ cell,
99
+ row: decoded.r,
100
+ column: decoded.c,
101
+ };
102
+ }
103
+ }
104
+ //# sourceMappingURL=xlsx-worksheet-cells.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-worksheet-cells.js","sourceRoot":"","sources":["../src/xlsx-worksheet-cells.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAc5B,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC/C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAqB;IAC/C,MAAM,SAAS,GAAI,KAAiC,CAAC,OAAO,CAAC,CAAA;IAC7D,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AACpD,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAY,EAAE,MAAc;IACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAA;IACxB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAqB,EAAE,GAAW,EAAE,MAAc;IAChF,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC3C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAA;IACnD,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IAClE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AACvC,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,oBAAoB,CAAC,KAAqB;IACzD,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC3C,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAQ;YACV,CAAC;YACD,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpB,SAAQ;gBACV,CAAC;gBACD,MAAM;oBACJ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;oBAChE,IAAI;iBACL,CAAA;YACH,CAAC;QACH,CAAC;QACD,OAAM;IACR,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAY,KAAK,CAAC,OAAO,CAAC,CAAA;QACrC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,SAAQ;QACV,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;AACH,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,oBAAoB,CAAC,KAAqB;IACzD,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IAC3C,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,SAAQ;YACV,CAAC;YACD,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpB,SAAQ;gBACV,CAAC;gBACD,MAAM;oBACJ,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;oBAChE,IAAI;oBACJ,GAAG,EAAE,QAAQ;oBACb,MAAM,EAAE,WAAW;iBACpB,CAAA;YACH,CAAC;QACH,CAAC;QACD,OAAM;IACR,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAY,KAAK,CAAC,OAAO,CAAC,CAAA;QACrC,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,SAAQ;QACV,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC/C,MAAM;YACJ,OAAO;YACP,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,OAAO,CAAC,CAAC;YACd,MAAM,EAAE,OAAO,CAAC,CAAC;SAClB,CAAA;IACH,CAAC;AACH,CAAC;AAED,MAAM,SAAS,CAAC,CAAC,+BAA+B,CAAC,KAAqB,EAAE,SAA2B;IACjG,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;QACzD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAQ;QACV,CAAC;QACD,MAAM;YACJ,OAAO;YACP,IAAI;YACJ,GAAG,EAAE,OAAO,CAAC,CAAC;YACd,MAAM,EAAE,OAAO,CAAC,CAAC;SAClB,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type XlsxZipSource } from './xlsx-zip.js';
2
+ export declare function readImportedWorksheetTextValues(source: XlsxZipSource, sheetNames: readonly string[], sheetPathsByName: ReadonlyMap<string, string>, fallbackSheetPaths: readonly string[]): Map<string, Map<string, string>>;
@@ -0,0 +1,136 @@
1
+ import * as XLSX from 'xlsx';
2
+ import { toLiteralInput } from './workbook-import-helpers.js';
3
+ import { decodeExcelEscapedText } from './xlsx-escaped-text.js';
4
+ import { getZipText, readXlsxZipEntries } from './xlsx-zip.js';
5
+ const cellElementPattern = /<(?:[A-Za-z_][\w.-]*:)?c\b(?:[^>"']|"[^"]*"|'[^']*')*\/>|<((?:[A-Za-z_][\w.-]*:)?c)\b(?:[^>"']|"[^"]*"|'[^']*')*>[\s\S]*?<\/\1>/gu;
6
+ const cellOpeningTagPattern = /<(?:[A-Za-z_][\w.-]*:)?c\b(?:[^>"']|"[^"]*"|'[^']*')*(?:\/>|>)/u;
7
+ const sharedStringElementPattern = /<(?:[A-Za-z_][\w.-]*:)?si\b(?:[^>"']|"[^"]*"|'[^']*')*\/>|<((?:[A-Za-z_][\w.-]*:)?si)\b(?:[^>"']|"[^"]*"|'[^']*')*>[\s\S]*?<\/\1>/gu;
8
+ const cellAddressPattern = /^\$?[A-Za-z]{1,3}\$?[1-9][0-9]*$/u;
9
+ function readXmlAttribute(xml, attributeName) {
10
+ return new RegExp(`\\s${attributeName}=("|')([\\s\\S]*?)\\1`, 'u').exec(xml)?.[2] ?? null;
11
+ }
12
+ function decodeXmlText(value) {
13
+ return value.replace(/&(#x[0-9a-fA-F]+|#[0-9]+|amp|lt|gt|quot|apos);/gu, (_match, entity) => {
14
+ if (entity.startsWith('#x')) {
15
+ const codePoint = Number.parseInt(entity.slice(2), 16);
16
+ return isValidXmlCodePoint(codePoint) ? String.fromCodePoint(codePoint) : '';
17
+ }
18
+ if (entity.startsWith('#')) {
19
+ const codePoint = Number.parseInt(entity.slice(1), 10);
20
+ return isValidXmlCodePoint(codePoint) ? String.fromCodePoint(codePoint) : '';
21
+ }
22
+ switch (entity) {
23
+ case 'amp':
24
+ return '&';
25
+ case 'lt':
26
+ return '<';
27
+ case 'gt':
28
+ return '>';
29
+ case 'quot':
30
+ return '"';
31
+ case 'apos':
32
+ return "'";
33
+ default:
34
+ return '';
35
+ }
36
+ });
37
+ }
38
+ function normalizeWorksheetText(value) {
39
+ const literal = toLiteralInput(decodeExcelEscapedText(value));
40
+ return typeof literal === 'string' ? literal : value;
41
+ }
42
+ function isValidXmlCodePoint(value) {
43
+ return Number.isInteger(value) && value >= 0 && value <= 0x10ffff;
44
+ }
45
+ function normalizeAddress(address) {
46
+ if (!cellAddressPattern.test(address)) {
47
+ return null;
48
+ }
49
+ try {
50
+ return XLSX.utils.encode_cell(XLSX.utils.decode_cell(address.replaceAll('$', '')));
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ function stringItemText(xml) {
57
+ const text = [...xml.matchAll(/<(?:[A-Za-z_][\w.-]*:)?t\b[^>]*>([\s\S]*?)<\/(?:[A-Za-z_][\w.-]*:)?t>/gu)]
58
+ .map((match) => decodeXmlText(match[1] ?? ''))
59
+ .join('');
60
+ return normalizeWorksheetText(text);
61
+ }
62
+ function readElementText(xml, elementName) {
63
+ return (new RegExp(`<(?:[A-Za-z_][\\w.-]*:)?${elementName}\\b[^>]*>([\\s\\S]*?)</(?:[A-Za-z_][\\w.-]*:)?${elementName}>`, 'u').exec(xml)?.[1] ??
64
+ null);
65
+ }
66
+ function readStringElement(xml, elementName) {
67
+ const elementPattern = new RegExp(`<(?:[A-Za-z_][\\w.-]*:)?${elementName}\\b(?:[^>"']|"[^"]*"|'[^']*')*/>|<((?:[A-Za-z_][\\w.-]*:)?${elementName})\\b(?:[^>"']|"[^"]*"|'[^']*')*>[\\s\\S]*?</\\1>`, 'u');
68
+ return elementPattern.exec(xml)?.[0] ?? null;
69
+ }
70
+ function readSharedStringEntries(source) {
71
+ const sharedStringsXml = getZipText(readXlsxZipEntries(source), 'xl/sharedStrings.xml');
72
+ if (!sharedStringsXml) {
73
+ return [];
74
+ }
75
+ return [...sharedStringsXml.matchAll(sharedStringElementPattern)].map((match) => ({
76
+ text: stringItemText(match[0]),
77
+ }));
78
+ }
79
+ function readSharedStringIndex(cellXml) {
80
+ const rawValue = readElementText(cellXml, 'v')?.trim();
81
+ if (!rawValue) {
82
+ return null;
83
+ }
84
+ const index = Number(decodeXmlText(rawValue));
85
+ return Number.isSafeInteger(index) && index >= 0 ? index : null;
86
+ }
87
+ function readCellTextValue(cellXml, sharedStrings) {
88
+ const openingTag = cellOpeningTagPattern.exec(cellXml)?.[0];
89
+ const cellType = openingTag ? readXmlAttribute(openingTag, 't') : null;
90
+ if (cellType === 's') {
91
+ return sharedStrings[readSharedStringIndex(cellXml) ?? -1]?.text ?? null;
92
+ }
93
+ if (cellType === 'inlineStr') {
94
+ const inlineStringXml = readStringElement(cellXml, 'is');
95
+ return inlineStringXml ? stringItemText(inlineStringXml) : null;
96
+ }
97
+ if (cellType === 'str') {
98
+ const value = readElementText(cellXml, 'v');
99
+ return value === null ? null : normalizeWorksheetText(decodeXmlText(value));
100
+ }
101
+ return null;
102
+ }
103
+ function readWorksheetTextValues(sheetXml, sharedStrings) {
104
+ const values = new Map();
105
+ if (!sheetXml) {
106
+ return values;
107
+ }
108
+ for (const match of sheetXml.matchAll(cellElementPattern)) {
109
+ const cellXml = match[0];
110
+ const openingTag = cellOpeningTagPattern.exec(cellXml)?.[0];
111
+ const rawAddress = openingTag ? readXmlAttribute(openingTag, 'r') : null;
112
+ const address = rawAddress ? normalizeAddress(rawAddress) : null;
113
+ if (!address) {
114
+ continue;
115
+ }
116
+ const text = readCellTextValue(cellXml, sharedStrings);
117
+ if (text !== null) {
118
+ values.set(address, text);
119
+ }
120
+ }
121
+ return values;
122
+ }
123
+ export function readImportedWorksheetTextValues(source, sheetNames, sheetPathsByName, fallbackSheetPaths) {
124
+ const zip = readXlsxZipEntries(source);
125
+ const sharedStrings = readSharedStringEntries(zip);
126
+ const valuesBySheet = new Map();
127
+ sheetNames.forEach((sheetName, index) => {
128
+ const sheetPath = sheetPathsByName.get(sheetName) ?? fallbackSheetPaths[index] ?? `xl/worksheets/sheet${String(index + 1)}.xml`;
129
+ const values = readWorksheetTextValues(getZipText(zip, sheetPath), sharedStrings);
130
+ if (values.size > 0) {
131
+ valuesBySheet.set(sheetName, values);
132
+ }
133
+ });
134
+ return valuesBySheet;
135
+ }
136
+ //# sourceMappingURL=xlsx-worksheet-text-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-worksheet-text-values.js","sourceRoot":"","sources":["../src/xlsx-worksheet-text-values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type Unzipped } from 'fflate';
2
+ export type XlsxZipEntries = Unzipped;
3
+ export type XlsxZipSource = Uint8Array | XlsxZipEntries;
4
+ export declare function readXlsxZipEntries(source: XlsxZipSource): XlsxZipEntries;
5
+ export declare function normalizeZipPath(path: string): string;
6
+ export declare function getZipText(zip: XlsxZipEntries, path: string): string | null;
@@ -0,0 +1,12 @@
1
+ import { strFromU8, unzipSync } from 'fflate';
2
+ export function readXlsxZipEntries(source) {
3
+ return source instanceof Uint8Array ? unzipSync(source) : source;
4
+ }
5
+ export function normalizeZipPath(path) {
6
+ return path.replace(/^\/+/, '');
7
+ }
8
+ export function getZipText(zip, path) {
9
+ const file = zip[normalizeZipPath(path)];
10
+ return file ? strFromU8(file) : null;
11
+ }
12
+ //# sourceMappingURL=xlsx-zip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xlsx-zip.js","sourceRoot":"","sources":["../src/xlsx-zip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAiB,MAAM,QAAQ,CAAA;AAK5D,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACtD,OAAO,MAAM,YAAY,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAmB,EAAE,IAAY;IAC1D,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAA;IACxC,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@bilig/excel-import",
3
+ "version": "0.14.14",
4
+ "description": "CSV/XLSX workbook snapshot import and supported XLSX export helpers for bilig.",
5
+ "keywords": [
6
+ "bilig",
7
+ "excel",
8
+ "export",
9
+ "import",
10
+ "spreadsheet",
11
+ "xlsx"
12
+ ],
13
+ "homepage": "https://github.com/proompteng/bilig/tree/main/packages/excel-import#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/proompteng/bilig/issues"
16
+ },
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/proompteng/bilig.git",
21
+ "directory": "packages/excel-import"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "README.md",
26
+ "LICENSE"
27
+ ],
28
+ "type": "module",
29
+ "sideEffects": false,
30
+ "main": "./dist/index.js",
31
+ "types": "./dist/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "import": "./dist/index.js"
36
+ }
37
+ },
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "scripts": {
42
+ "build": "tsc -p tsconfig.json"
43
+ },
44
+ "dependencies": {
45
+ "@bilig/core": "0.14.14",
46
+ "@bilig/formula": "0.14.14",
47
+ "@bilig/protocol": "0.14.14",
48
+ "fast-xml-parser": "5.7.3",
49
+ "fflate": "0.3.11",
50
+ "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz",
51
+ "xlsx-js-style": "1.2.0"
52
+ },
53
+ "engines": {
54
+ "node": ">=24.0.0"
55
+ }
56
+ }