@flyingrobots/bijou-i18n-tools 7.1.0 → 8.0.0-rc.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.
Files changed (69) hide show
  1. package/dist/adapter-guards.d.ts +6 -0
  2. package/dist/adapter-guards.d.ts.map +1 -0
  3. package/dist/adapter-guards.js +36 -0
  4. package/dist/adapter-guards.js.map +1 -0
  5. package/dist/adapters.d.ts +2 -16
  6. package/dist/adapters.d.ts.map +1 -1
  7. package/dist/adapters.js +2 -158
  8. package/dist/adapters.js.map +1 -1
  9. package/dist/catalog-adapters.d.ts +7 -0
  10. package/dist/catalog-adapters.d.ts.map +1 -0
  11. package/dist/catalog-adapters.js +36 -0
  12. package/dist/catalog-adapters.js.map +1 -0
  13. package/dist/delimited-adapters.d.ts +12 -0
  14. package/dist/delimited-adapters.d.ts.map +1 -0
  15. package/dist/delimited-adapters.js +99 -0
  16. package/dist/delimited-adapters.js.map +1 -0
  17. package/dist/exchange.d.ts +4 -57
  18. package/dist/exchange.d.ts.map +1 -1
  19. package/dist/exchange.js +3 -257
  20. package/dist/exchange.js.map +1 -1
  21. package/dist/exchange.part01.d.ts +50 -0
  22. package/dist/exchange.part01.d.ts.map +1 -0
  23. package/dist/exchange.part01.js +74 -0
  24. package/dist/exchange.part01.js.map +1 -0
  25. package/dist/exchange.part02.d.ts +7 -0
  26. package/dist/exchange.part02.d.ts.map +1 -0
  27. package/dist/exchange.part02.js +116 -0
  28. package/dist/exchange.part02.js.map +1 -0
  29. package/dist/exchange.part03.d.ts +6 -0
  30. package/dist/exchange.part03.d.ts.map +1 -0
  31. package/dist/exchange.part03.js +88 -0
  32. package/dist/exchange.part03.js.map +1 -0
  33. package/dist/string-table.d.ts +3 -27
  34. package/dist/string-table.d.ts.map +1 -1
  35. package/dist/string-table.js +2 -215
  36. package/dist/string-table.js.map +1 -1
  37. package/dist/string-table.part01.d.ts +27 -0
  38. package/dist/string-table.part01.d.ts.map +1 -0
  39. package/dist/string-table.part01.js +77 -0
  40. package/dist/string-table.part01.js.map +1 -0
  41. package/dist/string-table.part02.d.ts +9 -0
  42. package/dist/string-table.part02.d.ts.map +1 -0
  43. package/dist/string-table.part02.js +65 -0
  44. package/dist/string-table.part02.js.map +1 -0
  45. package/dist/string-table.part03.d.ts +8 -0
  46. package/dist/string-table.part03.d.ts.map +1 -0
  47. package/dist/string-table.part03.js +89 -0
  48. package/dist/string-table.part03.js.map +1 -0
  49. package/dist/tools.d.ts +5 -37
  50. package/dist/tools.d.ts.map +1 -1
  51. package/dist/tools.js +4 -242
  52. package/dist/tools.js.map +1 -1
  53. package/dist/tools.part01.d.ts +38 -0
  54. package/dist/tools.part01.d.ts.map +1 -0
  55. package/dist/tools.part01.js +56 -0
  56. package/dist/tools.part01.js.map +1 -0
  57. package/dist/tools.part02.d.ts +5 -0
  58. package/dist/tools.part02.d.ts.map +1 -0
  59. package/dist/tools.part02.js +90 -0
  60. package/dist/tools.part02.js.map +1 -0
  61. package/dist/tools.part03.d.ts +5 -0
  62. package/dist/tools.part03.d.ts.map +1 -0
  63. package/dist/tools.part03.js +87 -0
  64. package/dist/tools.part03.js.map +1 -0
  65. package/dist/tools.part04.d.ts +2 -0
  66. package/dist/tools.part04.d.ts.map +1 -0
  67. package/dist/tools.part04.js +24 -0
  68. package/dist/tools.part04.js.map +1 -0
  69. package/package.json +2 -2
