{"_id":"@phrase/i18next-backend","_rev":"10-6c3ba44b762f9ac49c72bf2e6a4ff253","name":"@phrase/i18next-backend","dist-tags":{"latest":"2.0.1"},"versions":{"1.0.0":{"name":"@phrase/i18next-backend","version":"1.0.0","keywords":[],"author":{"name":"Phrase GmbH"},"license":"ISC","_id":"@phrase/i18next-backend@1.0.0","maintainers":[{"name":"docstun","email":"info@manuelboy.de"},{"name":"phraseapp","email":"info@phrase.com"}],"dist":{"shasum":"2d7bd2ea5046bcaf0f1af2b8042a534c8e3dab64","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-1.0.0.tgz","fileCount":2,"integrity":"sha512-FaZWjMEzTCyPQCBQgPfGG9iGxBle5aIgpXAmJsubsRR+kpkH8WPkQRi9s1B2FF73jujEutl5iAOwbf4lqm9OfA==","signatures":[{"sig":"MEUCIQDkB3QHRyl47McWi5rutTbBI/ldN9yA3QWBbng21WDVcgIge5zz4MI3s/pf8bfuhE2Zj6T/LHr2fJ1SfAwmnAU3MGw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2347},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"dfba61cc63af5acddf68c7f9a60d2be2f3976521","scripts":{"lint":"eslint ./src/*.ts","test":"echo \"Error: no test specified\" && exit 1","compile":"tsc"},"_npmUser":{"name":"phraseapp","email":"info@phrase.com"},"_npmVersion":"8.19.4","description":"Phrase Strings OTA i18next backend","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.38.0","babel-jest":"^29.5.0","typescript":"^5.0.4","@babel/core":"^7.21.4","eslint-plugin-n":"^15.7.0","jest-fetch-mock":"^3.0.3","@babel/preset-env":"^7.21.4","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/i18next-backend_1.0.0_1684249906554_0.15227484856779028","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@phrase/i18next-backend","version":"1.0.1","keywords":[],"author":{"name":"Phrase GmbH"},"license":"ISC","_id":"@phrase/i18next-backend@1.0.1","maintainers":[{"name":"docstun","email":"info@manuelboy.de"},{"name":"phraseapp","email":"info@phrase.com"}],"dist":{"shasum":"1f2911c00529e0b88b26ca9f2c85c6bd463c1aad","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-1.0.1.tgz","fileCount":2,"integrity":"sha512-rRlItPHYeZ3QiJrfAqKi5bUVeHhnS/MPsF2Q2y2E+KPp0J8IEIIe3FkqfKBRkmyCowPyeanFuswXCS95KqESkA==","signatures":[{"sig":"MEQCIBY8FbNisCV8NnXEEvLC0P8jxga33NBjvjVFxm8BvkA0AiAkaVCoDfF7vnlHTx66yRY/GJleomfNBnLSIdVB33T5Uw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2347},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"8e2a5da539e3006b6ec5690b22c65ed3a2e9dd37","scripts":{"lint":"eslint ./src/*.ts","test":"echo \"Error: no test specified\" && exit 1","compile":"tsc"},"_npmUser":{"name":"phraseapp","email":"info@phrase.com"},"_npmVersion":"8.19.4","description":"Phrase Strings OTA i18next backend","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.38.0","babel-jest":"^29.5.0","typescript":"^5.0.4","@babel/core":"^7.21.4","eslint-plugin-n":"^15.7.0","jest-fetch-mock":"^3.0.3","@babel/preset-env":"^7.21.4","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/i18next-backend_1.0.1_1684252191032_0.8121914554686469","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@phrase/i18next-backend","version":"1.0.2","keywords":[],"author":{"name":"Phrase GmbH"},"license":"ISC","_id":"@phrase/i18next-backend@1.0.2","maintainers":[{"name":"docstun","email":"info@manuelboy.de"},{"name":"phraseapp","email":"info@phrase.com"}],"dist":{"shasum":"209c26104b0a02a7dde06a12cf1352716ad51760","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-1.0.2.tgz","fileCount":2,"integrity":"sha512-+gPM4o+jAvkhJaSDS2Ez1KIOJyomQFCJgBDAPhgOxwR2e/J/n+QN4fM1BU/n8fLz/SxX92mrgbLYYoav0m5LTg==","signatures":[{"sig":"MEUCIQDCZd5pi1k22OXxt+ITOHB92tmgZ+ml6u81AbnPsCgyOwIgDXJ4LEaQiivKyGmlsB/hk4e07r7ZvmNCfpZwRTTI+tE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":2346},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"33e1015152624705e625ac6be46624acf2b2a947","scripts":{"lint":"eslint ./src/*.ts","test":"echo \"Error: no test specified\" && exit 1","compile":"tsc"},"_npmUser":{"name":"phraseapp","email":"info@phrase.com"},"_npmVersion":"8.19.4","description":"Phrase Strings OTA i18next backend","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.38.0","babel-jest":"^29.5.0","typescript":"^5.0.4","@babel/core":"^7.21.4","eslint-plugin-n":"^15.7.0","jest-fetch-mock":"^3.0.3","@babel/preset-env":"^7.21.4","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/i18next-backend_1.0.2_1684252585800_0.9583697209972712","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@phrase/i18next-backend","version":"1.0.3","keywords":[],"author":{"name":"Phrase GmbH"},"license":"ISC","_id":"@phrase/i18next-backend@1.0.3","maintainers":[{"name":"docstun","email":"info@manuelboy.de"},{"name":"phraseapp","email":"info@phrase.com"}],"dist":{"shasum":"3478940bf2fbd08615fa78f35ed97be8bf46dcc3","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-1.0.3.tgz","fileCount":10,"integrity":"sha512-VumVgadsx+qqp5eMXH9iTkNj8fBW5WxvEpsHYe6ifUNr7iNsvPBByPnTtTJiWWLESuMRMVtSCLyHrb35dbCpww==","signatures":[{"sig":"MEQCIA0lK9GKGw2fuk0Uu5zoM9AzDtwgdWAcVTxn5HTqtMGyAiBIsPJjwAHOyCioFvGUciVsuvXijSJ9MDR2N/WQUd4ksA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11306},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"6e57a8398fcda937dfc4ce8e18aa93084bec3931","scripts":{"lint":"eslint ./src/*.ts","test":"echo \"Error: no test specified\" && exit 1","compile":"tsc"},"_npmUser":{"name":"phraseapp","email":"info@phrase.com"},"_npmVersion":"8.19.4","description":"Phrase Strings OTA i18next backend","directories":{},"_nodeVersion":"16.20.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.38.0","babel-jest":"^29.5.0","typescript":"^5.0.4","@babel/core":"^7.21.4","eslint-plugin-n":"^15.7.0","jest-fetch-mock":"^3.0.3","@babel/preset-env":"^7.21.4","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/i18next-backend_1.0.3_1684252966914_0.7595499675403974","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@phrase/i18next-backend","version":"1.1.0","keywords":["i18next","phrase","strings","over-the-air","ota"],"author":{"name":"Phrase"},"license":"MIT","_id":"@phrase/i18next-backend@1.1.0","maintainers":[{"name":"docstun","email":"info@manuelboy.de"},{"name":"phraseapp","email":"info@phrase.com"}],"homepage":"https://phrase.com","dist":{"shasum":"f86fb7d92505084bf9ff07b20292d13fe88eec68","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-1.1.0.tgz","fileCount":10,"integrity":"sha512-5zC22sKQ2sYkUgNj553n2IIFz0W9fei3vWzWBMDwLDgjsjitN3KD6TcdLuTK4orLNonglmkmvno9t2xht+FKIg==","signatures":[{"sig":"MEUCIGUehUPWCTmIo0As44ZDcYFfmKdK5K209hMSGG+5KU5rAiEAnlRCwpN1A+VQuo5Lgnra/XZMzhnBX32qCsrrcKZqAT0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17204},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"3786146bc811ac5de21ae31c5e3412dd39a9cf67","scripts":{"lint":"eslint ./src/*.ts","test":"echo \"Error: no test specified\" && exit 1","build":"npm run build:common && npm run build:types","build:types":"tsc --emitDeclarationOnly","build:common":"rm -rf dist && node esbuild.js && npm run build:types"},"_npmUser":{"name":"phraseapp","email":"info@phrase.com"},"_npmVersion":"8.19.4","description":"Phrase Strings OTA i18next backend","directories":{},"_nodeVersion":"16.20.1","_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.38.0","esbuild":"^0.18.16","typescript":"^5.1.6","eslint-plugin-n":"^15.7.0","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","esbuild-node-externals":"^1.8.0","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/i18next-backend_1.1.0_1691480368180_0.9746473243546117","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@phrase/i18next-backend","version":"1.1.1","keywords":["i18next","phrase","strings","over-the-air","ota"],"author":{"name":"Phrase"},"license":"MIT","_id":"@phrase/i18next-backend@1.1.1","maintainers":[{"name":"docstun","email":"info@manuelboy.de"},{"name":"phraseapp","email":"info@phrase.com"}],"homepage":"https://phrase.com","dist":{"shasum":"8ed5a2beeb41bfeda8a3bbc1305bc6fbfb5870c6","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-1.1.1.tgz","fileCount":10,"integrity":"sha512-B1JHfBSU0UJAM8O+EnVerx/N038Bc/dJmtXachYNKTV+lpHZI9WzXtqObMl71Fvsx5hTDW0+y3lki5pOGi9Dxw==","signatures":[{"sig":"MEQCID7L8rxkPVU123Cq8XRXQJrm4XgMsDXlACXCIjykkUjHAiADJmDCN/mlDuw4JGOxYLannehSvIvAqn6f5Zq4YxNTWA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17734},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"793feb267b609794d07173fda92e773681ccf1fc","scripts":{"lint":"eslint ./src/*.ts","test":"npx jest","build":"npm run build:common && npm run build:types","build:types":"tsc --emitDeclarationOnly","build:common":"rm -rf dist && node esbuild.js"},"_npmUser":{"name":"phraseapp","email":"info@phrase.com"},"_npmVersion":"8.19.4","description":"Phrase Strings OTA i18next backend","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.38.0","esbuild":"^0.18.16","i18next":"^23.4.6","ts-jest":"^29.1.1","typescript":"^5.1.6","@types/jest":"^29.5.3","@jest/globals":"^29.6.2","eslint-plugin-n":"^15.7.0","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","esbuild-node-externals":"^1.8.0","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/i18next-backend_1.1.1_1693473228101_0.9553153572012518","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@phrase/i18next-backend","version":"1.2.0","keywords":["i18next","phrase","strings","over-the-air","ota"],"author":{"name":"Phrase"},"license":"MIT","_id":"@phrase/i18next-backend@1.2.0","maintainers":[{"name":"docstun","email":"info@manuelboy.de"},{"name":"phraseapp","email":"info@phrase.com"}],"homepage":"https://phrase.com","dist":{"shasum":"c38016b4c3def72ddf0c8d3999c2012ff5c891b6","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-1.2.0.tgz","fileCount":10,"integrity":"sha512-AyVJCMm9vEyp/uf2ubd6pKhC6sM8YtFXrpVUVJ2Vjg2Iu8bFhMyVND9D/omCROxTuZieGXXMX6zm/lVBEvfsvA==","signatures":[{"sig":"MEUCIQC76honC8h8XHE6E/IKeva5ir/h3NpyrPxC2q4fPVGnUwIgMSn9npQuj+kMvKGY4w53xDkBDKYzjFx13ElZZyFie68=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":17942},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"052438620ed91cf06d286e19af2cc1f9135d9d7f","scripts":{"lint":"eslint ./src/*.ts","test":"npx jest","build":"npm run build:common && npm run build:types","build:types":"tsc --emitDeclarationOnly","build:common":"rm -rf dist && node esbuild.js"},"_npmUser":{"name":"phraseapp","email":"info@phrase.com"},"_npmVersion":"8.19.4","description":"Phrase Strings OTA i18next backend","directories":{},"_nodeVersion":"16.20.2","dependencies":{"uuid":"^9.0.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.38.0","esbuild":"^0.18.16","i18next":"^23.4.6","ts-jest":"^29.1.1","typescript":"^5.1.6","@types/jest":"^29.5.3","@types/uuid":"^9.0.7","@jest/globals":"^29.6.2","eslint-plugin-n":"^15.7.0","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","esbuild-node-externals":"^1.8.0","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/i18next-backend_1.2.0_1704371316566_0.10294918968023858","host":"s3://npm-registry-packages"}},"1.3.3":{"name":"@phrase/i18next-backend","version":"1.3.3","keywords":["i18next","phrase","strings","over-the-air","ota"],"author":{"name":"Phrase"},"license":"MIT","_id":"@phrase/i18next-backend@1.3.3","maintainers":[{"name":"phraseapp","email":"info@phrase.com"},{"name":"docstun","email":"info@manuelboy.de"}],"homepage":"https://phrase.com","bugs":{"url":"https://github.com/phrase/i18next-phrase-backend/issues"},"dist":{"shasum":"a8a932a852f7a3e71a00895ffe8a81a976e8b3b4","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-1.3.3.tgz","fileCount":11,"integrity":"sha512-mNp1qqmYkFSD4BvofSmlnt0n1kPXyXLS0YiqMCVP/1aq/sWc7Fkyln3VvQbrlCA7hEeYKLO3pnD3+NrtoYjoiw==","signatures":[{"sig":"MEUCIQCz53tcJafWkJKGagq3blRCxJMw1dzH1q2yISChIMZobwIgFk9/2iDGAGH92p/kizlkieM/EKcNdOwo4I+pVxN7qEk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@phrase%2fi18next-backend@1.3.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19990},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"7fccd295c70fb051f9d2b882856a597345b6f7e7","scripts":{"lint":"eslint ./src/*.ts","test":"npx jest","build":"npm run build:common && npm run build:types","build:types":"tsc --emitDeclarationOnly","build:common":"rm -rf dist && node esbuild.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7c2218d4-40c8-402e-a2d0-3d263dff56d3"}},"repository":{"url":"git+https://github.com/phrase/i18next-phrase-backend.git","type":"git"},"_npmVersion":"11.11.0","description":"Phrase Strings OTA i18next backend","directories":{},"_nodeVersion":"22.14.0","dependencies":{"uuid":"^9.0.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.38.0","esbuild":"^0.27.2","i18next":"^23.4.6","ts-jest":"^29.1.1","typescript":"^5.1.6","@types/jest":"^29.5.3","@types/uuid":"^9.0.7","@jest/globals":"^29.6.2","eslint-plugin-n":"^15.7.0","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","esbuild-node-externals":"^1.8.0","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"_npmOperationalInternal":{"tmp":"tmp/i18next-backend_1.3.3_1773043241868_0.19473466083091928","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@phrase/i18next-backend","version":"2.0.0","keywords":["i18next","phrase","strings","over-the-air","ota"],"author":{"name":"Phrase"},"license":"MIT","_id":"@phrase/i18next-backend@2.0.0","maintainers":[{"name":"phraseapp","email":"info@phrase.com"},{"name":"docstun","email":"info@manuelboy.de"}],"homepage":"https://phrase.com","bugs":{"url":"https://github.com/phrase/i18next-phrase-backend/issues"},"dist":{"shasum":"446f805afac41180f1b027ef01085bd6cd9727dc","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-2.0.0.tgz","fileCount":13,"integrity":"sha512-5jy0isR73mYszQ0Numk5rS/++g1SrSVqIiyFmFYRFZ0/GlK7nV11FiiJSkOiCNUSj35yKMwv2LEQ81xYfQj+xQ==","signatures":[{"sig":"MEUCIFLLPJO7Fgit6HgGxpOQ3ImWQ+VCK/QXQ1vFquFFr7rYAiEA3ohdb27FGORzzJTEckczdVfOmp6XEcwDVuGbJ3F2qk8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@phrase%2fi18next-backend@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25810},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.esm.js","engines":{"node":">=18.0.0"},"gitHead":"bb6ea95e0d51c2ab0531d358d7bb1ab0df37c997","scripts":{"lint":"eslint ./src/*.ts","test":"npx jest","build":"npm run build:common && npm run build:types","build:types":"tsc --emitDeclarationOnly","build:common":"rm -rf dist && node esbuild.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7c2218d4-40c8-402e-a2d0-3d263dff56d3"}},"repository":{"url":"git+https://github.com/phrase/i18next-phrase-backend.git","type":"git"},"_npmVersion":"11.13.0","description":"Phrase Strings OTA i18next backend","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.38.0","esbuild":"^0.27.2","i18next":"^23.4.6","ts-jest":"^29.1.1","typescript":"^5.1.6","@types/jest":"^29.5.3","@jest/globals":"^29.6.2","eslint-plugin-n":"^15.7.0","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","esbuild-node-externals":"^1.8.0","jest-environment-jsdom":"^30.4.1","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"peerDependencies":{"i18next":">=21"},"_npmOperationalInternal":{"tmp":"tmp/i18next-backend_2.0.0_1781101752000_0.2735550226904859","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"_id":"@phrase/i18next-backend@2.0.1","bugs":{"url":"https://github.com/phrase/i18next-phrase-backend/issues"},"dist":{"shasum":"7aa829e45319b0a1ebb84117a219fcee9d8f6b43","tarball":"https://registry.npmjs.org/@phrase/i18next-backend/-/i18next-backend-2.0.1.tgz","fileCount":13,"integrity":"sha512-6DmuU/7ro1azqRGL7WujRx8jqC2K+V/+AIyX+Y0QVRlBZFdIJPqeyOv/xbVBmPgFS1rX/dnSu1UZCNO42zdSWw==","signatures":[{"sig":"MEUCIQCINIP1CkA+GXMe6S21ztLWU5KeYQnGV7cpWVElH8jCugIgJNTs77HnbTRJFJzgNwKVrGZvzL6oE9TDKxc3Bp5Zf5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIF64xOraWyy1cxRfECe7lHW08uXBE9aFkABl3tYXGQ1BAiEAv8059LmO5Mqz/oNqeZ4Wsa/P5lgpFUmKSMn4m8vldYo="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@phrase%2fi18next-backend@2.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":26487},"main":"dist/index.cjs.js","name":"@phrase/i18next-backend","types":"dist/index.d.ts","author":{"name":"Phrase"},"module":"dist/index.esm.js","engines":{"node":">=18.0.0"},"gitHead":"f07b5b3a38665d9eb68e4f41b6144c5bc38b655c","license":"MIT","scripts":{"lint":"eslint ./src/*.ts","test":"npx jest","build":"npm run build:common && npm run build:types","build:types":"tsc --emitDeclarationOnly","build:common":"rm -rf dist && node esbuild.js"},"version":"2.0.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"7c2218d4-40c8-402e-a2d0-3d263dff56d3"}},"homepage":"https://phrase.com","keywords":["i18next","phrase","strings","over-the-air","ota"],"repository":{"url":"git+https://github.com/phrase/i18next-phrase-backend.git","type":"git"},"_npmVersion":"11.19.0","description":"Phrase Strings OTA i18next backend","directories":{},"maintainers":[{"name":"phraseapp","email":"info@phrase.com"},{"name":"docstun","email":"info@manuelboy.de"}],"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.38.0","esbuild":"^0.27.2","i18next":"^23.4.6","ts-jest":"^29.1.1","typescript":"^5.1.6","@types/jest":"^29.5.3","@jest/globals":"^29.6.2","eslint-plugin-n":"^15.7.0","eslint-plugin-import":"^2.27.5","eslint-plugin-promise":"^6.1.1","esbuild-node-externals":"^1.8.0","jest-environment-jsdom":"^30.4.1","@typescript-eslint/eslint-plugin":"^5.58.0","eslint-config-standard-with-typescript":"^34.0.1"},"peerDependencies":{"i18next":">=21"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/i18next-backend_2.0.1_1791188333211_0.7037396819421375"}}},"time":{"created":"2023-05-16T15:11:46.467Z","modified":"2026-10-05T08:18:53.718Z","1.0.0":"2023-05-16T15:11:46.733Z","1.0.1":"2023-05-16T15:49:51.218Z","1.0.2":"2023-05-16T15:56:26.039Z","1.0.3":"2023-05-16T16:02:47.158Z","1.1.0":"2023-08-08T07:39:28.309Z","1.1.1":"2023-08-31T09:13:48.307Z","1.2.0":"2024-01-04T12:28:36.740Z","1.3.3":"2026-03-09T08:00:42.028Z","2.0.0":"2026-06-10T14:29:12.145Z","2.0.1":"2026-10-05T08:18:53.299Z"},"bugs":{"url":"https://github.com/phrase/i18next-phrase-backend/issues"},"author":{"name":"Phrase"},"license":"MIT","homepage":"https://phrase.com","keywords":["i18next","phrase","strings","over-the-air","ota"],"repository":{"url":"git+https://github.com/phrase/i18next-phrase-backend.git","type":"git"},"description":"Phrase Strings OTA i18next backend","maintainers":[{"name":"phraseapp","email":"info@phrase.com"},{"name":"docstun","email":"info@manuelboy.de"}],"readme":"# i18nextPhraseBackend - Phrase Strings backend for i18next\n\n## Description\n\nThis small library implements an example [backend](https://www.i18next.com/overview/plugins-and-utils#backends) for [`i18next`](https://www.i18next.com/) which retrieves the translations from Phrase OTA releases. The distribution should be created for `i18next` platform.\n\n## Usage\n\nA demo project can be found at https://github.com/phrase/ota-web-demo\n\n### Basic usage\n\n```\nnpm install --save @phrase/i18next-backend\n```\n\n```javascript\nimport i18n from \"i18next\";\nimport { I18nextPhraseBackend } from \"@phrase/i18next-backend\";\n\ni18n\n  .use(I18nextPhraseBackend)\n  .init({\n    fallbackLng: 'en',\n    backend: {\n      distribution: 'DISTRIBUTION_ID',\n      environment: 'YOUR_ENVIRONMENT_SECRET',\n      appVersion: '1.0.0',\n    }\n  });\n```\n\n### Options\n\nThe backend accepts several options:\n\n* `distribution` (required): The ID of your Phrase Strings OTA distribution\n* `environment` (required): The environment token of your Phrase Strings OTA distribution. Different tokens exist for `development` (i.e. beta) and `production` environments\n* `appVersion`: You can prevent some OTA releases from being serverd to certain app versions by providing minimum and maximum app version in Phrase Strings\n* `cacheExpirationTime`: See [Caching](#caching) below\n* `datacenter`: `Datacenter.EU` (default) or `Datacenter.US`. Selects the Phrase OTA datacenter\n* `format`: By default this library uses the i18next format, if you use i18next v4 (for the new pluralization resolution strategy), set this to `i18next_4`\n* `storage`: Custom async storage implementation (see [React Native](#react-native) below)\n\n## React Native\n\n`@phrase/i18next-backend` works in React Native when you provide an async storage implementation via the `storage` option. No React Native dependency is bundled. The package accepts any `AsyncStorage`-compatible storage implementation.\n\n```\nnpm install --save @phrase/i18next-backend @react-native-async-storage/async-storage\n```\n\n```javascript\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport { I18nextPhraseBackend } from '@phrase/i18next-backend';\n\ni18n\n  .use(I18nextPhraseBackend)\n  .use(initReactI18next)\n  .init({\n    fallbackLng: 'en',\n    backend: {\n      distribution: 'DISTRIBUTION_ID',\n      environment: 'YOUR_ENVIRONMENT_SECRET',\n      storage: AsyncStorage,\n    },\n  });\n```\n\nAny storage that implements `getItem`, `setItem`, and `clear` returning Promises is accepted (e.g. [react-native-mmkv](https://github.com/mrousavy/react-native-mmkv) with a small adapter).\n\n### react-native-web\n\nFor codebases that target both React Native and web via `react-native-web`, no platform-specific wiring is needed — passing `AsyncStorage` works on both targets since `@react-native-async-storage/async-storage` ships a web implementation backed by `localStorage`. Alternatively, omit `storage` entirely and the package auto-detects `localStorage` on the web build.\n\n## Offline fallback\n\nTo serve bundled translations when the OTA fetch fails, chain this backend with a local fallback using [`i18next-chained-backend`](https://github.com/i18next/i18next-chained-backend).\n\n```\nnpm install --save i18next-chained-backend\n```\n\n### Web\n\nUse [`i18next-http-backend`](https://github.com/i18next/i18next-http-backend) as the fallback — no manual imports needed, files are loaded by URL:\n\n```\nnpm install --save i18next-http-backend\n```\n\n```javascript\nimport i18n from 'i18next';\nimport ChainedBackend from 'i18next-chained-backend';\nimport HttpBackend from 'i18next-http-backend';\nimport { I18nextPhraseBackend } from '@phrase/i18next-backend';\n\ni18n\n  .use(ChainedBackend)\n  .init({\n    fallbackLng: 'en',\n    backend: {\n      backends: [I18nextPhraseBackend, HttpBackend],\n      backendOptions: [\n        { distribution: 'DISTRIBUTION_ID', environment: 'YOUR_ENVIRONMENT_SECRET' },\n        { loadPath: '/locales/{{lng}}/{{ns}}.json' },\n      ],\n    },\n  });\n```\n\n### React Native\n\nUse [`i18next-resources-to-backend`](https://github.com/i18next/i18next-resources-to-backend) with a dynamic import — Metro bundles all matching files without manual per-language imports:\n\n```\nnpm install --save i18next-resources-to-backend\n```\n\n```javascript\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport ChainedBackend from 'i18next-chained-backend';\nimport resourcesToBackend from 'i18next-resources-to-backend';\nimport AsyncStorage from '@react-native-async-storage/async-storage';\nimport { I18nextPhraseBackend } from '@phrase/i18next-backend';\n\ni18n\n  .use(ChainedBackend)\n  .use(initReactI18next)\n  .init({\n    fallbackLng: 'en',\n    backend: {\n      backends: [\n        I18nextPhraseBackend,\n        resourcesToBackend((language, namespace) =>\n          import(`./locales/${language}/${namespace}.json`)\n        ),\n      ],\n      backendOptions: [\n        {\n          distribution: 'DISTRIBUTION_ID',\n          environment: 'YOUR_ENVIRONMENT_SECRET',\n          storage: AsyncStorage,\n        },\n      ],\n    },\n  });\n```\n\n## Caching\n\nThe library is caching translations and won't check for new translations for 5 minutes. This can be configured by setting the `cacheExpirationTime` option in the backend configuration for testing purposes. It's recommended to use at least 5 minutes in production.\n\n```javascript\ni18n\n  .use(I18nextPhraseBackend)\n  .init({\n    fallbackLng: 'en',\n    backend: {\n      distribution: 'DISTRIBUTION_ID',\n      environment: 'YOUR_ENVIRONMENT_SECRET',\n      appVersion: '1.0.0',\n      cacheExpirationTime: 60 * 5, // time in seconds\n    }\n  });\n```\n\n## Releasing a new version\n\nAfter merging dependency bumps or other changes that warrant a new release:\n\n1. Bump the `version` field in `package.json` (and run `npm install` so `package-lock.json` picks up the new version) in a PR, e.g. \"bump version to x.y.z\".\n2. Once that PR is merged to `main`, create a [GitHub release](https://github.com/phrase/i18next-phrase-backend/releases/new) with a tag matching the new version (e.g. `1.3.4`, no `v` prefix) targeting `main`.\n3. Publishing the release triggers the [`release.yml`](.github/workflows/release.yml) workflow, which runs `npm run build` and `npm publish --provenance --access public` to push the package to npmjs.org.\n","readmeFilename":"README.md"}