@flyingrobots/bijou-i18n-tools-xlsx 7.0.0 → 7.2.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/dist/xlsx.d.ts.map +1 -1
- package/dist/xlsx.js +37 -18
- package/dist/xlsx.js.map +1 -1
- package/package.json +2 -2
package/dist/xlsx.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../src/xlsx.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"xlsx.d.ts","sourceRoot":"","sources":["../src/xlsx.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAA0B,MAAM,gCAAgC,CAAC;AAmF/F,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,UAAU,CAgBpF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,gBAAgB,CAyC3F"}
|
package/dist/xlsx.js
CHANGED
|
@@ -13,11 +13,18 @@ const REQUIRED_TRANSLATION_COLUMNS = [
|
|
|
13
13
|
'translatedValueKind',
|
|
14
14
|
'translatedValue',
|
|
15
15
|
];
|
|
16
|
+
const TRANSLATION_COLUMN_SET = new Set(REQUIRED_TRANSLATION_COLUMNS);
|
|
16
17
|
function normalizeCell(value) {
|
|
17
18
|
if (value === undefined || value === null) {
|
|
18
19
|
return '';
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
+
if (typeof value === 'string')
|
|
22
|
+
return value;
|
|
23
|
+
if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint')
|
|
24
|
+
return String(value);
|
|
25
|
+
if (value instanceof Date)
|
|
26
|
+
return value.toISOString();
|
|
27
|
+
return '';
|
|
21
28
|
}
|
|
22
29
|
function toWorkbookInput(input) {
|
|
23
30
|
return input instanceof Uint8Array ? input : new Uint8Array(input);
|
|
@@ -29,7 +36,7 @@ function assertWorkbookHeaders(columns, sheetName) {
|
|
|
29
36
|
const seen = new Set();
|
|
30
37
|
for (const [index, column] of columns.entries()) {
|
|
31
38
|
if (column.trim() === '') {
|
|
32
|
-
throw new Error(`Invalid XLSX workbook sheet: missing required header at column ${index + 1} in ${sheetName}`);
|
|
39
|
+
throw new Error(`Invalid XLSX workbook sheet: missing required header at column ${String(index + 1)} in ${sheetName}`);
|
|
33
40
|
}
|
|
34
41
|
if (seen.has(column)) {
|
|
35
42
|
throw new Error(`Invalid XLSX workbook sheet: duplicate header ${column} in ${sheetName}`);
|
|
@@ -43,27 +50,42 @@ function assertWorkbookHeaders(columns, sheetName) {
|
|
|
43
50
|
}
|
|
44
51
|
}
|
|
45
52
|
function assertWorkbookRow(row, context) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
const cell = (key) => {
|
|
54
|
+
const value = row[key];
|
|
55
|
+
if (typeof value === 'string')
|
|
56
|
+
return value;
|
|
57
|
+
throw new Error(`Invalid XLSX workbook sheet: missing ${key} in ${context}`);
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
namespace: cell('namespace'), id: cell('id'), kind: cell('kind'),
|
|
61
|
+
sourceLocale: cell('sourceLocale'), targetLocale: cell('targetLocale'), status: cell('status'),
|
|
62
|
+
sourceHash: cell('sourceHash'), description: cell('description'),
|
|
63
|
+
sourceValueKind: cell('sourceValueKind'), sourceValue: cell('sourceValue'),
|
|
64
|
+
translatedValueKind: cell('translatedValueKind'), translatedValue: cell('translatedValue'),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function isTranslationWorkbookColumn(column) {
|
|
68
|
+
return TRANSLATION_COLUMN_SET.has(column);
|
|
69
|
+
}
|
|
70
|
+
function workbookCell(row, column) {
|
|
71
|
+
return isTranslationWorkbookColumn(column) ? row[column] : '';
|
|
52
72
|
}
|
|
53
73
|
export function serializeExchangeWorkbookXlsx(workbook) {
|
|
54
74
|
const book = XLSX.utils.book_new();
|
|
55
75
|
for (const sheet of workbook.sheets) {
|
|
56
76
|
const rows = [
|
|
57
77
|
[...sheet.columns],
|
|
58
|
-
...sheet.rows.map((row) => sheet.columns.map((column) =>
|
|
59
|
-
const value = row[column];
|
|
60
|
-
return typeof value === 'string' ? value : '';
|
|
61
|
-
})),
|
|
78
|
+
...sheet.rows.map((row) => sheet.columns.map((column) => workbookCell(row, column))),
|
|
62
79
|
];
|
|
63
80
|
const worksheet = XLSX.utils.aoa_to_sheet(rows);
|
|
64
81
|
XLSX.utils.book_append_sheet(book, worksheet, sheet.name);
|
|
65
82
|
}
|
|
66
|
-
|
|
83
|
+
const output = XLSX.write(book, { bookType: 'xlsx', type: 'array' });
|
|
84
|
+
if (output instanceof Uint8Array)
|
|
85
|
+
return new Uint8Array(output);
|
|
86
|
+
if (output instanceof ArrayBuffer)
|
|
87
|
+
return new Uint8Array(output);
|
|
88
|
+
throw new Error('Invalid XLSX serializer output: expected binary workbook bytes');
|
|
67
89
|
}
|
|
68
90
|
export function parseExchangeWorkbookXlsx(input) {
|
|
69
91
|
const workbook = XLSX.read(toWorkbookInput(input), { type: 'array' });
|
|
@@ -89,7 +111,7 @@ export function parseExchangeWorkbookXlsx(input) {
|
|
|
89
111
|
const rows = matrix.slice(1).map((entry, rowIndex) => {
|
|
90
112
|
const cells = Array.isArray(entry) ? entry : [];
|
|
91
113
|
const record = Object.fromEntries(columns.map((column, index) => [column, normalizeCell(cells[index])]));
|
|
92
|
-
return assertWorkbookRow(record, `${sheetName}:${rowIndex + 2}`);
|
|
114
|
+
return assertWorkbookRow(record, `${sheetName}:${String(rowIndex + 2)}`);
|
|
93
115
|
});
|
|
94
116
|
return {
|
|
95
117
|
name: sheetName,
|
|
@@ -97,9 +119,6 @@ export function parseExchangeWorkbookXlsx(input) {
|
|
|
97
119
|
rows,
|
|
98
120
|
};
|
|
99
121
|
});
|
|
100
|
-
return {
|
|
101
|
-
version: 1,
|
|
102
|
-
sheets,
|
|
103
|
-
};
|
|
122
|
+
return { version: 1, sheets };
|
|
104
123
|
}
|
|
105
124
|
//# sourceMappingURL=xlsx.js.map
|
package/dist/xlsx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../src/xlsx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,4BAA4B,GAAG;IACnC,WAAW;IACX,IAAI;IACJ,MAAM;IACN,cAAc;IACd,cAAc;IACd,QAAQ;IACR,YAAY;IACZ,aAAa;IACb,iBAAiB;IACjB,aAAa;IACb,qBAAqB;IACrB,iBAAiB;CACT,CAAC;AAEX,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../src/xlsx.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flyingrobots/bijou-i18n-tools-xlsx",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.2.0",
|
|
4
4
|
"description": "XLSX workbook adapters for Bijou localization exchange workflows.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"lint": "tsc --noEmit"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@flyingrobots/bijou-i18n-tools": "7.
|
|
27
|
+
"@flyingrobots/bijou-i18n-tools": "7.2.0",
|
|
28
28
|
"xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|