abstract-sheet 1.1.9 → 1.1.11
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../../src/abstract-sheet-exporters/xlsx.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../../src/abstract-sheet-exporters/xlsx.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAKpE,wBAAgB,MAAM,CAAC,EAAE,EAAE,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,CAyBjE"}
|
|
@@ -1,15 +1,48 @@
|
|
|
1
1
|
import XLSX from "xlsx-js-style";
|
|
2
2
|
import { xlsxWorkSheet } from "./_xlsx-sheet.js";
|
|
3
3
|
import { createStyle } from "./_style.js";
|
|
4
|
+
import * as fflate from "fflate";
|
|
4
5
|
export function toXlsx(as) {
|
|
5
6
|
const sheets = {};
|
|
6
|
-
const sheetNames = Array();
|
|
7
7
|
const styles = Object.fromEntries(as.styles?.map((s) => [s.name, createStyle(s)]) ?? []);
|
|
8
8
|
for (const s of as.sheets) {
|
|
9
|
-
sheetNames.push(s.name);
|
|
10
9
|
sheets[s.name] = xlsxWorkSheet(s, styles);
|
|
11
10
|
}
|
|
12
11
|
const wb = { Sheets: sheets, SheetNames: Object.keys(sheets) };
|
|
13
|
-
|
|
12
|
+
const buffer = XLSX.write(wb, {
|
|
13
|
+
bookType: "xlsx",
|
|
14
|
+
bookSST: false,
|
|
15
|
+
type: "buffer",
|
|
16
|
+
compression: true,
|
|
17
|
+
cellDates: false,
|
|
18
|
+
});
|
|
19
|
+
// Remove metadata.xml to fix office repair warning
|
|
20
|
+
try {
|
|
21
|
+
return removeMetadata(buffer);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
// If it fails just return the original buffer
|
|
25
|
+
return buffer;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const METADATA_CONTENT_TYPE_RX = /<Override PartName="\/xl\/metadata\.xml"[^>]*>/g;
|
|
29
|
+
const METADATA_RELATIONSHIP_RX = /<Relationship[^>]*Type="http:\/\/schemas\.openxmlformats\.org\/officeDocument\/2006\/relationships\/sheetMetadata"[^>]*\/>/g;
|
|
30
|
+
function removeMetadata(xlsxBuffer) {
|
|
31
|
+
const unzipped = fflate.unzipSync(new Uint8Array(xlsxBuffer));
|
|
32
|
+
delete unzipped["xl/metadata.xml"];
|
|
33
|
+
const contentTypesKey = "[Content_Types].xml";
|
|
34
|
+
if (unzipped[contentTypesKey]) {
|
|
35
|
+
let contentTypes = new TextDecoder().decode(unzipped[contentTypesKey]);
|
|
36
|
+
contentTypes = contentTypes.replace(METADATA_CONTENT_TYPE_RX, "");
|
|
37
|
+
unzipped[contentTypesKey] = new TextEncoder().encode(contentTypes);
|
|
38
|
+
}
|
|
39
|
+
const relsKey = "xl/_rels/workbook.xml.rels";
|
|
40
|
+
if (unzipped[relsKey]) {
|
|
41
|
+
let rels = new TextDecoder().decode(unzipped[relsKey]);
|
|
42
|
+
rels = rels.replace(METADATA_RELATIONSHIP_RX, "");
|
|
43
|
+
unzipped[relsKey] = new TextEncoder().encode(rels);
|
|
44
|
+
}
|
|
45
|
+
const rezipped = fflate.zipSync(unzipped, { level: 9 });
|
|
46
|
+
return rezipped;
|
|
14
47
|
}
|
|
15
48
|
//# sourceMappingURL=xlsx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../src/abstract-sheet-exporters/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,eAAe,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../src/abstract-sheet-exporters/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,eAAe,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,MAAM,UAAU,MAAM,CAAC,EAAiB;IACtC,MAAM,MAAM,GAAmC,EAAE,CAAC;IAElD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACzF,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,EAAE,GAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAE9E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;QAC5B,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IAEH,mDAAmD;IACnD,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,8CAA8C;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,wBAAwB,GAAG,iDAAiD,CAAC;AAEnF,MAAM,wBAAwB,GAC5B,6HAA6H,CAAC;AAEhI,SAAS,cAAc,CAAC,UAAmC;IACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAE9D,OAAO,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAEnC,MAAM,eAAe,GAAG,qBAAqB,CAAC;IAE9C,IAAI,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QAEvE,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QAClE,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,OAAO,GAAG,4BAA4B,CAAC;IAE7C,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtB,IAAI,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACvD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QAElD,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAExD,OAAO,QAAmC,CAAC;AAC7C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "abstract-sheet",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.11",
|
|
4
4
|
"description": "Abstract sheet",
|
|
5
5
|
"author": "Divid AB <info@divid.se>",
|
|
6
6
|
"repository": "https://github.com/dividab/abstract-visuals/tree/master/packages/abstract-sheet",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"fast-xml-parser": "^4.5.0",
|
|
24
|
+
"fflate": "^0.8.0",
|
|
24
25
|
"handlebars": "4.7.8",
|
|
25
26
|
"handlebars-xml": "^0.1.6",
|
|
26
27
|
"moment": "^2.30.1",
|
|
@@ -37,5 +38,5 @@
|
|
|
37
38
|
"@types/react": "^19.0.10",
|
|
38
39
|
"@types/xml": "^1.0.11"
|
|
39
40
|
},
|
|
40
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "c76e480dd9e6e80899ca256af4618648df8da723"
|
|
41
42
|
}
|
|
@@ -2,17 +2,64 @@ import XLSX from "xlsx-js-style";
|
|
|
2
2
|
import { AbstractSheet } from "../abstract-sheet/abstract-sheet.js";
|
|
3
3
|
import { xlsxWorkSheet } from "./_xlsx-sheet.js";
|
|
4
4
|
import { createStyle } from "./_style.js";
|
|
5
|
+
import * as fflate from "fflate";
|
|
5
6
|
|
|
6
7
|
export function toXlsx(as: AbstractSheet): Uint8Array<ArrayBuffer> {
|
|
7
8
|
const sheets: Record<string, XLSX.WorkSheet> = {};
|
|
8
|
-
const sheetNames = Array<string>();
|
|
9
9
|
|
|
10
10
|
const styles = Object.fromEntries(as.styles?.map((s) => [s.name, createStyle(s)]) ?? []);
|
|
11
11
|
for (const s of as.sheets) {
|
|
12
|
-
sheetNames.push(s.name);
|
|
13
12
|
sheets[s.name] = xlsxWorkSheet(s, styles);
|
|
14
13
|
}
|
|
15
14
|
|
|
16
15
|
const wb: XLSX.WorkBook = { Sheets: sheets, SheetNames: Object.keys(sheets) };
|
|
17
|
-
|
|
16
|
+
|
|
17
|
+
const buffer = XLSX.write(wb, {
|
|
18
|
+
bookType: "xlsx",
|
|
19
|
+
bookSST: false,
|
|
20
|
+
type: "buffer",
|
|
21
|
+
compression: true,
|
|
22
|
+
cellDates: false,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Remove metadata.xml to fix office repair warning
|
|
26
|
+
try {
|
|
27
|
+
return removeMetadata(buffer);
|
|
28
|
+
} catch (e) {
|
|
29
|
+
// If it fails just return the original buffer
|
|
30
|
+
return buffer;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const METADATA_CONTENT_TYPE_RX = /<Override PartName="\/xl\/metadata\.xml"[^>]*>/g;
|
|
35
|
+
|
|
36
|
+
const METADATA_RELATIONSHIP_RX =
|
|
37
|
+
/<Relationship[^>]*Type="http:\/\/schemas\.openxmlformats\.org\/officeDocument\/2006\/relationships\/sheetMetadata"[^>]*\/>/g;
|
|
38
|
+
|
|
39
|
+
function removeMetadata(xlsxBuffer: Uint8Array<ArrayBuffer>): Uint8Array<ArrayBuffer> {
|
|
40
|
+
const unzipped = fflate.unzipSync(new Uint8Array(xlsxBuffer));
|
|
41
|
+
|
|
42
|
+
delete unzipped["xl/metadata.xml"];
|
|
43
|
+
|
|
44
|
+
const contentTypesKey = "[Content_Types].xml";
|
|
45
|
+
|
|
46
|
+
if (unzipped[contentTypesKey]) {
|
|
47
|
+
let contentTypes = new TextDecoder().decode(unzipped[contentTypesKey]);
|
|
48
|
+
|
|
49
|
+
contentTypes = contentTypes.replace(METADATA_CONTENT_TYPE_RX, "");
|
|
50
|
+
unzipped[contentTypesKey] = new TextEncoder().encode(contentTypes);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const relsKey = "xl/_rels/workbook.xml.rels";
|
|
54
|
+
|
|
55
|
+
if (unzipped[relsKey]) {
|
|
56
|
+
let rels = new TextDecoder().decode(unzipped[relsKey]);
|
|
57
|
+
rels = rels.replace(METADATA_RELATIONSHIP_RX, "");
|
|
58
|
+
|
|
59
|
+
unzipped[relsKey] = new TextEncoder().encode(rels);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const rezipped = fflate.zipSync(unzipped, { level: 9 });
|
|
63
|
+
|
|
64
|
+
return rezipped as Uint8Array<ArrayBuffer>;
|
|
18
65
|
}
|