From 13a1bcc42f2042701bb758b047108e57148c8810 Mon Sep 17 00:00:00 2001 From: Tom Bremer <tom@tbremer.com> Date: Mon, 16 Sep 2024 15:07:42 -0500 Subject: [PATCH 1/4] update regex and error messaging --- test/user.js | 8 ++++++-- user/index.js | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/test/user.js b/test/user.js index f6eacad..137feaa 100644 --- a/test/user.js +++ b/test/user.js @@ -25,7 +25,7 @@ exports.test_username_invalid_pattern = () => { assert.equal(ajv.errors[0].dataPath, '.username'); assert.equal( ajv.errors[0].message, - 'should match pattern "^[a-z0-9][a-z0-9-]*[a-z0-9]$"' + 'should match pattern "^(?!-)(?:[a-z0-9-]{1,48})(?<!-)$"' ); }; @@ -43,7 +43,7 @@ exports.test_username_too_short = () => { assert.equal(ajv.errors[1].dataPath, '.username'); assert.equal( ajv.errors[1].message, - 'should match pattern "^[a-z0-9][a-z0-9-]*[a-z0-9]$"' + 'should match pattern "^(?!-)(?:[a-z0-9-]{1,48})(?<!-)$"' ); }; @@ -58,6 +58,10 @@ exports.test_username_too_long = () => { ajv.errors[0].message, 'should NOT be longer than 48 characters' ); + assert.equal( + ajv.errors[1].message, + 'should match pattern "^(?!-)(?:[a-z0-9-]{1,48})(?<!-)$"' + ); }; exports.test_username_valid = () => { diff --git a/user/index.js b/user/index.js index 714e62d..50b995d 100644 --- a/user/index.js +++ b/user/index.js @@ -2,7 +2,7 @@ const Username = { type: 'string', minLength: 1, maxLength: 48, - pattern: '^[a-z0-9][a-z0-9-]*[a-z0-9]$' + pattern: '^(?!-)(?:[a-z0-9-]{1,48})(?<!-)$' }; const Name = { From 71e88b62df20877e55d03a0cef4de4c4ad4c1d8f Mon Sep 17 00:00:00 2001 From: Tom Bremer <tom@tbremer.com> Date: Mon, 16 Sep 2024 15:08:29 -0500 Subject: [PATCH 2/4] update affected length test --- test/user.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/user.js b/test/user.js index 137feaa..7faca36 100644 --- a/test/user.js +++ b/test/user.js @@ -48,11 +48,10 @@ exports.test_username_too_short = () => { }; exports.test_username_too_long = () => { - const isValid = ajv.validate(User, { - username: 'a'.repeat(50) - }); + const username = 'a'.repeat(50); + const isValid = ajv.validate(User, { username }); assert.equal(isValid, false); - assert.equal(ajv.errors.length, 1); + assert.equal(ajv.errors.length, 2); assert.equal(ajv.errors[0].dataPath, '.username'); assert.equal( ajv.errors[0].message, From 85a00c54f0f6d7404a74727998584e4c4aad24b2 Mon Sep 17 00:00:00 2001 From: Tom Bremer <tom@tbremer.com> Date: Mon, 16 Sep 2024 15:08:44 -0500 Subject: [PATCH 3/4] add test for single character usernames --- test/user.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/user.js b/test/user.js index 7faca36..fe4d8fc 100644 --- a/test/user.js +++ b/test/user.js @@ -68,6 +68,11 @@ exports.test_username_valid = () => { assert(ajv.validate(User, { username: 'rauchg' })); }; +exports.test_username_one_char = () => { + assert(ajv.validate(User, { username: 'a' })); + assert(ajv.validate(User, { username: '1' })); +}; + // Name exports.test_name_too_short = () => { const isValid = ajv.validate(User, { From 6e857f4c4050a1e0d2d67e603578f3529ab1b863 Mon Sep 17 00:00:00 2001 From: Tom Bremer <tom@tbremer.com> Date: Mon, 16 Sep 2024 15:24:34 -0500 Subject: [PATCH 4/4] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a7155eb..44b5b49 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@zeit/schemas", - "version": "2.36.0", + "version": "2.37.0", "description": "All schemas used for validation that are shared between our projects", "scripts": { "test": "yarn run lint && best --verbose",