abstract-sheet 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/lib/abstract-sheet-xml/abstract-sheet-xml.d.ts.map +1 -1
- package/lib/abstract-sheet-xml/abstract-sheet-xml.js +5 -7
- package/lib/abstract-sheet-xml/abstract-sheet-xml.js.map +1 -1
- package/package.json +6 -3
- package/src/abstract-sheet-xml/abstract-sheet-xml.test.ts +40 -0
- package/src/abstract-sheet-xml/abstract-sheet-xml.ts +5 -7
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
4
4
|
|
|
5
|
+
## [1.3.0] - 2026-09-10
|
|
6
|
+
|
|
7
|
+
- Changed: an XML template attribute written without a value (e.g. `<Cell boolean>` instead of `boolean="true"`) no longer takes effect — see handlebars-xml's changelog for why; always give attributes an explicit value.
|
|
8
|
+
- Internal: activated `typescript/no-unnecessary-condition`. Added a vitest project and first tests for this package (previously untested).
|
|
9
|
+
|
|
5
10
|
## [1.2.0] - 2026-09-06
|
|
6
11
|
|
|
7
12
|
- Internal: activated 39 additional oxlint rules — curly, default-case, eqeqeq, init-declarations, no-alert, no-bitwise, no-case-declarations, no-empty-pattern, no-prototype-builtins, no-restricted-globals, no-restricted-properties, no-shadow, no-throw-literal, no-unused-vars, no-useless-return, node/global-require, one-var, prefer-const, prefer-object-spread, typescript/array-type, typescript/ban-tslint-comment, typescript/dot-notation, typescript/explicit-module-boundary-types, typescript/no-empty-object-type, typescript/no-explicit-any, typescript/no-require-imports, typescript/no-unnecessary-boolean-literal-compare, typescript/no-var-requires, typescript/no-wrapper-object-types, typescript/parameter-properties, typescript/prefer-nullish-coalescing, typescript/prefer-optional-chain, typescript/prefer-readonly, typescript/prefer-reduce-type-parameter, typescript/prefer-string-starts-ends-with, typescript/switch-exhaustiveness-check, typescript/unified-signatures, unicorn/no-array-sort — and upgraded `oxlint-config-divid` to 1.2.0. No functional changes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-sheet-xml.d.ts","sourceRoot":"","sources":["../../src/abstract-sheet-xml/abstract-sheet-xml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,EAAmD,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAG1H,eAAO,MAAM,gBAAgB,aAAc,MAAM,QAAQ,OAAO,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,aACP,CAAC;
|
|
1
|
+
{"version":3,"file":"abstract-sheet-xml.d.ts","sourceRoot":"","sources":["../../src/abstract-sheet-xml/abstract-sheet-xml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,EAAmD,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAG1H,eAAO,MAAM,gBAAgB,aAAc,MAAM,QAAQ,OAAO,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,aACP,CAAC;AAwH/F,eAAO,MAAM,SAAS,uBAAgB,CAAC"}
|
|
@@ -5,11 +5,9 @@ export const abstractSheetXml = (template, data, partials) => abstractSheetXmlRe
|
|
|
5
5
|
function abstractSheetXmlRecursive(el) {
|
|
6
6
|
const children = Array();
|
|
7
7
|
const childElements = Array();
|
|
8
|
-
for (const child of el.children
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
childElements.push(child);
|
|
12
|
-
}
|
|
8
|
+
for (const child of el.children) {
|
|
9
|
+
children.push(abstractSheetXmlRecursive(child));
|
|
10
|
+
childElements.push(child);
|
|
13
11
|
}
|
|
14
12
|
switch (el.tagName) {
|
|
15
13
|
case "AbstractSheet": {
|
|
@@ -41,11 +39,11 @@ function abstractSheetXmlRecursive(el) {
|
|
|
41
39
|
}
|
|
42
40
|
});
|
|
43
41
|
return {
|
|
44
|
-
name: (el.attributes
|
|
42
|
+
name: (el.attributes.name ?? ""),
|
|
45
43
|
cells,
|
|
46
44
|
colInfo,
|
|
47
45
|
rowInfo,
|
|
48
|
-
direction: (el.attributes
|
|
46
|
+
direction: (el.attributes.direction ?? ""),
|
|
49
47
|
};
|
|
50
48
|
}
|
|
51
49
|
case "ColInfos":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-sheet-xml.js","sourceRoot":"","sources":["../../src/abstract-sheet-xml/abstract-sheet-xml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,yCAAyC,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,IAAa,EAAE,QAAgC,EAAiB,EAAE,CACnH,yBAAyB,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAE,CAAkB,CAAC;AAE/F,SAAS,yBAAyB,CAAC,EAAc;IAC/C,MAAM,QAAQ,GAAG,KAAK,EAAW,CAAC;IAClC,MAAM,aAAa,GAAG,KAAK,EAAc,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"abstract-sheet-xml.js","sourceRoot":"","sources":["../../src/abstract-sheet-xml/abstract-sheet-xml.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "abstract-sheet",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"gitHead": "
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"gitHead": "09174caac85ce546198a6aefad838b7dff393ea9",
|
|
5
5
|
"description": "Abstract sheet",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Divid AB <info@divid.se>",
|
|
@@ -20,11 +20,14 @@
|
|
|
20
20
|
"exports": {
|
|
21
21
|
".": "./lib/index.js"
|
|
22
22
|
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"test": "vitest run src/**/*.test.ts"
|
|
25
|
+
},
|
|
23
26
|
"dependencies": {
|
|
24
27
|
"fast-xml-parser": "^4.5.0",
|
|
25
28
|
"fflate": "^0.8.0",
|
|
26
29
|
"handlebars": "4.7.8",
|
|
27
|
-
"handlebars-xml": "^0.
|
|
30
|
+
"handlebars-xml": "^0.6.0",
|
|
28
31
|
"moment": "^2.30.1",
|
|
29
32
|
"ts-exhaustive-check": "^1.0.0",
|
|
30
33
|
"xlsx-js-style": "^1.2.0"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { abstractSheetXml } from "./abstract-sheet-xml.js";
|
|
3
|
+
|
|
4
|
+
describe("abstractSheetXml", () => {
|
|
5
|
+
it("extracts the Sheet name and direction attributes", () => {
|
|
6
|
+
const result = abstractSheetXml('<AbstractSheet><Sheet name="Sheet1" direction="row"><Cells></Cells></Sheet></AbstractSheet>', {}, {});
|
|
7
|
+
expect(result.sheets[0]).toMatchObject({ name: "Sheet1", direction: "row" });
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it("falls back to an empty name/direction when the attributes are absent", () => {
|
|
11
|
+
const result = abstractSheetXml("<AbstractSheet><Sheet><Cells></Cells></Sheet></AbstractSheet>", {}, {});
|
|
12
|
+
expect(result.sheets[0]).toMatchObject({ name: "", direction: "" });
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it("recurses into a Sheet's children (ColInfos/RowInfos/Cells) without needing a null-check", () => {
|
|
16
|
+
const result = abstractSheetXml(
|
|
17
|
+
'<AbstractSheet><Sheet name="Sheet1"><ColInfos><ColInfo widthPixels="100" /></ColInfos><RowInfos><RowInfo heightPixels="20" /></RowInfos><Cells><Cell text="hello" /></Cells></Sheet></AbstractSheet>',
|
|
18
|
+
{},
|
|
19
|
+
{}
|
|
20
|
+
);
|
|
21
|
+
const [sheet] = result.sheets;
|
|
22
|
+
expect(sheet.colInfo).toEqual([{ widthPixels: "100" }]);
|
|
23
|
+
expect(sheet.rowInfo).toEqual([{ heightPixels: "20" }]);
|
|
24
|
+
expect(sheet.cells).toEqual([[{ text: "hello", type: "string", value: "hello", styles: undefined }]]);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it("handles a Sheet with no children at all", () => {
|
|
28
|
+
const result = abstractSheetXml('<AbstractSheet><Sheet name="Empty" /></AbstractSheet>', {}, {});
|
|
29
|
+
expect(result.sheets[0]).toMatchObject({ name: "Empty", cells: [], colInfo: undefined, rowInfo: undefined });
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("handles multiple sheets, each recursing through its own children", () => {
|
|
33
|
+
const result = abstractSheetXml(
|
|
34
|
+
'<AbstractSheet><Sheet name="A"><Cells></Cells></Sheet><Sheet name="B"><Cells></Cells></Sheet></AbstractSheet>',
|
|
35
|
+
{},
|
|
36
|
+
{}
|
|
37
|
+
);
|
|
38
|
+
expect(result.sheets.map((s) => s.name)).toEqual(["A", "B"]);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
@@ -10,11 +10,9 @@ export const abstractSheetXml = (template: string, data: unknown, partials: Reco
|
|
|
10
10
|
function abstractSheetXmlRecursive(el: XmlElement): unknown {
|
|
11
11
|
const children = Array<unknown>();
|
|
12
12
|
const childElements = Array<XmlElement>();
|
|
13
|
-
for (const child of el.children
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
childElements.push(child);
|
|
17
|
-
}
|
|
13
|
+
for (const child of el.children) {
|
|
14
|
+
children.push(abstractSheetXmlRecursive(child));
|
|
15
|
+
childElements.push(child);
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
switch (el.tagName) {
|
|
@@ -44,11 +42,11 @@ function abstractSheetXmlRecursive(el: XmlElement): unknown {
|
|
|
44
42
|
}
|
|
45
43
|
});
|
|
46
44
|
return {
|
|
47
|
-
name: ((el.attributes as Partial<Record<keyof Sheet, unknown>>)
|
|
45
|
+
name: ((el.attributes as Partial<Record<keyof Sheet, unknown>>).name ?? "") as string,
|
|
48
46
|
cells,
|
|
49
47
|
colInfo,
|
|
50
48
|
rowInfo,
|
|
51
|
-
direction: ((el.attributes as Partial<Record<keyof Sheet, unknown>>)
|
|
49
|
+
direction: ((el.attributes as Partial<Record<keyof Sheet, unknown>>).direction ?? "") as Sheet["direction"],
|
|
52
50
|
} satisfies Sheet;
|
|
53
51
|
}
|
|
54
52
|
case "ColInfos":
|