From 098fba11feb48ffe6241832c0496b2f98a5c9a13 Mon Sep 17 00:00:00 2001 From: WolfieLeader Date: Thu, 19 Mar 2026 03:55:21 +0200 Subject: [PATCH 1/4] feat(type): add string.base58 built-in validator (#1520) --- ark/type/__tests__/keywords/string.test.ts | 14 ++++++++++++++ ark/type/keywords/string.ts | 4 ++++ 2 files changed, 18 insertions(+) diff --git a/ark/type/__tests__/keywords/string.test.ts b/ark/type/__tests__/keywords/string.test.ts index 06fd5ae464..7a02b7e02e 100644 --- a/ark/type/__tests__/keywords/string.test.ts +++ b/ark/type/__tests__/keywords/string.test.ts @@ -34,6 +34,20 @@ contextualize(() => { ) }) + it("base58", () => { + const Base58 = type("string.base58") + attest(Base58("5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ")).snap( + "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ" + ) + attest(Base58("abc123")).snap("abc123") + attest(Base58("invalid0OIl").toString()).snap( + 'must be base58-encoded (was "invalid0OIl")' + ) + attest(Base58("").toString()).snap( + 'must be base58-encoded (was "")' + ) + }) + it("base64", () => { const B64 = type("string.base64") attest(B64("fn5+")).snap("fn5+") diff --git a/ark/type/keywords/string.ts b/ark/type/keywords/string.ts index 05064933b5..ab00af8d91 100644 --- a/ark/type/keywords/string.ts +++ b/ark/type/keywords/string.ts @@ -80,6 +80,8 @@ export declare namespace stringInteger { const hex = regexStringNode(/^[\dA-Fa-f]+$/, "hex characters only") +const base58 = regexStringNode(/^[1-9A-HJ-NP-Za-km-z]+$/, "base58-encoded") + const base64 = Scope.module( { root: regexStringNode( @@ -911,6 +913,7 @@ export const string = Scope.module( "only letters and digits 0-9" ), hex, + base58, base64, capitalize, creditCard, @@ -945,6 +948,7 @@ export declare namespace string { alpha: string alphanumeric: string hex: string + base58: string base64: base64.submodule capitalize: capitalize.submodule creditCard: string From 48aa7e40b290f912a119a4726a6b99e3f60a43fe Mon Sep 17 00:00:00 2001 From: WolfieLeader Date: Thu, 19 Mar 2026 04:05:56 +0200 Subject: [PATCH 2/4] style: fix prettier formatting in string test --- ark/type/__tests__/keywords/string.test.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ark/type/__tests__/keywords/string.test.ts b/ark/type/__tests__/keywords/string.test.ts index 7a02b7e02e..1b47c6cd0d 100644 --- a/ark/type/__tests__/keywords/string.test.ts +++ b/ark/type/__tests__/keywords/string.test.ts @@ -43,9 +43,7 @@ contextualize(() => { attest(Base58("invalid0OIl").toString()).snap( 'must be base58-encoded (was "invalid0OIl")' ) - attest(Base58("").toString()).snap( - 'must be base58-encoded (was "")' - ) + attest(Base58("").toString()).snap('must be base58-encoded (was "")') }) it("base64", () => { From 85c1a4cca6a15ee80e3683e73d7e057d6f35deaa Mon Sep 17 00:00:00 2001 From: WolfieLeader Date: Thu, 19 Mar 2026 04:12:33 +0200 Subject: [PATCH 3/4] test: individually verify each excluded base58 character --- ark/type/__tests__/keywords/string.test.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ark/type/__tests__/keywords/string.test.ts b/ark/type/__tests__/keywords/string.test.ts index 1b47c6cd0d..cf7b21bb72 100644 --- a/ark/type/__tests__/keywords/string.test.ts +++ b/ark/type/__tests__/keywords/string.test.ts @@ -40,9 +40,10 @@ contextualize(() => { "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ" ) attest(Base58("abc123")).snap("abc123") - attest(Base58("invalid0OIl").toString()).snap( - 'must be base58-encoded (was "invalid0OIl")' - ) + attest(Base58("0").toString()).snap('must be base58-encoded (was "0")') + attest(Base58("O").toString()).snap('must be base58-encoded (was "O")') + attest(Base58("I").toString()).snap('must be base58-encoded (was "I")') + attest(Base58("l").toString()).snap('must be base58-encoded (was "l")') attest(Base58("").toString()).snap('must be base58-encoded (was "")') }) From cc6a84d7f1c6a66e1cb281bef57b15628e196f98 Mon Sep 17 00:00:00 2001 From: WolfieLeader Date: Thu, 19 Mar 2026 05:03:23 +0200 Subject: [PATCH 4/4] test: register string.base58 in allConfig integration test --- ark/type/__tests__/integration/allConfig.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ark/type/__tests__/integration/allConfig.ts b/ark/type/__tests__/integration/allConfig.ts index 2208e49f04..b9ba6e89d7 100644 --- a/ark/type/__tests__/integration/allConfig.ts +++ b/ark/type/__tests__/integration/allConfig.ts @@ -107,6 +107,9 @@ configure({ "string.hex": { description: "configured" }, + "string.base58": { + description: "configured" + }, "string.base64.url": { description: "configured" },