@@ -0,0 +1,6 @@
1
+ import type { CatalogBundle, TranslationWorkbookRow } from './exchange.js';
2
+ export declare function assertWorkbookRow(row: Record<string, string>, context: string): TranslationWorkbookRow;
3
+ export declare function serializedCell(row: object, column: string): string;
4
+ export declare function delimitedRowFromCells(columns: readonly string[], cells: readonly string[]): Readonly<Record<string, string>>;
5
+ export declare function assertCatalogBundle(value: unknown): asserts value is CatalogBundle;
6
+ //# sourceMappingURL=adapter-guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-guards.d.ts","sourceRoot":"","sources":["../src/adapter-guards.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAO3E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,sBAAsB,CAMtG;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGlE;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAMlC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,aAAa,CAIlF"}
@@ -0,0 +1,36 @@
1
+ const WORKBOOK_COLUMNS = [
2
+ 'namespace', 'id', 'kind', 'sourceLocale', 'targetLocale', 'status', 'sourceHash', 'description',
3
+ 'sourceValueKind', 'sourceValue', 'translatedValueKind', 'translatedValue',
4
+ ];
5
+ export function assertWorkbookRow(row, context) {
6
+ for (const key of WORKBOOK_COLUMNS) {
7
+ if (typeof row[key] !== 'string')
8
+ throw new Error(`Invalid delimited sheet: missing ${key} in ${context}`);
9
+ }
10
+ if (!isWorkbookRow(row))
11
+ throw new Error(`Invalid delimited sheet: malformed row in ${context}`);
12
+ return row;
13
+ }
14
+ export function serializedCell(row, column) {
15
+ const value = Object.getOwnPropertyDescriptor(row, column)?.value;
16
+ return typeof value === 'string' ? value : '';
17
+ }
18
+ export function delimitedRowFromCells(columns, cells) {
19
+ const row = {};
20
+ columns.forEach((column, index) => {
21
+ row[column] = cells[index] ?? '';
22
+ });
23
+ return Object.freeze(row);
24
+ }
25
+ export function assertCatalogBundle(value) {
26
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
27
+ throw new Error('Invalid catalog bundle json: expected object');
28
+ if (!('version' in value) || typeof value.version !== 'number')
29
+ throw new Error('Invalid catalog bundle json: expected version');
30
+ if (!('catalogs' in value) || !Array.isArray(value.catalogs))
31
+ throw new Error('Invalid catalog bundle json: expected catalogs array');
32
+ }
33
+ function isWorkbookRow(row) {
34
+ return WORKBOOK_COLUMNS.every((column) => column in row);
35
+ }
36
+ //# sourceMappingURL=adapter-guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-guards.js","sourceRoot":"","sources":["../src/adapter-guards.ts"],"names":[],"mappings":"AAEA,MAAM,gBAAgB,GAAG;IACvB,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa;IAChG,iBAAiB,EAAE,aAAa,EAAE,qBAAqB,EAAE,iBAAiB;CAClE,CAAC;AAEX,MAAM,UAAU,iBAAiB,CAAC,GAA2B,EAAE,OAAe;IAC5E,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACnC,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,OAAO,OAAO,EAAE,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;IACjG,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,MAAc;IACxD,MAAM,KAAK,GAAY,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC;IAC3E,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAA0B,EAC1B,KAAwB;IAExB,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACzI,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACjI,IAAI,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;AACxI,CAAC;AAED,SAAS,aAAa,CAAC,GAAqC;IAC1D,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;AAC3D,CAAC"}
@@ -1,17 +1,3 @@
1
- import type { CatalogBundle, ExchangeSheet } from './exchange.js';
2
- export type DelimitedFormat = 'csv' | 'tsv';
3
- export interface DelimitedSheet {
4
- readonly columns: readonly string[];
5
- readonly rows: readonly Readonly<Record<string, string>>[];
6
- }
7
- export interface DelimitedSheetInput {
8
- readonly columns: readonly string[];
9
- readonly rows: readonly object[];
10
- }
11
- export declare function serializeDelimitedSheet(sheet: DelimitedSheetInput, format: DelimitedFormat): string;
12
- export declare function parseDelimitedSheet(input: string, format: DelimitedFormat): DelimitedSheet;
13
- export declare function serializeExchangeSheet(sheet: ExchangeSheet, format: DelimitedFormat): string;
14
- export declare function parseExchangeSheet(name: string, input: string, format: DelimitedFormat): ExchangeSheet;
15
- export declare function serializeCatalogBundleJson(bundle: CatalogBundle): string;
16
- export declare function parseCatalogBundleJson(input: string): CatalogBundle;
1
+ export { parseCatalogBundleJson, parseExchangeSheet, serializeCatalogBundleJson, serializeExchangeSheet, } from './catalog-adapters.js';
2
+ export { parseDelimitedSheet, serializeDelimitedSheet, type DelimitedFormat, type DelimitedSheet, type DelimitedSheetInput, } from './delimited-adapters.js';
17
3
  //# sourceMappingURL=adapters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAA0B,MAAM,eAAe,CAAC;AAG1F,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;CAC5D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAiHD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CAUnG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,cAAc,CA0B1F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CAE5F;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,eAAe,GACtB,aAAa,CAYf;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAExE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAcnE"}
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC"}
package/dist/adapters.js CHANGED
@@ -1,159 +1,3 @@
1
- import { exportCatalogBundle, importCatalogBundle } from './exchange.js';
2
- function delimiterFor(format) {
3
- return format === 'csv' ? ',' : '\t';
4
- }
5
- function escapeCell(value, delimiter) {
6
- if (!value.includes(delimiter) && !value.includes('"') && !value.includes('\n') && !value.includes('\r')) {
7
- return value;
8
- }
9
- return `"${value.replaceAll('"', '""')}"`;
10
- }
11
- function serializeDelimitedRow(values, delimiter) {
12
- return values.map((value) => escapeCell(value, delimiter)).join(delimiter);
13
- }
14
- function parseDelimited(input, delimiter) {
15
- const rows = [];
16
- let row = [];
17
- let cell = '';
18
- let inQuotes = false;
19
- for (let index = 0; index < input.length; index += 1) {
20
- const char = input[index];
21
- const next = input[index + 1];
22
- if (inQuotes) {
23
- if (char === '"') {
24
- if (next === '"') {
25
- cell += '"';
26
- index += 1;
27
- continue;
28
- }
29
- inQuotes = false;
30
- continue;
31
- }
32
- cell += char;
33
- continue;
34
- }
35
- if (char === '"') {
36
- if (cell.length !== 0) {
37
- cell += char;
38
- continue;
39
- }
40
- inQuotes = true;
41
- continue;
42
- }
43
- if (char === delimiter) {
44
- row.push(cell);
45
- cell = '';
46
- continue;
47
- }
48
- if (char === '\r') {
49
- continue;
50
- }
51
- if (char === '\n') {
52
- row.push(cell);
53
- rows.push(row);
54
- row = [];
55
- cell = '';
56
- continue;
57
- }
58
- cell += char;
59
- }
60
- if (inQuotes) {
61
- throw new Error('Invalid delimited sheet: unterminated quoted cell');
62
- }
63
- if (cell.length > 0 || row.length > 0) {
64
- row.push(cell);
65
- rows.push(row);
66
- }
67
- return rows;
68
- }
69
- function assertWorkbookRow(row, context) {
70
- const required = [
71
- 'namespace',
72
- 'id',
73
- 'kind',
74
- 'sourceLocale',
75
- 'targetLocale',
76
- 'status',
77
- 'sourceHash',
78
- 'description',
79
- 'sourceValueKind',
80
- 'sourceValue',
81
- 'translatedValueKind',
82
- 'translatedValue',
83
- ];
84
- for (const key of required) {
85
- if (typeof row[key] !== 'string') {
86
- throw new Error(`Invalid delimited sheet: missing ${key} in ${context}`);
87
- }
88
- }
89
- return row;
90
- }
91
- function serializedCell(row, column) {
92
- const value = row[column];
93
- return typeof value === 'string' ? value : '';
94
- }
95
- export function serializeDelimitedSheet(sheet, format) {
96
- const delimiter = delimiterFor(format);
97
- const lines = [
98
- serializeDelimitedRow(sheet.columns, delimiter),
99
- ...sheet.rows.map((row) => serializeDelimitedRow(sheet.columns.map((column) => serializedCell(row, column)), delimiter)),
100
- ];
101
- return lines.join('\n');
102
- }
103
- export function parseDelimitedSheet(input, format) {
104
- const delimiter = delimiterFor(format);
105
- const rows = parseDelimited(input, delimiter);
106
- if (rows.length === 0) {
107
- throw new Error('Invalid delimited sheet: empty input');
108
- }
109
- const [header, ...body] = rows;
110
- if (header === undefined) {
111
- throw new Error('Invalid delimited sheet: missing header');
112
- }
113
- const columns = [...header];
114
- const parsedRows = body.map((cells, rowIndex) => {
115
- if (cells.length !== columns.length) {
116
- throw new Error(`Invalid delimited sheet: ragged row ${rowIndex + 2}`);
117
- }
118
- return Object.freeze(Object.fromEntries(columns.map((column, index) => [column, cells[index] ?? ''])));
119
- });
120
- return Object.freeze({
121
- columns: Object.freeze(columns),
122
- rows: Object.freeze(parsedRows),
123
- });
124
- }
125
- export function serializeExchangeSheet(sheet, format) {
126
- return serializeDelimitedSheet(sheet, format);
127
- }
128
- export function parseExchangeSheet(name, input, format) {
129
- const sheet = parseDelimitedSheet(input, format);
130
- const parsedRows = sheet.rows.map((row, rowIndex) => {
131
- const record = { ...row };
132
- return assertWorkbookRow(record, `${name}:${rowIndex + 2}`);
133
- });
134
- return {
135
- name,
136
- columns: sheet.columns,
137
- rows: parsedRows,
138
- };
139
- }
140
- export function serializeCatalogBundleJson(bundle) {
141
- return JSON.stringify(bundle, null, 2);
142
- }
143
- export function parseCatalogBundleJson(input) {
144
- let parsed;
145
- try {
146
- parsed = JSON.parse(input);
147
- }
148
- catch {
149
- throw new Error('Invalid catalog bundle json: malformed json');
150
- }
151
- try {
152
- return exportCatalogBundle(importCatalogBundle(parsed));
153
- }
154
- catch (error) {
155
- const message = error instanceof Error ? error.message : 'unknown error';
156
- throw new Error(`Invalid catalog bundle json: ${message}`);
157
- }
158
- }
1
+ export { parseCatalogBundleJson, parseExchangeSheet, serializeCatalogBundleJson, serializeExchangeSheet, } from './catalog-adapters.js';
2
+ export { parseDelimitedSheet, serializeDelimitedSheet, } from './delimited-adapters.js';
159
3
  //# sourceMappingURL=adapters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAIxB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type DelimitedFormat } from './delimited-adapters.js';
