@flyingrobots/bijou-i18n-tools-node 4.1.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/LICENSE ADDED
@@ -0,0 +1,17 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ Copyright 2026 James Ross
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,12 @@
1
+ # @flyingrobots/bijou-i18n-tools-node
2
+
3
+ Node filesystem helpers for Bijou localization exchange workflows.
4
+
5
+ `@flyingrobots/bijou-i18n-tools-node` builds on `@flyingrobots/bijou-i18n-tools` and provides:
6
+
7
+ - reading and writing CSV/TSV exchange sheet files
8
+ - reading and writing JSON catalog bundle files
9
+ - reading and writing workbook directories with a versioned manifest
10
+ - extension-based format inference for `.csv`, `.tsv`, and `.json`
11
+
12
+ This package intentionally keeps Node/file concerns out of the pure `@flyingrobots/bijou-i18n-tools` package.
@@ -0,0 +1,17 @@
1
+ import { type CatalogBundle, type DelimitedFormat, type ExchangeSheet, type ExchangeWorkbook } from '@flyingrobots/bijou-i18n-tools';
2
+ export interface WorkbookDirectorySheet {
3
+ readonly name: string;
4
+ readonly fileName: string;
5
+ }
6
+ export interface WorkbookDirectoryManifest {
7
+ readonly version: 1;
8
+ readonly format: DelimitedFormat;
9
+ readonly sheets: readonly WorkbookDirectorySheet[];
10
+ }
11
+ export declare function writeExchangeSheetFile(path: string, sheet: ExchangeSheet, format?: DelimitedFormat): Promise<void>;
12
+ export declare function readExchangeSheetFile(path: string, format?: DelimitedFormat): Promise<ExchangeSheet>;
13
+ export declare function writeCatalogBundleFile(path: string, bundle: CatalogBundle): Promise<void>;
14
+ export declare function readCatalogBundleFile(path: string): Promise<CatalogBundle>;
15
+ export declare function writeExchangeWorkbookDirectory(dir: string, workbook: ExchangeWorkbook, format: DelimitedFormat): Promise<void>;
16
+ export declare function readExchangeWorkbookDirectory(dir: string): Promise<ExchangeWorkbook>;
17
+ //# sourceMappingURL=filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACpD;AAuCD,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,EACpB,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CAIxB;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAI/F;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAIhF;AAED,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED,wBAAsB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyB1F"}
@@ -0,0 +1,146 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { basename, extname, join } from 'node:path';
3
+ import { parseCatalogBundleJson, parseExchangeSheet, serializeCatalogBundleJson, serializeExchangeSheet, } from '@flyingrobots/bijou-i18n-tools';
4
+ function inferDelimitedFormat(path) {
5
+ const extension = extname(path).toLowerCase();
6
+ if (extension === '.csv') {
7
+ return 'csv';
8
+ }
9
+ if (extension === '.tsv') {
10
+ return 'tsv';
11
+ }
12
+ throw new Error(`Unsupported sheet file extension: ${extension || '(none)'}`);
13
+ }
14
+ function inferBundleExtension(path) {
15
+ const extension = extname(path).toLowerCase();
16
+ if (extension !== '.json') {
17
+ throw new Error(`Unsupported catalog bundle file extension: ${extension || '(none)'}`);
18
+ }
19
+ }
20
+ function slugifySheetName(name) {
21
+ const slug = name
22
+ .trim()
23
+ .replace(/\s+/g, '-')
24
+ .replace(/[^a-zA-Z0-9._-]/g, '-')
25
+ .replace(/-+/g, '-');
26
+ return slug.length === 0 ? 'sheet' : slug;
27
+ }
28
+ function manifestPath(dir) {
29
+ return join(dir, 'workbook.json');
30
+ }
31
+ function sheetNameFromPath(path) {
32
+ const base = basename(path);
33
+ const extension = extname(base);
34
+ return base.slice(0, base.length - extension.length);
35
+ }
36
+ export async function writeExchangeSheetFile(path, sheet, format) {
37
+ const resolvedFormat = format ?? inferDelimitedFormat(path);
38
+ const content = serializeExchangeSheet(sheet, resolvedFormat);
39
+ await mkdir(dirnameSafe(path), { recursive: true });
40
+ await writeFile(path, content, 'utf8');
41
+ }
42
+ export async function readExchangeSheetFile(path, format) {
43
+ const resolvedFormat = format ?? inferDelimitedFormat(path);
44
+ const content = await readFile(path, 'utf8');
45
+ return parseExchangeSheet(sheetNameFromPath(path), content, resolvedFormat);
46
+ }
47
+ export async function writeCatalogBundleFile(path, bundle) {
48
+ inferBundleExtension(path);
49
+ await mkdir(dirnameSafe(path), { recursive: true });
50
+ await writeFile(path, serializeCatalogBundleJson(bundle), 'utf8');
51
+ }
52
+ export async function readCatalogBundleFile(path) {
53
+ inferBundleExtension(path);
54
+ const content = await readFile(path, 'utf8');
55
+ return parseCatalogBundleJson(content);
56
+ }
57
+ export async function writeExchangeWorkbookDirectory(dir, workbook, format) {
58
+ await mkdir(dir, { recursive: true });
59
+ const manifest = {
60
+ version: 1,
61
+ format,
62
+ sheets: workbook.sheets.map((sheet) => ({
63
+ name: sheet.name,
64
+ fileName: `${slugifySheetName(sheet.name)}.${format}`,
65
+ })),
66
+ };
67
+ for (const sheet of workbook.sheets) {
68
+ const entry = manifest.sheets.find((candidate) => candidate.name === sheet.name);
69
+ if (entry === undefined) {
70
+ throw new Error(`Missing workbook manifest entry for sheet: ${sheet.name}`);
71
+ }
72
+ await writeFile(join(dir, entry.fileName), serializeExchangeSheet(sheet, format), 'utf8');
73
+ }
74
+ await writeFile(manifestPath(dir), JSON.stringify(manifest, null, 2), 'utf8');
75
+ }
76
+ export async function readExchangeWorkbookDirectory(dir) {
77
+ let manifestRaw;
78
+ try {
79
+ manifestRaw = await readFile(manifestPath(dir), 'utf8');
80
+ }
81
+ catch {
82
+ throw new Error(`Missing workbook manifest: ${manifestPath(dir)}`);
83
+ }
84
+ const manifest = parseWorkbookManifest(manifestRaw);
85
+ const sheets = [];
86
+ for (const sheet of manifest.sheets) {
87
+ const path = join(dir, sheet.fileName);
88
+ let content;
89
+ try {
90
+ content = await readFile(path, 'utf8');
91
+ }
92
+ catch {
93
+ throw new Error(`Missing workbook sheet file: ${path}`);
94
+ }
95
+ sheets.push(parseExchangeSheet(sheet.name, content, manifest.format));
96
+ }
97
+ return {
98
+ version: 1,
99
+ sheets,
100
+ };
101
+ }
102
+ function parseWorkbookManifest(input) {
103
+ let parsed;
104
+ try {
105
+ parsed = JSON.parse(input);
106
+ }
107
+ catch {
108
+ throw new Error('Invalid workbook manifest: malformed json');
109
+ }
110
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
111
+ throw new Error('Invalid workbook manifest: expected object');
112
+ }
113
+ const version = parsed.version;
114
+ const format = parsed.format;
115
+ const sheets = parsed.sheets;
116
+ if (version !== 1) {
117
+ throw new Error(`Invalid workbook manifest: unsupported version ${String(version)}`);
118
+ }
119
+ if (format !== 'csv' && format !== 'tsv') {
120
+ throw new Error(`Invalid workbook manifest: unsupported format ${String(format)}`);
121
+ }
122
+ if (!Array.isArray(sheets)) {
123
+ throw new Error('Invalid workbook manifest: expected sheets array');
124
+ }
125
+ const parsedSheets = sheets.map((sheet) => {
126
+ if (typeof sheet !== 'object' || sheet === null || Array.isArray(sheet)) {
127
+ throw new Error('Invalid workbook manifest: sheet entry must be an object');
128
+ }
129
+ const name = sheet.name;
130
+ const fileName = sheet.fileName;
131
+ if (typeof name !== 'string' || typeof fileName !== 'string') {
132
+ throw new Error('Invalid workbook manifest: sheet entry requires name and fileName');
133
+ }
134
+ return { name, fileName };
135
+ });
136
+ return {
137
+ version: 1,
138
+ format,
139
+ sheets: parsedSheets,
140
+ };
141
+ }
142
+ function dirnameSafe(path) {
143
+ const slash = path.lastIndexOf('/');
144
+ return slash <= 0 ? '.' : path.slice(0, slash);
145
+ }
146
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { readCatalogBundleFile, readExchangeSheetFile, readExchangeWorkbookDirectory, writeCatalogBundleFile, writeExchangeSheetFile, writeExchangeWorkbookDirectory, type WorkbookDirectoryManifest, type WorkbookDirectorySheet, } from './filesystem.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,GAC5B,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { readCatalogBundleFile, readExchangeSheetFile, readExchangeWorkbookDirectory, writeCatalogBundleFile, writeExchangeSheetFile, writeExchangeWorkbookDirectory, } from './filesystem.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,GAG/B,MAAM,iBAAiB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@flyingrobots/bijou-i18n-tools-node",
3
+ "version": "4.1.0",
4
+ "description": "Node filesystem helpers for Bijou localization exchange workflows.",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "scripts": {
22
+ "build": "tsc -b",
23
+ "prepack": "tsc -b",
24
+ "lint": "tsc --noEmit"
25
+ },
26
+ "dependencies": {
27
+ "@flyingrobots/bijou-i18n-tools": "4.1.0"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^22.0.0",
31
+ "typescript": "^5.9.3",
32
+ "vitest": "^4.0.18"
33
+ },
34
+ "keywords": [
35
+ "i18n",
36
+ "localization",
37
+ "translation",
38
+ "filesystem",
39
+ "node",
40
+ "bijou"
41
+ ],
42
+ "author": "James Ross <james@flyingrobots.dev>",
43
+ "license": "Apache-2.0",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/flyingrobots/bijou.git",
47
+ "directory": "packages/bijou-i18n-tools-node"
48
+ },
49
+ "homepage": "https://github.com/flyingrobots/bijou",
50
+ "bugs": "https://github.com/flyingrobots/bijou/issues",
51
+ "engines": {
52
+ "node": ">=18"
53
+ },
54
+ "publishConfig": {
55
+ "access": "public",
56
+ "provenance": true
57
+ }
58
+ }