{"_id":"lokalise-file-exchange","_rev":"14-9164201b6c741da45f5dada07b4c78bc","name":"lokalise-file-exchange","dist-tags":{"latest":"5.2.0"},"versions":{"1.0.0":{"name":"lokalise-file-exchange","version":"1.0.0","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@1.0.0","maintainers":[{"name":"bodrovis","email":"golosizpru@gmail.com"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"ee028a33b5d9ea8b56a3a1f1d3c981e9685a7038","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-1.0.0.tgz","fileCount":43,"integrity":"sha512-w7MmkhawyUC1330lG0nWFxZv3Eq3Y+k52F4/qSOtOdRTGXfItmaodE14Bic3pP1aNKUWtVwJeOmTOXYBOOR0pg==","signatures":[{"sig":"MEYCIQCJjiJcv5b62dTeVuJHG64gUrIjfns8AlicdQG6KnAWOgIhAOcAenGA1gpL03cugcljJigQVMAVHO//qDvYTKU+CcGv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":155990},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":"./dist/index.js","gitHead":"bd6cb7c696d2e46f30bac4afe1812cecd7697d2b","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"rimraf dist && tsup","lint:fix":"npx @biomejs/biome check --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"golosizpru@gmail.com"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"10.9.2","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"23.4.0","dependencies":{"yauzl":"^3.2.0","@lokalise/node-api":"^13.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","dotenv":"^16.0.0","rimraf":"^6.0.1","undici":"^7.0.0","vitest":"^2.0.3","mock-fs":"^5.4.1","typescript":"^5.7.0","@types/node":"^22.0.2","@types/yauzl":"^2.10.3","@biomejs/biome":"^1.9.0","@types/mock-fs":"^4.13.4","@vitest/coverage-istanbul":"^2.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_1.0.0_1734373166888_0.8184096121478692","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"lokalise-file-exchange","version":"1.1.0","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@1.1.0","maintainers":[{"name":"bodrovis","email":"golosizpru@gmail.com"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"659e194ae0727082e36548265d0b388463b5f624","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-1.1.0.tgz","fileCount":46,"integrity":"sha512-8P8z+Z3xQ8k5gzVN+SrfNHqOa/hvRHoSuFgITEezPXT/ysKyGYEr3/Shd5Eq/CYnnoyUtpCQrlWtNF9lAog6Ew==","signatures":[{"sig":"MEUCIQDQX10BYls8AovmILberXmYfaziwSQhEpXYAWMZSbczHAIgAPQWuSk87nqCBMwP6GkliDy1O7x3AWdHNof3iQ99ZaA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183448},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":"./dist/index.js","gitHead":"369d388e67c178e7ba02e0cd892c0f8557399371","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"rimraf dist && tsup","lint:fix":"npx @biomejs/biome check --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"golosizpru@gmail.com"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.1.0","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"23.4.0","dependencies":{"yauzl":"^3.2.0","@lokalise/node-api":"^13.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","dotenv":"^16.0.0","rimraf":"^6.0.1","undici":"^7.0.0","vitest":"^3.0.3","mock-fs":"^5.4.1","typescript":"^5.7.0","@types/node":"^22.0.2","@types/yauzl":"^2.10.3","@biomejs/biome":"^1.9.0","@types/mock-fs":"^4.13.4","@vitest/coverage-istanbul":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_1.1.0_1739990360628_0.5116284035017615","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"lokalise-file-exchange","version":"2.0.0","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@2.0.0","maintainers":[{"name":"bodrovis","email":"golosizpru@gmail.com"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"438203537a7b0487095c25e27800131b577c8ff6","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-2.0.0.tgz","fileCount":46,"integrity":"sha512-lr1cKSJstFBpefgSUIIFQB0kIVE7j4fLRJsUkvCxo6itvsaUkWejtTs4jicONTGBvDC2oj+oxNRzwurze6QuYQ==","signatures":[{"sig":"MEYCIQD7ezTwknWvM3mniFy1hBC5cLV7cBHQDAQGwUbQyz/LNwIhAPmhXZmtSzAMMxnybpH7kduDYH9wGNsbhBj7WKO1/nox","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188209},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":"./dist/index.js","gitHead":"5e955f254f18404bdb753a08bbd56ad8a08c9eed","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"rimraf dist && tsup","lint:fix":"npx @biomejs/biome check --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"golosizpru@gmail.com"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.2.0","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"23.4.0","dependencies":{"yauzl":"^3.2.0","@lokalise/node-api":"^14.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","dotenv":"^16.0.0","rimraf":"^6.0.1","undici":"^7.0.0","vitest":"^3.0.3","mock-fs":"^5.4.1","typescript":"^5.8.2","@types/node":"^22.0.2","@types/yauzl":"^2.10.3","@biomejs/biome":"^1.9.0","@types/mock-fs":"^4.13.4","@vitest/coverage-istanbul":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_2.0.0_1742475169010_0.03329543863751061","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"lokalise-file-exchange","version":"2.1.0","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@2.1.0","maintainers":[{"name":"bodrovis","email":"golosizpru@gmail.com"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"8e6a6c80757bdd607e7b4860f6769f55f99f1e64","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-2.1.0.tgz","fileCount":47,"integrity":"sha512-Bc1i1q6EoJKM+7/2kRfTGjPKlorljaEAUH120bpOZ9yrFEw9ClImrHqjyXlDpymWuh18v9alGhjZ5a8LwrCjWQ==","signatures":[{"sig":"MEUCIQD3S3X5M9zA3X8D/Z6WiNY8uqU1MaJAJ/OL1+Jay2P8mwIgNotCYrqEA0Oa90WS+sOd0VaV3h5LFRo685FTPv/Lnr0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":193191},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":"./dist/index.js","gitHead":"ddcb6cdf1d189f1bbdee17124a811a27875968ae","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"rimraf dist && tsup","lint:fix":"npx @biomejs/biome check --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"golosizpru@gmail.com"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.2.0","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"23.4.0","dependencies":{"yauzl":"^3.2.0","@lokalise/node-api":"^14.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","dotenv":"^16.0.0","rimraf":"^6.0.1","undici":"^7.0.0","vitest":"^3.0.3","mock-fs":"^5.4.1","typescript":"^5.8.2","@types/node":"^22.0.2","@types/yauzl":"^2.10.3","@biomejs/biome":"^1.9.0","@types/mock-fs":"^4.13.4","@vitest/coverage-istanbul":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_2.1.0_1743528835961_0.5935244975238627","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"lokalise-file-exchange","version":"3.0.0","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@3.0.0","maintainers":[{"name":"bodrovis","email":"golosizpru@gmail.com"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"4fa9a55ed3edbab77472a17ccabb4594e31511a0","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-3.0.0.tgz","fileCount":49,"integrity":"sha512-LCEnbdHSkY9+nel00CqgZ4gSlgPS1x2IIKY5rgXysYrGlPY/cUuJB0SrFvzjEU6T9Y3Dhah8P0yOOwHTPNFE5g==","signatures":[{"sig":"MEYCIQDNMjjB+QqfdK0axuQD/9QyW3xEJRrDBb6uRnWV+Cgj7QIhAJ5hYS25TpHDtf0Zs703lUwYJZsyqTKZKzXQ8viCdF79","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194348},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":"./dist/index.js","gitHead":"b8d47bed06462c68533106b3095ac144f3a05aae","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"rimraf dist && tsup","lint:fix":"npx @biomejs/biome check --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"golosizpru@gmail.com"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.3.0","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"23.11.0","dependencies":{"yauzl":"^3.2.0","@lokalise/node-api":"^14.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","dotenv":"^16.0.0","rimraf":"^6.0.1","undici":"^7.0.0","vitest":"^3.0.3","mock-fs":"^5.4.1","typescript":"^5.8.2","@types/node":"^22.0.2","@types/yauzl":"^2.10.3","@biomejs/biome":"^1.9.0","@types/mock-fs":"^4.13.4","@vitest/coverage-istanbul":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_3.0.0_1744474212855_0.5388160561421886","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"lokalise-file-exchange","version":"3.1.0","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@3.1.0","maintainers":[{"name":"bodrovis","email":"golosizpru@gmail.com"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"e4cf4a2e41a618dff914ca84cb8e864ece8298cc","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-3.1.0.tgz","fileCount":50,"integrity":"sha512-9xDjx4Au/RjElEQ0HFKM9if5eT+NMPn98pw1PsMx7woUwkWn93l6fwOjw/t3T/ItuIIV2AMHewz5DY+P0iXMAA==","signatures":[{"sig":"MEUCIQCkqKMacPgsIcUWGky8Blzqs/L8jGZO69dDrqnWuXcrPwIgGgH8H1vK0OqfZXDXfbMpWgLCVAgYKj3uveBWT5W/z/Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":236509},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":"./dist/index.js","gitHead":"c7cded229ecf74a943098d0b9ec3faa962667408","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"rimraf dist && tsup","format":"npx @biomejs/biome format ./","lint:fix":"npx @biomejs/biome check --write ./","format:fix":"npx @biomejs/biome format --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"golosizpru@gmail.com"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.3.0","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"24.0.0","dependencies":{"yauzl":"^3.2.0","kliedz":"^1.0.1","@lokalise/node-api":"^14.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","dotenv":"^16.0.0","rimraf":"^6.0.1","undici":"^7.0.0","vitest":"^3.0.3","mock-fs":"^5.4.1","typescript":"^5.8.2","@types/node":"^22.0.2","@types/yauzl":"^2.10.3","@biomejs/biome":"^1.9.0","@types/mock-fs":"^4.13.4","@vitest/coverage-istanbul":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_3.1.0_1746988194630_0.46664514896553366","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"lokalise-file-exchange","version":"4.0.0","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@4.0.0","maintainers":[{"name":"bodrovis","email":"golosizpru@gmail.com"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"7b8af6789d1b1fbc5b4c5d385e575549c6d43d96","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-4.0.0.tgz","fileCount":51,"integrity":"sha512-0w8gz5JF99Ak9APziw307R8CdR5mGzJfGqaLV1r0F1InI2avFSZFv/Jvo4dVAaxfMfjFqdnqZEyTn7ggqjHulQ==","signatures":[{"sig":"MEUCIQCt7jhzzPd67J38uR5UC9z3o+udpcgDF6SJEbe+ADdNbwIgfFIDk1ySX/C7wdRQPYWIpNshedFFDLCQJTRLxDQDhr8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240469},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":"./dist/index.js"},"gitHead":"f28a649f59f4fbd04656b09aa32498e2a774bcf3","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"tsup","format":"npx @biomejs/biome format ./","lint:fix":"npx @biomejs/biome check --write ./","format:fix":"npx @biomejs/biome format --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"golosizpru@gmail.com"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.4.2","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"24.4.1","dependencies":{"yauzl":"^3.2.0","kliedz":"^1.0.1","@lokalise/node-api":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","undici":"^7.0.0","vitest":"^3.0.3","mock-fs":"^5.4.1","typescript":"^5.8.2","@types/node":"^24.0.7","@types/yauzl":"^2.10.3","@biomejs/biome":"^2.0.6","@types/mock-fs":"^4.13.4","@vitest/coverage-istanbul":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_4.0.0_1753280895899_0.9042808945446617","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"lokalise-file-exchange","version":"4.0.1","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@4.0.1","maintainers":[{"name":"bodrovis","email":"golosizpru@gmail.com"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"2529913d4b17b8f57b57183ab16be04514a41d2a","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-4.0.1.tgz","fileCount":52,"integrity":"sha512-rioamBsFlKctTaSA2Joc7CvBaG5LIzUWL9Oa7nuetMyg810KRPqRqa4I7rLbx7fZ47i2Rd/qxP60yZU2uMgkbw==","signatures":[{"sig":"MEUCIQCKaUZU6hmYVo8kzzE86VoD70impUme3yyI7U8aVhtK/wIge0BaRs7WGV5GnPyxr84lu9DZviJkPI1nGG5sJVjtAO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246377},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":"./dist/index.js"},"gitHead":"660486daf7eed2680fc5c3a98df5e071034bf8f7","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"tsup","format":"npx @biomejs/biome format ./","lint:fix":"npx @biomejs/biome check --write ./","format:fix":"npx @biomejs/biome format --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"golosizpru@gmail.com"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.6.2","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"24.11.0","dependencies":{"yauzl":"^3.2.0","kliedz":"^1.0.1","@lokalise/node-api":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","undici":"^7.0.0","vitest":"^4.0.3","mock-fs":"^5.4.1","typescript":"^5.8.2","@types/node":"^24.0.7","@types/yauzl":"^2.10.3","patch-package":"^8.0.1","@biomejs/biome":"^2.0.6","@types/mock-fs":"^4.13.4","@vitest/coverage-v8":"^4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_4.0.1_1762537248081_0.04938902395993794","host":"s3://npm-registry-packages-npm-production"}},"4.0.2":{"name":"lokalise-file-exchange","version":"4.0.2","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@4.0.2","maintainers":[{"name":"bodrovis","email":"golosizpru@gmail.com"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"eb92dbfa7645478d1dcdde354ad52cef36c8bfd3","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-4.0.2.tgz","fileCount":52,"integrity":"sha512-3r3Xk43l9iDvkW/1V47osxCat5M8zAhr0pICz7418AKn8k5aRzt8z0tXiw5PHiMuMaROtYQgcxg2+H/i1ud1hQ==","signatures":[{"sig":"MEUCIQDG2HHCUJQ/IBKHEbZx5Bq3CjtEd405QHRmvBphtZUuyQIgZGjAOHnwrNVnWEu/NSFn975F/QN9QnwSVrde/elMEx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251763},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":"./dist/index.js"},"gitHead":"05ac17451543a73788e1d2bde744f6c99ce01305","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"tsup","format":"npx @biomejs/biome format ./","lint:fix":"npx @biomejs/biome check --write ./","format:fix":"npx @biomejs/biome format --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"golosizpru@gmail.com"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.6.2","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"24.11.0","dependencies":{"yauzl":"^3.2.0","kliedz":"^1.0.1","@lokalise/node-api":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","undici":"^7.0.0","vitest":"^4.0.3","mock-fs":"^5.4.1","typescript":"^5.8.2","@types/node":"^24.0.7","@types/yauzl":"^2.10.3","patch-package":"^8.0.1","@biomejs/biome":"^2.0.6","@types/mock-fs":"^4.13.4","@vitest/coverage-v8":"^4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_4.0.2_1762779671600_0.5472832940865473","host":"s3://npm-registry-packages-npm-production"}},"4.0.3":{"name":"lokalise-file-exchange","version":"4.0.3","keywords":["api","node","typescript","lokalise","client","client library"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@4.0.3","maintainers":[{"name":"bodrovis","email":"elskruk@proton.me"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"887f628ac1bead84d9d204ef5e5dc65494c0243f","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-4.0.3.tgz","fileCount":53,"integrity":"sha512-NH/iUJGyifJwEJQSEkJvpOpktllX9ra4IrsS+20wLkpNYCNZD/GhkAGyXLHlbNb6zdpvz/ZGpYuW0BRHSpqLwQ==","signatures":[{"sig":"MEUCIQCPyG6rVAfai7fkv66k+3C9ziF2wgE8Iw2TPF4mV7aRmQIgLIVEl6DrAM68Yk7Czjh28ZMSKZyNuF/tHopXJawU2eI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252465},"type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":"./dist/index.js"},"gitHead":"fac62229a965584d2ecf20ee0e4434d3b9f615bb","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"tsup","format":"npx @biomejs/biome format ./","lint:fix":"npx @biomejs/biome check --write ./","format:fix":"npx @biomejs/biome format --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"elskruk@proton.me"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.7.0","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"25.2.1","dependencies":{"yauzl":"^3.2.0","kliedz":"^2.0.0","@lokalise/node-api":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","undici":"^7.0.0","vitest":"^4.0.3","mock-fs":"^5.4.1","typescript":"^5.8.2","@types/node":"^25.0.3","@types/yauzl":"^2.10.3","@biomejs/biome":"^2.0.6","@types/mock-fs":"^4.13.4","@vitest/coverage-v8":"^4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_4.0.3_1768411176017_0.07012133857278458","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"lokalise-file-exchange","version":"4.2.0","keywords":["api","node","typescript","lokalise","client","client library","i18n","internationalization","localization","l10n","translation","translation management"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@4.2.0","maintainers":[{"name":"bodrovis","email":"elskruk@proton.me"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"42215d77561f2472be39c7dcb6f9a58b4bffd214","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-4.2.0.tgz","fileCount":54,"integrity":"sha512-Zweor1YuO00J8wVbOJsoUz9wRilF/92uwEyQELoA+0+YmkK0VuvNKXxJAFtNNHAj1KmpL2VAF1JFYAbhpb+wCA==","signatures":[{"sig":"MEQCICqrrzMw8dvKs5U7sAgA5pm5aNUf+6nfio7w8QycwtdYAiAzgQKPGd1m6+STTuyAuVFp3vUaf3IidxbJd4YdYSDrOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341845},"type":"module","types":"./dist/index.d.mts","engines":{"node":">=20"},"exports":{".":"./dist/index.mjs"},"gitHead":"5cd4c09d5950d1e141b7c098243a6ccdee9b3b3f","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"tsdown","format":"npx @biomejs/biome format ./","lint:fix":"npx @biomejs/biome check --write ./","format:fix":"npx @biomejs/biome format --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"elskruk@proton.me"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.12.1","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"24.5.0","dependencies":{"yauzl":"^3.2.0","kliedz":"^2.1.1","@lokalise/node-api":"^15.7.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.21.4","undici":"^8.0.2","vitest":"^4.0.3","mock-fs":"^5.4.1","typescript":"^6.0.2","@types/node":"^25.0.3","@types/yauzl":"^2.10.3","@biomejs/biome":"^2.0.6","@types/mock-fs":"^4.13.4","@vitest/coverage-v8":"^4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_4.2.0_1775478856992_0.5459544174976554","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"lokalise-file-exchange","version":"5.0.0","keywords":["api","node","typescript","lokalise","client","client library","i18n","internationalization","localization","l10n","translation","translation management"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@5.0.0","maintainers":[{"name":"bodrovis","email":"elskruk@proton.me"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"7d737ab30029db03c5aec07498074f3469ccb293","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-5.0.0.tgz","fileCount":54,"integrity":"sha512-jIDC/ng0+FLeuu9UYAMYj/fJSQTLuFR7oYkwdHFfH+mP3qiCUMLhSF+7rcLeu+LKUUVx4fiUiXesdEYdluODhA==","signatures":[{"sig":"MEUCIFCDfuLuw/LwxY51/5t+x7qGKQQIwq6M7u0MKBV9RD32AiEAv5BR/9/sFVUhdrXuRzgzUAsoVjWaB6vNRJIdXUX8S9A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341945},"type":"module","types":"./dist/index.d.mts","engines":{"node":">=22.19.0"},"exports":{".":"./dist/index.mjs"},"gitHead":"088589e734ce8a03d2c97bc092b433acc9f0e664","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"tsdown","format":"npx @biomejs/biome format ./","lint:fix":"npx @biomejs/biome check --write ./","format:fix":"npx @biomejs/biome format --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"elskruk@proton.me"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"11.13.0","description":"Exchange translation files with Lokalise TMS","directories":{"lib":"./lib","test":"./test"},"_nodeVersion":"26.1.0","dependencies":{"yauzl":"^3.2.0","kliedz":"^2.1.3","@lokalise/node-api":"^16.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.22.0","undici":"^8.0.2","vitest":"^4.0.3","mock-fs":"^5.4.1","typescript":"^6.0.2","@types/node":"^25.0.3","@types/yauzl":"^2.10.3","@biomejs/biome":"^2.0.6","@types/mock-fs":"^4.13.4","@vitest/coverage-v8":"^4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_5.0.0_1778238503113_0.8993631631267522","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"lokalise-file-exchange","version":"5.1.0","keywords":["api","node","typescript","lokalise","client","client library","i18n","internationalization","localization","l10n","translation","translation management"],"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","_id":"lokalise-file-exchange@5.1.0","maintainers":[{"name":"bodrovis","email":"elskruk@proton.me"}],"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"dist":{"shasum":"8aa8900ebc3967fcea94bbdb5a8c2dc647966663","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-5.1.0.tgz","fileCount":27,"integrity":"sha512-GkmjxtL3E0XTh5H3cVDnKnAe7Q51fAIPr0qYR8OpO+M4+Y/C5dewlwBeHwVoBney5LH3SslMV1kKvSNQD/CUdw==","signatures":[{"sig":"MEQCIDLl4J2FYt9uaPBONTK5lPeik2ExjZFelywidYjcgI+zAiB4GL7etBFHm7ParaNRMk1pbm3M8kSC6BlNazVBfEzCUA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":241353},"type":"module","types":"./dist/index.d.mts","engines":{"node":">=22.19.0"},"exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"}},"gitHead":"5cb4eb846c70ebc71137187221312577262aeb77","scripts":{"lint":"npx @biomejs/biome check ./","test":"vitest run","build":"tsdown","format":"npx @biomejs/biome format ./","lint:fix":"npx @biomejs/biome check --write ./","format:fix":"npx @biomejs/biome format --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./"},"_npmUser":{"name":"bodrovis","email":"elskruk@proton.me"},"repository":{"url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git","type":"git"},"_npmVersion":"12.0.1","description":"Exchange translation files with Lokalise TMS","directories":{},"_nodeVersion":"26.2.0","dependencies":{"yauzl":"^3.2.0","kliedz":"^2.2.0","@lokalise/node-api":"^16.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.22.0","undici":"^8.0.2","vitest":"^4.0.3","mock-fs":"^5.4.1","typescript":"^7.0.2","@types/node":"^26.0.1","@types/yauzl":"^3.4.0","@biomejs/biome":"^2.0.6","@types/mock-fs":"^4.13.4","@vitest/coverage-v8":"^4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/lokalise-file-exchange_5.1.0_1783952462183_0.6448645880470507","host":"s3://npm-registry-packages-npm-production"}},"5.2.0":{"name":"lokalise-file-exchange","version":"5.2.0","description":"Exchange translation files with Lokalise TMS","license":"BSD-3-Clause","repository":{"type":"git","url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git"},"keywords":["api","node","typescript","lokalise","client","client library","i18n","internationalization","localization","l10n","translation","translation management"],"type":"module","scripts":{"build":"tsdown","test":"vitest run","lint":"npx @biomejs/biome check ./","lint:fix":"npx @biomejs/biome check --write ./","lint:fix:unsafe":"npx @biomejs/biome check --write --unsafe ./","format":"npx @biomejs/biome format ./","format:fix":"npx @biomejs/biome format --write ./","typecheck":"tsc -p tsconfig.test.json --noEmit"},"publishConfig":{"access":"public"},"dependencies":{"@lokalise/node-api":"^16.1.0","kliedz":"^2.2.0","yauzl":"^3.2.0"},"devDependencies":{"@biomejs/biome":"^2.0.6","@types/node":"^26.0.1","@types/yauzl":"^3.4.0","@vitest/coverage-v8":"^4.0.3","tsdown":"^0.22.0","typescript":"^7.0.2","undici":"^8.10.1","vitest":"^4.0.3"},"bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"}},"types":"./dist/index.d.mts","author":{"name":"Ilya Krukowski"},"engines":{"node":">=22.19.0"},"gitHead":"a8aa1d39fa7cabb5e9cdda45aa054923f9cd9aef","_id":"lokalise-file-exchange@5.2.0","_nodeVersion":"26.7.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-P4QFrcui39HtZVq6gGY7nJ5g3njgQsg+fZaXd8e7eJt1jrmajWfsTQexI+kggnLi1dClc25x7xA5+wpVjXPPig==","shasum":"c2ee8fad74453fce47baa3c4cb5b85869809652a","tarball":"https://registry.npmjs.org/lokalise-file-exchange/-/lokalise-file-exchange-5.2.0.tgz","fileCount":27,"unpackedSize":246186,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDSB44os1OWA7PsfGRiyeobYevEKIxbszeyU1YKKt6GLQIgfAeNPF5AyvRxbHNrKlzQwQuHzElegsE5dagd0WzQwA8="}]},"_npmUser":{"name":"bodrovis","email":"elskruk@proton.me"},"directories":{},"maintainers":[{"name":"bodrovis","email":"elskruk@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lokalise-file-exchange_5.2.0_1788363663276_0.38277426357906896"},"_hasShrinkwrap":false}},"time":{"created":"2024-12-16T18:19:26.768Z","modified":"2026-09-02T15:41:03.602Z","1.0.0":"2024-12-16T18:19:27.123Z","1.1.0":"2025-02-19T18:39:20.859Z","2.0.0":"2025-03-20T12:52:49.230Z","2.1.0":"2025-04-01T17:33:56.203Z","3.0.0":"2025-04-12T16:10:13.060Z","3.1.0":"2025-05-11T18:29:54.821Z","4.0.0":"2025-07-23T14:28:16.154Z","4.0.1":"2025-11-07T17:40:48.323Z","4.0.2":"2025-11-10T13:01:11.797Z","4.0.3":"2026-01-14T17:19:36.163Z","4.2.0":"2026-04-06T12:34:17.145Z","5.0.0":"2026-05-08T11:08:23.275Z","5.1.0":"2026-07-13T14:21:02.313Z","5.2.0":"2026-09-02T15:41:03.438Z"},"bugs":{"url":"https://github.com/bodrovis/lokalise-node-file-exchange/issues"},"author":{"name":"Ilya Krukowski"},"license":"BSD-3-Clause","homepage":"https://github.com/bodrovis/lokalise-node-file-exchange","keywords":["api","node","typescript","lokalise","client","client library","i18n","internationalization","localization","l10n","translation","translation management"],"repository":{"type":"git","url":"git+https://github.com/bodrovis/lokalise-node-file-exchange.git"},"description":"Exchange translation files with Lokalise TMS","maintainers":[{"name":"bodrovis","email":"elskruk@proton.me"}],"readme":"# Lokalise translation file exchange for Node\r\n\r\n![npm](https://img.shields.io/npm/v/lokalise-file-exchange)\r\n![CI](https://github.com/bodrovis/lokalise-node-file-exchange/actions/workflows/ci.yml/badge.svg)\r\n[![Code Coverage][coverage-image]][coverage-url]\r\n[![NPM Downloads][npm-downloads-image]][npm-downloads-url]\r\n[![Maintainability][maintainability-image]][maintainability-url]\r\n\r\nThis package enables you to easily exchange translation files between your JavaScript/TypeScript project and [Lokalise TMS](https://lokalise.com).\r\n\r\n## Prerequisites\r\n\r\nBefore using this package, ensure you have the following:\r\n\r\n- A [Lokalise API token](https://docs.lokalise.com/en/articles/1929556-api-and-sdk-tokens#h_9ea8e7ff3c) with **read/write permissions**.\r\n- An existing [Lokalise project](https://docs.lokalise.com/en/articles/1400460-projects#h_b012f2e31f) of type **\"Web and mobile\"**.\r\n\r\n## Quickstart\r\n\r\n### Installation\r\n\r\nInstall the package via npm:\r\n\r\n```bash\r\nnpm install --save lokalise-file-exchange\r\n```\r\n\r\n### Uploading translation files\r\n\r\nUse the `LokaliseUpload` class to upload translation files from your project to Lokalise:\r\n\r\n```js\r\nimport { LokaliseUpload } from \"lokalise-file-exchange\";\r\n\r\nconst apiKey = \"YOUR_LOKALISE_API_TOKEN\";\r\nconst projectId = \"YOUR_LOKALISE_PROJECT_ID\";\r\n\r\nconst lokaliseUploader = new LokaliseUpload(\r\n  {\r\n    apiKey,\r\n  },\r\n  {\r\n    projectId,\r\n  },\r\n);\r\n\r\n// Upload all files from the `./locales` directory:\r\nconst { processes, errors } = await lokaliseUploader.uploadTranslations();\r\n\r\nconsole.log(processes); // Array of QueuedProcess objects\r\nconsole.log(errors); // Array of errors (if any)\r\n```\r\n\r\n### Downloading translation files\r\n\r\nUse the `LokaliseDownload` class to download translation files from Lokalise into your project:\r\n\r\n```js\r\nimport { LokaliseDownload } from \"lokalise-file-exchange\";\r\nimport type { DownloadFileParams } from \"@lokalise/node-api\";\r\n\r\nconst apiKey = \"YOUR_LOKALISE_API_TOKEN\";\r\nconst projectId = \"YOUR_LOKALISE_PROJECT_ID\";\r\n\r\nconst lokaliseDownloader = new LokaliseDownload(\r\n  {\r\n    apiKey,\r\n  },\r\n  {\r\n    projectId,\r\n  },\r\n);\r\n\r\nconst downloadFileParams: DownloadFileParams = {\r\n  // Format is mandatory!\r\n  format: \"json\", // Output format for the downloaded files\r\n\r\n  // Other params are optional\r\n  original_filenames: true, // Preserve original filenames from Lokalise\r\n  indentation: \"2sp\", // Indentation style for the downloaded files\r\n  directory_prefix: \"\", // Optional prefix for output directory structure\r\n};\r\n\r\n// Download all translations into the project root while preserving original filenames\r\nawait lokaliseDownloader.downloadTranslations({ downloadFileParams });\r\n```\r\n\r\n## Creating and configuring client\r\n\r\nThe first step is to create an upload or download client. Both clients accept two configuration objects.\r\n\r\n```js\r\nimport { LokaliseUpload } from \"lokalise-file-exchange\";\r\n// OR\r\nimport { LokaliseDownload } from \"lokalise-file-exchange\";\r\n\r\nconst lokaliseUploader = new LokaliseUpload({ apiKey }, { projectId });\r\n// OR\r\nconst lokaliseDownloader = new LokaliseDownload({ apiKey }, { projectId });\r\n```\r\n\r\nIf you're using [OAuth2 flow](https://lokalise.github.io/node-lokalise-api/additional_info/oauth2_flow), set `useOAuth2` option to `true`:\r\n\r\n```js\r\nconst lokaliseUploader = new LokaliseUpload(\r\n  { apiKey },\r\n  { projectId, useOAuth2: true },\r\n);\r\n// OR\r\nconst lokaliseDownloader = new LokaliseDownload(\r\n  { apiKey },\r\n  { projectId, useOAuth2: true },\r\n);\r\n```\r\n\r\nIn this case make sure to provide access token for the `apiKey`.\r\n\r\n### `ClientParams` configuration\r\n\r\nThe first object is `ClientParams`, used to instantiate the [`node-lokalise-api` client](https://github.com/lokalise/node-lokalise-api) internally for sending API requests. The only mandatory parameter is `apiKey`, which should contain a string with your Lokalise API token. Other parameters are optional and can be used to:\r\n\r\n- [Configure timeouts and API host](https://lokalise.github.io/node-lokalise-api/additional_info/customizing_client)\r\n- Enable compression\r\n- Customize other client options\r\n\r\n## `LokaliseExchangeConfig` configuration\r\n\r\nThe second object, `LokaliseExchangeConfig`, contains additional parameters:\r\n\r\n- `projectId` (`string`, required): Your Lokalise project ID. If you're using [project branching](https://docs.lokalise.com/en/articles/3391861-project-branching), provide the branch name after semicolon, for example `\"123.abc:my_branch\"`.\r\n- `retryParams` (`RetryParams`, optional): Retry parameters for failed API requests. By default, the library performs up to 3 retries for 408 (timeout) and 429 (too many requests) errors. Exponential backoff is applied, with an initial sleep time of 1000 ms. Parameters include:\r\n  - `maxRetries` (`number`): Maximum number of retries. If set to 0, the client will send only a single request without any retries.\r\n  - `initialSleepTime` (`number`): The initial value for the sleep time in milliseconds. Subsequent sleep times are calculated using the formula `initialSleepTime * 2 ** (attempt - 1)`, where `attempt > 0`.\r\n- `logThreshold`: Controls the minimum severity level required for a message to be logged. Possible values: `\"debug\"`, `\"info\"`, `\"warn\"`, `\"error\"`, `\"silent\"`. Messages below this threshold are ignored — for example, setting it to `\"warn\"` will hide all `debug` and `info` logs. Default is `\"info\"`.\r\n- `logColor` (`boolean`): Whether to use colored output when printing messages to console. Default is `true`.\r\n\r\n## Performing translation file downloads\r\n\r\nTo download translation files from Lokalise into your project, use the `downloadTranslations()` method on the client.\r\n\r\n```js\r\nawait lokaliseDownloader.downloadTranslations({\r\n  downloadFileParams,\r\n  extractParams,\r\n  processDownloadFileParams,\r\n});\r\n```\r\n\r\n`downloadTranslations()` accepts a single object, `DownloadTranslationParams`, with three attributes.\r\n\r\n### DownloadFileParams\r\n\r\nThe `DownloadFileParams` attribute contains all download parameters passed directly to the [`download()` function](https://lokalise.github.io/node-lokalise-api/api/files#download-translation-file). For details about supported parameters, refer to the [DownloadFiles endpoint documentation](https://developers.lokalise.com/reference/download-files).\r\n\r\n**Required parameter:**\r\n\r\n- `format` (`string`): Specifies the download format (e.g., `json`, `xml`, etc.).\r\n\r\n### ExtractParams\r\n\r\nAfter downloading the translation bundle, the client extracts it automatically. You can control the extraction process with the following parameter:\r\n\r\n- `outputDir` (`string`, optional): Specifies the directory where the archive is extracted. The default value is `\"./\"` (project root).\r\n\r\n### ProcessDownloadFileParams\r\n\r\nBy default, all downloads are performed synchronously. However, for larger projects it might be beneficial to use asynchronous downloading. To achieve that, configure `processDownloadFileParams` that accepts:\r\n\r\n- `asyncDownload` (`boolean`): Enable or disable asynchronous downloads. The default value is `false`.\r\n- `pollInitialWaitTime` (`number`): Initial wait time (in milliseconds) before polling download statuses.\r\n- `pollMaximumWaitTime` (`number`): Maximum wait time (in milliseconds) for polling.\r\n- `bundleDownloadTimeout` (`number`): Maximum time (in milliseconds) to wait for the translation bundle download to complete before aborting. The default value is `undefined` (no timeout).\r\n\r\nWhen asynchronous download is enabled, library will try to poll for the download process status. Once the bundle is available, your translations will be automatically extracted.\r\n\r\n## Recommendations for downloading\r\n\r\nTo preserve original filenames assigned to translation keys during the download, use configurations that align with your project structure. For example:\r\n\r\n- If your translations are located in a `./locales` directory\r\n- Keys have filenames assigned in the format `locales/%LANG_ISO%.json` or `locales/some_nested_dir/%LANG_ISO%.json`\r\n\r\n```js\r\nimport type { DownloadFileParams } from \"@lokalise/node-api\";\r\nimport type { ExtractParams } from \"lokalise-file-exchange\";\r\n\r\nconst downloadFileParams: DownloadFileParams = {\r\n  format: \"json\",\r\n  original_filenames: true,\r\n  directory_prefix: \"\",\r\n};\r\n\r\ntry {\r\n  await lokaliseDownloader.downloadTranslations({ downloadFileParams });\r\n} catch (err) {\r\n  console.error(err);\r\n}\r\n```\r\n\r\nYou can configure your download to maintain this structure by specifying `original_filenames` and `directory_prefix`.\r\n\r\n## Performing translation file uploads\r\n\r\nTo upload translation files from Lokalise into your project, use the `uploadTranslations()` method.\r\n\r\n```js\r\nconst { processes, errors } = await lokaliseUploader.uploadTranslations({\r\n  uploadFileParams,\r\n  collectFileParams,\r\n  processUploadFileParams,\r\n});\r\n```\r\n\r\nFile uploading happens in the background so this method will return an array of [QueuedProcesses](https://developers.lokalise.com/reference/queued-process-object) and an array of errors that happened during uploading.\r\n\r\nThis method accepts an optional `UploadTranslationParams` object for further customization. It consists of three main attributes.\r\n\r\n### UploadFileParams\r\n\r\nThis attribute contains parameters passed to the [`upload()` function](https://lokalise.github.io/node-lokalise-api/api/files#upload-translation-file). For details, refer to the [UploadFile endpoint documentation](https://developers.lokalise.com/reference/upload-a-file).\r\n\r\nThe client automatically provides the following required parameters:\r\n\r\n- `data`\r\n- `filename`\r\n- `lang_iso`\r\n\r\nYou do not need to set these manually.\r\n\r\n### CollectFileParams\r\n\r\nThis attribute determines which files are included or excluded from the upload. All parameters are optional.\r\n\r\n- `inputDirs` (`string[]`): Directories to upload translations from. Default: `[\"./locales\"]`.\r\n- `extensions` (`string[]`): File extensions to include. Default: `[\".*\"]` (all extensions). For example, set to `[\".json\", \".xml\"]` to include only JSON and XML files.\r\n- `excludePatterns` (`string[] | RegExp[]`): Patterns to exclude. Each item must be a valid regular expression string or a `RegExp` object. Patterns are tested against the full absolute path of each file or directory.\r\n- `recursive` (`boolean`): Whether to include files from nested directories. Default: `true`.\r\n- `fileNamePattern` (`string | RegExp`): Pattern for filenames to upload. Default: `*` (all files). For example, set to `\"^en.*\"` to upload files starting with \"en.\".\r\n\r\n### ProcessUploadFileParams\r\n\r\nThis attribute provides advanced configuration for the upload process.\r\n\r\n- `languageInferer`: A function to infer the language ISO code for uploaded files.\r\n- `filenameInferer`: A function to infer the filename for uploaded files.\r\n- `pollStatuses` (`boolean`): Whether to wait for Lokalise to process the uploaded files. Default: `false`.\r\n- `pollInitialWaitTime` (`number`): Initial wait time (in milliseconds) before polling upload statuses.\r\n- `pollMaximumWaitTime` (`number`): Maximum wait time (in milliseconds) for polling.\r\n\r\n#### Inferring language ISO code\r\n\r\nLokalise requires a `lang_iso` parameter for every file. By default, the client infers this from the filename (e.g., `en.json` > `lang_iso: \"en\"`, `main.fr_FR.xml` > `lang_iso: \"fr_FR\"`). If the project lacks the corresponding language, the upload fails.\r\n\r\nFor custom logic, use the `languageInferer` function, which has the signature:  \r\n`(filePath: string) => Promise<string> | string`. If this function fails or returns an empty string, the filename is used as a language ISO code.\r\n\r\n**Example: Inferring from file content**\r\n\r\nSuppose the file's first key contains the language code:\r\n\r\n```json\r\n{\r\n  \"en\": {\r\n    \"key\": \"translation value\"\r\n  }\r\n}\r\n```\r\n\r\nYou can infer the language with:\r\n\r\n```js\r\nconst { processes, errors } = await lokaliseUpload.uploadTranslations({\r\n  processUploadFileParams: {\r\n    languageInferer: async (filePath) => {\r\n      // Provide any conditions as needed\r\n      if (path.extname(filePath) === \".json\") {\r\n        const fileData = await fs.promises.readFile(filePath);\r\n        const jsonContent = JSON.parse(fileData.toString());\r\n        return Object.keys(jsonContent)[0];\r\n      }\r\n      return \"\";\r\n    },\r\n  },\r\n});\r\n```\r\n\r\n**Example: Inferring from parent folder**\r\n\r\nIf translation files are stored in language-named folders (`/locales/en/main.json`), use:\r\n\r\n```js\r\nconst { processes, errors } = await lokaliseUploader.uploadTranslations({\r\n  processUploadFileParams: {\r\n    languageInferer: (filePath) => {\r\n      try {\r\n        const parentDir = path.dirname(filePath);\r\n        return path.basename(parentDir);\r\n      } catch (_error) {\r\n        return \"\";\r\n      }\r\n    },\r\n  },\r\n});\r\n```\r\n\r\n#### Inferring filename\r\n\r\nLokalise requires a `filename` parameter for every file. By default, the client infers this from the file path relative to the project root.\r\n\r\nFor custom logic, use the `filenameInferer` function, which has the signature:  \r\n`(filePath: string) => Promise<string> | string`.\r\n\r\n#### Polling for upload statuses\r\n\r\nAll translation files are uploaded to Lokalise in the background, which is why the `uploadTranslations()` method returns an array of `processes` containing `QueuedProcess[]` objects. By default, the client does not wait for Lokalise to complete the upload process or report the success or failure of each file.\r\n\r\nTo ensure the client waits until all files are fully processed by Lokalise, you can set the `pollStatuses` option to `true`. This enables the client to poll the status of each file until it is marked as completed, cancelled, or failed. Additionally, you can fine-tune the polling behavior by configuring the `pollInitialWaitTime` (initial wait time before polling starts) and `pollMaximumWaitTime` (maximum duration to wait for all uploads to be processed).\r\n\r\n```js\r\nconst { processes, errors } = await lokaliseUploader.uploadTranslations({\r\n  processUploadFileParams: {\r\n    pollStatuses: true,\r\n    pollInitialWaitTime: 2e3,\r\n    pollMaximumWaitTime: 150e3,\r\n  },\r\n});\r\n```\r\n\r\nNow the function will wait up to 150 seconds for all processes to be completed (or marked as cancelled or failed).\r\n\r\n## Samples\r\n\r\nFind the sample usage at [github.com/bodrovis/lokalise-node-file-exchange-samples](https://github.com/bodrovis/lokalise-node-file-exchange-samples).\r\n\r\n## License\r\n\r\nLicensed under BSD 3 Clause\r\n\r\n(c) [Ilya Krukowski](https://bodrovis.tech/)\r\n\r\n[npm-downloads-image]: https://img.shields.io/npm/dm/lokalise-file-exchange\r\n[npm-downloads-url]: https://npmcharts.com/compare/lokalise-file-exchange?minimal=true\r\n[coverage-image]: https://qlty.sh/gh/bodrovis/projects/lokalise-node-file-exchange/coverage.svg\r\n[coverage-url]: https://qlty.sh/gh/bodrovis/projects/lokalise-node-file-exchange\r\n[maintainability-image]: https://qlty.sh/gh/bodrovis/projects/lokalise-node-file-exchange/maintainability.svg\r\n[maintainability-url]: https://qlty.sh/gh/bodrovis/projects/lokalise-node-file-exchange\r\n","readmeFilename":"README.md"}