From f0c7f6e7fa669e4f049d0b1175eb54bae20ec330 Mon Sep 17 00:00:00 2001 From: Matej Lednicky Date: Thu, 27 Feb 2025 10:43:33 +0100 Subject: [PATCH] fix(cli): handling numbers in unlocalizable loader (#507) --- .changeset/long-cameras-cough.md | 5 +++++ packages/cli/src/cli/loaders/unlocalizable.spec.ts | 10 +++++++++- packages/cli/src/cli/loaders/unlocalizable.ts | 10 +++++----- 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 .changeset/long-cameras-cough.md diff --git a/.changeset/long-cameras-cough.md b/.changeset/long-cameras-cough.md new file mode 100644 index 00000000..e9048603 --- /dev/null +++ b/.changeset/long-cameras-cough.md @@ -0,0 +1,5 @@ +--- +"lingo.dev": patch +--- + +fix handling numbers in unlocalizable loader diff --git a/packages/cli/src/cli/loaders/unlocalizable.spec.ts b/packages/cli/src/cli/loaders/unlocalizable.spec.ts index a09b59a5..cdb6c14f 100644 --- a/packages/cli/src/cli/loaders/unlocalizable.spec.ts +++ b/packages/cli/src/cli/loaders/unlocalizable.spec.ts @@ -5,9 +5,12 @@ describe("unlocalizable loader", () => { const data = { foo: "bar", num: 1, + numStr: "1.0", empty: "", bool: true, + boolStr: "false", isoDate: "2025-02-21", + isoDateTime: "2025-02-21T00:00:00.000Z", bar: "foo", url: "https://example.com", systemId: "Ab1cdefghijklmnopqrst2", @@ -19,7 +22,12 @@ describe("unlocalizable loader", () => { loader.setDefaultLocale("en"); const result = await loader.pull("en", data); - expect(result).toEqual({ foo: "bar", bar: "foo" }); + expect(result).toEqual({ + foo: "bar", + numStr: "1.0", + boolStr: "false", + bar: "foo", + }); }); it("should handle unlocalizable keys on push", async () => { diff --git a/packages/cli/src/cli/loaders/unlocalizable.ts b/packages/cli/src/cli/loaders/unlocalizable.ts index fe49c65c..fea29852 100644 --- a/packages/cli/src/cli/loaders/unlocalizable.ts +++ b/packages/cli/src/cli/loaders/unlocalizable.ts @@ -10,11 +10,11 @@ export default function createUnlocalizableLoader( ): ILoader, Record> { const rules = { isEmpty: (v: any) => _.isEmpty(v), - isNumber: (v: string) => !_.isNaN(_.toNumber(v)), - isBoolean: (v: string) => _.isBoolean(v), - isIsoDate: (v: string) => _.isString(v) && _isIsoDate(v), - isSystemId: (v: string) => _.isString(v) && _isSystemId(v), - isUrl: (v: string) => _.isString(v) && _isUrl(v), + isNumber: (v: any) => typeof v === "number" || /^[0-9]+$/.test(v), + isBoolean: (v: any) => _.isBoolean(v), + isIsoDate: (v: any) => _.isString(v) && _isIsoDate(v), + isSystemId: (v: any) => _.isString(v) && _isSystemId(v), + isUrl: (v: any) => _.isString(v) && _isUrl(v), }; return createLoader({ async pull(locale, input) {