2
+ import type { CatalogBundle, ExchangeSheet } from './exchange.js';
3
+ export declare function serializeExchangeSheet(sheet: ExchangeSheet, format: DelimitedFormat): string;
4
+ export declare function parseExchangeSheet(name: string, input: string, format: DelimitedFormat): ExchangeSheet;
5
+ export declare function serializeCatalogBundleJson(bundle: CatalogBundle): string;
6
+ export declare function parseCatalogBundleJson(input: string): CatalogBundle;
7
+ //# sourceMappingURL=catalog-adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-adapters.d.ts","sourceRoot":"","sources":["../src/catalog-adapters.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAMlE,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,eAAe,GACtB,MAAM,CAER;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,eAAe,GACtB,aAAa,CAUf;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAExE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAenE"}
@@ -0,0 +1,36 @@
1
+ import { assertCatalogBundle, assertWorkbookRow, } from './adapter-guards.js';
2
+ import { parseDelimitedSheet, serializeDelimitedSheet, } from './delimited-adapters.js';
3
+ import { exportCatalogBundle, importCatalogBundle, } from './exchange.js';
4
+ export function serializeExchangeSheet(sheet, format) {
5
+ return serializeDelimitedSheet(sheet, format);
6
+ }
7
+ export function parseExchangeSheet(name, input, format) {
8
+ const sheet = parseDelimitedSheet(input, format);
9
+ const parsedRows = sheet.rows.map((row, rowIndex) => assertWorkbookRow({ ...row }, `${name}:${String(rowIndex + 2)}`));
10
+ return {
11
+ name,
12
+ columns: sheet.columns,
13
+ rows: parsedRows,
14
+ };
15
+ }
16
+ export function serializeCatalogBundleJson(bundle) {
17
+ return JSON.stringify(bundle, null, 2);
18
+ }
19
+ export function parseCatalogBundleJson(input) {
20
+ let parsed;
21
+ try {
22
+ parsed = JSON.parse(input);
23
+ }
24
+ catch {
25
+ throw new Error('Invalid catalog bundle json: malformed json');
26
+ }
27
+ try {
28
+ assertCatalogBundle(parsed);
29
+ return exportCatalogBundle(importCatalogBundle(parsed));
30
+ }
31
+ catch (error) {
32
+ const message = error instanceof Error ? error.message : 'unknown error';
33
+ throw new Error(`Invalid catalog bundle json: ${message}`, { cause: error });
34
+ }
35
+ }
36
+ //# sourceMappingURL=catalog-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-adapters.js","sourceRoot":"","sources":["../src/catalog-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,sBAAsB,CACpC,KAAoB,EACpB,MAAuB;IAEvB,OAAO,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,KAAa,EACb,MAAuB;IAEvB,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAClD,iBAAiB,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CACjE,CAAC;IACF,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,IAAI,EAAE,UAAU;KACjB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAqB;IAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC;QACH,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type DelimitedFormat = 'csv' | 'tsv';
2
+ export interface DelimitedSheet {
3
+ readonly columns: readonly string[];
4
+ readonly rows: readonly Readonly<Record<string, string>>[];
5
+ }
6
+ export interface DelimitedSheetInput {
7
+ readonly columns: readonly string[];
8
+ readonly rows: readonly object[];
9
+ }
10
+ export declare function serializeDelimitedSheet(sheet: DelimitedSheetInput, format: DelimitedFormat): string;
11
+ export declare function parseDelimitedSheet(input: string, format: DelimitedFormat): DelimitedSheet;
12
+ //# sourceMappingURL=delimited-adapters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delimited-adapters.d.ts","sourceRoot":"","sources":["../src/delimited-adapters.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;CAC5D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAmFD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CAUnG;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,cAAc,CAwB1F"}
@@ -0,0 +1,99 @@
1
+ import { delimitedRowFromCells, serializedCell, } from './adapter-guards.js';
2
+ function delimiterFor(format) {
3
+ return format === 'csv' ? ',' : '\t';
4
+ }
5
+ function escapeCell(value, delimiter) {
6
+ if (!value.includes(delimiter) && !value.includes('"') && !value.includes('\n') && !value.includes('\r')) {
7
+ return value;
8
+ }
9
+ return `"${value.replaceAll('"', '""')}"`;
10
+ }
11
+ function serializeDelimitedRow(values, delimiter) {
12
+ return values.map((value) => escapeCell(value, delimiter)).join(delimiter);
13
+ }
14
+ function parseDelimited(input, delimiter) {
15
+ const rows = [];
16
+ let row = [];
17
+ let cell = '';
18
+ let inQuotes = false;
19
+ for (let index = 0; index < input.length; index += 1) {
20
+ const char = input.charAt(index);
21
+ const next = input.charAt(index + 1);
22
+ if (inQuotes) {
23
+ if (char === '"') {
24
+ if (next === '"') {
25
+ cell += '"';
26
+ index += 1;
27
+ continue;
28
+ }
29
+ inQuotes = false;
30
+ continue;
31
+ }
32
+ cell += char;
33
+ continue;
34
+ }
35
+ if (char === '"') {
36
+ if (cell.length !== 0) {
37
+ cell += char;
38
+ continue;
39
+ }
40
+ inQuotes = true;
41
+ continue;
42
+ }
43
+ if (char === delimiter) {
44
+ row.push(cell);
45
+ cell = '';
46
+ continue;
47
+ }
48
+ if (char === '\r') {
49
+ continue;
50
+ }
51
+ if (char === '\n') {
52
+ row.push(cell);
53
+ rows.push(row);
54
+ row = [];
55
+ cell = '';
56
+ continue;
57
+ }
58
+ cell += char;
59
+ }
60
+ if (inQuotes) {
61
+ throw new Error('Invalid delimited sheet: unterminated quoted cell');
62
+ }
63
+ if (cell.length > 0 || row.length > 0) {
64
+ row.push(cell);
65
+ rows.push(row);
66
+ }
67
+ return rows;
68
+ }
69
+ export function serializeDelimitedSheet(sheet, format) {
70
+ const delimiter = delimiterFor(format);
71
+ const lines = [
72
+ serializeDelimitedRow(sheet.columns, delimiter),
73
+ ...sheet.rows.map((row) => serializeDelimitedRow(sheet.columns.map((column) => serializedCell(row, column)), delimiter)),
74
+ ];
75
+ return lines.join('\n');
76
+ }
77
+ export function parseDelimitedSheet(input, format) {
78
+ const delimiter = delimiterFor(format);
79
+ const rows = parseDelimited(input, delimiter);
80
+ if (rows.length === 0) {
81
+ throw new Error('Invalid delimited sheet: empty input');
82
+ }
83
+ const [header, ...body] = rows;
84
+ if (header === undefined) {
85
+ throw new Error('Invalid delimited sheet: missing header');
86
+ }
87
+ const columns = [...header];
88
+ const parsedRows = body.map((cells, rowIndex) => {
89
+ if (cells.length !== columns.length) {
90
+ throw new Error(`Invalid delimited sheet: ragged row ${String(rowIndex + 2)}`);
91
+ }
92
+ return delimitedRowFromCells(columns, cells);
93
+ });
94
+ return Object.freeze({
95
+ columns: Object.freeze(columns),
96
+ rows: Object.freeze(parsedRows),
97
+ });
98
+ }
99
+ //# sourceMappingURL=delimited-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delimited-adapters.js","sourceRoot":"","sources":["../src/delimited-adapters.ts"],"names":[],"mappings":"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"}
@@ -1,58 +1,5 @@
1
- import type { I18nCatalogKey, I18nEntryKind } from '@flyingrobots/bijou-i18n';
2
- import type { AuthoringCatalog, AuthoringTranslationStatus, TranslationRow } from './tools.js';
3
- export type ExchangeValueKind = 'string' | 'number' | 'boolean' | 'null' | 'object' | 'array' | 'reference';
4
- export interface EncodedExchangeValue {
5
- readonly kind: ExchangeValueKind;
6
- readonly payload: string;
7
- }
8
- export interface TranslationWorkbookRow {
9
- readonly namespace: string;
10
- readonly id: string;
11
- readonly kind: string;
12
- readonly sourceLocale: string;
13
- readonly targetLocale: string;
14
- readonly status: string;
15
- readonly sourceHash: string;
16
- readonly description: string;
17
- readonly sourceValueKind: string;
18
- readonly sourceValue: string;
19
- readonly translatedValueKind: string;
20
- readonly translatedValue: string;
21
- }
22
- export interface ExchangeSheet {
23
- readonly name: string;
24
- readonly columns: readonly string[];
25
- readonly rows: readonly TranslationWorkbookRow[];
26
- }
27
- export interface ExchangeWorkbook {
28
- readonly version: 1;
29
- readonly sheets: readonly ExchangeSheet[];
30
- }
31
- export interface SerializedAuthoringTranslation {
32
- readonly value: EncodedExchangeValue;
33
- readonly sourceHash: string;
34
- readonly status: AuthoringTranslationStatus;
35
- }
36
- export interface SerializedAuthoringCatalogEntry {
37
- readonly key: I18nCatalogKey;
38
- readonly kind: I18nEntryKind;
39
- readonly sourceLocale: string;
40
- readonly sourceValue: EncodedExchangeValue;
41
- readonly translations: Readonly<Record<string, SerializedAuthoringTranslation>>;
42
- readonly description?: string;
43
- }
44
- export interface SerializedAuthoringCatalog {
45
- readonly namespace: string;
46
- readonly entries: readonly SerializedAuthoringCatalogEntry[];
47
- }
48
- export interface CatalogBundle {
49
- readonly version: 1;
50
- readonly catalogs: readonly SerializedAuthoringCatalog[];
51
- }
52
- export declare function encodeExchangeValue(value: unknown): EncodedExchangeValue;
53
- export declare function decodeExchangeValue(encoded: EncodedExchangeValue): unknown;
54
- export declare function exportTranslationWorkbook(catalogs: readonly AuthoringCatalog[], locale: string): ExchangeWorkbook;
55
- export declare function importTranslationWorkbook(workbook: ExchangeWorkbook): readonly TranslationRow[];
56
- export declare function exportCatalogBundle(catalogs: readonly AuthoringCatalog[]): CatalogBundle;
57
- export declare function importCatalogBundle(bundle: CatalogBundle): readonly AuthoringCatalog[];
1
+ export type { CatalogBundle, EncodedExchangeValue, ExchangeSheet, ExchangeValueKind, ExchangeWorkbook, SerializedAuthoringCatalog, SerializedAuthoringCatalogEntry, SerializedAuthoringTranslation, TranslationWorkbookRow } from './exchange.part01.js';
2
+ export { encodeExchangeValue, isExchangeValueKind } from './exchange.part01.js';
3
+ export { decodeExchangeValue, exportTranslationWorkbook } from './exchange.part02.js';
4
+ export { exportCatalogBundle, importCatalogBundle, importTranslationWorkbook } from './exchange.part03.js';
58
5
  //# sourceMappingURL=exchange.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../src/exchange.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exchange.d.ts","sourceRoot":"","sources":["../src/exchange.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACzP,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC"}