From 249556880fa8f3daec0bbe7b005a6dc7d1d3066f Mon Sep 17 00:00:00 2001 From: fabnguess Date: Fri, 1 Dec 2023 22:54:14 +0000 Subject: [PATCH] chore:Deep merge instead for extend --- README.md | 2 +- index.js | 3 ++- package.json | 1 + test/i18n.js | 11 +++++++++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bfefa81..3db196d 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ export function extend(language: string, tokens: Record): void; export function extendFromSystemPath(path: string): Promise; ``` -> **Note** +> [!NOTE] > Local lang must be updated otherwise `getTokenSync()` will throws. Make sure to use `await i18n.getLocalLang()` before any synchronous usage. ## Generate documentation diff --git a/index.js b/index.js index a81cb38..8e47e72 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,7 @@ import { pathToFileURL } from "node:url"; // Import Third-party Depedencies import cacache from "cacache"; import lodashGet from "lodash.get"; +import deepmerge from "deepmerge"; // Import Internals import { CACHE_PATH, CURRENT_LANG } from "./src/constants.js"; @@ -88,7 +89,7 @@ export function getTokenSync(token, ...params) { export function extend(extendLanguage, opts = {}) { if (extendLanguage in languages) { - Object.assign(languages[extendLanguage], opts); + languages[extendLanguage] = deepmerge(languages[extendLanguage], opts); } else { languages[extendLanguage] = opts; diff --git a/package.json b/package.json index c2e102b..13a737a 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ }, "dependencies": { "cacache": "^18.0.0", + "deepmerge": "^4.3.1", "lodash.get": "^4.4.2" } } diff --git a/test/i18n.js b/test/i18n.js index 0097f97..25938bb 100644 --- a/test/i18n.js +++ b/test/i18n.js @@ -140,6 +140,17 @@ describe("extend", () => { ); }); + it("should deeply extend the properties", async() => { + i18n.extend("english", { contributor: { name: "Fraxken" } }); + i18n.extend("english", { contributor: { email: "gentilhomme.thomas@gmail.com" } }); + await i18n.setLocalLang("english"); + + assert.deepEqual( + await i18n.getToken("contributor"), + { name: "Fraxken", email: "gentilhomme.thomas@gmail.com" } + ); + }); + it("should add a new language if it doesn't exist", async() => { i18n.extend("spanish", { welcome: "Bienvenido" });