abstract-sheet 1.3.0 → 1.3.1
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-exporters/xlsx.js.map +1 -1
- package/lib/abstract-sheet-xml/abstract-sheet-xml.d.ts.map +1 -1
- package/lib/abstract-sheet-xml/abstract-sheet-xml.js +18 -4
- package/lib/abstract-sheet-xml/abstract-sheet-xml.js.map +1 -1
- package/package.json +3 -3
- package/src/abstract-sheet-exporters/xlsx.ts +1 -1
- package/src/abstract-sheet-xml/abstract-sheet-xml.test.ts +18 -2
- package/src/abstract-sheet-xml/abstract-sheet-xml.ts +21 -5
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.1] - 2026-09-14
|
|
6
|
+
|
|
7
|
+
- Fixed: `<ColInfo>`/`<RowInfo>` XML template elements' `widthPixels`/`heightPixels`/`hidden` attributes are now parsed into real numbers/booleans instead of staying raw strings; previously a non-empty string was never falsy/nullish, so the default width/height fallback never applied and `hidden="false"` was written to the spreadsheet as hidden.
|
|
8
|
+
- Fixed: `<Cell>`'s boolean attribute is now read as `bool`, matching the XSD; it was previously read as `boolean`, so a schema-valid `<Cell bool="true"/>` silently produced an empty string cell instead of a boolean cell.
|
|
9
|
+
|
|
5
10
|
## [1.3.0] - 2026-09-10
|
|
6
11
|
|
|
7
12
|
- 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.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../src/abstract-sheet-exporters/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,IAAI,MAAM,eAAe,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,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,
|
|
1
|
+
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../src/abstract-sheet-exporters/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,IAAI,MAAM,eAAe,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,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,CAA4B,CAAC;IAE9B,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,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -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,
|
|
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,EAAqE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAG5I,eAAO,MAAM,gBAAgB,aAAc,MAAM,QAAQ,OAAO,YAAY,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,aACP,CAAC;AAwI/F,eAAO,MAAM,SAAS,uBAAgB,CAAC"}
|
|
@@ -49,11 +49,17 @@ function abstractSheetXmlRecursive(el) {
|
|
|
49
49
|
case "ColInfos":
|
|
50
50
|
return children;
|
|
51
51
|
case "ColInfo":
|
|
52
|
-
return
|
|
52
|
+
return {
|
|
53
|
+
hidden: strToBool(el.attributes["hidden"]),
|
|
54
|
+
widthPixels: strToNum(el.attributes["widthPixels"]),
|
|
55
|
+
};
|
|
53
56
|
case "RowInfos":
|
|
54
57
|
return children;
|
|
55
58
|
case "RowInfo":
|
|
56
|
-
return
|
|
59
|
+
return {
|
|
60
|
+
hidden: strToBool(el.attributes["hidden"]),
|
|
61
|
+
heightPixels: strToNum(el.attributes["heightPixels"]),
|
|
62
|
+
};
|
|
57
63
|
case "Cells":
|
|
58
64
|
return children;
|
|
59
65
|
case "Cell": {
|
|
@@ -63,8 +69,8 @@ function abstractSheetXmlRecursive(el) {
|
|
|
63
69
|
const num = Number.isNaN(parsedNumber) ? el.attributes["number"] : parsedNumber;
|
|
64
70
|
return { ...el.attributes, type: "number", value: num, styles };
|
|
65
71
|
}
|
|
66
|
-
else if (el.attributes["
|
|
67
|
-
return { ...el.attributes, type: "boolean", value: el.attributes["
|
|
72
|
+
else if (el.attributes["bool"] !== undefined) {
|
|
73
|
+
return { ...el.attributes, type: "boolean", value: el.attributes["bool"], styles };
|
|
68
74
|
}
|
|
69
75
|
else if (el.attributes["date"] !== undefined) {
|
|
70
76
|
return { ...el.attributes, type: "date", value: el.attributes["date"], styles };
|
|
@@ -124,5 +130,13 @@ function abstractSheetXmlRecursive(el) {
|
|
|
124
130
|
throw new Error(`Could not find creator for element with name ${el.tagName}`);
|
|
125
131
|
}
|
|
126
132
|
}
|
|
133
|
+
const strToBool = (str) => (str === undefined ? undefined : str === "true" || str === "1");
|
|
134
|
+
const strToNum = (str) => {
|
|
135
|
+
if (str === undefined) {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
const num = Number(str);
|
|
139
|
+
return Number.isFinite(num) ? num : undefined;
|
|
140
|
+
};
|
|
127
141
|
export const parsedXsd = parseXsd(xsd);
|
|
128
142
|
//# sourceMappingURL=abstract-sheet-xml.js.map
|
|
@@ -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,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,eAAe,EAAE,CAAC;YACrB,IAAI,MAAM,GAAuB,SAAS,CAAC;YAC3C,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAU,CAAC,CAAC;gBACpC,CAAC;qBAAM,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACxC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAW,CAAC;gBACjC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAA0B,CAAC;QACpD,CAAC;QACD,KAAK,OAAO,EAAE,CAAC;YACb,MAAM,KAAK,GAAiB,EAAE,CAAC;YAC/B,IAAI,OAAO,GAAyB,SAAS,CAAC;YAC9C,IAAI,OAAO,GAAyB,SAAS,CAAC;YAC9C,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;oBACnC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAa,CAAC;gBACpC,CAAC;qBAAM,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;oBAC1C,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAa,CAAC;gBACpC,CAAC;qBAAM,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;oBACvC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAU,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO;gBACL,IAAI,EAAE,CAAE,EAAE,CAAC,UAAoD,CAAC,IAAI,IAAI,EAAE,CAAW;gBACrF,KAAK;gBACL,OAAO;gBACP,OAAO;gBACP,SAAS,EAAE,CAAE,EAAE,CAAC,UAAoD,CAAC,SAAS,IAAI,EAAE,CAAuB;aAC5F,CAAC;QACpB,CAAC;QACD,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,EAAE,CAAC,UAAU,CAAC;
|
|
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.3.
|
|
4
|
-
"gitHead": "
|
|
3
|
+
"version": "1.3.1",
|
|
4
|
+
"gitHead": "d33473932aad0f8a1741bfbad4754a41460b9972",
|
|
5
5
|
"description": "Abstract sheet",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Divid AB <info@divid.se>",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"fast-xml-parser": "^4.5.0",
|
|
28
28
|
"fflate": "^0.8.0",
|
|
29
29
|
"handlebars": "4.7.8",
|
|
30
|
-
"handlebars-xml": "^0.6.
|
|
30
|
+
"handlebars-xml": "^0.6.1",
|
|
31
31
|
"moment": "^2.30.1",
|
|
32
32
|
"ts-exhaustive-check": "^1.0.0",
|
|
33
33
|
"xlsx-js-style": "^1.2.0"
|
|
@@ -19,11 +19,27 @@ describe("abstractSheetXml", () => {
|
|
|
19
19
|
{}
|
|
20
20
|
);
|
|
21
21
|
const [sheet] = result.sheets;
|
|
22
|
-
expect(sheet.colInfo).toEqual([{ widthPixels:
|
|
23
|
-
expect(sheet.rowInfo).toEqual([{ heightPixels:
|
|
22
|
+
expect(sheet.colInfo).toEqual([{ widthPixels: 100 }]);
|
|
23
|
+
expect(sheet.rowInfo).toEqual([{ heightPixels: 20 }]);
|
|
24
24
|
expect(sheet.cells).toEqual([[{ text: "hello", type: "string", value: "hello", styles: undefined }]]);
|
|
25
25
|
});
|
|
26
26
|
|
|
27
|
+
it('coerces ColInfo/RowInfo hidden to a real boolean, not the truthy string "false"', () => {
|
|
28
|
+
const result = abstractSheetXml(
|
|
29
|
+
'<AbstractSheet><Sheet name="Sheet1"><ColInfos><ColInfo hidden="false" /></ColInfos><RowInfos><RowInfo hidden="true" /></RowInfos><Cells></Cells></Sheet></AbstractSheet>',
|
|
30
|
+
{},
|
|
31
|
+
{}
|
|
32
|
+
);
|
|
33
|
+
const [sheet] = result.sheets;
|
|
34
|
+
expect(sheet.colInfo).toEqual([{ hidden: false }]);
|
|
35
|
+
expect(sheet.rowInfo).toEqual([{ hidden: true }]);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('parses a Cell\'s "bool" attribute (matching the XSD) as a boolean-typed cell', () => {
|
|
39
|
+
const result = abstractSheetXml('<AbstractSheet><Sheet name="Sheet1"><Cells><Cell bool="true" /></Cells></Sheet></AbstractSheet>', {}, {});
|
|
40
|
+
expect(result.sheets[0]?.cells).toEqual([[{ bool: "true", type: "boolean", value: "true", styles: undefined }]]);
|
|
41
|
+
});
|
|
42
|
+
|
|
27
43
|
it("handles a Sheet with no children at all", () => {
|
|
28
44
|
const result = abstractSheetXml('<AbstractSheet><Sheet name="Empty" /></AbstractSheet>', {}, {});
|
|
29
45
|
expect(result.sheets[0]).toMatchObject({ name: "Empty", cells: [], colInfo: undefined, rowInfo: undefined });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { XmlElement } from "handlebars-xml";
|
|
2
2
|
import { parseHandlebarsXml, parseXsd } from "handlebars-xml";
|
|
3
3
|
import { xsd } from "../abstract-sheet/abstract-sheet-xsd.js";
|
|
4
|
-
import type { ColInfos, Cells, RowInfos, Sheet, Style, Styles, AbstractSheet } from "../abstract-sheet/abstract-sheet.js";
|
|
4
|
+
import type { ColInfo, ColInfos, Cells, RowInfo, RowInfos, Sheet, Style, Styles, AbstractSheet } from "../abstract-sheet/abstract-sheet.js";
|
|
5
5
|
import { borderStyleRecord } from "../abstract-sheet/abstract-sheet.js";
|
|
6
6
|
|
|
7
7
|
export const abstractSheetXml = (template: string, data: unknown, partials: Record<string, string>): AbstractSheet =>
|
|
@@ -52,11 +52,17 @@ function abstractSheetXmlRecursive(el: XmlElement): unknown {
|
|
|
52
52
|
case "ColInfos":
|
|
53
53
|
return children;
|
|
54
54
|
case "ColInfo":
|
|
55
|
-
return
|
|
55
|
+
return {
|
|
56
|
+
hidden: strToBool(el.attributes["hidden"]),
|
|
57
|
+
widthPixels: strToNum(el.attributes["widthPixels"]),
|
|
58
|
+
} satisfies ColInfo;
|
|
56
59
|
case "RowInfos":
|
|
57
60
|
return children;
|
|
58
61
|
case "RowInfo":
|
|
59
|
-
return
|
|
62
|
+
return {
|
|
63
|
+
hidden: strToBool(el.attributes["hidden"]),
|
|
64
|
+
heightPixels: strToNum(el.attributes["heightPixels"]),
|
|
65
|
+
} satisfies RowInfo;
|
|
60
66
|
case "Cells":
|
|
61
67
|
return children;
|
|
62
68
|
case "Cell": {
|
|
@@ -65,8 +71,8 @@ function abstractSheetXmlRecursive(el: XmlElement): unknown {
|
|
|
65
71
|
const parsedNumber = Number(el.attributes["number"]);
|
|
66
72
|
const num = Number.isNaN(parsedNumber) ? el.attributes["number"] : parsedNumber;
|
|
67
73
|
return { ...el.attributes, type: "number", value: num, styles };
|
|
68
|
-
} else if (el.attributes["
|
|
69
|
-
return { ...el.attributes, type: "boolean", value: el.attributes["
|
|
74
|
+
} else if (el.attributes["bool"] !== undefined) {
|
|
75
|
+
return { ...el.attributes, type: "boolean", value: el.attributes["bool"], styles };
|
|
70
76
|
} else if (el.attributes["date"] !== undefined) {
|
|
71
77
|
return { ...el.attributes, type: "date", value: el.attributes["date"], styles };
|
|
72
78
|
} else {
|
|
@@ -125,4 +131,14 @@ function abstractSheetXmlRecursive(el: XmlElement): unknown {
|
|
|
125
131
|
}
|
|
126
132
|
}
|
|
127
133
|
|
|
134
|
+
const strToBool = (str: string | undefined): boolean | undefined => (str === undefined ? undefined : str === "true" || str === "1");
|
|
135
|
+
|
|
136
|
+
const strToNum = (str: string | undefined): number | undefined => {
|
|
137
|
+
if (str === undefined) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
const num = Number(str);
|
|
141
|
+
return Number.isFinite(num) ? num : undefined;
|
|
142
|
+
};
|
|
143
|
+
|
|
128
144
|
export const parsedXsd = parseXsd(xsd);
|