From 4a0f6fac8c30893e27fe1319d5de5d3731e696ce Mon Sep 17 00:00:00 2001 From: Adriano Raiano Date: Mon, 19 Dec 2022 23:02:59 +0100 Subject: [PATCH] fix for https://github.com/i18next/i18next/issues/1890 --- lib/formats/json5.js | 41 ++++++++++++++++++++++++++++++++++------- lib/index.js | 2 +- package.json | 8 ++++---- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/lib/formats/json5.js b/lib/formats/json5.js index 8fe5073..b92b533 100644 --- a/lib/formats/json5.js +++ b/lib/formats/json5.js @@ -85,12 +85,34 @@ var parse = function parse (text, reviver) { function internalize (holder, name, reviver) { const value = holder[name]; if (value != null && typeof value === 'object') { - for (const key in value) { - const replacement = internalize(value, key, reviver); - if (replacement === undefined) { - delete value[key]; - } else { - value[key] = replacement; + if (Array.isArray(value)) { + for (let i = 0; i < value.length; i++) { + const key = String(i); + const replacement = internalize(value, key, reviver); + if (replacement === undefined) { + delete value[key]; + } else { + Object.defineProperty(value, key, { + value: replacement, + writable: true, + enumerable: true, + configurable: true, + }); + } + } + } else { + for (const key in value) { + const replacement = internalize(value, key, reviver); + if (replacement === undefined) { + delete value[key]; + } else { + Object.defineProperty(value, key, { + value: replacement, + writable: true, + enumerable: true, + configurable: true, + }); + } } } } @@ -1016,7 +1038,12 @@ function push () { if (Array.isArray(parent)) { parent.push(value); } else { - parent[key] = value; + Object.defineProperty(parent, key, { + value, + writable: true, + enumerable: true, + configurable: true, + }); } } diff --git a/lib/index.js b/lib/index.js index 60585e6..2dc2b26 100644 --- a/lib/index.js +++ b/lib/index.js @@ -61,7 +61,7 @@ class Backend { } create (languages, namespace, key, fallbackValue, callback) { - if (!callback) callback = () => {} + if (typeof callback !== 'function') callback = () => {} if (typeof languages === 'string') languages = [languages] let todo = languages.length diff --git a/package.json b/package.json index c5bc983..af4d91e 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@babel/preset-env": "7.20.2", "babel-plugin-add-module-exports": "1.0.4", "dtslint": "4.2.1", - "eslint": "8.29.0", + "eslint": "8.30.0", "eslint-config-standard": "17.0.0", "eslint-plugin-import": "2.26.0", "eslint-plugin-n": "15.6.0", @@ -36,10 +36,10 @@ "eslint-plugin-require-path-exists": "1.1.9", "eslint-plugin-standard": "5.0.0", "expect.js": "0.3.1", - "i18next": "22.1.5", + "i18next": "22.4.6", "js-yaml": "4.1.0", - "json5": "2.2.1", - "mocha": "10.1.0", + "json5": "2.2.2", + "mocha": "10.2.0", "tslint": "5.20.1", "tsd": "0.25.0", "typescript": "4.9.4",