From 19f9c84ac61b17071a3cfc4ae984ac0e2ba1cdae Mon Sep 17 00:00:00 2001 From: rlespinasse Date: Thu, 16 Jun 2022 22:02:08 +0200 Subject: [PATCH] fix: remove trailing hyphens if any after cut --- README.md | 3 ++- __tests__/slug.test.ts | 16 ++++++------- __tests__/slugref.test.ts | 8 +++---- __tests__/slugurl.test.ts | 8 +++---- __tests__/slugurlref.test.ts | 8 +++---- src/slug.ts | 45 +++++++++++++++++++++++------------- 6 files changed, 51 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index 73162f3..8a464aa 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,9 @@ This GitHub Action will expose the slug/short values of [some GitHub environment - put the variable content in lower case - replace any character by `-` except `0-9`, `a-z`, `.`, and `_` -- remove leading and trailing `-` character +- remove leading `-` characters - limit the string size to 63 characters +- remove trailing `-` characters
Others Slug-ish commands are available diff --git a/__tests__/slug.test.ts b/__tests__/slug.test.ts index ae516b8..83d7d54 100644 --- a/__tests__/slug.test.ts +++ b/__tests__/slug.test.ts @@ -52,22 +52,22 @@ test('slug: trailing', () => { test('slug: a very long string', () => { test_slug( - 'an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', - 'an-awesome-feature-very-very-very-very-very-very-very-long-more' + 'has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', + 'has-an-awesome-feature-very-very-very-very-very-very-very-long' ) test_slug_cs( - 'an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', - 'an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-more' + 'has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', + 'has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long' ) }) test('slug: short string after trailing', () => { test_slug( - '-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters-', - 'an-awesome-feature-very-very-very-very-very-very-very-long-more' + '-has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters-', + 'has-an-awesome-feature-very-very-very-very-very-very-very-long' ) test_slug_cs( - '-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters-', - 'an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-more' + '-has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters-', + 'has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long' ) }) diff --git a/__tests__/slugref.test.ts b/__tests__/slugref.test.ts index b9b2351..8cc97a3 100644 --- a/__tests__/slugref.test.ts +++ b/__tests__/slugref.test.ts @@ -57,12 +57,12 @@ test('slug_ref: test refs inside string', () => { test('slug_ref: a very long name', () => { test_slugref( - 'refs/heads/an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', - 'an-awesome-feature-very-very-very-very-very-very-very-long-more' + 'refs/heads/has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', + 'has-an-awesome-feature-very-very-very-very-very-very-very-long' ) test_slugref_cs( - 'refs/heads/an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', - 'an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-more' + 'refs/heads/has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', + 'has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long' ) }) diff --git a/__tests__/slugurl.test.ts b/__tests__/slugurl.test.ts index 5884149..b5215e8 100644 --- a/__tests__/slugurl.test.ts +++ b/__tests__/slugurl.test.ts @@ -47,11 +47,11 @@ test('slug_url: trailing', () => { test('slug_url: a very long string', () => { test_slugurl( - 'an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', - 'an-awesome-feature-very-very-very-very-very-very-very-long-more' + 'has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', + 'has-an-awesome-feature-very-very-very-very-very-very-very-long' ) test_slugurl_cs( - 'an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', - 'an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-more' + 'has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', + 'has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long' ) }) diff --git a/__tests__/slugurlref.test.ts b/__tests__/slugurlref.test.ts index bc39abf..184eaef 100644 --- a/__tests__/slugurlref.test.ts +++ b/__tests__/slugurlref.test.ts @@ -47,12 +47,12 @@ test('slug_url_ref: a reference with upper case letters', () => { test('slug_url_ref: a very long name', () => { test_slugurlref( - 'refs/heads/an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', - 'an-awesome-feature-very-very-very-very-very-very-very-long-more' + 'refs/heads/has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', + 'has-an-awesome-feature-very-very-very-very-very-very-very-long' ) test_slugurlref_cs( - 'refs/heads/an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', - 'an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-more' + 'refs/heads/has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long-moreThan63Characters', + 'has-an-awesome-Feature-Very-Very-Very-Very-Very-Very-Very-Long' ) }) diff --git a/src/slug.ts b/src/slug.ts index a94d6dd..2e0d174 100644 --- a/src/slug.ts +++ b/src/slug.ts @@ -3,14 +3,17 @@ const MAX_SLUG_STRING_SIZE = 63 /** * slug_cs will take envVar and then : * - replace any character by `-` except `0-9`, `a-z`, `.`, and `_` - * - remove leading and trailing `-` character + * - remove leading `-` characters * - limit the string size to 63 characters + * - remove trailing `-` characters * @param envVar to be slugged */ export function slug_cs(envVar: string): string { - return trailHyphen(replaceAnyNonAlphanumericCharacter(envVar)).substring( - 0, - MAX_SLUG_STRING_SIZE + return removeTrailingHyphens( + removeLeadingHyphens(replaceAnyNonAlphanumericCharacter(envVar)).substring( + 0, + MAX_SLUG_STRING_SIZE + ) ) } @@ -18,8 +21,9 @@ export function slug_cs(envVar: string): string { * slug will take envVar and then : * - put the variable content in lower case * - replace any character by `-` except `0-9`, `a-z`, `.`, and `_` - * - remove leading and trailing `-` character + * - remove leading `-` characters * - limit the string size to 63 characters + * - remove trailing `-` characters * @param envVar to be slugged */ export function slug(envVar: string): string { @@ -30,8 +34,9 @@ export function slug(envVar: string): string { * slugref_cs will take envVar and then : * - remove refs/(heads|tags|pull)/ * - replace any character by `-` except `0-9`, `a-z`, `.`, and `_` - * - remove leading and trailing `-` character + * - remove leading `-` characters * - limit the string size to 63 characters + * - remove trailing `-` characters * @param envVar to be slugged */ export function slugref_cs(envVar: string): string { @@ -43,8 +48,9 @@ export function slugref_cs(envVar: string): string { * - remove refs/(heads|tags|pull)/ * - put the variable content in lower case * - replace any character by `-` except `0-9`, `a-z`, `.`, and `_` - * - remove leading and trailing `-` character + * - remove leading `-` characters * - limit the string size to 63 characters + * - remove trailing `-` characters * @param envVar to be slugged */ export function slugref(envVar: string): string { @@ -54,8 +60,9 @@ export function slugref(envVar: string): string { /** * slugurl_cs will take envVar and then : * - replace any character by `-` except `0-9`, `a-z` - * - remove leading and trailing `-` character + * - remove leading `-` characters * - limit the string size to 63 characters + * - remove trailing `-` characters * @param envVar to be slugged */ export function slugurl_cs(envVar: string): string { @@ -66,24 +73,26 @@ export function slugurl_cs(envVar: string): string { * slugurl will take envVar and then : * - put the variable content in lower case * - replace any character by `-` except `0-9`, `a-z` - * - remove leading and trailing `-` character + * - remove leading `-` characters * - limit the string size to 63 characters + * - remove trailing `-` characters * @param envVar to be slugged */ export function slugurl(envVar: string): string { - return slug(replaceAnyNonUrlCharactersWithHyphen(envVar)) + return slugurl_cs(envVar.toLowerCase()) } /** * slugurlref_cs will take envVar and then : * - remove refs/(heads|tags|pull)/ * - replace any character by `-` except `0-9`, `a-z` - * - remove leading and trailing `-` character + * - remove leading `-` characters * - limit the string size to 63 characters + * - remove trailing `-` characters * @param envVar to be slugged */ export function slugurlref_cs(envVar: string): string { - return slugurl_cs(slugref_cs(envVar)) + return slugurl_cs(removeRef(envVar)) } /** @@ -91,16 +100,20 @@ export function slugurlref_cs(envVar: string): string { * - remove refs/(heads|tags|pull)/ * - put the variable content in lower case * - replace any character by `-` except `0-9`, `a-z` - * - remove leading and trailing `-` character + * - remove leading `-` characters * - limit the string size to 63 characters + * - remove trailing `-` characters * @param envVar to be slugged */ export function slugurlref(envVar: string): string { - return slugurl(slugref(envVar)) + return slugurlref_cs(envVar.toLowerCase()) } -function trailHyphen(envVar: string): string { - return envVar.replace(RegExp('^-*', 'g'), '').replace(RegExp('-*$', 'g'), '') +function removeLeadingHyphens(envVar: string): string { + return envVar.replace(RegExp('^-*', 'g'), '') +} +function removeTrailingHyphens(envVar: string): string { + return envVar.replace(RegExp('-*$', 'g'), '') } function replaceAnyNonAlphanumericCharacter(envVar: string): string {