From 6529250008af819524f2ff731bd0a68829453951 Mon Sep 17 00:00:00 2001 From: Julien Saguez Date: Tue, 12 Aug 2025 19:48:08 +0200 Subject: [PATCH 1/3] feat(regex): add regex alias --- .changeset/many-breads-cover.md | 5 +++++ packages/regex/src/__tests__/index.test.ts | 19 +++++++++++++++++++ packages/regex/src/index.ts | 1 + 3 files changed, 25 insertions(+) create mode 100644 .changeset/many-breads-cover.md diff --git a/.changeset/many-breads-cover.md b/.changeset/many-breads-cover.md new file mode 100644 index 000000000..56b67f521 --- /dev/null +++ b/.changeset/many-breads-cover.md @@ -0,0 +1,5 @@ +--- +"@scaleway/regex": minor +--- + +feat(regex): add regex alias diff --git a/packages/regex/src/__tests__/index.test.ts b/packages/regex/src/__tests__/index.test.ts index 167f92557..f5e3db2d6 100644 --- a/packages/regex/src/__tests__/index.test.ts +++ b/packages/regex/src/__tests__/index.test.ts @@ -4,6 +4,7 @@ import { absolutePath, accessKeyRegex, advancedDomainName, + alias, alpha, alphaDashes, alphaLowercase, @@ -495,6 +496,24 @@ describe('@regex', () => { }) }) + describe('alias', () => { + test.each([ + [asciiLetters, false], + [asciiLowercase, true], + [asciiUppercase, false], + [digitsTest, true], + [emailTest, false], + [octdigits, true], + [hexdigits, false], + [printable, false], + [punctuation, false], + [whitespace, false], + [cronTest, false], + ])('should match regex %s to be %s', (string, expected) => { + expect(alias.test(string)).toBe(expected) + }) + }) + describe('ascii', () => { test.each([ [asciiLetters, true], diff --git a/packages/regex/src/index.ts b/packages/regex/src/index.ts index f7ddbeb07..9b8ea9168 100644 --- a/packages/regex/src/index.ts +++ b/packages/regex/src/index.ts @@ -24,6 +24,7 @@ export const absoluteLinuxPath = /(^\/$|^(\/[a-zA-Z0-9_]+)*$)/ // eslint-disable-next-line no-control-regex export const ascii = /^[\x00-\x7F]+$/ +export const alias = /^[a-z0-9]{2,32}$/ export const backupKey = /^[A-Z0-9]{8}$|^[A-Z0-9]{32}$/ export const basicDomain = /^[a-z0-9-]+(\.[a-z0-9-]{1,63})+$/ export const uppercaseBasicDomain = From 592fc23cef15855e611e80688e99b495262d33a2 Mon Sep 17 00:00:00 2001 From: Julien Saguez Date: Wed, 13 Aug 2025 18:06:40 +0200 Subject: [PATCH 2/3] feat(regex): add regex organizationAlias and uuid --- .changeset/many-breads-cover.md | 2 +- packages/regex/src/__tests__/index.test.ts | 28 +++++++++++++++++++--- packages/regex/src/index.ts | 4 +++- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/.changeset/many-breads-cover.md b/.changeset/many-breads-cover.md index 56b67f521..a122d8a07 100644 --- a/.changeset/many-breads-cover.md +++ b/.changeset/many-breads-cover.md @@ -2,4 +2,4 @@ "@scaleway/regex": minor --- -feat(regex): add regex alias +feat(regex): add regex organizationAlias and uuid diff --git a/packages/regex/src/__tests__/index.test.ts b/packages/regex/src/__tests__/index.test.ts index f5e3db2d6..34b5b9721 100644 --- a/packages/regex/src/__tests__/index.test.ts +++ b/packages/regex/src/__tests__/index.test.ts @@ -4,7 +4,6 @@ import { absolutePath, accessKeyRegex, advancedDomainName, - alias, alpha, alphaDashes, alphaLowercase, @@ -41,6 +40,7 @@ import { ipv6Cidr, macAddress, nineDigitsCode, + organizationAlias, password, pathSegment, phone, @@ -52,6 +52,7 @@ import { uppercaseBasicDomain, uppercaseBasicSubdomain, url, + uuid, } from '..' const alphanumDashDotsText = 'testwithdashdots-.' @@ -105,6 +106,7 @@ const linuxPaths = { ], GOOD: ['/var', '/var/test', '/var/test_', '/var_/test', '/'], } +const uuidTest = '550e8400-e29b-41d4-a716-446655440000' describe('@regex', () => { describe('alpha', () => { @@ -496,7 +498,7 @@ describe('@regex', () => { }) }) - describe('alias', () => { + describe('organizationAlias', () => { test.each([ [asciiLetters, false], [asciiLowercase, true], @@ -510,7 +512,7 @@ describe('@regex', () => { [whitespace, false], [cronTest, false], ])('should match regex %s to be %s', (string, expected) => { - expect(alias.test(string)).toBe(expected) + expect(organizationAlias.test(string)).toBe(expected) }) }) @@ -1150,4 +1152,24 @@ describe('@regex', () => { expect(password.test(string)).toBe(expected) }) }) + + describe('uuid', () => { + test.each([ + [asciiLetters, false], + [asciiLowercase, false], + [asciiUppercase, false], + [digitsTest, false], + [emailTest, false], + [octdigits, false], + [hexdigits, false], + [printable, false], + [punctuation, false], + [whitespace, false], + [cronTest, false], + [macAddress1, false], + [uuidTest, true], + ])('should match regex %s to be %s', (string, expected) => { + expect(uuid.test(string)).toBe(expected) + }) + }) }) diff --git a/packages/regex/src/index.ts b/packages/regex/src/index.ts index 9b8ea9168..40d3b89ce 100644 --- a/packages/regex/src/index.ts +++ b/packages/regex/src/index.ts @@ -24,7 +24,7 @@ export const absoluteLinuxPath = /(^\/$|^(\/[a-zA-Z0-9_]+)*$)/ // eslint-disable-next-line no-control-regex export const ascii = /^[\x00-\x7F]+$/ -export const alias = /^[a-z0-9]{2,32}$/ +export const organizationAlias = /^[a-z0-9]{2,32}$/ export const backupKey = /^[A-Z0-9]{8}$|^[A-Z0-9]{32}$/ export const basicDomain = /^[a-z0-9-]+(\.[a-z0-9-]{1,63})+$/ export const uppercaseBasicDomain = @@ -52,6 +52,8 @@ export const url = /^http(s)?:\/\/?[\w.-]+(?:\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=.]+$/ export const hexadecimal = /^[0-9a-fA-F]+$/ export const s3BucketName = /^[a-z0-9][-.a-z0-9]{1,61}[a-z0-9]$/ +export const uuid = + /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/ // Pasted from `ip-regex` package (https://github.com/sindresorhus/ip-regex/blob/main/index.js) const v4 = From 4b61ffbb3f212be2d2c3842106ed80cfea26b053 Mon Sep 17 00:00:00 2001 From: Julien Saguez Date: Thu, 14 Aug 2025 09:04:22 +0200 Subject: [PATCH 3/3] feat(regex): add case insensitive --- packages/regex/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/regex/src/index.ts b/packages/regex/src/index.ts index 40d3b89ce..41444bb57 100644 --- a/packages/regex/src/index.ts +++ b/packages/regex/src/index.ts @@ -53,7 +53,7 @@ export const url = export const hexadecimal = /^[0-9a-fA-F]+$/ export const s3BucketName = /^[a-z0-9][-.a-z0-9]{1,61}[a-z0-9]$/ export const uuid = - /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/ + /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i // Pasted from `ip-regex` package (https://github.com/sindresorhus/ip-regex/blob/main/index.js) const v4 =